这是一个通过Model Context Protocol (MCP)协议暴露Binance加密货币交易所数据给大型语言模型(LLM)代理的服务器。该服务器允许LLMs通过标准化接口访问Binance的实时和历史市场数据。
mcp包 (mcp[cli])requests库websockets库uvicorn用于服务git clone https://github.com/yourusername/binance_mcp_server.git
cd binance_mcp_server
pip install -r requirements.txt
要以独立模式运行服务器:
python run_server.py
这将启动MCP服务器,监听通过STDIO的连接。
对于开发和测试,使用MCP Inspector:
mcp dev run_server.py
这将打开MCP Inspector界面,在这里你可以交互式地测试服务器的工具。
要在Claude Desktop中使用此服务器:
pip install "mcp[cli]"
mcp install run_server.py
提供了一个示例客户端脚本,演示程序化用法:
python example_client.py
此脚本连接到服务器并检索各种类型的市场数据。
ping_binance():测试与Binance API服务器的连接
ping_binance()get_server_time():从Binance获取当前服务器时间
get_server_time()get_price(symbol):获取交易对的当前价格
get_price(symbol="BTCUSDT")get_order_book(symbol, depth=10):获取当前订单簿
get_order_book(symbol="ETHUSDT", depth=5)get_historical_prices(symbol, interval="1d", limit=100):获取历史OHLCV数据
get_historical_prices(symbol="BTCUSDT", interval="1h", limit=24)get_ui_klines(symbol, interval="1d", limit=100):获取UI优化的蜡烛图数据
get_ui_klines(symbol="BTCUSDT", interval="1h", limit=24)get_recent_trades(symbol, limit=20):获取某个符号的最新交易
get_recent_trades(symbol="BTCUSDT", limit=50)get_historical_trades(symbol, limit=20, from_id=None):获取某个符号的旧交易
get_historical_trades(symbol="BTCUSDT", limit=100, from_id=12345)get_aggregate_trades(symbol, limit=20):获取压缩/聚合交易
get_aggregate_trades(symbol="ETHUSDT", limit=30)get_24hr_ticker(symbol):获取24小时价格变化统计
get_24hr_ticker(symbol="BNBUSDT")get_all_24hr_tickers():获取所有符号的24小时统计
get_all_24hr_tickers()get_trading_day_ticker(symbol, type="FULL"):获取交易日价格变化统计
get_trading_day_ticker(symbol="BTCUSDT", type="FULL")get_all_trading_day_tickers(type="FULL"):获取所有符号的交易日统计
get_all_trading_day_tickers(type="MINI")get_rolling_window_ticker(symbol, window_size="1d", type="FULL"):获取滚动窗口价格统计
get_rolling_window_ticker(symbol="BTCUSDT", window_size="4h")get_all_rolling_window_tickers(window_size="1d", type="FULL"):获取所有符号的滚动窗口统计
get_all_rolling_window_tickers(window_size="4h", type="MINI")get_average_price(symbol):获取当前平均价格(5分钟加权平均)
get_average_price(symbol="BTCUSDT")get_book_ticker(symbol):获取最佳买入/卖出价格和数量
get_book_ticker(symbol="ETHBTC")get_all_book_tickers():获取所有符号的最佳买入/卖出
get_all_book_tickers()get_exchange_info():获取包括交易规则和符号列表在内的综合交易所信息
get_trading_fees():获取默认交易费率(注意:为了演示目的,返回默认公共费用)
subscribe_to_trade_stream(symbol):订阅实时交易事件
subscribe_to_trade_stream(symbol="BTCUSDT")subscribe_to_kline_stream(symbol, interval="1m"):订阅蜡烛图/k线更新
subscribe_to_kline_stream(symbol="BTCUSDT", interval="5m")subscribe_to_ticker_stream(symbol):订阅24小时行情更新
subscribe_to_ticker_stream(symbol="ETHUSDT")subscribe_to_book_ticker_stream(symbol):订阅最佳买入/卖出更新
subscribe_to_book_ticker_stream(symbol="BNBUSDT")subscribe_to_depth_stream(symbol, levels=10):订阅订单簿更新
subscribe_to_depth_stream(symbol="BTCUSDT", levels=5)list_active_subscriptions():列出所有活动的WebSocket订阅
list_active_subscriptions()get_latest_stream_data(stream_name):获取流的最新数据
get_latest_stream_data(stream_name="btcusdt@trade")unsubscribe_from_stream(stream_name):取消订阅流
unsubscribe_from_stream(stream_name="btcusdt@kline_1m")cleanup_all_streams():关闭所有WebSocket连接并清理资源
cleanup_all_streams()binance_mcp_server/
├── binance_api.py # 核心REST API交互模块
├── binance_ws_api.py # WebSocket连接管理
├── commands/ # MCP命令定义
│ ├── __init__.py
│ ├── market_data.py # 价格/订单簿/历史数据命令
│ ├── market_info.py # 交易所信息和元数据命令
│ └── websocket_streams.py # WebSocket流命令
└── server.py # 主MCP服务器设置和初始化
# 检查是否可以到达Binance API
is_connected = ping_binance()
# 获取当前服务器时间(自纪元以来的毫秒数)
server_time = get_server_time()
# 获取比特币的当前价格
btc_price = get_price(symbol="BTCUSDT")
# 获取详细的24小时统计数据
btc_stats = get_24hr_ticker(symbol="BTCUSDT")
print(f"BTC价格变化: {btc_stats['priceChangePercent']}%")
print(f"BTC 24小时成交量: {btc_stats['volume']} BTC")
# 获取滚动窗口统计(4小时窗口)
btc_4h_stats = get_rolling_window_ticker(symbol="BTCUSDT", window_size="4h")
print(f"BTC 4小时价格变化: {btc_4h_stats['priceChangePercent']}%")
# 订阅实时交易更新
trade_sub = subscribe_to_trade_stream(symbol="BTCUSDT")
# 一段时间后,获取最新的交易数据
latest_trade = get_latest_stream_data(stream_name="btcusdt@trade")
print(f"最新交易价格: {latest_trade['data']['p']}")
# 订阅图表数据的蜡烛图更新
kline_sub = subscribe_to_kline_stream(symbol="ETHUSDT", interval="5m")
# 完成后清理
unsubscribe_from_stream(stream_name="btcusdt@trade")
unsubscribe_from_stream(stream_name="ethusdt@kline_5m")
有关已实现和计划的API端点的详细概述,请参阅API实现状态文档。
要添加新工具,在Binance API模块中创建适当的功能,然后作为MCP工具注册到一个命令模块中。
要支持认证API调用:
binance_api.py以包含身份验证server.py中注册新的命令本项目根据MIT许可证发布 - 详情见LICENSE文件。