{"id":"b6e3ced4-3eeb-4167-8f8f-8b36e02f4308","slug":"forgingstack-mandate-check","kind":"mcp","name":"forgingstack-mandate-check","summary":"Before your agent acts, check its mandate. One call, one receipt. Public MCP client + docs for ForgingStack Mandate Check (service itself is private).","owner":"jdkabattles","repoUrl":"https://github.com/jdkabattles/forgingstack-mandate-check","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-11-03T12:05:20.000Z","addedAt":"2026-11-05T21:27:44.265Z","logoUrl":"https://avatars.githubusercontent.com/u/241386083?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["utilities"],"tags":[],"runtime":"python","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":true,"reviewed":false,"syncedAt":"2026-11-08T02:10:46.760Z","sample":false,"url":"https://conduits.dev/tools/forgingstack-mandate-check","language":"Python","transports":["stdio"],"install":{"pypi":"forgingstack-mandate-check"},"requirements":{"env":[{"name":"FORGINGSTACK_API_BASE","secret":false,"required":false,"description":"Mandate Check API base URL. Live default."},{"name":"FORGINGSTACK_API_KEY","secret":true,"required":true,"description":"API key for Mandate Check. Sign up via POST /v1/signup (key shown once)."}],"upstreamMayCharge":false},"tools":null,"readme":"# ForgingStack Mandate Check\n\nBefore your agent acts, check its mandate. One call, one receipt.\n\nmcp-name: io.github.jdkabattles/forgingstack-mandate-check\n\nThis is the **public client** for Mandate Check. The service itself —\nthe decision logic, the receipt chain, the key store, and billing —\nruns on ForgingStack's private service and is **not** in this repo.\nCopying this repo does not give you the service: you still need an\nAPI key and credits, from signup below.\n\nLive API: https://forgingstack-mandate-check.jkbattles.workers.dev\n\n## What it checks, in order\n\n1. Mandate agent matches the calling agent\n2. Mandate principal matches the principal the agent acts for\n3. Mandate expiry is parseable and in the future\n4. Action is in the mandate's allowed actions\n\nPass or fail, you get a reason and a hash-chained receipt.\n\nWhat it does **not** do: decide if an action is wise, legal, or\nsafe. Mandate fit only.\n\n## Signup (v1)\n\n```bash\ncurl -X POST https://forgingstack-mandate-check.jkbattles.workers.dev/v1/signup \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\":\"you@example.com\"}'\n```\n\nReturns an API key **once** and 100 starter credits. Save the key\nimmediately — it is stored only as a hash and cannot be shown again.\nEmail verification is pending, and credit-pack billing is not live\nyet, so do not expect a purchase flow in v1.\n\n## Agent sub-keys\n\nA signed-up human creates a key for each agent, capped and revocable:\n\n```bash\ncurl -X POST https://forgingstack-mandate-check.jkbattles.workers.dev/v1/keys \\\n  -H \"X-API-Key: YOUR_PRIMARY_KEY\" -H \"Content-Type: application/json\" \\\n  -d '{\"agent_name\":\"my-agent\",\"credits\":20}'\n```\n\nList with `GET /v1/keys`, revoke with `DELETE /v1/keys/{id}` —\nrevoking returns unused credits to the primary account.\n\n## Use it (MCP, stdio)\n\nSet the key, then run the MCP server in this repo:\n\n```bash\nexport FORGINGSTACK_API_KEY=\"your-key-here\"\npython -m app.mcp_server\n```\n\nTools: `check_mandate`, `get_credits`, `get_receipt`.\nSee `SKILL.md` for when to use it and when not to.\n\n## Price\n\n1 credit per check call. A failed decision still costs 1 credit —\nthe check was performed. An idempotent replay (same\n`Idempotency-Key`) is free and returns the original receipt.\n\n## Files in this repo\n\n- `app/mcp_server.py` — MCP wrapper client (stdio, stdlib only)\n- `SKILL.md` — when to use it, how to read pass/fail\n- `agent-card.json` — A2A-style discovery card\n- `server.json` — MCP Registry metadata (draft until PyPI publish)\n- `pyproject.toml` — package metadata for the MCP client\n"}