Binance MCP Server

by tienan92it
Verified

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

Integrations

  • Provides real-time and historical cryptocurrency market data from Binance, including current prices, order book snapshots, OHLCV candlestick data, and exchange information like trading rules and fee structures.

币安MCP服务器

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

特征

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

要求

  • Python 3.8+
  • 带有 CLI 工具的mcp软件包 ( mcp[cli] )
  • requests REST API 库
  • 用于 WebSocket 流的websockets
  • 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 Inspector:

mcp dev run_server.py

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

在 Claude Desktop 中安装

要将此服务器与 Claude Desktop 一起使用:

  1. 如果尚未安装 MCP CLI 工具,请安装它:
pip install "mcp[cli]"
  1. 在 Claude Desktop 中安装服务器:
mcp install run_server.py
  1. 您现在可以在 Claude Desktop 对话中直接访问 Binance 数据。

示例客户端

提供了一个示例客户端脚本来演示编程用法:

python example_client.py

该脚本连接到服务器并检索各种类型的市场数据。

可用工具

连接和基本信息

  • ping_binance() :测试与币安 API 服务器的连接
    • 例如: ping_binance()
  • get_server_time() :从币安获取当前服务器时间
    • 例如: 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)
    • 有效间隔:“1m”、“3m”、“5m”、“15m”、“30m”、“1h”、“2h”、“4h”、“6h”、“8h”、“12h”、“1d”、“3d”、“1w”、“1M”
  • get_ui_klines(symbol, interval="1d", limit=100) :获取 UI 优化的 K 线数据
    • 例如: 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() :获取默认交易费率(注意:出于演示目的,返回默认公开费用)

WebSocket 流

  • subscribe_to_trade_stream(symbol) :订阅实时交易事件
    • 例如: subscribe_to_trade_stream(symbol="BTCUSDT")
  • subscribe_to_kline_stream(symbol, interval="1m") : 订阅 K 线/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 # 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 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。

致谢

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