加密货币市场数据服务器

一个基于Python的MCP服务器,用于从主要交易所获取实时和历史加密货币市场数据,提供Flask网页界面和API端点。

  • by yogirajbshinde21
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 yogirajbshinde21/crypto-mcp-server

使用说明

加密货币市场数据MCP服务器

一个生产就绪的Python MCP(模型上下文协议)服务器,用于使用CCXT库从主要交易所检索实时和历史加密货币市场数据。 现在有了现代的Flask网络界面!

特性

  • 实时价格数据:获取当前价格、买卖价差和24小时统计数据
  • 历史OHLCV数据:使用可定制的时间范围(1m到1m)获取烛台数据
  • 多交换支持:与币安、Coinbase、Kraken、Bybit和OKX合作
  • 订单簿和交易:访问当前订单簿和最近的交易历史
  • 市场信息:浏览可用的交易对和交易所信息
  • 现代Web界面:基于Flask的漂亮仪表板,可可视化所有数据
  • 智能高速缓存:使用基于TTL的缓存减少API调用(实时30秒,历史5分钟)
  • 稳健的错误处理:网络故障恢复、速率限制管理和优雅降级
  • 综合测试:单元和集成测试的测试覆盖率超过80%

安装和设置

需求

  • Python 3.8或更高版本
  • pip包管理器

安装步骤

  1. 创建并激活虚拟环境:
python -m venv venv
.\venv\Scripts\Activate.ps1
  1. 安装依赖项:
pip install -r requirements.txt
  1. 在开发模式下安装软件包:
pip install -e .

用法

选项1:Flask Web界面(推荐)

运行Flask web应用程序:

python app.py

然后打开浏览器并导航到:

http://127.0.0.1:5000

Web界面中可用的功能:

  • 📊 主要加密货币的快速价格仪表板
  • 🔍 24小时详细统计的符号查找
  • 📈 历史烛台数据可视化
  • 📖 带有买卖价差的实时订单簿
  • 💱 最近的交易流具有自动刷新功能
  • 🏪 浏览所有可用的交易对
  • 🔄 在交易所之间切换(币安、Coinbase、Kraken等)
  • ⚡ 具有自动刷新选项的实时更新

选项2:MCP服务器

直接运行MCP服务器:

python -m src

选项3:演示客户端

运行命令行演示客户端:

python demo_client.py

从以下选项中选择:

  1. 快速价格查询(5种主要硬币)
  2. 全功能演示(全部8个工具)
  3. 两者

API终点(烧瓶)

Flask应用程序提供RESTful API端点:

端点 方法 描述
/ GET 主仪表板(HTML)
/api/price/<symbol> GET 获取当前价格
/api/historical/<symbol> GET 获取历史OHLCV数据
/api/ticker/<symbol> GET 获取24小时股票行情统计信息
/api/orderbook/<symbol> GET 获取订单簿
/api/trades/<symbol> GET 获取最近的交易
/api/markets 获取 获取市场信息
/api/exchanges GET 列出支持的交易所
/api/exchange-status/<exchange> GET 检查交换状态

查询参数:

  • exchange:Exchange名称(默认值:binance)
  • timeframe:蜡烛时间框架(用于历史数据)
  • limit:要获取的结果数

API调用示例:

curl "http://127.0.0.1:5000/api/price/BTC/USDT?exchange=binance"

测试

运行所有测试:

pytest

运行覆盖率报告:

pytest --cov=src --cov-report=html --cov-report=term

运行特定测试文件:

pytest tests/test_server.py -v

测试覆盖率

测试套件包括:

  • 单元测试:使用模拟依赖关系进行单个功能测试
  • 集成测试:端到端流量测试
  • 边缘情况:无效输入、网络故障、速率限制
  • 覆盖:所有模块80%以上

架构概述

设计决策

CCXT库:因其全面的交易所支持、100多个交易所的统一API和强大的错误处理而被选中。

Flask Web框架:简单、轻量级的框架,非常适合构建RESTful API和提供web界面。易于扩展和维护。

缓存策略:

  • 实时数据(价格、交易):5-30秒TTL,以平衡新鲜度和API限制
  • 历史数据:5分钟TTL,因为历史数据更改频率较低
  • 市场信息:5分钟TTL,因为可用配对不经常更改
  • 使用基于TTL的过期使用简单的内存缓存实现

现代UI设计:

  • 深色主题搭配渐变色调,减轻眼部疲劳
  • 适用于所有屏幕尺寸的响应式网格布局
  • 使用AJAX进行实时更新,实现无缝体验
  • 颜色编码的买入/卖出指标,用于快速视觉分析

项目结构

crypto_mcp_server/
├── app.py                   # Flask web application
├── demo_client.py           # Command-line demo client
├── setup.py                 # Package configuration
├── requirements.txt         # Python dependencies
├── README.md               # This file
├── .gitignore              # Git ignore patterns
├── src/
│   ├── __init__.py          # Package initialization
│   ├── __main__.py          # MCP server entry point
│   ├── server.py            # MCP server and tool definitions
│   ├── exchange_client.py   # CCXT wrapper and exchange logic
│   ├── cache.py             # Caching utilities
│   └── utils.py             # Helper functions and validation
├── templates/
│   └── index.html           # Flask web interface template
├── static/
│   ├── style.css            # CSS styling
│   └── script.js            # JavaScript for interactivity
└── tests/
    ├── __init__.py          # Test package initialization
    ├── conftest.py          # Pytest fixtures
    ├── test_server.py       # Server tool tests
    ├── test_exchange_client.py  # Exchange client tests
    ├── test_cache.py        # Caching tests
    └── test_utils.py        # Utility function tests

MCP工具参考

工具 描述 缓存TTL
get_current_price 实时价格和24小时统计 30秒
get_historical_data OHLCV烛台数据 5分钟
get_market_info 可用交易对 5分钟
get_ticker_24h 24小时综合统计 30s
get_order_book 当前出价和要价 10s
get_recent_trades 最近的交易历史 5s
list_supported_exchanges 可用交换 无缓存
check_exchange_status Exchange运行状况检查 无缓存

假设与限制

假设

  • API费率限制:缓存策略假定标准汇率限制(币安为1200 req/min)
  • 网络可靠性:实现了基本重试逻辑;假设网络总体稳定
  • 数据新鲜度:用于实时数据的30秒缓存平衡了新鲜度和性能
  • 现货市场:主要关注现货交易对(非期货/衍生品)

局限性

  • 交易所覆盖范围:仅限于5个主要交易所(易于扩展)
  • 认证:没有专用API端点(仅公开市场数据)
  • 速率限制:基本费率限额处理;没有复杂的节流
  • 持久性:仅限内存缓存;重启时数据丢失
  • 并发:单线程缓存;可能需要锁来实现高并发

支持的交易所

  • 币安(默认)
  • Coinbase
  • 海妖
  • Bybit
  • 欧易

数据新鲜度权衡

  • 实时价格缓存30秒(新鲜度和API限制之间的平衡)
  • 历史数据缓存5分钟(历史数据很少更改)
  • 订单簿缓存10秒(反映快速的市场变化)
  • 最近交易缓存5秒(时间最敏感的数据)

截图

web界面功能:

  • 黑暗现代主题:渐变色调,易于入眼
  • 响应式设计:适用于台式机、平板电脑和移动设备
  • 实时更新:具有自动刷新功能的实时价格卡
  • 交互式图表:历史数据可视化
  • 订单簿可视化:并排出价/要价显示
  • 贸易流:颜色编码的买入/卖出指标
  • 市场浏览器:浏览所有可用的交易对

许可证

本项目按原样提供,用于教育和示范目的。

贡献

这是一个示范项目。对于生产使用,请考虑:

  • 为私有端点添加身份验证
  • 实现Redis分布式缓存
  • 为实时流媒体添加WebSocket支持
  • 加强限速处理
  • 使用Chart.js或D3.js添加更复杂的图表