使用说明
币安MCP服务器
一个模型上下文协议(MCP)服务器,用于向大型语言模型(LLM)代理提供币安加密货币交易所的数据。该服务器使LLM能够通过标准化接口访问币安的实时和历史市场数据。
特点/特性
- 实时价格数据获取Binance上任意交易对的当前价格
- 订单簿访问获取订单簿快照,显示不同价格水平上的买入/卖出兴趣
- 历史价格数据获取任意时间框架的OHLCV(开盘价、最高价、最低价、收盘价、成交量)K线数据
- 实时WebSocket流通过WebSockets订阅实时交易、行情和订单簿更新
- 全面的市场数据访问交易数据、24小时统计数据、聚合交易、滑动窗口数据等更多信息
- 交换信息访问交易规则、符号信息和费用结构
- 只读操作所有数据均通过币安的公开REST API获取(无需API密钥)
- 符合MCP标准与任何MCP兼容的LLM客户端均可配合使用
要求
- Python 3.8及以上版本
mcp包含CLI工具的软件包(mcp[cli])requestsREST API库websocketsWebSocket 流库uvicorn用于盛装(可选)
安装
- 克隆此存储库:
git clone https://github.com/yourusername/binance_mcp_server.git
cd binance_mcp_server
- 安装依赖项:
pip install -r requirements.txt
用法
直接运行服务器
以独立模式运行服务器:
$env:PORT=4000
python run_server.py
python run_server.py
这将启动MCP服务器,该服务器将通过STDIO监听连接。
使用MCP Inspector的开发模式
对于开发和测试,请使用MCP检查器:
mcp dev run_server.py
这将打开MCP Inspector界面,您可以在该界面中交互式地测试服务器的工具。
在Claude桌面版上安装
要在Claude Desktop中使用此服务器:
- 如果您尚未安装,请安装MCP CLI工具:
pip install "mcp[cli]"
- 在Claude桌面端安装服务器:
mcp install run_server.py
来自 n8n 的 http://host.docker.internal:8000/mcp
- 现在,您可以直接在Claude桌面对话中访问Binance数据。
示例客户端
提供了一个示例客户端脚本,以演示其程序化使用方法:
python example_client.py
这个脚本连接到服务器并获取各种类型的市场数据。
可用工具
连接性和基本信息
-
**ping_binance() 翻译成中文是:“测试连接币安(Binance)”**测试与Binance API服务器的连接性
- 示例:
ping_binance()
- 示例:
-
**获取服务器时间()**从币安获取当前服务器时间
- 示例:
get_server_time()
- 示例:
市场数据
-
**获取价格(symbol)**获取交易对的当前价格
- 示例:
get_price(symbol="BTCUSDT")
- 示例:
-
**获取订单簿(symbol,深度=10)**获取当前订单簿
- 示例:
get_order_book(symbol="ETHUSDT", depth=5)
- 示例:
-
**获取历史价格数据(symbol, 时间间隔="1天", 数据条数=100)**获取历史开盘、最高、最低、收盘价和成交量(OHLCV)数据
- 示例:
get_historical_prices(symbol="BTCUSDT", interval="1h", limit=24) - 有效的时间间隔:“1分钟”,“3分钟”,“5分钟”,“15分钟”,“30分钟”,“1小时”,“2小时”,“4小时”,“6小时”,“8小时”,“12小时”,“1天”,“3天”,“1周”,“1个月”
- 示例:
-
**获取UIK线数据(get_ui_klines)函数,参数说明:symbol(交易对),interval(时间间隔,默认为“1d”即1天),limit(数据条数,默认为100)**获取优化为用户界面的蜡烛图数据
- 示例:
get_ui_klines(symbol="BTCUSDT", interval="1h", limit=24)
- 示例:
-
**获取最近交易(symbol, limit=20)**获取某个符号的最新交易记录
- 示例:
get_recent_trades(symbol="BTCUSDT", limit=50)
- 示例:
-
**获取历史交易记录(symbol,limit=20,from_id=None)**获取某个符号的历史交易记录
- 示例:
get_historical_trades(symbol="BTCUSDT", limit=100, from_id=12345)
- 示例:
-
**获取聚合交易数据(symbol,limit=20)**获取压缩/汇总交易数据
- 示例:
get_aggregate_trades(symbol="ETHUSDT", limit=30)
- 示例:
-
**获取24小时交易行情(symbol参数)**获取24小时价格变动统计
- 示例:
get_24hr_ticker(symbol="BNBUSDT")
- 示例:
-
**获取所有24小时交易数据的交易对(或:获取所有24小时的交易标记)**获取所有符号的24小时统计数据
- 示例:
get_all_24hr_tickers()
- 示例:
-
**获取交易日股票代码(或交易品种代码),参数为symbol,类型为"FULL"(完整)**获取交易日价格变动统计
- 示例:
get_trading_day_ticker(symbol="BTCUSDT", type="FULL")
- 示例:
-
**获取所有交易日的股票代码(类型为“全部”)**获取所有交易标的物的交易日统计数据
- 示例:
get_all_trading_day_tickers(type="MINI")
- 示例:
-
**获取滚动窗口行情数据(get_rolling_window_ticker),参数说明:symbol(股票代码),window_size(窗口大小,默认“1d”表示1天),type(类型,默认“FULL”表示完整数据)**获取滑动窗口价格统计数据
- 示例:
get_rolling_window_ticker(symbol="BTCUSDT", window_size="4h")
- 示例:
-
**获取所有滚动窗口股票代码(窗口大小="1天",类型="完整")**获取所有符号的滚动窗口统计数据
- 示例:
get_all_rolling_window_tickers(window_size="4h", type="MINI")
- 示例:
-
**获取平均价格(symbol)**获取当前平均价格(5分钟加权平均)
- 示例:
get_average_price(symbol="BTCUSDT")
- 示例:
-
**获取书籍(或视为某种资源/项目)的交易信息(或行情)(symbol参数表示特定的书籍/资源/项目标识)**获取最佳的买入/卖出价格及数量
- 示例:
get_book_ticker(symbol="ETHBTC")
- 示例:
-
**获取所有书籍的股票代码(或:获取所有书籍的交易代码)**获取所有交易标的的最佳买入/卖出报价
- 示例:
get_all_book_tickers()
- 示例:
市场信息
-
**获取交换信息()**获取全面的交易所信息,包括交易规则和符号列表
-
**获取交易费用()**获取默认交易费率(注:仅为演示目的,返回默认公开费率)
WebSocket 流
-
**订阅交易流(symbol)**订阅实时交易事件
- 示例:
subscribe_to_trade_stream(symbol="BTCUSDT")
- 示例:
-
**订阅K线流(symbol,时间间隔="1分钟")**订阅蜡烛图/ K线更新
- 示例:
subscribe_to_kline_stream(symbol="BTCUSDT", interval="5m")
- 示例:
-
**订阅行情数据流(symbol)**订阅24小时新闻更新
- 示例:
subscribe_to_ticker_stream(symbol="ETHUSDT")
- 示例:
-
**订阅书籍(或书籍数据)行情流(对于指定符号)**订阅最佳买价/卖价更新
- 示例:
subscribe_to_book_ticker_stream(symbol="BNBUSDT")
- 示例:
-
**订阅深度行情流(symbol,层级数=10)**订阅订单簿更新
- 示例:
subscribe_to_depth_stream(symbol="BTCUSDT", levels=5)
- 示例:
-
列出所有有效订阅列出所有活跃的WebSocket订阅
- 示例:
list_active_subscriptions()
- 示例:
-
**获取最新流数据(流名称)**从数据流中获取最新数据
- 示例:
get_latest_stream_data(stream_name="btcusdt@trade")
- 示例:
-
**取消订阅流(流名称)**从流中取消订阅
- 示例:
unsubscribe_from_stream(stream_name="btcusdt@kline_1m")
- 示例:
-
**清理所有流(或:关闭所有流)**关闭所有 WebSocket 连接并清理资源
- 示例:
cleanup_all_streams()
- 示例:
项目结构
binance_mcp_server/
├── binance_api.py # Core REST API interaction module
├── binance_ws_api.py # WebSocket connection management
├── commands/ # MCP command definitions
│ ├── __init__.py
│ ├── market_data.py # Price/order book/historical data commands
│ ├── market_info.py # Exchange info and metadata commands
│ └── websocket_streams.py # WebSocket stream commands
└── server.py # Main MCP server setup and initialization
示例
基本连接性
# Check if Binance API is reachable
is_connected = ping_binance()
# Get the current server time (milliseconds since epoch)
server_time = get_server_time()
获取当前市场数据
# Get the current price of Bitcoin
btc_price = get_price(symbol="BTCUSDT")
# Get detailed 24-hour statistics
btc_stats = get_24hr_ticker(symbol="BTCUSDT")
print(f"BTC price change: {btc_stats['priceChangePercent']}%")
print(f"BTC 24h volume: {btc_stats['volume']} BTC")
# Get rolling window statistics (4-hour window)
btc_4h_stats = get_rolling_window_ticker(symbol="BTCUSDT", window_size="4h")
print(f"BTC 4h price change: {btc_4h_stats['priceChangePercent']}%")
使用WebSocket流进行工作
# Subscribe to real-time trade updates
trade_sub = subscribe_to_trade_stream(symbol="BTCUSDT")
# After some time, get the latest trade data
latest_trade = get_latest_stream_data(stream_name="btcusdt@trade")
print(f"Latest trade price: {latest_trade['data']['p']}")
# Subscribe to candlestick updates for chart data
kline_sub = subscribe_to_kline_stream(symbol="ETHUSDT", interval="5m")
# Clean up when done
unsubscribe_from_stream(stream_name="btcusdt@trade")
unsubscribe_from_stream(stream_name="ethusdt@kline_5m")
实施状态
对于已实现和计划中的API端点的详细概述,请参阅 API 实现状态 文件。
扩展服务器
添加新工具
要在Binance API模块中创建相应的函数以添加新工具,然后在其中一个命令模块中将它们注册为MCP工具。
支持私有API端点
为了支持经过身份验证的API调用:
- 修改
binance_api.py以包含身份验证 - 为交易操作创建额外的命令模块
- 在(相应位置)注册新命令
server.py
故障排除
- 连接问题在尝试与客户端连接之前,请确保服务器正在运行
- 速率限制币安可能会对过多的API调用进行速率限制;建议在高流量部署时考虑实现缓存
- WebSocket稳定性WebSocket 连接可能在24小时后断开(Binance限制);服务器将尝试自动重新连接
- 数据格式不同的符号或间隔可能会以略有不同的格式返回数据
许可证
此项目采用MIT许可证授权——详见LICENSE文件。
致谢
- 币安,感谢提供全面的公共API
- 标准化大型语言模型(LLM)工具交互的MCP项目