~cytrogen/evi-run

ref: b4084f5eac89c4d164c014e297cff02678b07125 evi-run/bot/agents_tools/mcp_servers.py -rw-r--r-- 1.5 KiB
b4084f5e — Bendy Merge branch 'main' of https://github.com/pipedude/evi-run 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import json

from collections import OrderedDict

import base58
from agents.mcp import MCPServerStdio

MAX_SERVERS = 20

servers: OrderedDict[str, MCPServerStdio] = OrderedDict()
global_dexpaprika_server = None


async def get_dexpapirka_server():
    global global_dexpaprika_server
    if global_dexpaprika_server:
        return global_dexpaprika_server

    dexpaprika_server = MCPServerStdio(
        name="DexPaprika",
        params={
            "command": "dexpaprika-mcp",
            "args": [],
        }
    )
    await dexpaprika_server.connect()
    global_dexpaprika_server = dexpaprika_server
    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