Research: Mapping Production Deep-Agent capabilities to MCP Agents#20
Research: Mapping Production Deep-Agent capabilities to MCP Agents#20madhaviai wants to merge 8 commits into
Conversation
Updated the document deep agent architectures and their mapping to MCP agents.
Updated the document to clarify observations on deep-agent systems, adjusted section headings for consistency, and refined the MCP stack and deep-agent pattern descriptions. Enhanced coverage of existing MCP capabilities and outlined gaps in the current model.
Revise the document to clarify the comparison between Deep Agent Architecture and MCP, including research questions, flow diagrams, and limitations. Update sections on existing MCP coverage and propose new layering for WG discussions.
This document compares Deep Agent architecture with MCP Agents, highlighting the strengths and gaps in their capabilities, particularly in agent definition and orchestration.
Updated the document to introduce Deep Agents, contrasting their capabilities with typical MCP server sequences, and clarified the roles of skills and subagents.
|
Sorry for the delay, I meant to follow up on this much sooner - to continue from our discussion on Friday, what I had in mind is conceptually just letting each MCP server declare its own dedicated subagent(s), something like this (not protocol-rigorous, but just to demonstrate the execution model I'm thinking of): sequenceDiagram
participant User
participant Host as Host / MCP Client
participant Sup as Supervisor LLM
participant Server as MCP Server
participant Sub as Local Sub-agent LLM
Note over Host,Server: Discovery
Host->>Server: agent/list
Server-->>Host: agent summaries<br/>[id, description, capabilities]
User->>Host: Check failed pipelines and pending approvals
Host->>Sup: user request + agent summaries
Sup-->>Host: select "workflow-agent"
Note over Host,Server: Resolve only the selected agent
Host->>Server: agent/get<br/>{agentId: "workflow-agent"}
Server-->>Host: agent definition<br/>{instructions, tools: [Tool]}
Note over Host: Construct sub-agent locally.<br/>Tools belong to this same server.
Host->>Sub: task + instructions + scoped tools
loop Local sub-agent tool loop
Sub-->>Host: call list_failed_pipelines
Host->>Server: tools/call list_failed_pipelines
Server-->>Host: CallToolResult
Host->>Sub: tool result
Sub-->>Host: call list_pending_approvals
Host->>Server: tools/call list_pending_approvals
Server-->>Host: CallToolResult
Host->>Sub: tool result
end
Sub-->>Host: compact task result
Host->>Sup: sub-agent result
Sup-->>Host: final response
Host-->>User: response
We might represent the result of [
{
"name": "workflow-agent",
"description": "Used to check pipeline workflows",
"systemPrompt": "hello",
"model": "openai:gpt-5.5", // unsure about this one, model IDs are very inconsistent
"tools": ["list_failed_pipelines", "list_pending_approvals"] // each entry must be a tool from the same server
}
]In Deep Agents code, that would mean that we basically get to just swap out the subagent definition with a couple of calls to the MCP server to get the appropriate definitions to register instead: # research_subagent = {
# "name": "workflow-agent",
# "description": "Used to check pipeline workflows",
# "system_prompt": "hello",
# "tools": [list_failed_pipelines, list_pending_approvals],
# "model": "openai:gpt-5.5",
# }
subagents = research_server.list_agents() # Makes an agent/list call to the MCP server
subagents = map_to_deep_agents(subagents) # Converts to the actual format Deep Agents uses, with actual tool handlers
agent = create_deep_agent(
model="google_genai:gemini-3.5-flash",
subagents=subagents,
)The entire subagent would run completely locally, but we would be constructing it from metadata provided by the MCP server itself in a generic way; the only constraint is that each subagent's capabilities are limited to what that singular MCP server offers, and can't reference capabilities exposed by sibling MCP servers. As for nested subagents, we could probably make that work too with a slight tweak to the [
{
"name": "workflow-agent",
"description": "Used to check pipeline workflows",
"systemPrompt": "hello",
"model": "openai:gpt-5.5",
// We would generalize to a list of permitted capabilities and support passing both tools and agents to it
"capabilities": [{ "type": "tool", "name": "list_failed_pipelines" }, { "type": "tool", "name": "list_pending_approvals" }, { "type": "agent", "name": "github-agent" }]
},
{
"name": "github-agent",
"description": "Used to check GitHub stuff",
"systemPrompt": "hello",
"model": "openai:gpt-5.5",
"capabilities": [{ "type": "tool", "name": "list_branches" }, { "type": "tool", "name": "search_code" }]
}
]Does this work for your use case? We might be able to POC an extension based on this rough idea. |
|
Thanks, this direction works for the Deep Agents “build subagents from MCP catalog” use case. A few tweaks so we also cover progressive disclosure, If we put tool names (or schemas) in agents/list, or still run full tools/list at connect, hosts will load agents and tools into context and we’re back to flat sprawl.
agents/list response: agents/get |
This document captures observations from building and operating production deep-agent systems and compares those capabilities against existing MCP primitives and emerging MCP extensions.
The goal is not to propose a specific solution, but to understand: