多租户MCP服务器

一个无状态的模型上下文协议(MCP)服务器,用于Solana上的Jupiter Ultra Swap,具有自动优化、无RPC架构和MEV保护功能。

  • by SanseDev
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 SanseDev/multitenant-mcp

使用说明

多租户MCP服务器

A. 无状态的 适用于Solana的Jupiter Ultra Swap的模型上下文协议(MCP)服务器。使用Jupiter的下一代Ultra API,具有自动优化、无RPC架构和MEV保护功能。每次请求都会传递配置,实现真正的多租户功能,而无需服务器端状态。

建筑学

无状态设计

  • 没有会话存储每个工具调用都包含完整的配置
  • 已准备好支持多租户每个请求使用不同的钱包/配置
  • 水平可扩展的请求之间没有共享状态
  • 可插拔的通过注册模式轻松添加新工具

关键组件

src/
├── types/          # Type definitions for config and tools
├── tools/          # Tool implementations (stateless functions)
├── server.ts       # MCP server (stateless router)
└── index.ts        # Entry point

工具

1. jupiter_get_order

从Jupiter Ultra API获取交换订单(使用Juno流动性引擎+实时滑点估算器)。

2. jupiter_execute_order

通过Ultra API(无RPC、自动优化、MEV保护)执行代币交换。

3. solana_get_balance

获取配置钱包中的SOL或SPL代币余额。

安装

pnpm install
pnpm build

使用示例

每个工具调用都包含完整的配置:

{
  "tool": "jupiter_get_order",
  "arguments": {
    "config": {
      "solana": {
        "rpcEndpoint": "https://api.mainnet-beta.solana.com",
        "walletPrivateKey": "BASE58_ENCODED_PRIVATE_KEY",
        "commitment": "confirmed"
      },
      "jupiter": {
        "priorityFeeLamports": 1000
      }
    },
    "inputMint": "So11111111111111111111111111111111111111112",
    "outputMint": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
    "amount": 1000000000
  }
}

多租户使用

不同的租户在每次请求中使用不同的配置:

// Tenant A - Alice's wallet
{
  "config": {
    "solana": {
      "rpcEndpoint": "https://api.mainnet-beta.solana.com",
      "walletPrivateKey": "ALICE_PRIVATE_KEY"
    }
  }
}

// Tenant B - Bob's wallet (same request format, different config)
{
  "config": {
    "solana": {
      "rpcEndpoint": "https://api.devnet.solana.com",
      "walletPrivateKey": "BOB_PRIVATE_KEY"
    }
  }
}

测试

测试验证Ultra API与模拟响应的集成:

pnpm test           # Run tests once
pnpm test:watch     # Watch mode
pnpm demo           # Run live demo

测试策略

为了安全测试而不消耗真实代币:

  • 使用 devnet(开发网络) 使用测试代币
  • Ultra API执行真实交易(无模拟模式)
  • 所有测试均使用模拟的API响应
  • 演示连接到实际开发网络以查询余额

木星超API认证

注: Ultra API v1 需要进行身份验证(API 密钥或授权)。当前实现调用了公开端点。如需用于生产环境,您可能需要:

  • 如需API访问权限,请联系木星团队
  • 在获取请求中添加身份验证头
  • 如果Ultra访问受限,请使用公开的Legacy API

检查 木星的文档 满足当前的访问需求。

木星超(Jupiter Ultra)API功能

Ultra自动处理的事项

  • 滑移优化实时滑点估算器(RTSE)
  • 交易发送专有引擎(95%的响应时间<2秒)
  • MEV保护最低的MEV(最大提取价值)攻击率
  • 无气体支持符合条件的互换自动处理
  • 最优价格Juno流动性引擎聚合
  • **无RPC(远程过程调用)**无需管理RPC端点

演出

  • 95%的交易在2秒内完成
  • 自动优先费用管理
  • 自学习流动性优化

添加新工具

  1. 在(指定位置)创建工具文件 src/tools/
  2. 实施 ToolHandler 接口
  3. 确保 config 必填参数
  4. 注册于 src/tools/registry.ts

示例:

export const myTool: ToolHandler = {
  name: 'my_tool',
  description: 'Does something',
  inputSchema: {
    type: 'object',
    properties: {
      config: { /* ... */ },
      myParam: { type: 'string' }
    },
    required: ['config', 'myParam']
  },
  async execute(args) {
    const { config } = args;
    // Use config (no state stored)
    return { result: 'success' };
  }
};

原则

  • **KISS(亲吻)**简单,无需复杂的状态管理
  • 干燥可重复使用的工具模式
  • **SOLID(注:SOLID是一个常用于软件设计原则中的缩写,具体含义根据上下文可能有所不同,但在此直接翻译为“SOLID”以保持原样)**单一职责,可插拔设计
  • 无状态的没有服务器端会话或存储

安全

⚠️ 千万不要泄露私钥! 在生产环境中使用环境变量或安全保险库。

测试夹具仅使用确定性种子进行测试。切勿使用测试钱包存放真实资金。