加密货币市场数据服务器

一个基于Python的MCP兼容加密货币市场数据服务器,提供实时行情、历史数据、WebSocket流式更新等功能,适用于加密货币交易平台和数据分析场景。

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

使用说明

MCP加密市场数据服务器

基于Python MCP兼容加密市场数据服务器 它提供:

  • 实时行情数据
  • 历史OHLCV数据
  • WebSocket流媒体更新
  • Exchange+符号发现
  • 缓存、重试逻辑和错误处理
  • 使用CCXT的干净架构
  • 自动后台轮询(FastAPI启动循环)
  • 测试套件(pytest)

该项目是作为加密数据平台的实习任务而构建的,并遵循良好的后端/API实践。


🚀 特性

1.实时市场数据(Ticker)

使用CCXT从主要交易所获取实时价格信息。

GET /api/fetch/ticker?exchange=binance&symbol=BTC/USDT

包括:

  • 自动重试(韧性)
  • 缓存(cachetools TTLCache)
  • 错误处理

2.历史数据(OHLCV)

检索烛台数据:

GET /api/historical?exchange=binance&symbol=BTC/USDT&timeframe=1m

3.WebSocket实时流媒体

订阅实时更新:

ws://localhost:8000/ws/ticker/binance/BTC/USDT

后台任务轮询交换并向连接的WS客户端广播更新。


4.公用设施端点

列出支持的交易所:

GET /api/exchanges

列出支持的符号:

GET /api/symbols?exchange=binance

5.背景广播

启动时,FastAPI会启动一个无限异步循环,轮询活动订阅并通过WebSocket推送更新。


📂 项目结构

mcp-crypto-server/
├── app/
│   ├── main.py
│   ├── api.py
│   ├── ccxt_client.py
│   ├── cache.py
│   ├── broadcaster.py
│   ├── config.py
│   ├── utils.py
│   └── __init__.py
├── tests/
│   ├── test_api.py
│   ├── test_ws.py
│   ├── test_cache.py
│   ├── test_broadcaster.py
│   └── conftest.py
├── .gitignore
├── requirements.txt
├── pytest.ini
└── README.md

🛠 安装

1.克隆存储库

git clone https://github.com/meetkavad/mcp-crypto-server
cd mcp-crypto-server

2.创建并激活虚拟环境

python -m venv env
source env/bin/activate     # macOS/Linux
env\Scripts\activate       # Windows

3.安装依赖项

pip install -r requirements.txt

▶️ 运行服务器

选项A——使用Python(推荐)

创建 run.py:

import uvicorn
uvicorn.run("app.main:app", host="127.0.0.1", port=8000, reload=True)

运行:

python run.py

📡 API终点

健康检查

GET /

取票

GET /api/fetch/ticker?exchange=binance&symbol=BTC/USDT

历史OHLCV

GET /api/historical?exchange=binance&symbol=BTC/USDT&timeframe=1m

列表交换

GET /api/exchanges

列出符号

GET /api/symbols?exchange=binance

🔌 WebSocket流媒体

ws://127.0.0.1:8000/ws/ticker/binance/BTC/USDT

您将定期收到JSON更新。


🧪 测试

运行:

pytest -q

测试包括:

  • API终点测试
  • 缓存测试
  • WebSocket测试
  • 背景广播测试(模拟)