Trust Graduation gate: Claude can do real work once Mission decides what it is allowed to do.
Mission’s open MCP interception adapter for exact-action authority.
It has one narrow job: sit before a wrapped MCP provider, classify a proposed tool call, and hold consequential calls with an immutable Trust Graduation action binding. Low-risk calls may pass through. A chat message saying “approve” is never treated as authority.
Status: experimental beta. Apache-2.0. Zero runtime dependencies.
Requirements: Node.js 20 or newer.
npx -y @gomission/mcp@beta demo
The command uses a fake email provider and prints one machine-readable
DEMO_RESULT. It proves that:
This proves interception, not completed authorization or production adoption.
The portable grant/replay proof lives in @trust-graduation/core:
npx -y @trust-graduation/core@beta demo
| Primitive | Responsibility | Portable object |
|---|---|---|
| Mission Gate | Decide before a provider effect | action decision |
| Trust Profile | Track earned authority per principal and action class | evidence profile |
| Mission Key | Authorize one exact action until expiry or revocation | single-use grant |
The MCP adapter implements the pre-provider hold. It does not mint a trusted Mission Key and it cannot resume a held call. A trusted approval host and executor must validate and atomically consume the matching key. The experimental A2A continuation is published at:
https://trustgraduation.org/extensions/a2a/action-authorization/v1
The package root exposes the stable, zero-dependency binding bridge used by an external approval host and executor:
import { providerActionFromMcpBinding } from "@gomission/mcp";
import { createProviderGate } from "@trust-graduation/core";
const gate = createProviderGate({
store: sharedAtomicGrantStore,
authenticateGrant: verifyApprovalIssuer,
provider: existingProviderFunction,
writeReceipt: durableReceiptSink
});
// Re-read the actual provider input at the final seam; never trust a preview.
const action = providerActionFromMcpBinding(
heldReceipt.action_binding,
actualProviderInput
);
const execution = await gate.execute({
binding: heldReceipt.action_binding,
approval: authenticatedMissionKey,
action
});
The bridge verifies binding integrity and maps the intercepted identities, target, constraints, expiry, and nonce into the core executor shape. The core then re-hashes the actual provider input, authenticates and atomically consumes the Key, calls the provider, and writes result-linked evidence. Mutation or replay never reaches the provider.
For a generated adapter and objective provider-call counters:
npm install @trust-graduation/core@beta
npx trust-graduation init-adapter
npx trust-graduation conformance ./mission-gate-adapter.mjs --json
With both packages installed, the included compatibility proof is:
node node_modules/@trust-graduation/core/examples/mcp-provider-roundtrip.mjs
The MCP proxy still never resumes a held call merely because chat says "approve". This bridge is for the separately authenticated approval host and provider-bound executor.
npx -y @gomission/mcp@beta install-claude
The installer inspects the existing Claude Desktop MCP configuration:
--wrap;--local, an advisory exact-binding demonstration;Restart Claude Desktop after installation, then verify:
npx -y @gomission/mcp@beta verify
verify probes modern MCP with server/discover and tools/list, falling back
to the initialize-era protocol for older endpoints. Add --json for a
machine-readable report or --no-probe to inspect configuration only.
| Mode | What it enforces | What it does not do |
|---|---|---|
--wrap | Intercepts selected child MCP servers; holds high/critical or low-confidence calls before the child; fails closed if a child is unavailable | Does not resume a held call or trust chat approval |
--local | Records an advisory exact-action hold and local review receipt | Is not between another tool and its provider |
--remote | Requires an explicitly configured, authenticated remote service | The old public PHP endpoint is retired; no hosted service is advertised by this release |
Choose explicitly when needed:
npx -y @gomission/mcp@beta install-claude --wrap
npx -y @gomission/mcp@beta install-claude --local
# The legacy public remote is retired. Use the local or provider-interception mode above.
Useful flags:
--workspace <path> — store local receipts in an existing workspace.--dry-run — print the configuration change without writing it.--force — create configuration even when Claude Desktop is not detected.--remote-url <url> — override the hosted endpoint.MISSION_DONT_WRAP="name1,name2" — exclude selected MCP children.For a consequential wrapped call, the adapter writes a local receipt containing:
Receipts are written atomically with owner-only file permissions. The adapter never stores the raw workspace path inside the binding. A local argument summary remains in the receipt for human review, so treat the receipt directory as sensitive workspace data.
Preferred protocol: 2026-07-28.
_meta with client capabilities;server/discover;MCP-Protocol-Version, Mcp-Method, and Mcp-Name;HeaderMismatch and unsupported-version errors;resultType: "complete" and cache metadata;2025-11-25 and 2024-11-05.The authority manifest is advertised through MCP discovery under the
experimental mission-authority/v1 capability.
The adapter does not claim:
Use @trust-graduation/core to create and validate exact grants. The executor
must authenticate the grant issuer, re-bind the actual provider input, atomically
consume the key, invoke the provider at most once, and reconcile unknown
provider outcomes.
Free and open:
@trust-graduation/core and its schemas;@gomission/mission-schemas conformance vocabulary;Commercial Mission may provide managed policy, trusted approval surfaces, hosted audit/receipt operations, organization controls, support, and provider integrations. Product entitlements never grant action authority.
Apache-2.0. Mission names and logos are trademarks; the code license does not grant permission to imply endorsement.
The local chat bridge no longer assumes that port 8814 belongs to the selected workspace. An explicit absolute MISSION_WORKSPACE and explicit loopback MISSION_LOCAL_URL (or MISSION_LOCAL_PORT) are required even for the workspace identity probe. Redirects are rejected. Chat forwarding remains unavailable until the desktop provides a supported workspace-scoped authentication handoff; no query is sent by this release. Local advisory holds and receipts continue to work.
The legacy gomission.io/mcp/ and claude.gomission.io/mcp/ endpoints are retired. They are not an alternative authentication path.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @gomission/mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-gomission-mcp": {
"command": "npx",
"args": [
"-y",
"@gomission/mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceMission — Trust Graduation Gate works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.