Composio MCP setup
Connect Composio so an AI client can call tools against apps you already use—Gmail, GitHub, Vercel, Slack, and many more—without hand-rolling OAuth for each one.
For where this sits in the stack, see Composio and MCP connectors. For how the Cursor install ladder works as a reusable pattern, see Studio MCP install strategies.
- Official client matrix (source of truth for URLs)
Cursor
-
Install the marketplace plugin: cursor.com/marketplace/composio
-
Or add a user MCP server in
~/.cursor/mcp.json:
{
"mcpServers": {
"composio": {
"url": "https://connect.composio.dev/mcp"
}
}
}
-
Complete Composio OAuth when Cursor prompts (
mcp_auth/ browser). -
Start a new agent chat so the MCP catalog refreshes.
-
Prefer the Composio search tool first (
COMPOSIO_SEARCH_TOOLS), then execute app tools through the multi-execute helper. Do not invent tool slugs.
On Windows, writing mcp.json is more reliable than cursor --add-mcp from PowerShell (quote stripping).
|
Terminal agents (CLI)
Claude Code, Codex, Hermes, OpenClaw, and similar shells use the Composio CLI:
curl -fsSL https://composio.dev/install | sh
composio login
Other MCP clients
Any client that speaks MCP over streamable HTTP can use:
-
Name:
composio -
Transport: HTTP (streamable)
Examples:
-
Claude (custom connector): prefilled Add-connector modal
-
VS Code / Copilot: GitHub MCP registry
-
Gemini CLI:
gemini mcp add --scope user --transport http composio https://connect.composio.dev/mcp
Clients without OAuth support: see Composio clients.
Connect apps you need
Composio MCP auth is not the same as app auth. After the server is Active:
-
Search tools for the workflow (e.g. “fetch Gmail about failed CI”, “list Vercel deployments”).
-
If a toolkit shows no active connection, call the manage-connections flow and open the returned link.
-
Wait until the connection is Active before executing that toolkit’s tools.
When Composio (or a Google toolkit) asks for a Client ID and Client Secret, create them in Google Cloud as a dedicated trust platform—do not squash every personal CLI into one “Personal” Project. Steps: Set up Google Cloud OAuth for personal tools. Why the Console feels wrong: Google Cloud projects as OAuth boundaries.
Duplicate toolkits (read the form)
Some vendors appear twice in Composio with almost the same name and icon. Catalog subtitles and tool slugs can say “OAuth” when the connect screen is a dashboard key. Read the fields on the connect form. They are the source of truth.
| What the form shows | What to paste | What goes wrong if you mix them |
|---|---|---|
Email + Global API Key (or similar two-field key auth) |
Those two values from the vendor dashboard |
A scoped “API token” in the Global Key box (or a Global Key in a token-only box) can still show ACTIVE, then the vendor returns auth errors (Cloudflare: |
Key only / Bearer / API Token |
The scoped dashboard key that scheme expects |
Same ACTIVE-then-fail pattern. Hammering retries can hit |
Connect one toolkit per vendor. ACTIVE is not a smoke test — run a real list/read before calling the connection done. Credentials live on Composio’s servers, not on a particular laptop.
- Worked example (Cloudflare forms are the opposite of the catalog names)
-
Connect Cloudflare in Composio — Cloudflare asks for Global API Key + account email; Cloudflare API Key asks for Cloudflare API token.
Typical starter set for “CI emails → fix → clear”:
-
Gmail — find failure / expired / needs-attention mail; mark read when done
-
GitHub — Actions runs, logs, re-runs (optional if you already use
ghin the shell) -
Vercel (or your host) — deployment events and project scope
Smoke test: CI mail triage
Once Gmail is connected, run a real tool call before calling setup “done”:
-
Search / fetch recent mail about failed workflows, expired checks, or deploy errors.
-
Open the linked run or deployment; fix or re-run until green when that is the right move.
-
Mark addressed threads read (or archive) so the same alert does not linger.
-
After you push a fix, wait briefly and re-check the inbox for new failure mail.
That loop is the intended product use—not “MCP listed in settings.”
Related
-
Agentic Email Integration — Himalaya + local Cursor SDK path (own-your-inbox product)