import mcp from mcp.client.stdio import stdio_client from mcp import StdioServerParameters from agents import FunctionTool import json params = StdioServerParameters(command="uv", args=["run", "accounts_server.py"], env=None) async def list_accounts_tools(): async with stdio_client(params) as streams: async with mcp.ClientSession(*streams) as session: await session.initialize() tools_result = await session.list_tools() return tools_result.tools async def call_accounts_tool(tool_name, tool_args): async with stdio_client(params) as streams: async with mcp.ClientSession(*streams) as session: await session.initialize() result = await session.call_tool(tool_name, tool_args) return result async def read_accounts_resource(name): async with stdio_client(params) as streams: async with mcp.ClientSession(*streams) as session: await session.initialize() result = await session.read_resource(f"accounts://accounts_server/{name}") return result.contents[0].text async def read_strategy_resource(name): async with stdio_client(params) as streams: async with mcp.ClientSession(*streams) as session: await session.initialize() result = await session.read_resource(f"accounts://strategy/{name}") return result.contents[0].text async def get_accounts_tools_openai(): openai_tools = [] for tool in await list_accounts_tools(): schema = {**tool.inputSchema, "additionalProperties": False} openai_tool = FunctionTool( name=tool.name, description=tool.description, params_json_schema=schema, on_invoke_tool=lambda ctx, args, toolname=tool.name: call_accounts_tool(toolname, json.loads(args)) ) openai_tools.append(openai_tool) return openai_tools