Skip to main content

Adding MCP Servers

Via Command Line

The quickest way to add an MCP server:
devin mcp add
This launches an interactive wizard to configure a new server. You can also remove or list servers:
devin mcp list      # List all configured servers
devin mcp remove    # Remove a configured server

Via Config File

Add servers directly to your config file’s mcpServers section:
// .cognition/config.json
{
  "mcpServers": {
    "server-name": {
      "command": "npx",
      "args": ["-y", "@company/mcp-server"],
      "env": {
        "API_KEY": "your-key"
      }
    }
  }
}
Project-level servers are shared with your team via version control.

Server Configuration Options

MCP servers can be configured in two ways: as a local command (stdio transport) or as a remote HTTP server (Streamable HTTP transport).

Local Command (stdio)

FieldTypeRequiredDescription
commandstringYesThe executable to run
argsstring[]NoCommand-line arguments
envobjectNoEnvironment variables to set

Remote HTTP Server

FieldTypeRequiredDescription
urlstringYesThe URL of the MCP server endpoint
transportstringNoSet to "http" for Streamable HTTP transport (informational; transport is auto-detected from the presence of url)
headersobjectNoCustom HTTP headers to include in requests

Examples

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_..."
      }
    }
  }
}
{
  "mcpServers": {
    "notion": {
      "url": "https://mcp.notion.com/mcp",
      "transport": "http"
    }
  }
}
After adding an OAuth-based server, run devin mcp login notion to authenticate. See Authentication below.
{
  "mcpServers": {
    "linear": {
      "url": "https://mcp.linear.app/mcp",
      "transport": "http"
    }
  }
}
{
  "mcpServers": {
    "my-tools": {
      "command": "python",
      "args": ["./scripts/mcp-server.py"],
      "env": {
        "DB_URL": "postgres://localhost/mydb"
      }
    }
  }
}

Authentication

Some remote MCP servers require OAuth authentication. After adding an OAuth-based server to your config, authenticate using the login command:
devin mcp login <server-name>
For example:
devin mcp login notion    # Authenticate with Notion
devin mcp login linear    # Authenticate with Linear
This opens a browser window where you can authorize access. The OAuth tokens are stored locally and refreshed automatically.
If the server supports OAuth, you will also be prompted to authenticate automatically when the server is first used.

Managing Secrets

Never commit API keys or secrets to version control. Use .cognition/config.local.json for sensitive values.
For team projects, the recommended pattern is:
  1. Define the server in .cognition/config.json with placeholder or no env vars
  2. Each team member adds their personal keys in .cognition/config.local.json
The local config file is automatically excluded from git.

MCP Permissions

You can pre-approve, deny, or force-ask for specific MCP tools in your permissions config:
{
  "permissions": {
    "allow": [
      "mcp__github__list_issues",
      "mcp__github__create_issue"
    ],
    "deny": [
      "mcp__github__delete_repo"
    ],
    "ask": [
      "mcp__linear__*"
    ]
  }
}
Permission matcher patterns:
PatternMatches
mcp__server__toolA specific tool on a specific server
mcp__server__*All tools on a specific server
mcp__*All MCP tools on all servers

Troubleshooting

Verify the command works outside Devin for Terminal:
npx -y @modelcontextprotocol/server-github
Check that all required environment variables are set.
Ask the agent to list MCP servers and tools. The server may need a moment to initialize.
Check your permissions config. MCP tools default to prompting for approval. Add them to permissions.allow to auto-approve.