返回市场
MCP服务器-ccxt

MCP服务器-ccxt

作者:carlosatta2 星标更新:2025-10-30

项目介绍

MCP Server CCXT

⚠️ 正在进行中: 此项目正在积极开发中。功能和API可能会在没有通知的情况下发生变化。自行承担在生产环境中使用的风险。

MCP (模型上下文协议) 服务器通过服务器发送事件 (SSE) 暴露 CCXT 加密货币交易所API。此服务器提供了与多个加密货币交易所交互的24种全面工具。

🔒 安全第一

重要: 此服务器包括多层安全措施以防止意外或恶意交易操作:

  • 🛡️ SAFE_MODE: 禁用所有交易操作,仅读取访问
  • ⏱️ 速率限制: 防止订单突发(每个会话每分钟最多10个订单)
  • 📝 增强日志: 所有交易操作的完整审计跟踪
  • 🔍 工具分类: 明确区分安全工具与危险工具
  • 🚨 安全检查: 在执行交易之前进行多重验证

参见 SECURITY.md 获取完整的安全文档。

快速开始 - 安全模式

为了最大安全性(推荐用于生产环境):

# .env
SAFE_MODE=true  # 禁用所有交易操作

启用 SAFE_MODE 后:

  • ✅ 可读:余额、市场、价格、订单、历史
  • ❌ 不可操作:下单、取消订单、资金转移

功能

  • 🌐 基于Web的MCP服务器 使用SSE传输
  • 💱 支持多个交易所: Binance, Coinbase, Kraken, Bitfinex, Bybit
  • 🔧 24种全面工具 (13种公共 + 11种私有)
  • 🔐 基于环境的凭证管理
  • 🛡️ 高级安全特性 (SAFE_MODE, 速率限制, 审计日志)
  • 📊 公共API: 市场数据, 资金费率, 订单簿, OHLCV, 成交记录
  • 💰 私有API: 账户余额, 订单管理, 期货交易, 资金转移
  • 🔄 基于会话的传输 带UUID追踪
  • 📝 详细的日志 用于调试

安装

npm install

配置

在根目录创建一个 .env 文件:

# ==========================================
# 安全配置
# ==========================================
# SAFE_MODE: 禁用所有交易操作
# 推荐: 生产环境设置为true
SAFE_MODE=false

# ==========================================
# 服务器配置
# ==========================================
HOST=0.0.0.0
PORT=3000
LOG_LEVEL=info
DEFAULT_EXCHANGE=coinbase

# ==========================================
# 交易所API凭证
# ==========================================
# 仅需用于私有工具 (余额, 订单等)
# 空白则仅使用公共工具

BINANCE_API_KEY=your_binance_api_key
BINANCE_SECRET=your_binance_secret

COINBASE_API_KEY=your_coinbase_api_key
COINBASE_SECRET=your_coinbase_secret

KRAKEN_API_KEY=your_kraken_api_key
KRAKEN_SECRET=your_kraken_secret

# 根据需要添加其他交易所的凭证

安全建议:

  1. 除非明确需要交易,否则始终启用 SAFE_MODE
  2. 使用独立的API密钥用于只读操作与交易操作
  3. 启用IP限制在交易所API密钥上
  4. 绝不要提交 .env 文件到版本控制
  5. 参见 SECURITY.md 获取完整的安全指南

运行服务器

npm start

服务器将在 http://0.0.0.0:3000 (或您配置的HOST/PORT) 上启动。

可用端点

  • SSE流: GET http://localhost:3000/sse - 建立SSE连接
  • 消息: POST http://localhost:3000/message?sessionId=<uuid> - 处理MCP消息
  • 健康检查: GET http://localhost:3000/health - 服务器健康状态
  • 信息: GET http://localhost:3000/ - 服务器信息
  • 统计: GET http://localhost:3000/stats - 服务器统计

可用工具

公共工具 (13种工具 - 无需身份验证)

  1. list_exchanges - 列出所有可用交易所
  2. get_ticker - 获取交易对的当前行情
  3. batch_get_tickers - 一次性获取多个行情
  4. get_orderbook - 获取市场订单簿
  5. get_ohlcv - 获取蜡烛图数据
  6. get_trades - 获取最近的成交记录
  7. get_markets - 列出所有可用市场
  8. get_exchange_info - 获取交易所信息
  9. get_leverage_tiers - 获取期货杠杆等级
  10. get_funding_rates - 获取永续期货资金费率
  11. get_positions - 获取公开的持仓信息
  12. get_open_orders - 获取公开的挂单信息
  13. get_order_history - 获取公开的订单历史

私有工具 (10种工具 - 需要API凭证)

  1. account_balance - 获取账户余额
  2. place_market_order - 下市价单 ⚠️
  3. place_limit_order - 下限价单 ⚠️
  4. cancel_order - 取消特定订单
  5. cancel_all_orders - 取消所有订单 1- set_leverage - 设置期货杠杆
  6. set_margin_mode - 设置保证金模式 (隔离/交叉)
  7. place_futures_market_order - 下期货市价单 ⚠️
  8. place_futures_limit_order - 下期货限价单 ⚠️
  9. transfer_funds - 转账至其他账户

⚠️ 警告: 交易工具执行真实操作并涉及真实资金!

测试

基本测试

npm test

扩展测试

node test-extended.js

工具示例

获取行情

{
  "name": "get_ticker",
  "arguments": {
    "symbol": "BTC/USDT",
    "exchange": "binance"
  }
}

批量获取行情

{
  "name": "batch_get_tickers",
  "arguments": {
    "symbols": ["BTC/USDT", "ETH/USDT", "BNB/USDT"]
  }
}

列出交易所

{
  "name": "list_exchanges",
  "arguments": {
    "certified": false
  }
}

获取账户余额 (需要凭证)

{
  "name": "account_balance",
  "arguments": {
    "exchange": "binance"
  }
}

下限价单 (需要凭证) ⚠️

{
  "name": "place_limit_order",
  "arguments": {
    "symbol": "BTC/USDT",
    "side": "buy",
    "amount": 0.001,
    "price": 50000
  }
}

架构

mcp-server-ccxt/
├── index.js                    # 主服务器
├── src/
│   ├── mcpServer.js           # MCP服务器
│   ├── config/
│   │   └── config.js          # 配置
│   ├── tools/
│   │   ├── publicTools.js     # 13种公共工具
│   │   └── privateTools.js    # 10种私有工具
│   └── utils/
│       └── exchangeManager.js # 交易所管理器
├── test-mcp-client.js         # 基本测试
├── test-extended.js           # 扩展测试
└── .env                       # 环境变量

MCP集成

与n8n一起使用

  1. 在n8n中安装MCP连接器
  2. 配置服务器URL: http://your-server:3000
  3. 在工作流程中使用工具

自定义集成

import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";

const client = new Client({
  name: "my-client",
  version: "1.0.0",
}, { capabilities: {} });

const transport = new SSEClientTransport(
  new URL("http://localhost:3000/sse")
);

await client.connect(transport);

const result = await client.callTool({
  name: "get_ticker",
  arguments: { symbol: "BTC/USDT" },
});

console.log(result.content[0].text);

安全

⚠️ 重要安全注意事项:

  1. 绝不要提交 .env 文件 到版本控制
  2. 交易工具执行真实的交易 并涉及真实资金
  3. 生产环境中使用HTTPS
  4. 使用防火墙规则限制访问
  5. 注意交易所的速率限制

支持的交易所

  • Coinbase (默认)
  • Binance
  • Kraken
  • Bitfinex
  • Bybit

CCXT支持超过100个交易所。在 .env 中添加凭证以启用更多交易所。

故障排除

服务器无法启动

  • 检查端口3000是否未被占用
  • 验证 .env 文件是否存在
  • 查看日志中的错误

工具未显示

  • 在代码更改后重启服务器
  • 检查工具定义
  • 查看服务器日志

认证错误

  • 验证 .env 中的API密钥
  • 检查交易所名称 (小写)
  • 确保具有正确的API权限

许可证

MIT

贡献

欢迎贡献!请:

  1. 分叉仓库
  2. 创建功能分支
  3. 添加测试
  4. 提交拉取请求