Spaces:
Running
Running
| # services/mcp_client.py | |
| import requests | |
| from typing import Any, Dict, List | |
| from config.settings import Settings | |
| class MCPClient: | |
| def __init__(self, base_url: str | None = None): | |
| settings = Settings() | |
| self.base_url = (base_url or settings.mcp_server_url).rstrip("/") | |
| def list_tools(self) -> List[Dict[str, Any]]: | |
| resp = requests.get(f"{self.base_url}/tools", timeout=5) | |
| resp.raise_for_status() | |
| data = resp.json() | |
| return data.get("tools", []) | |
| def call_tool(self, name: str, arguments: Dict[str, Any] | None = None) -> Any: | |
| payload = {"name": name, "arguments": arguments or {}} | |
| resp = requests.post(f"{self.base_url}/tools/call", json=payload, timeout=30) | |
| resp.raise_for_status() | |
| data = resp.json() | |
| if not data.get("success", False): | |
| raise RuntimeError(data.get("error", "Unknown tool error")) | |
| return data.get("result") | |