Status
MCP client already exists in crates/punch-runtime/src/mcp.rs — fully implemented with:
- Subprocess spawning with stdio transport (JSON-RPC 2.0)
- Tool discovery (
tools/list)
- Tool invocation (
tools/call)
- Error handling, timeouts, comprehensive tests
What is NOT wired in
fighter_loop.rs — No calls to McpClient
tool_executor.rs — No MCP tool execution logic
Ring — No MCP server lifecycle management
PunchConfig — No mcp_servers config field
FighterManifest — No MCP capability gating
Work Required
- Add
mcp_servers: HashMap<String, McpServerConfig> to PunchConfig
- Integrate
McpClient startup/shutdown into Ring lifecycle
- Register discovered MCP tools in the tool executor
- Route MCP tool calls from fighters to the correct server
- Add
mcp_allowlist capability to FighterManifest
- End-to-end integration tests
Context
The hard part (protocol implementation) is done. This is integration work — wiring the existing client into the Ring and fighter loop.
Status
MCP client already exists in
crates/punch-runtime/src/mcp.rs— fully implemented with:tools/list)tools/call)What is NOT wired in
fighter_loop.rs— No calls toMcpClienttool_executor.rs— No MCP tool execution logicRing— No MCP server lifecycle managementPunchConfig— Nomcp_serversconfig fieldFighterManifest— No MCP capability gatingWork Required
mcp_servers: HashMap<String, McpServerConfig>toPunchConfigMcpClientstartup/shutdown into Ring lifecyclemcp_allowlistcapability toFighterManifestContext
The hard part (protocol implementation) is done. This is integration work — wiring the existing client into the Ring and fighter loop.