New: watch your coding agents work, step by step, on a live board. Try the demo, no account

Add a remote MCP server to Devin

Devin CLI and the Devin Local agent in Devin Desktop share one harness and one MCP format: an mcpServers object where a remote server takes url and headers. devin mcp add writes the entry for you. Devin Cloud is separate and configured in the web app.

By Jake Marsh. Checked against Devin's own docs on 2026-10-31; each section links its source.

The Devin config

For a server named my-server at https://example.com/mcp that takes an Authorization header. Where it goes: Run in a terminal (-s user saves it to ~/.config/devin/mcp_config.json for every project).

devin mcp add -s user -H "Authorization: Bearer YOUR_KEY" my-server "https://example.com/mcp"

Swap in your own server below and the Devin version updates first, with every other client after it.

Where Devin reads it

  • .devin/mcp_config.local.jsonlocal (the default for devin mcp add): this project, gitignored, only you
  • .devin/mcp_config.jsonproject: shared with your team through version control
  • ~/.config/devin/mcp_config.json (%APPDATA%\devin\mcp_config.json on Windows)user: every project, only you

Keys, headers and sign-in

Pass a static key with -H "Name: value" on devin mcp add (repeatable), or put it in headers in the file. Devin's advice for keys is to keep them in .devin/mcp_config.local.json, which is gitignored: define the server in the shared .devin/mcp_config.json and let each person add their own key in the local file.

For OAuth servers, run devin mcp login <name>. Devin CLI registers itself through dynamic client registration; a provider without it takes oauthClientId and oauthClientSecret on the entry.

Devin Cloud (app.devin.ai) doesn't read these files. Organization admins with the Manage MCP Servers permission add a server from Customize > MCPs > Add custom MCP: pick HTTP, enter the server URL, and choose Auth Header (key defaults to Authorization) or OAuth.

{
  "mcpServers": {
    "my-server": {
      "url": "https://example.com/mcp",
      "headers": { "Authorization": "Bearer YOUR_KEY" }
    }
  }
}
What the command writes in ~/.config/devin/mcp_config.json. A URL means Streamable HTTP; add "transport": "sse" only for a legacy SSE server on another path.

Source: docs.devin.ai/cli/extensibility/mcp/configuration

Check that it connected

devin mcp list shows every configured server and devin mcp get <name> shows one. In Devin Desktop, click Customize in the agent sidebar, open MCPs and set Install MCPs for to This computer: each server has a toggle, a link to its config file and a refresh button. A server whose sign-in expired shows Needs auth with an Authenticate button.

In Devin Cloud, open the server's page and click Test tools: Devin connects and lists the server's tools.

Source: docs.devin.ai/desktop/devin-local/customizations

Devin gotchas

  • devin mcp add saves to local scope by default, which is the current project only. Pass -s user to make the server available in every project.

    Source: docs.devin.ai/cli/reference/commands

  • Before v3000.3 (the Local 3.6 release), MCP servers lived under mcpServers in config.json in the same folders. Newer versions use the dedicated mcp_config.json files and move old entries over on startup.

    Source: docs.devin.ai/cli/extensibility/mcp/configuration

  • Devin CLI also imports MCP servers from other tools' files, including .cursor/mcp.json, Claude Code's .mcp.json and ~/.claude.json, ~/.codeium/windsurf/mcp_config.json and opencode.json, so a server can appear that you never added to Devin.

    Source: docs.devin.ai/cli/reference/configuration/read-config-from

  • Each client keeps its own OAuth sign-in. Signing in from Windsurf or Claude Code doesn't carry over: run devin mcp login for Devin CLI too. If sign-in fails because the provider rejects the RFC 8707 resource parameter, set "oauthResource": "" and log out and in again.

    Source: docs.devin.ai/cli/extensibility/mcp/configuration

Still not connecting? Windsurf MCP server not connecting walks through the fixes in order.

Generate the config for your server

Runs in your browser. Nothing you type is sent anywhere. Still, don't paste real keys on shared screens.

The header value is never put in the link.

Devin CLI / Devin Local

Run in a terminal (-s user saves it to ~/.config/devin/mcp_config.json for every project)

devin mcp add -s user -H "Authorization: Bearer YOUR_KEY" my-server "https://example.com/mcp"

Source: docs.devin.ai/cli/extensibility/mcp/configuration

Claude Code

Run in a terminal (--scope user makes it available in every project)

claude mcp add --transport http --scope user my-server "https://example.com/mcp" --header "Authorization: Bearer YOUR_KEY"

Source: code.claude.com/docs/en/mcp

Cursor

~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project)

{
  "mcpServers": {
    "my-server": {
      "url": "https://example.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Source: cursor.com/docs/context/mcp

Codex CLI

~/.codex/config.toml

[mcp_servers.my_server]
url = "https://example.com/mcp"
http_headers = { "Authorization" = "Bearer YOUR_KEY" }

Source: developers.openai.com/codex/mcp

Windsurf / Devin Desktop

~/.config/devin/mcp_config.json (older Windsurf: ~/.codeium/windsurf/mcp_config.json)

{
  "mcpServers": {
    "my-server": {
      "serverUrl": "https://example.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Source: docs.devin.ai/windsurf/plugins/cascade/mcp

VS Code (Copilot agent mode)

.vscode/mcp.json in the workspace, or your user mcp.json (MCP: Open User Configuration)

{
  "servers": {
    "my-server": {
      "type": "http",
      "url": "https://example.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Source: code.visualstudio.com/docs/agents/reference/mcp-configuration

Gemini CLI

~/.gemini/settings.json (or .gemini/settings.json in the project)

{
  "mcpServers": {
    "my-server": {
      "httpUrl": "https://example.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Source: geminicli.com/docs/tools/mcp-server/

Antigravity CLI (agy)

~/.gemini/config/mcp_config.json (or .agents/mcp_config.json in the workspace)

{
  "mcpServers": {
    "my-server": {
      "serverUrl": "https://example.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Source: antigravity.google/docs/mcp

Cline

cline_mcp_settings.json (in the Cline panel, MCP Servers > Configure > Configure MCP Servers; Cline CLI: ~/.cline/data/settings/cline_mcp_settings.json)

{
  "mcpServers": {
    "my-server": {
      "type": "streamableHttp",
      "url": "https://example.com/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Source: docs.cline.bot/mcp/mcp-overview

OpenCode

opencode.json in the project root, or ~/.config/opencode/opencode.json for every project

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "my-server": {
      "type": "remote",
      "url": "https://example.com/mcp",
      "oauth": false,
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

Source: opencode.ai/docs/mcp-servers/

Need a task list for those agents?

Taskhold is a remote MCP server that gives Devin and your other agents a task list you share, with their progress on a live board. Its setup link writes this config for the agent, so you don't have to. $12 a month or $120 a year, 7-day trial.

Other clients