import json from collections import OrderedDict import base58 from agents.mcp import MCPServerStdio MAX_SERVERS = 20 servers: OrderedDict[str, MCPServerStdio] = OrderedDict() async def get_dexpapirka_server(): dexpaprika_server = MCPServerStdio( name="DexPaprika", params={ "command": "dexpaprika-mcp", "args": [], } ) await dexpaprika_server.connect() return dexpaprika_server async def get_jupiter_server(private_key: str, user_id: int): srv = servers.get(user_id) if srv: servers.move_to_end(user_id) return srv secret_bytes = bytes(json.loads(private_key)) private_key_b58 = base58.b58encode(secret_bytes).decode() srv = MCPServerStdio( name=f"jupiter-{user_id}", params={ "command": "node", "args": ['/usr/lib/node_modules/jupiter-mcp/index.js'], "env": { "PRIVATE_KEY": private_key_b58, "SOLANA_RPC_URL": 'https://api.mainnet-beta.solana.com', }, }, cache_tools_list=True, ) await srv.connect() servers[user_id] = srv if len(servers) > MAX_SERVERS: old_key, old_srv = servers.popitem(last=False) await old_srv.cleanup() return srv