加密货币数据服务

Binance MCP Server是一个将Binance加密货币交易所数据暴露给大型语言模型(LLM)代理的服务器,提供实时和历史市场数据的标准化接口。

  • by tienan92it
  • Python
  • 混合部署
  • 21 星标
  • 更新于
在 GitHub 查看 tienan92it/binance-mcp

使用说明

币安MCP服务器

一种模型上下文协议(MCP)服务器,将币安加密货币交换数据暴露给大型语言模型(LLM)代理。该服务器允许LLM通过标准化接口从币安访问实时和历史市场数据。

特性

  • 实时价格数据:获取币安上任何交易对的当前价格
  • 订单簿访问:检索显示不同价格水平买入/卖出兴趣的订单簿快照
  • 历史价格数据:获取任何时间段的OHLCV(开盘、高、低、收盘、成交量)烛台数据
  • 实时WebSocket流:通过WebSockets订阅实时交易、股票行情和订单簿更新
  • 综合市场数据:访问交易、24小时统计数据、汇总交易、滚动窗口数据等
  • 交流信息:访问交易规则、交易品种信息和费用结构
  • 只读操作:所有数据都是通过Binance的公共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

用法

直接运行服务器

要在独立模式下运行服务器,请执行以下操作:

python run_server.py

这将启动MCP服务器,它将通过STDIO监听连接。

MCP Inspector开发模式

对于开发和测试,请使用MCP检查器:

mcp dev run_server.py

这将打开MCP检查器界面,您可以在其中交互式地测试服务器的工具。

在Claude Desktop中安装

要将此服务器与Claude Desktop一起使用,请执行以下操作:

  1. 如果您还没有安装MCP CLI工具,请安装:
pip install "mcp[cli]"
  1. 在Claude Desktop中安装服务器:
mcp install run_server.py
  1. 现在,您可以在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调用,请执行以下操作:

  1. 修改 binance_api.py 包括身份验证
  2. 为交易操作创建其他命令模块
  3. 在中注册新命令 server.py

故障排除

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

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

致谢

  • Binance提供全面的公共API
  • 用于标准化LLM工具交互的MCP项目