Spaces:
Sleeping
Sleeping
from typing import Optional | |
from contextlib import AsyncExitStack | |
from mcp import ClientSession, StdioServerParameters | |
from mcp.client.stdio import stdio_client | |
from websockets import ClientConnection | |
class MCPClient: | |
def __init__(self): | |
self.session: Optional[ClientSession] = None | |
self.exit_stack = AsyncExitStack() | |
self.stdio = None | |
self.write = None | |
self.ws: Optional[ClientConnection] = None | |
async def connect(self): | |
server_params = StdioServerParameters( | |
command="uv", | |
args=["--directory", "/app", "run", "server.py"], | |
env=None | |
) | |
stdio_transport = await self.exit_stack.enter_async_context(stdio_client(server_params)) | |
self.stdio, self.write = stdio_transport | |
self.session = await self.exit_stack.enter_async_context(ClientSession(self.stdio, self.write)) | |
await self.session.initialize() | |
async def list_tools(self): | |
tools = await self.session.list_tools() | |
tools_openai = [{ | |
"name": tool.name, | |
"description": tool.description, | |
"parameters": tool.inputSchema | |
} for tool in tools.tools] | |
return tools_openai |