使用说明
MCP Solana DEX服务器
此目录包含一个简单的去中心化交易所(DEX)MCP服务器。
目的
该服务器为与主服务器管理的ICO相关的代币提供基本的DEX功能:
- 创建销售订单。
- 取消销售订单。
- 执行卖出订单(从现有订单中购买)。
- 正在检索ICO的当前订单簿。
特性
- MCP工具: 将DEX功能作为MCP工具公开(
create_order,cancel_order,execute_order,get_orders). - 基于文件的持久性: 将订单簿存储在JSON文件中(
data/order_book.json默认情况下)。 - ICO协会: 订单与特定
ico_ids
免责声明: 这是一个简化的例子。这 execute_order 工具执行 服务器端先决条件检查 (买方SOL余额、卖方代币余额)更新内部订单簿之前。它 不执行链上原子交换与此服务器交互的客户端负责在收到来自的成功响应后构建和提交实际的原子交换事务 execute_order. 如果没有强大的客户端原子交换实现,这不适合生产。
配置(./.env)
创建一个 .env 此目录中的文件(./)具有以下内容:
# Configuration for MCP Solana DEX Sub-project
# Solana RPC Endpoint (use the same as the main project or specify a different one)
RPC_ENDPOINT="http://localhost:8899"
# Path to the order book data file (relative to this directory)
ORDER_BOOK_FILE="data/order_book.json"
# Optional: Define the token mint address if needed globally
# TOKEN_MINT_ADDRESS="TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
用法
该服务器旨在作为独立于主ICO服务器的进程运行。
-
确保依赖关系: 确保安装了依赖项(可能由父项目的
poetry install). -
导航到父目录: 在主项目根目录中打开终端。
-
启动DEX服务器:
poetry run python mcp_solana_dex/server.py -
互动: 使用连接到此过程的标准输入/输出的MCP客户端。
MCP工具
create_order: 创建新的卖出订单。ico_id:(String)令牌的ICO ID。amount:(整数)要出售的代币数量(基本单位)。price(浮动)每个令牌的价格以SOL计算。owner:(String)卖家的公钥。
cancel_order: 取消现有订单。ico_id:(String)ICO的ID。order_id:(String)要取消的订单的唯一ID。owner:(String)卖家的公钥(必须与订单匹配)。
execute_order: 执行销售订单的先决条件检查,如果检查通过,则更新内部订单簿。 不执行链上交换。ico_id:(String)ICO的ID。order_id:(String)要购买的订单的ID。buyer:(String)买方的公钥。amount:(整数)要购买的代币数量(基本单位)。token_mint_address:(String)令牌的Mint地址。token_decimals:(整数)标记的小数。- 注: 成功预检查后,客户端必须单独构造和提交实际的原子交换交易。
get_orders: 检索ICO的当前卖出订单。ico_id:(String)ICO的ID。limit:(整数,可选)返回的最大订单数(默认为100)。
测试
此项目使用 pytest 用于集成测试。这些测试主要直接调用服务器的工具函数,模拟必要的外部交互(如Solana RPC调用),以验证服务器的内部逻辑和状态管理。
-
安装开发依赖项: 确保安装了主要依赖项,然后安装开发依赖项,其中包括
pytest和pytest-asyncio:# Navigate to the project root directory (where pyproject.toml is) poetry install --with dev -
运行测试: 执行
pytest从项目根目录:poetry run pytestPytest将自动发现并运行位于
tests/目录。
未来的考虑因素
- 客户端原子交换: 确保与此服务器交互的客户端使用适当的Solana事务结构实现安全的原子订单执行(结合SOL支付和令牌转移)。服务器仅执行预检查。
- 数据库持久性: 用数据库(例如SQLite、PostgreSQL)替换文件存储,以获得更好的可扩展性和可靠性。
- 购买订单: 添加对创建和匹配采购订单的支持。
- 错误处理: 改进验证和错误处理。
- 测试: 添加全面的单元和集成测试。