使用说明
币安MCP服务器
一种模型上下文协议(MCP)服务器,将币安加密货币交换数据暴露给大型语言模型(LLM)代理。该服务器允许LLM通过标准化接口从币安访问实时和历史市场数据。
特性
- 实时价格数据:获取币安上任何交易对的当前价格
- 订单簿访问:检索显示不同价格水平买入/卖出兴趣的订单簿快照
- 历史价格数据:获取任何时间段的OHLCV(开盘、高、低、收盘、成交量)烛台数据
- 实时WebSocket流:通过WebSockets订阅实时交易、股票行情和订单簿更新
- 综合市场数据:访问交易、24小时统计数据、汇总交易、滚动窗口数据等
- 交流信息:访问交易规则、交易品种信息和费用结构
- 只读操作:所有数据都是通过Binance的公共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
用法
直接运行服务器
要在独立模式下运行服务器,请执行以下操作:
python run_server.py
这将启动MCP服务器,它将通过STDIO监听连接。
MCP Inspector开发模式
对于开发和测试,请使用MCP检查器:
mcp dev run_server.py
这将打开MCP检查器界面,您可以在其中交互式地测试服务器的工具。
在Claude Desktop中安装
要将此服务器与Claude Desktop一起使用,请执行以下操作:
- 如果您还没有安装MCP CLI工具,请安装:
pip install "mcp[cli]"
- 在Claude Desktop中安装服务器:
mcp install run_server.py
- 现在,您可以在Claude Desktop对话中直接访问币安数据。
客户端示例
提供了一个示例客户端脚本来演示编程用法:
python example_client.py
此脚本连接到服务器并检索各种类型的市场数据。
可用工具
连接和基本信息
-
ping_binance():测试与Binance API服务器的连接
- 例子:
ping_binance()
- 例子:
-
get_server_time():从币安获取当前服务器时间
- 例子:
get_server_time()
- 例子:
市场数据
-
get_price(符号):获取交易对的当前价格
- 例子:
get_price(symbol="BTCUSDT")
- 例子:
-
get_order_book(符号,深度=10):获取当前订单簿
- 例子:
get_order_book(symbol="ETHUSDT", depth=5)
- 例子:
-
历史价格(符号,区间=“1d”,限制=100):获取历史OHLCV数据
- 例子:
get_historical_prices(symbol="BTCUSDT", interval="1h", limit=24) - 有效间隔:“1m”、“3m”、“5m”、“15mm”、“30m”、“1h”、“2h”、“4h”、“6h”、“8h”、“12h”、“1d”、“3d”、“1w”、“1m”
- 例子:
-
get_uiklines(符号,间隔=“1d”,限制=100):获取UI优化的烛台数据
- 例子:
get_ui_klines(symbol="BTCUSDT", interval="1h", limit=24)
- 例子:
-
get_recent_trades(符号,限制=20):获取某个交易品种的最新交易
- 例子:
get_recent_trades(symbol="BTCUSDT", limit=50)
- 例子:
-
get_historical_trades(交易品种,限制=20,from_id=无):获取旧交易品种
- 例子:
get_historical_trades(symbol="BTCUSDT", limit=100, from_id=12345)
- 例子:
-
get_aggregate_trades(符号,限制=20):获取压缩/汇总交易
- 例子:
get_aggregate_trades(symbol="ETHUSDT", limit=30)
- 例子:
-
get_24hr_ticker(符号):获取24小时价格变化统计数据
- 例子:
get_24hr_ticker(symbol="BNBUSDT")
- 例子:
-
get_all_24hr_tickers():获取所有交易品种的24小时统计数据
- 例子:
get_all_24hr_tickers()
- 例子:
-
get_trading_day_ticker(符号,类型=“FULL”):获取交易日价格变化统计数据
- 例子:
get_trading_day_ticker(symbol="BTCUSDT", type="FULL")
- 例子:
-
get_all_trading_day_tickers(类型=“FULL”):获取所有交易品种的交易日统计数据
- 例子:
get_all_trading_day_tickers(type="MINI")
- 例子:
-
get_rolling_indow_ticker(符号,窗口大小=“1d”,类型=“FULL”):获取滚动窗口价格统计信息
- 例子:
get_rolling_window_ticker(symbol="BTCUSDT", window_size="4h")
- 例子:
-
get_all_rolling_indow_tickers(窗口大小=“1d”,类型=“FULL”):获取所有符号的滚动窗口统计信息
- 例子:
get_all_rolling_window_tickers(window_size="4h", type="MINI")
- 例子:
-
get_average_price(符号):获取当前平均价格(5分钟加权平均)
- 例子:
get_average_price(symbol="BTCUSDT")
- 例子:
-
get_book_ticker(符号):获得最佳出价/要价和数量
- 例子:
get_book_ticker(symbol="ETHBTC")
- 例子:
-
get_all_book_tickers():获得所有符号的最佳出价/要价
- 例子:
get_all_book_tickers()
- 例子:
市场行情
-
get_exchange_info():获取全面的交易所信息,包括交易规则和交易品种列表
-
get_trading_fees():获取默认交易费率(注意:出于演示目的,返回默认公共费用)
WebSocket流
-
subscribe_to_trade_stream(符号):订阅实时交易活动
- 例子:
subscribe_to_trade_stream(symbol="BTCUSDT")
- 例子:
-
subscribe_to_kline_stream(符号,间隔=“1m”):订阅烛台/kline更新
- 例子:
subscribe_to_kline_stream(symbol="BTCUSDT", interval="5m")
- 例子:
-
subscribe_to_ticker_stream(符号):订阅24小时股票行情更新
- 例子:
subscribe_to_ticker_stream(symbol="ETHUSDT")
- 例子:
-
subscribe_tobook_ticker_stream(符号):订阅最佳出价/要价更新
- 例子:
subscribe_to_book_ticker_stream(symbol="BNBUSDT")
- 例子:
-
subscribe_to_deth_stream(符号,级别=10):订阅订单更新
- 例子:
subscribe_to_depth_stream(symbol="BTCUSDT", levels=5)
- 例子:
-
list_active_subscriptions():列出所有活动的WebSocket订阅
- 例子:
list_active_subscriptions()
- 例子:
-
get_latest_stream_data(流名称):从流中获取最新数据
- 例子:
get_latest_stream_data(stream_name="btcusdt@trade")
- 例子:
-
unsubscribe_from_stream(stream_name):取消订阅流
- 例子:
unsubscribe_from_stream(stream_name="btcusdt@kline_1m")
- 例子:
-
cleanup_alstreams():关闭所有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小时后断开(币安限制);服务器将尝试自动重新连接
- 数据格式:不同的符号或间隔可能会以略有不同的格式返回数据
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
致谢
- Binance提供全面的公共API
- 用于标准化LLM工具交互的MCP项目