Two MCP paths. One consequence boundary.
Protect an existing tool dispatcher with @emilia-protocol/mcp-guard, or add receipt and passkey verification tools to a client with @emilia-protocol/mcp-server. The guard covers only the executor paths it fully mediates.

Protect an existing MCP tool
@emilia-protocol/mcp-guardWrap the credential-owning dispatcher. Missing or invalid action-bound evidence is refused before the handler runs. Production requires durable provenance and shared atomic consumption state.
Add EMILIA verification tools to an MCP client
@emilia-protocol/mcp-serverExpose receipt and passkey verification tools to Claude Desktop, Cursor, Cline, Continue, or another MCP client. Installing this server alone does not mediate another tool’s executor path.
Need the local boundary to hold provider credentials for activated HTTP and MCP paths? EMILIA Host is the private local deployment form of Gate →
Run the RR-1 gallery locally: FAST=1 node examples/mcp/payment-server.mjs
No receipt, no irreversible action.
Three tiny MCP servers, each with one dangerous tool that refuses to run without a receipt. Run any of them cold — fully offline, no key, no account. Each reads the public Action Risk Manifest and shows the whole loop: 428 refused → a named human signs the exact action → the tool runs → replay refused → forged receipt rejected.
node examples/mcp/payment-server.mjs # release_payment — refuses without a receipt node examples/mcp/github-admin.mjs # delete_repo — refuses without a receipt node examples/mcp/prod-deploy.mjs # deploy_production — refuses without a receipt node examples/mcp/supabase-admin.mjs # run_destructive_sql — refuses without a receipt node examples/mcp/linear-export.mjs # export_customer_data — refuses without a receipt
Wrap your own dispatcher with withMcpGuard or a manifest-driven 428 gate — missing receipt → refused, never a silent pass.
One line in any MCP client.
Works in Claude Desktop, Cursor, Cline, Continue, or your own loop. Public read tools need no key; set EP_API_KEY for write operations.
// Claude Desktop / any MCP client — add to your config:
{
"mcpServers": {
"emilia": {
"command": "npx",
"args": ["-y", "@emilia-protocol/mcp-server"]
}
}
}Most MCP servers connect data. This one makes an agent accountable.
Reference server + client harness in the repo (mcp-server/passport-demo.mjs); demand side via @emilia-protocol/require-receipt and @emilia-protocol/mcp-guard — add Receipt Required to an MCP server →
ep_verify_receiptVerify any EMILIA authorization receipt offline — signature + Merkle anchor.
ep_verify_signoffVerify WebAuthn/passkey signoff assertions bound to the exact action.
Public connector tools are verification-only. Rich trust profiles, disputes, delegation, identity continuity, and write APIs require an authenticated EP API key.
npx -y @emilia-protocol/mcp-serverwithGuard() · @emilia-protocol/langchainguard() decorator · examples/@emilia-protocol/require-receipt -> 428@emilia-protocol/mcp-guard → signoff + receipt@emilia-protocol/verifypip install emilia-verifyAuthorization receipts verify offline in JavaScript and Python — minted anywhere, checked anywhere. See the 5-minute quickstart.
What does the EMILIA MCP server do?
It adds EMILIA verification tools to an MCP client: verify authorization receipts and passkey signoffs. To protect an existing tool dispatcher, use the separate @emilia-protocol/mcp-guard package at the real executor boundary. Rich trust-profile and policy-evaluation APIs require an authenticated EP API key.
How do I install it?
Add it to any MCP client (Claude Desktop, Cursor, Cline, Continue) in one line: command "npx" with args ["-y", "@emilia-protocol/mcp-server"]. Public verification tools need no key; set EP_API_KEY for rich trust APIs or write operations.
How is this different from permissions or OAuth?
Permissions gate access locally and leave no portable proof. EMILIA mints a signed, offline-verifiable authorization receipt bound to the exact action and the named human who approved it — a credential a counterparty can verify without calling home.
Is it open source?
Yes — Apache-2.0, and its models are formally analyzed (26 TLA+ invariants checked by TLC in CI).
MCP Authorization Best Practices in 2026 — why scope-level OAuth stops short for tools that move money or trigger irreversible state, and what the next authorization layer adds.