加密货币数据服务

一个提供Binance加密货币交易所实时和历史市场数据的MCP服务器,通过标准化接口为大型语言模型代理提供数据访问。

  • by Mihir-Fluxbyte
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Mihir-Fluxbyte/binance-mcp

使用说明

币安MCP服务器

一个模型上下文协议(MCP)服务器,用于向大型语言模型(LLM)代理提供币安加密货币交易所的数据。该服务器使LLM能够通过标准化接口访问币安的实时和历史市场数据。

特点/特性

  • 实时价格数据获取Binance上任意交易对的当前价格
  • 订单簿访问获取订单簿快照,显示不同价格水平上的买入/卖出兴趣
  • 历史价格数据获取任意时间框架的OHLCV(开盘价、最高价、最低价、收盘价、成交量)K线数据
  • 实时WebSocket流通过WebSockets订阅实时交易、行情和订单簿更新
  • 全面的市场数据访问交易数据、24小时统计数据、聚合交易、滑动窗口数据等更多信息
  • 交换信息访问交易规则、符号信息和费用结构
  • 只读操作所有数据均通过币安的公开REST API获取(无需API密钥)
  • 符合MCP标准与任何MCP兼容的LLM客户端均可配合使用

要求

  • Python 3.8及以上版本
  • mcp 包含CLI工具的软件包(mcp[cli])
  • requests REST API库
  • websockets WebSocket 流库
  • uvicorn 用于盛装(可选)

安装

  1. 克隆此存储库:
git clone https://github.com/yourusername/binance_mcp_server.git
cd binance_mcp_server
  1. 安装依赖项:
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中使用此服务器:

  1. 如果您尚未安装,请安装MCP CLI工具:
pip install "mcp[cli]"
  1. 在Claude桌面端安装服务器:
mcp install run_server.py

来自 n8n 的 http://host.docker.internal:8000/mcp

  1. 现在,您可以直接在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调用:

  1. 修改 binance_api.py 以包含身份验证
  2. 为交易操作创建额外的命令模块
  3. 在(相应位置)注册新命令 server.py

故障排除

  • 连接问题在尝试与客户端连接之前,请确保服务器正在运行
  • 速率限制币安可能会对过多的API调用进行速率限制;建议在高流量部署时考虑实现缓存
  • WebSocket稳定性WebSocket 连接可能在24小时后断开(Binance限制);服务器将尝试自动重新连接
  • 数据格式不同的符号或间隔可能会以略有不同的格式返回数据

许可证

此项目采用MIT许可证授权——详见LICENSE文件。

致谢

  • 币安,感谢提供全面的公共API
  • 标准化大型语言模型(LLM)工具交互的MCP项目