https://mcp.didit.me/mcp) needs no API key — on first connect your client opens a browser and you Log in with Didit and approve the permissions.
Clients that don’t yet speak remote/HTTP MCP (Windsurf, Zed) connect through the
mcp-remote bridge, which forwards stdio to the hosted URL and handles the OAuth handshake for you.Hosted server (recommended)
- Claude Code
- Claude web and Desktop
- Cursor
- VS Code
- Windsurf
- Zed
- Any other client
Add the server with the CLI, then trigger the sign-in:Start Claude Code and run
/mcp — it opens the browser for Log in with Didit. After you approve, the didit tools are available.No API key in the config. The hosted server authenticates you in the browser and acts as you — every organization you belong to, with your role’s permissions. See Authentication.
GET https://mcp.didit.me/healthz with its version.
Verify your connection
After you sign in, ask your client:didit_context_get and show your organizations with their applications.
If it says it has no Didit tools, the server did not connect or sign-in did not finish: see Troubleshooting.
Self-hosting
The hosted server is built from the open-source repository github.com/didit-protocol/mcp (MIT). Every release is also published to npm as@didit-protocol/mcp-server, so you can run the stdio server straight from npm or build either entry point from a clone. One codebase ships two entry points:
Both modes act as a Didit user. There is no application API-key mode.
1
Clone and build
docker build -t didit-mcp .. The image runs dist/http.js as a non-root user, exposes port 3000 and has a health check on /healthz.2
Run the HTTP server (OAuth)
Copy The server is an OAuth resource server only. It needs
.env.example to .env and fill in the hosted-mode values, then:MCP_RESOURCE_URI set to the full public URL of the transport (for example https://mcp.example.com/mcp, not the bare origin) and the credentials it uses to introspect tokens (MCP_OAUTH_CLIENT_ID, MCP_OAUTH_CLIENT_SECRET) against the Didit authorization server. The full variable list is in Advanced → self-hosting.3
Or run it over stdio (headless)
For a local agent that cannot run an OAuth flow, run the published package (no clone needed) and pass a user access token in the environment:From a clone, Or in Cursor’s
DIDIT_ACCESS_TOKEN=<user-access-token> node dist/index.js does the same. Without a token, the agent can sign in with didit_account_login, followed by didit_account_verify_2fa when the account has two-factor authentication.Optional MCP_DEFAULT_ORG and MCP_DEFAULT_APP pin the scope for single-tenant setups. Register it in Claude Code with:mcp.json:didit_org_top_up, didit_org_reveal_application_api_key, and five account-setup tools (didit_account_register, didit_account_verify_email, didit_account_resend_otp, didit_account_login, didit_account_verify_2fa) that take credentials as arguments and therefore never ship on a remote connector. File-taking tools also accept *_path arguments on stdio, since the server shares your filesystem.
Next steps
Authentication
Sign-in, scopes, and roles.
Tools reference
Everything the agent can call.