# MCP # MCP Overview Monad hosts a [Model Context Protocol](https://modelcontextprotocol.io) (MCP) server, so an AI assistant can build and operate your data pipelines directly. Instead of clicking through the UI, you describe what you want — *"pull our Okta system logs into S3"* — and the assistant discovers the connector types, creates the components, and wires the pipeline. MCP is an open standard for connecting AI assistants to external systems. Monad's server is a **remote, OAuth-authenticated endpoint**: there is nothing to install, no API key to copy, and no local process to run. ``` https://app.monad.com/mcp ``` This section covers **connecting** a client and troubleshooting the connection. For what to actually do once connected - what the assistant can build, example requests, and the habits that get good results - see **[Using the MCP](/guides/mcp-usage)**. ## How It Works The assistant does not get its own access to Monad. It acts **as you**, through a credential you approve in your browser. 1. **You point your client at the endpoint.** Any MCP-compatible client — see the setup guides in this section. 2. **The client requests access.** Your browser opens Monad's consent screen. 3. **You approve, and choose the organizations.** The consent screen shows which client is asking, what it wants to do, and which of your organizations it may act on. 4. **The client receives a credential** scoped to exactly that. There is no separate identity provider login. The consent screen authenticates you using your **existing Monad session** — if you are already signed in, approving is a single click. ### What the Assistant Can Do It works across the full pipeline lifecycle - discovering connector types, building and wiring pipelines, sampling live data, checking status and logs, and managing alert rules. For the detail, example requests and best practices, see **[Using the MCP](/guides/mcp-usage)**. ### Permissions Two permissions are involved, and they are a **ceiling, not a grant**: | Permission | Allows | |---|---| | `mcp:read` | List and inspect organizations, pipelines, components, secrets metadata and alerts. Sample data and read logs. | | `mcp:write` | Create, update and delete those resources, and trigger pipelines. | Both are intersected with your **actual role in each organization**, checked on every request. An assistant holding `mcp:write` still cannot modify an organization where you only have read access. See [Organization RBAC](/guides/organization-rbac) for how roles map to permissions. Losing membership in an organization revokes the assistant's access to it immediately — no action needed on your part. ## Organizations During authorization you choose which of your organizations the assistant may act on. That choice is stamped into the credential. To change it later, revoke the client under **Settings → Connected Applications** and reconnect, selecting the organizations you want. > **Tip:** authorize against a dev or test organization first. Scoping the credential to somewhere you are willing to break lets you use an assistant freely without a mistake reaching production. See [Start in a Sandbox Organization](/guides/mcp-usage#start-in-a-sandbox-organization). ## Managing Connected Applications Every client you authorize appears under **Settings → Connected Applications**. Each row is one authorized client. **Revoking takes effect immediately.** Monad's MCP server holds no signing keys of its own — it revalidates every credential against the Monad API on each request, so there is no window where a revoked client keeps working until something expires. Its next request fails, and the client will prompt you to reconnect if you use it again. Revoke when a laptop is lost, when you stop using a client, or any time you suspect a credential is exposed. Re-authorizing later is a fresh approval, and the credentials revoked earlier stay dead permanently. ## Credentials Are Never Handled in Chat The assistant is instructed never to ask you for a password, API key, or token. When a connector needs a credential, it creates a **placeholder secret** and tells you to set the real value yourself in the Monad UI under **Settings → Secrets**. Secret values are never sent to the assistant and never echoed back. > If an assistant ever asks you to paste a live credential into a chat, stop and set it in the UI instead. ## Access Access to the MCP server is enabled per user during rollout. If authorization fails or every request is refused, contact your Monad representative to have your account enabled. ## Setting Up a Client Setup is a few steps and differs slightly per client: - [Claude Code](/mcp/claude-code) - [Claude Desktop](/mcp/claude-desktop) - [Cursor](/mcp/cursor) - [VS Code](/mcp/vs-code) - [ChatGPT](/mcp/chatgpt) - [Other clients](/mcp/other-clients) - any client supporting remote MCP over HTTP with OAuth These are the clients we have verified. The endpoint is a standard remote MCP server, so others work too. ## Troubleshooting **Authorization fails, or every request is refused.** Access is enabled per user during rollout. Contact your Monad representative. **The consent screen cannot identify you.** Sign in to `https://app.monad.com` once in the same browser, then retry. **The assistant cannot see an organization you expect.** Organizations were chosen at authorization time. Revoke under **Settings → Connected Applications**, reconnect, and select the additional organizations. **Writes are refused but reads work.** Either the client requested read-only access, or your role in that organization does not include write permissions. Check your role against [Organization RBAC](/guides/organization-rbac). **It worked yesterday and now asks you to authenticate.** Credentials expire, and are invalidated when a client is revoked. Re-running the authentication step reconnects. ## Security - The MCP server holds no signing keys. It validates every credential against the Monad API on each request, which is what makes revocation immediate. - Organization membership is enforced by the API on every request, against your current role. - The server is stateless and holds no conversation history or pipeline data. For broader detail on how Monad handles your data, see [Security & Data Handling](/guides/security).