返回市场
加密-MCP服务器

加密-MCP服务器

作者:yogirajbshinde210 星标更新:2025-11-15

项目介绍

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

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

特性

  • 实时价格数据:获取当前价格、买/卖价差以及24小时统计数据
  • 历史OHLCV数据:获取可定制时间周期(1分钟到1个月)的蜡烛图数据
  • 多交易所支持:支持币安、Coinbase、Kraken、Bybit和OKX
  • 订单簿与交易:访问当前订单簿和最近的交易历史
  • 市场信息:浏览可用的交易对和交易所信息
  • 现代网页界面:基于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网页界面(推荐)

运行Flask网页应用:

python app.py

然后在浏览器中导航至:

http://127.0.0.1:5000

网页界面可用的功能:

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

方案2:MCP服务器

直接运行MCP服务器:

python -m src

方案3:演示客户端

运行命令行演示客户端:

python demo_client.py

选择:

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

API端点(Flask)

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/marketsGET获取市场信息
/api/exchangesGET列出支持的交易所
/api/exchange-status/<exchange>GET检查交易所状态

查询参数:

  • exchange:交易所名称(默认:binance)
  • timeframe:蜡烛图时间周期(针对历史数据)
  • limit:要获取的结果数量

示例API调用:

curl "http://1172.16.17.32: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库:由于其全面的交易所支持、统一的API跨100多个交易所以及强大的错误处理而被选中。

Flask Web框架:简单轻量级框架,非常适合构建RESTful API和服务网页界面。易于扩展和维护。

缓存策略

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

现代UI设计

  • 深色主题,带有渐变强调色,减轻眼睛疲劳
  • 响应式网格布局,适用于所有屏幕尺寸
  • 实时更新,带有AJAX,提供无缝体验
  • 买卖指示器颜色编码,便于快速视觉分析

项目结构

crypto_mcp_server/
├── app.py                   # Flask网页应用
├── demo_client.py           # 命令行演示客户端
├── setup.py                 # 包配置
├── requirements.txt         # Python依赖项
├── README.md               # 本文件
├── .gitignore              # Git忽略模式
├── src/
│   ├── __init__.py          # 包初始化
│   ├── __main__.py          # MCP服务器入口点
│   ├── server.py            # MCP服务器和工具定义
│   ├── exchange_client.py   # CCXT封装和交易所逻辑
│   ├── cache.py             # 缓存实用程序
│   └── utils.py             # 辅助函数和验证
├── templates/
│   └── index.html           # Flask网页界面模板
├── static/
│   ├── style.css            # CSS样式
│   └── script.js            # JavaScript交互
└── tests/
    ├── __init__.py          # 测试包初始化
    ├── conftest.py          # Pytest固定装置
    ├── test_server.py       # 服务器工具测试
    ├── test_exchange_client.py  # 交易所客户端测试
    ├── test_cache.py        # 缓存测试
    └── test_utils.py        # 辅助函数测试

MCP工具参考

工具描述缓存TTL
get_current_price实时价格和24小时统计数据30秒
get_historical_dataOHLCV蜡烛图数据5分钟
get_market_info可用的交易对5分钟
get_ticker_24h综合24小时统计数据30秒
get_order_book当前的买单和卖单10秒
get_recent_trades最近的交易历史5秒
list_supported_exchanges可用的交易所无缓存
check_exchange_status交易所健康检查无缓存

假设和限制

假设

  • API速率限制:缓存策略假设标准的交易所速率限制(币安每分钟1200次请求)
  • 网络可靠性:实现了基本的重试逻辑;假设网络一般稳定
  • 数据新鲜度:30秒缓存实时数据,在新鲜度和性能之间取得平衡
  • 现货市场:主要关注现货交易对(非期货/衍生品)

限制

  • 交易所覆盖:仅限于5个主要交易所(易于扩展)
  • 认证:没有私有API端点(只有公共市场数据)
  • 速率限制:基本的速率限制处理;没有复杂的节流机制
  • 持久化:仅内存缓存;重启后数据丢失
  • 并发:单线程缓存;高并发下可能需要锁

支持的交易所

  • 币安(默认)
  • Coinbase
  • Kraken
  • Bybit
  • OKX

数据新鲜度权衡

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

截图

网页界面特性:

  • 深色现代主题:带有渐变强调色,减轻眼睛疲劳
  • 响应式设计:适用于桌面、平板和移动设备
  • 实时更新:带有自动刷新的实时价格卡片
  • 交互图表:历史数据可视化
  • 订单簿可视化:并排显示买单和卖单
  • 交易流:颜色编码的买卖指示器
  • 市场浏览器:浏览所有可用的交易对

许可

此项目作为教育和演示用途提供。

贡献

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

  • 添加私有端点的认证
  • 实现Redis进行分布式缓存
  • 添加WebSocket支持以实现实时流
  • 增强速率限制处理
  • 添加更复杂的图表,如Chart.js或D3.js