使用说明
MCP加密货币市场数据服务器
基于Python MCP(市场沟通平台) 服务器构建于 快速API,提供:
- 实时加密货币价格
- 历史OHLCV(蜡烛)
- WebSocket实时更新
- 异步CCXT集成
- 内存缓存
- 结构化错误处理
- 全面的自动化测试
专为可靠性、模块化和可扩展性而设计。
🚀 特性
- REST API 获取当前和历史市场数据
- 双向通信 流式更新的端点
- 异步CCXT客户端(
ccxt.async_support) - TTL缓存 减少冗余交换呼叫
- 自定义异常+重试逻辑
- 带有模拟外部调用的测试套件
- 明确分离关注点(客户端/缓存/异常/模式)
📁 项目结构
mcp-python-server/
├── main.py
├── mcp/
│ ├── __init__.py
│ ├── client.py
│ ├── cache.py
│ ├── exceptions.py
│ └── schemas.py
├── tests/
│ ├── __init__.py
│ ├── conftest.py
│ ├── test_api.py
│ └── test_cache.py
├── requirements.txt
└── README.md
📦 安装
python -m venv venv
venv\Scripts\activate # Windows
# or
source venv/bin/activate # Linux/Mac
pip install -r requirements.txt
⚙️ 配置
环境变量:
| 名称 | 描述 | 默认值 |
|---|---|---|
CACHE_TTL |
缓存条目的TTL | 60秒 |
例子:
set CACHE_TTL=120 # Windows
export CACHE_TTL=120 # Linux/Mac
▶️ 运行服务器
uvicorn main:app --reload
访问权限:
- 大摇大摆→ http://localhost:8000/docs
- ReDoc→ http://localhost:8000/redoc
📡 REST API
健康检查
GET /health
响应
{"status": "ok"}
当前价格
GET /v1/price/current/{exchange}/{symbol}
有效的符号格式:
BTC/USDTBTC-USDTBTC_USDT
示例
/v1/price/current/binance/BTC/USDT
响应
{
"exchange": "binance",
"symbol": "BTC/USDT",
"price": 96321.45,
"timestamp": 1731694812000
}
历史OHLCV
GET /v1/price/historical/{exchange}/{symbol}
查询参数:
| 名称 | 描述 | 默认值 |
|---|---|---|
| 时间间隔 | 蜡烛时间 | 1小时 |
| 限制 | 蜡烛数量 | 100 |
| 自 | 开始时间戳(可选) | 无 |
响应
{
"exchange": "binance",
"symbol": "BTC/USDT",
"data": [
{
"timestamp": 1762873200000,
"open": 104560.15,
"high": 104560.15,
"low": 103170.33,
"close": 103455.99,
"volume": 2215.12756
}
]
}
🔄 Websocket API
WS /ws
订阅
{
"action": "subscribe",
"exchange": "binance",
"symbol": "BTC/USDT"
}
更新示例
{
"symbol": "BTC/USDT",
"last": 96251.40,
"timestamp": 1731694712000
}
🔌 WebSocket使用示例
使用任何WebSocket客户端(例如wscat):
wscat -c ws://localhost:8000/ws
订阅:
{
"action": "subscribe",
"exchange": "binance",
"symbol": "BTC/USDT"
}
💱 支持的交易所
- 币安
- Coinbase
- 海妖
- Bitfinex
- 火币
- 欧易
- Bybit
- Gate.io
- 库币
- 币赢
🧪 测试
pytest -q
所有CCXT调用都是模拟的——测试在没有互联网接入的情况下运行。
📘 方法和假设
- 服务器的设计采用了明确的模块化分离(客户端、缓存、异常、模式、API处理程序)。
- 所有交换调用都是异步的,并通过具有重试逻辑的专用CCXT客户端包装器进行路由。
- 测试模拟CCXT响应,以确保完全离线、确定性的测试执行。
- 由于交换机之间不同的原生WS支持,WebSocket流被简化为周期性轮询模型。
- 错误处理是标准化的,并通过自定义MCP异常公开。
🧩 技术设计说明
- 完全异步I/O
ccxt.async_support - 使用指数回退重试逻辑
- 符号规范化
BASE/QUOTE - 内存中TTL缓存以提高性能
- 清洁模块边界
- 强类型提示+Pydantic验证
