Passport
All documentation

MCP tool authorization

Passport's MCP proxy intercepts tools/call, requests authorization, and forwards only permitted calls to the upstream. It supports local stdio and remote Streamable HTTP/SSE transports. Discovery and non-tool protocol traffic are not a general-purpose authorization boundary.

Prepare a separate project

Complete the connection check, then create a project for real work. Leave its optional Vercel binding empty. Grant the agent the tool action with explicit server and tool limits, for example:

{
  "allowedServers": ["documents"],
  "allowedTools": ["read_document", "write_document"],
  "approveTools": ["write_document"],
  "dailyCalls": 100
}

Set a tool policy with source mcp. Use human approval for sensitive tools. The server name must match the proxy's --server value. Empty allowlists do not mean deny-all; list only what this agent needs.

Run from the repository

The proxy is source-distributed and is not a published npm package. With access to a Passport source checkout and Node.js 24+, install its locked dependencies:

npm ci
./node_modules/.bin/tsx packages/mcp-proxy/src/cli.ts --help

Configure PASSPORT_URL, PASSPORT_AGENT_ID, PASSPORT_ORGANIZATION_ID, PASSPORT_PROJECT_ID, and PASSPORT_AGENT_PRIVATE_KEY in the trusted process's environment or secret manager. Unlike the Node diagnostic, the CLI reads the private key from that environment variable, not a key-file variable.

From the repository root, start an already-installed stdio server:

./node_modules/.bin/tsx packages/mcp-proxy/src/cli.ts \
  --server documents -- node /absolute/path/to/your-mcp-server/index.js

Or point it at your remote server:

./node_modules/.bin/tsx packages/mcp-proxy/src/cli.ts \
  --server documents --transport http https://your-mcp-host.example/mcp

These paths and the remote URL are placeholders for your own server. Configure your MCP client to launch this wrapper, not the upstream directly. Pin and review the upstream version; do not silently download arbitrary executable code.

Runtime controls

--wait sets the approval wait in seconds (default 600). --transport accepts auto, http, or sse. Remote credentials can be supplied with PASSPORT_UPSTREAM_AUTHORIZATION; avoid putting secrets in shell arguments. PASSPORT_ON_BEHALF_OF records signed attribution, not independently verified human identity.

--redact sends empty arguments to Passport. That reduces recorded detail and means the receipt cannot attest to the omitted arguments. Without it, tool arguments are sent to Passport and may be recorded: do not place secrets there.

Enforce the boundary

The model must not have direct upstream credentials, access to the signing key, or an unguarded path to the same tool. Process, environment and filesystem isolation are the operator's responsibility. A subprocess running under the same user is not a strong isolation boundary.

Denied calls and approval failures must not be forwarded. Pending requests or rejected input may have no signed decision receipt. See the security boundaries before using the proxy for sensitive work.