| from __future__ import annotations |
|
|
| from mcp.registry import build_default_registry |
| from mcp.schemas import MCPInvokeRequest, MCPInvokeResult, MCPServerConfig |
|
|
|
|
| class MCPClient: |
| """Small in-process MCP facade for development and tests.""" |
|
|
| def __init__(self, registry: dict[str, MCPServerConfig] | None = None) -> None: |
| self.registry = registry or build_default_registry() |
|
|
| def list_servers(self) -> list[str]: |
| return sorted(self.registry.keys()) |
|
|
| def list_tools(self, server_name: str) -> list[str]: |
| server = self.registry[server_name] |
| return [tool.name for tool in server.tools] |
|
|
| def invoke(self, request: MCPInvokeRequest) -> MCPInvokeResult: |
| if request.server_name not in self.registry: |
| return MCPInvokeResult(success=False, content=None, error=f"Unknown MCP server: {request.server_name}") |
| if request.tool_name not in self.list_tools(request.server_name): |
| return MCPInvokeResult(success=False, content=None, error=f"Unknown tool: {request.tool_name}") |
| payload = { |
| "server": request.server_name, |
| "tool": request.tool_name, |
| "arguments": request.arguments, |
| "status": "mocked", |
| } |
| return MCPInvokeResult(success=True, content=payload) |
| |