加密货币数据服务

一个基于Python的加密货币市场数据服务,提供实时和历史数据,支持多交易所。

  • by PiyushGupta-45
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 PiyushGupta-45/Python-based-MCP-server

使用说明

加密货币MCP服务器

基于Python的模型上下文协议(MCP)服务器,用于使用CCXT从主要交易所检索实时和历史加密货币市场数据。

特性

  • 实时市场数据:获取任何交易对的当前价格、出价、要价和交易量
  • 历史数据:使用可定制的时间框架检索OHLCV(烛台)数据
  • 订单簿数据:访问买卖订单簿信息
  • 交易历史:获取任何交易对的最近交易
  • 多交换支持:与币安、Coinbase、Kraken、Bitfinex、火币、OKX和Bybit合作
  • 智能高速缓存:内置缓存层以减少API调用并提高性能
  • 速率限制:自动汇率限制,以遵守API汇率限制
  • 错误处理:强大的错误处理和日志记录
  • 综合测试:全面测试覆盖

支持的交易所

  • 币安
  • Coinbase
  • 海妖
  • Bitfinex
  • 火币
  • 欧易
  • Bybit

安装

  1. 克隆存储库:
git clone <repository-url>
cd inter
  1. 安装依赖项:
pip install -r requirements.txt

或者以开发模式安装:

pip install -e ".[dev]"
  1. (可选)通过创建 .env 文件:
BINANCE_API_KEY=your_api_key
BINANCE_SECRET=your_secret
COINBASE_API_KEY=your_api_key
COINBASE_SECRET=your_secret

注意:大多数公共端点不需要API密钥,但某些交易所可能对未经验证的请求有速率限制。

用法

快速开始

选项1:Web仪表板(建议用于测试)

python web_dashboard.py

然后打开http://localhost:5000在浏览器中查看和测试服务器。

选项2:MCP服务器(用于MCP客户端集成)

python run_server.py

服务器将通过stdio等待MCP客户端连接。

选项3:测试组件

python test_server_standalone.py

在没有完整服务器的情况下直接测试加密提供程序。

运行MCP服务器

重要:MCP服务器设计为通过stdio运行,需要MCP客户端连接。它将在stdin上等待MCP协议消息,并在stdout上响应。

启动服务器:

python -m src.server

或者使用入口点:

python run_server.py

服务器按照MCP协议通过stdio(标准输入/输出)进行通信。独立运行时,它将等待MCP客户端连接。

备注:如果服务器在独立运行几分钟后停止,这是正常行为。服务器正在等待MCP协议消息。要直接测试组件,请使用:

python test_server_standalone.py

Web仪表板

对于测试和监控服务器的可视化界面,请使用web仪表板:

python web_dashboard.py

然后打开http://localhost:5000在您的浏览器中。仪表板提供:

  • 服务器状态监控
  • 交互式工具测试
  • 实时数据可视化
  • 服务器信息显示

可用工具

服务器提供以下工具:

1. get_ticker

获取交易对的实时行情数据。

参数:

  • symbol (必填):交易对符号(例如,“BTC/USDT”、“ETH/USD”)
  • exchange (可选):交换名称(默认为“binance”)

例子:

{
  "symbol": "BTC/USDT",
  "exchange": "binance"
}

2. get_ohlcv

获取历史OHLCV(烛台)数据。

参数:

  • symbol (必填):交易对符号
  • timeframe (可选):时间范围(1m、5m、15m、1h、4h、1d、1w、1m)-默认值:“1h”
  • limit (可选):蜡烛数(默认值:100,最大值:1000)
  • since (可选):开始时间戳(毫秒)
  • exchange (可选):交换名称

例子:

{
  "symbol": "BTC/USDT",
  "timeframe": "1h",
  "limit": 100
}

3. get_orderbook

获取交易对的订单簿(买入和卖出)。

参数:

  • symbol (必填):交易对符号
  • limit (可选):订单数量(默认值:20,最大值:100)
  • exchange (可选):交换名称

例子:

{
  "symbol": "BTC/USDT",
  "limit": 20
}

4. get_trades

获取交易对的最近交易。

参数:

  • symbol (必填):交易对符号
  • limit (可选):交易次数(默认值:50,最大值:500)
  • since (可选):开始时间戳(毫秒)
  • exchange (可选):交换名称

例子:

{
  "symbol": "BTC/USDT",
  "limit": 50
}

5. get_markets

获取交易所的所有可用交易对。

参数:

  • exchange (可选):交换名称

例子:

{
  "exchange": "binance"
}

6. get_supported_exchanges

获取支持的交易所列表。

参数: 无

配置

配置可以通过环境变量或 .env 文件:

  • CACHE_TTL_SECONDS:缓存生存时间(秒)(默认值:60)
  • MAX_CACHE_SIZE:最大缓存条目数(默认值:1000)
  • RATE_LIMIT_REQUESTS_PER_SECOND:速率限制(默认值:10)
  • DEFAULT_EXCHANGE:默认交换名称(默认:“binance”)
  • BINANCE_API_KEY:币安API密钥(可选)
  • BINANCE_SECRET:币安API机密(可选)
  • COINBASE_API_KEY:Coinbase API密钥(可选)
  • COINBASE_SECRET:Coinbase API机密(可选)

测试

运行测试套件:

pytest

跑步覆盖:

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

运行特定测试文件:

pytest tests/test_cache.py

项目结构

inter/
├── src/
│   ├── __init__.py          # Package initialization
│   ├── server.py            # MCP server implementation
│   ├── crypto_provider.py   # CCXT-based data provider
│   ├── cache.py             # Caching layer
│   ├── config.py            # Configuration management
│   └── errors.py            # Custom error classes
├── tests/
│   ├── __init__.py
│   ├── conftest.py          # Pytest configuration
│   ├── test_cache.py        # Cache tests
│   ├── test_crypto_provider.py  # Provider tests
│   ├── test_server.py       # Server tests
│   └── test_config.py      # Config tests
├── requirements.txt         # Python dependencies
├── pyproject.toml          # Project configuration
└── README.md              # This file

建筑

组件

  1. MCP服务器 (src/server.py):实现MCP协议,处理工具注册和执行
  2. 加密货币提供商 (src/crypto_provider.py):包装CCXT库以从交易所获取数据
  3. 缓存层 (src/cache.py):实现基于TTL的缓存以减少API调用
  4. 配置 (src/config.py):管理应用程序设置和环境变量

设计模式

  • 异步/等待:所有I/O操作都是异步的,以获得更好的性能
  • 缓存:基于TTL的缓存减少了冗余的API调用
  • 速率限制:基于语义的速率限制可防止API滥用
  • 错误处理:使用自定义异常类进行全面的错误处理

最佳实践

  • 服务器对所有网络操作使用async/await
  • 实现缓存是为了最大限度地减少API调用并提高响应时间
  • 汇率限制防止超过API兑换限额
  • 所有组件都经过彻底测试
  • 代码遵循Python最佳实践和PEP 8风格指南

局限性

  • 某些交易所可能对未经身份验证的请求有速率限制
  • 历史数据可用性取决于交换
  • 并非所有交易所都支持所有时间范围
  • 缓存TTL应根据用例(实时数据与历史数据)进行调整

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 添加新功能的测试
  5. 确保所有测试通过
  6. 提交拉取请求

许可证

这个项目是开源的,可以在MIT许可证下使用。

致谢