MCP hosts (Claude Desktop, Codex, Cursor, custom orchestrators) launch Paybond as a stdio MCP server. The server exposes a tenant-bound tool surface: verify capabilities, authorize spend through Paybond before side-effecting work, and submit evidence — same tenant boundary as the SDKs.
Adapter reference: /docs/kit/mcp-server.
stdio MCP server
paybond-mcp-server exposes tenant-bound tools for Claude Desktop, Codex, Cursor, and custom hosts.
Authorize before paid tools
paybond_authorize_agent_spend verifies Harbor spend before side-effecting host tools.
Evidence submit
paybond_submit_spend_evidence binds completion digests — strict policy by default.
Same tenant boundary
MCP tools use the same authenticated session as Kit SDKs — never trust host-supplied tenant ids alone.
Why Paybond (not just MCP host approvals)?
MCP host approvals do not enforce a spend limit, a per-operation permission check (capability token), or a signed completion receipt tied to a spend agreement (intent).
Model / input guardrails
- MCP host alone
- Yes — SDK or host checks and approvals
- With Paybond
- Yes — plus Harbor authorize at the tool boundary
Spend boundary
- MCP host alone
- No per-tool Harbor budget or capability token
- With Paybond
- Per-call and intent budgets enforced before invoke
Signed evidence
- MCP host alone
- SDK traces / logs only
- With Paybond
- Signed completion digests bound to the intent
Intent binding
- MCP host alone
- No Harbor intent or settlement receipt
- With Paybond
- Capability token + intentId from authenticated bind
Paid tool deny / HITL
- MCP host alone
- Host or SDK approvals only
- With Paybond
- spend verify, deny, or HITL hold before side effects
| Capability | MCP host alone | With Paybond |
|---|---|---|
| Model / input guardrails | Yes — SDK or host checks and approvals | Yes — plus Harbor authorize at the tool boundary |
| Spend boundary | No per-tool Harbor budget or capability token | Per-call and intent budgets enforced before invoke |
| Signed evidence | SDK traces / logs only | Signed completion digests bound to the intent |
| Intent binding | No Harbor intent or settlement receipt | Capability token + intentId from authenticated bind |
| Paid tool deny / HITL | Host or SDK approvals only | spend verify, deny, or HITL hold before side effects |
How it works
MCP host flow
Host launches paybond-mcp-server
stdio MCP with PAYBOND_API_KEY from login
Authorize spend
paybond_authorize_agent_spend before paid tools
- intent_id + capability_token
- Verify operation + amount
- Deny or HITL hold
Vendor tool runs
Host executes the side-effecting work
Submit evidence
paybond_submit_spend_evidence with completion payload
MCP hosts call Paybond tools over stdio: create/fund intent, authorize spend, run vendor work, then submit evidence.
3-minute quickstart
Smoke the Harbor MCP contract — no MCP host required for this check:
terminal
paybond login
paybond agent sandbox smoke \
--operation paid-tool \
--requested-spend-cents 100 \
--evidence-preset cost_and_completion \
--result-body '{"status":"ok","cost_cents":100}' \
--format tableFor MCP-native sandbox tools inside a running host, call paybond_bootstrap_sandbox_guardrail before the paid tool and paybond_submit_sandbox_guardrail_evidence after.
When the smoke succeeds you should see:
- ✓ Spend approved
- ✓ Tool completed
- ✓ Evidence verified (
cost_and_completion)
What success looks like
What success looks like
Authorized tool call · illustrative
- Operation
- paid-tool
- Status
- Approved
- Requested
- $1.00
- Evidence
- Verified
- Preset
- cost_and_completion
Launch the server
terminal
npx -y -p @paybond/kit paybond-mcp-serverRequired: PAYBOND_API_KEY (from paybond login → .env.local). For MCP hosts in production, create a restricted MCP key (paybond_rk_*) in Console under Machine access → API keys (or paybond keys create --kind restricted --preset mcp-readonly) so the credential itself limits which tools the host can see. Interactive hosts (Cursor/Claude/VS Code) can instead complete MCP OAuth consent and present a short-lived paybond_oat_* bearer — manage sessions and the per-environment MCP toggle under Machine access → MCP access. Standard paybond_sk_* keys still work with optional PAYBOND_MCP_TOOL_POLICY for local development.
Optional policy hot-reload:
terminal
export PAYBOND_POLICY_FILE="./paybond.policy.yaml"
export PAYBOND_POLICY_RELOAD="watch"Inspect the scope catalog offline: paybond mcp scopes list.
Wire host config
Claude Desktop / Codex config
Add Paybond as a stdio MCP server so the host can authorize spend and submit evidence.
{
"mcpServers": {
"paybond": {
"command": "npx",
"args": ["-y", "-p", "@paybond/kit", "paybond-mcp-server"],
"env": {
"PAYBOND_ENV_FILE": ".env.local"
}
}
}
}
Full coding-agent setup: /docs/kit/coding-agent-setup.
Production MCP flow
paybond_create_spend_intentorpaybond_fund_intent→intent_idandcapability_tokenpaybond_authorize_agent_spendbefore the paid or side-effecting tool- Execute vendor work
paybond_submit_spend_evidencewith completion payload
PAYBOND_MCP_EVIDENCE_POLICY defaults to strict — evidence submit tools refuse calls until validation succeeds for the preset and payload.
Scaffold a paid-tool guard
terminal
npx -p @paybond/kit paybond-init \
--preset paid-tool-guard \
--framework provider-agnostic \
--out paybond-paid-tool-guard.tsFor multi-tool agents in application code, graduate to agent middleware.
Production checklist
Production checklist
- Launch paybond-mcp-server with PAYBOND_API_KEY from paybond login
- Add Paybond to Claude Desktop / Codex MCP config
- Create/fund intent then authorize before paid tools
- Submit evidence with PAYBOND_MCP_EVIDENCE_POLICY=strict
- Smoke with paybond agent sandbox smoke before ship
Works with
Works with
- MCP
- Anthropic
- OpenAI
- Agent-agnostic
Ready to test?
Related guides
- Claude Agent SDK spend controls — in-process MCP custom tools
- Agent-agnostic spend controls — custom orchestrators
- Agent policy-as-code —
PAYBOND_POLICY_FILEhot-reload
Developer reference: /docs/kit/mcp-server.