Skip to main content

Connect your assistant

Control's MCP server is a remote server: there's nothing to install. Every assistant connects to the same address and signs in with your Control account.

  • Server URL: https://app.cntrl.site/mcp
  • Transport: Streamable HTTP
  • Sign-in: OAuth, on the Control sign-in page. No API key needed.
  • You need: a Control account that can edit the project, and an assistant that supports remote MCP servers.

The first time your assistant uses Control, it opens the Control sign-in page. Sign in and approve access. From then on, the assistant acts as you.

In Claude on the web or in the desktop app:

  1. Open Connectors in Claude's settings and choose Add custom connector.
  2. Name it Control and paste https://app.cntrl.site/mcp as the URL. If Claude asks how to sign in, choose Register automatically.
  3. Choose Connect and sign in with your Control account.
  4. In a chat, check that Control is turned on in the tools menu.

Custom connectors are available on every Claude plan; the free plan allows one. On Team and Enterprise plans, an owner adds the connector in the organization's settings first, then each member connects with their own Control account. See Anthropic's guide to custom connectors.

Other clients​

Most assistants that support remote MCP servers take the server URL directly. Look for "custom connector", "remote MCP server" or "add MCP server" in their settings. For example, in the OpenAI Codex CLI:

codex mcp add cntrl --url https://app.cntrl.site/mcp

If your client only runs local servers, connect through mcp-remote, which runs on your computer and handles the sign-in. It needs Node.js 18 or later.

{
"mcpServers": {
"cntrl": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://app.cntrl.site/mcp", "--transport", "http-only"]
}
}
}

mcp-remote keeps your sign-in in ~/.mcp-auth. Delete that folder to sign in again from scratch.

Check that it works​

Ask your assistant: "List my Control projects." It should answer with your projects and their site addresses. If it doesn't, see Troubleshooting.

For developers​

Building your own client, or testing the server with the MCP Inspector:

  • Endpoint: POST https://app.cntrl.site/mcp. The server is stateless: there are no sessions and no event stream, so GET and DELETE answer 405. Responses are JSON.
  • Authorization: a request without a token gets 401 with a WWW-Authenticate header that points to the protected-resource metadata at https://app.cntrl.site/.well-known/oauth-protected-resource/mcp (RFC 9728). That names the authorization server, https://auth.cntrl.site/, which supports dynamic client registration and the authorization code flow with PKCE.
  • Requests: send the access token as Authorization: Bearer <token>. Request bodies are limited to 4 MB.
  • Tools: 18, listed in the tools reference. Each declares readOnlyHint or destructiveHint annotations. A refused call returns a tool result with isError: true and a message saying what to do instead.
  • Rate limits: 120 requests a minute per user. Past that, the server answers 429 with Retry-After: 60.
npx @modelcontextprotocol/inspector

In the Inspector, choose Streamable HTTP, enter the server URL and connect. It runs the sign-in for you.