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.
01Connect
Pick a server from the directory, paste its address, or import a config file.
02Approve
Look at each tool the server offers and allow the ones you trust.
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:
- From the directory. Hundreds of servers, checked to be live, with their sign-in already known. Browse the directory.
- By address. Paste the server's URL. MyDeepAgents probes it first and tells you whether it needs a sign-in, without storing anything.
- From a config file. Paste the JSON you already use in another MCP app; see Import a config file.
What a server needs
| Field | What it means |
|---|---|
| Transport | Streamable 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. |
| Address | https on port 443, reachable from the internet. Private and local addresses are blocked, and the address may not contain credentials. |
| Protocol versions | 2025-11-25, 2025-06-18, 2025-03-26 and 2024-11-05. |
| What is used | Tools. 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_type | What it means |
|---|---|
none | No sign-in. For open servers, such as public documentation. |
bearer | A token sent as Authorization: Bearer. Checked by listing the server's tools before it is saved: a refused token saves nothing. |
headers | Up to 20 headers of your own, for servers that want a key in a header of their choosing. |
oauth2 | Sign 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
| Status | What it means |
|---|---|
pending | New, not yet decided. Can be tried by hand, but agents and workflows don't get it. |
approved | Allowed. Agents and workflows can call it. |
blocked | Refused. Never offered. |
changed | Approved 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. |
removed | No 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.
- read
neverOnly reads. Runs without asking.
- write
policyChanges something. Follows your organization's approval policy.
- destructive
alwaysDeletes 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.
{
"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.
{
"lookup": {
"type": "action",
"use": "docs.search_docs",
"input": {
"query": "${inputs.question}"
},
"on_error": "continue"
}
}What a step gets back
| Field | What it means |
|---|---|
text | The answer's text, joined from its parts. |
is_error | True when the server says the tool failed. |
content | The answer's parts as the server sent them. |
structured | The structured result, when the tool returns one. |
{
"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.
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.
| Field | Value |
|---|---|
| Connecting | 5 seconds to connect, 10 seconds for the first handshake, 20 seconds to list tools. |
| A tool call | 60 seconds by default, adjustable from 1 to 300 per server. |
| An answer | 1 MB by default, adjustable from 1 KB to 5 MB per server. The model reads at most 64,000 characters of it. |
| Tools per server | Up to 500. A tool description longer than 4,000 characters is shortened for the model. |
| Redirects | Followed 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
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.
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.
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"
}
]
}'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.serversormcp.servers, as in VS Code, with comments and trailing commas.context_servers, as in Zed.serverUrl(Windsurf) andhttpUrl(Gemini CLI).- A single server, a list of servers, or plain addresses, one per line.
{
"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.
01Switch tools on
In Developers → MCP → Your MCP server, choose Offer a tool and pick an agent, a workflow or a connection action.
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.
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.
https://api.mydeepagents.com/v1/mcpConnect 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
| Kind | What the app sends |
|---|---|
agent | The app sends message, text up to 32,000 characters. The agent runs its published version and answers with its final reply. |
workflow | The 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. |
action | The 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
429withRetry-After. An organization can offer up to 50 tools. - Only API keys sign in, sent as
Authorization: Bearer. Requests from a browser (anyOriginheader) 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.
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.