Skip to content

Start building

Jump toHow it works

Model Context Protocol

MCP, both ways

MCP is an open standard for giving AI models tools. Connect any remote MCP server so your agents and workflows can use its tools, and serve your own agents, workflows and actions to outside AI apps as tools of their own.

How it works

MyDeepAgents is an MCP client. You add a server's address once; MyDeepAgents connects, asks which tools it offers, and keeps them in a list you control. A tool runs only after you approve it.

  1. 01Connect

    Pick a server from the directory, paste its address, or import a config file.

  2. 02Approve

    Look at each tool the server offers and allow the ones you trust.

  3. 03Use

    Give the server to an agent or a workflow step, and call its tools in a run.

Connect a server

Open Connections → MCP servers and choose Add MCP server. Three ways in:

  1. From the directory. Hundreds of servers, checked to be live, with their sign-in already known. Browse the directory.
  2. By address. Paste the server's URL. MyDeepAgents probes it first and tells you whether it needs a sign-in, without storing anything.
  3. From a config file. Paste the JSON you already use in another MCP app; see Import a config file.

What a server needs

FieldWhat it means
TransportStreamable HTTP or the older HTTP with SSE. auto tries Streamable HTTP first. Servers that run on your computer (stdio) can't be used, because runs happen in the cloud.
Addresshttps on port 443, reachable from the internet. Private and local addresses are blocked, and the address may not contain credentials.
Protocol versions2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05.
What is usedTools. A server's resources and prompts are listed on its page for you to read, but agents don't use them yet.

A server belongs to one workspace. An organization can connect up to 10 servers unless its settings raise the limit.

Signing in

Servers sign in in one of four ways. Whatever you enter is sealed straight away; MyDeepAgents never shows a secret again, only the names of the headers it sends.

auth_typeWhat it means
noneNo sign-in. For open servers, such as public documentation.
bearerA token sent as Authorization: Bearer. Checked by listing the server's tools before it is saved: a refused token saves nothing.
headersUp to 20 headers of your own, for servers that want a key in a header of their choosing.
oauth2Sign in with the service in your browser. MyDeepAgents finds the server's sign-in service, registers itself or uses your organization's own OAuth app, and uses PKCE. Tokens refresh by themselves.

Approve tools

Every tool starts as pending. It runs only once you approve it, and each approved tool is pinned: MyDeepAgents remembers exactly what the tool said it does, so a server can't quietly change a tool you trusted.

Tool states

StatusWhat it means
pendingNew, not yet decided. Can be tried by hand, but agents and workflows don't get it.
approvedAllowed. Agents and workflows can call it.
blockedRefused. Never offered.
changedApproved before, but the server now describes it differently. It keeps its old pin and stops working until a person approves the new version. Always needs a person.
removedNo longer offered by the server. Comes back by itself if the server offers it again.

Side effects decide when a person is asked

Each tool is marked by what it does, starting from the server's own hints, and that sets whether a run pauses for a person before calling it. You can change both for each tool.

  • readnever

    Only reads. Runs without asking.

  • writepolicy

    Changes something. Follows your organization's approval policy.

  • destructivealways

    Deletes or can't be undone. Always asks a person.

Approving in bulk

When you add a server you can approve none of its tools, only the read-only ones, or all of them. A separate rule decides what happens to new tools the server adds later.

Refresh reads the tool list again and reports what is new, changed and removed. During runs, MyDeepAgents also checks the list at most every five minutes; a tool whose description changed fails with mcp_tool_changed while the server's other tools keep working.

Tools in agents

In an agent, an MCP server fills a slot of kind mcp_server, like a connection does. Then list the tools the agent may use: one by name, or all approved tools with a star.

The slot says what kind of thing the agent needs; which server fills it is set per alias, in the agent studio or with the agent's bindings endpoints. So staging and live can use different servers.

An agent with an MCP server
JSON
{
  "schema": "mda.agent/v1",
  "name": "Docs researcher",
  "slots": {
    "docs": {
      "kind": "mcp_server"
    }
  },
  "spec": {
    "model": {
      "provider": "anthropic",
      "id": "claude-sonnet-5-5"
    },
    "instructions": "Answer questions from the product documentation. Quote the page you used.",
    "tools": [
      {
        "use": "docs.search_docs"
      },
      {
        "use": "docs.fetch_page",
        "approval": "never"
      }
    ]
  }
}
  • Only approved tools reach the model, each with the description that was pinned when you approved it.
  • A tool's name never changes once given: it is the MCP name in snake_case. The model sees it as the slot and the tool joined by two underscores, cut to 64 characters.
  • Approval comes from the agent's own tool setting first, then the server's setting for that tool, then the side-effect default. A paused run waits in Approvals.
  • Turn on Share the server's instructions to add the server's own advice to the agent's instructions, quoted as the server's words and capped at 4,000 characters.

Tools in workflows

In a workflow, an action step whose slot is an MCP server calls one tool. The step's input becomes the tool's arguments, and the step's output is the tool's answer.

JSON
{
  "lookup": {
    "type": "action",
    "use": "docs.search_docs",
    "input": {
      "query": "${inputs.question}"
    },
    "on_error": "continue"
  }
}

What a step gets back

FieldWhat it means
textThe answer's text, joined from its parts.
is_errorTrue when the server says the tool failed.
contentThe answer's parts as the server sent them.
structuredThe structured result, when the tool returns one.
JSON
{
  "text": "Found 3 pages about refunds: Refund policy, Partial refunds, Refunds by card.",
  "is_error": false,
  "content": [
    {
      "type": "text",
      "text": "Found 3 pages about refunds: Refund policy, Partial refunds, Refunds by card."
    }
  ],
  "structured": null
}

Try tools and read the log

On a server's page, Try calls a tool for real with arguments you type, and shows what came back. Pending and changed tools can be tried before you decide; it is a real call, never retried.

POST /v1/mcp_servers/{mcp_server_id}/tools/{tool_name}/call
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/tools/search_docs/call" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "arguments": {
      "query": "refunds"
    }
  }'

The call log

Every call from agents, workflows and tries is logged: the tool, the outcome, how long it took, which run made it and who. The arguments and results are never stored. The log keeps 30 days, with a daily chart of outcomes.

Limits

Limits keep one slow or chatty server from holding up a run.

FieldValue
Connecting5 seconds to connect, 10 seconds for the first handshake, 20 seconds to list tools.
A tool call60 seconds by default, adjustable from 1 to 300 per server.
An answer1 MB by default, adjustable from 1 KB to 5 MB per server. The model reads at most 64,000 characters of it.
Tools per serverUp to 500. A tool description longer than 4,000 characters is shortened for the model.
RedirectsFollowed only to the same server, at most 3 times. A server that moved reports its new address so you can update it.

Manage servers with the API

Everything on the MCP pages is in the API too, under /v1/mcp_servers. Add servers from a deployment script, approve tools from a review tool, or read the call log into your own monitoring.

Add a server

POST /v1/mcp_servers
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workspace_id": "ws_01jccj30nr8ad7mx1yc5v9zx3h",
    "name": "Linear",
    "url": "https://mcp.linear.app/mcp",
    "transport": "auto",
    "auth_type": "oauth2",
    "approve": "read_only",
    "auto_approve": "none"
  }'

Check a server before adding it

The probe connects without credentials and stores nothing. It answers whether the server is reachable, which protocol it speaks, a preview of its tools, and, if it needs a sign-in, which kind.

POST /v1/mcp_servers/probe
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/probe" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://mcp.linear.app/mcp",
    "transport": "auto"
  }'

Approve tools

Send up to 500 decisions at once. Each names a tool and can set its state, its side effects and when to ask a person.

POST /v1/mcp_servers/{mcp_server_id}/tools/decide
curl -X POST "https://api.mydeepagents.com/v1/mcp_servers/mcp_01jc832gmyrb97hnzx3h75bsfd/tools/decide" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "decisions": [
      {
        "name": "search_issues",
        "status": "approved",
        "side_effects": "read",
        "approval": "never"
      },
      {
        "name": "delete_issue",
        "status": "blocked"
      }
    ]
  }'
See the endpoints

Import a config file

Already using MCP servers in another app? Paste its config file and MyDeepAgents adds the remote servers in it. It reads:

  • mcpServers, as in Claude Desktop, Claude Code and Cursor.
  • servers or mcp.servers, as in VS Code, with comments and trailing commas.
  • context_servers, as in Zed.
  • serverUrl (Windsurf) and httpUrl (Gemini CLI).
  • A single server, a list of servers, or plain addresses, one per line.
JSON
{
  "mcpServers": {
    "linear": {
      "url": "https://mcp.linear.app/mcp"
    },
    "acme": {
      "type": "http",
      "url": "https://mcp.acme.com/mcp",
      "headers": {
        "Authorization": "Bearer ${input:acme_token}"
      }
    }
  }
}

Servers that run a local command can't be added and are marked so. A single Authorization: Bearer header becomes a bearer token; other headers become custom headers. mcp-remote bridges are read for the address and headers they wrap, and environment variables are filled from the server's own env.

Serve your own tools

Your organization runs its own MCP server. Switch on the agents, workflows and connection actions you want to offer, and any MCP app can call them with one of your API keys. Nothing is offered until someone switches it on.

  1. 01Switch tools on

    In Developers → MCP → Your MCP server, choose Offer a tool and pick an agent, a workflow or a connection action.

  2. 02Make a key

    Create an API key whose scopes include agent.run, workflow.run or connection.use, for the kinds of tools the app should call.

  3. 03Connect the app

    Add the server's address and the key to the app. It lists your tools and calls them like any others.

The server answers at /v1/mcp on your API address, over Streamable HTTP. It speaks MCP versions 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05, and offers tools only: no resources or prompts.

Text
https://api.mydeepagents.com/v1/mcp

Connect an app

Each app has its own place for MCP servers. Put your key where the placeholder is; prefer an environment variable or the app's own secret prompt over pasting it into a file.

claude mcp add --transport http mydeepagents https://api.mydeepagents.com/v1/mcp \
  --header "Authorization: Bearer $MDA_API_KEY"

What each tool does

KindWhat the app sends
agentThe app sends message, text up to 32,000 characters. The agent runs its published version and answers with its final reply.
workflowThe app sends the inputs the workflow's input schema asks for. The workflow runs and answers with its output, as JSON in structuredContent and as text.
actionThe app sends the action's own inputs, and gets its result. Actions that change things are offered only when someone allows writes for that tool.

Rules and limits

  • A tool is listed only while it is switched on, its target can run, and both the key's scopes and its service account allow it. A key sees nothing outside its workspaces.
  • A call waits up to 60 seconds. A run that takes longer, or waits for a person to approve something, answers with its run ID and where to read it, so the app or a person can follow up.
  • Every call starts its own run, with the same approvals, budgets, policy and audit as a run started any other way. Runs started this way show An outside app (MCP) in Runs.
  • Each key may make 60 calls a minute; more get 429 with Retry-After. An organization can offer up to 50 tools.
  • Only API keys sign in, sent as Authorization: Bearer. Requests from a browser (any Origin header) are refused, so a web page can't call your tools with someone's key.

Offer tools with the API

Everything on the Your MCP server screen is in the API under /v1/mcp_exposures: offer, switch on and off, edit and remove tools. GET /v1/mcp_server tells an app the server's address and how to sign in.

POST /v1/mcp_exposures
curl -X POST "https://api.mydeepagents.com/v1/mcp_exposures" \
  -H "Authorization: Bearer $MDA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "agent",
    "agent_id": "agt_01jctdbahw9btk5p831xs974yq",
    "alias": "live",
    "tool_name": "support_triage",
    "description": "Answers questions about a customer'\''s open support tickets. Give it the customer'\''s name or email."
  }'

Build with us

Ready for your first call?

Early access is open. Tell us what you want your agents to do, and we will help you get your first key.