加密货币市场数据API

MCP Server是一个高性能的Python服务器,提供实时和历史加密货币市场数据的API,支持多种交易所。

  • by Ishagupta145
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Ishagupta145/mcp_server

使用说明

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

该项目是一个高性能Python服务器,提供了一个干净、强大的API,用于从主要交易所获取实时和历史加密货币市场数据。

它是用FastAPI为异步网络服务器和CCXT构建的,用于统一API对数百个加密货币交易所的访问。

核心功能

实时数据:获取最新的股票价格和交易量。

历史数据:获取具有自定义时间框架、开始时间和限制的OHLCV(烛台)数据。

缓存:缓存实时数据(默认60秒),以减少API垃圾邮件并缩短响应时间。

Async First:完全使用Async/await构建,用于高并发I/O操作。

稳健的错误处理:返回错误符号、交换错误或网络问题的干净JSON错误消息。

数据验证:使用Pydantic模型进行请求和响应验证。

经过广泛测试:包括使用pytest的全套单元和集成测试。

设置和运行

  1. 先决条件

Python 3.10+

版本控制系统

  1. 本地设置

克隆存储库:

克隆 https://github.com/Ishagupta145/mcp_server.git cd mcp服务器

创建并激活虚拟环境:

在macOS/Linux上

python3-m venv-venv 源venv/bin/activate

在Windows上

python-m venv-venv .\venv\Scripts\activate

安装所需的软件包:

pip安装-r要求.txt

  1. 运行服务器

您可以直接使用uvicorn运行服务器,它将在代码更改时自动重新加载。

uvicorn src.mcp_server.main:应用程序--reload

服务器将在以下时间运行http://127.0.0.1:8000.

  1. 运行测试

要验证应用程序及其组件,请使用pytest运行测试套件。

pytest

API终点

服务器运行后,您可以访问以下位置访问交互式API文档:

http://127.0.0.1:8000/docs

  1. 获取实时票务数据

获取最新的股票行情数据。结果将缓存60秒。

GET/ticker/{符号}

路径参数:

symbol(str):交易对(例如btc-usdt,eth-btc)。

查询参数:

exchange(str,可选):交换ID(例如binance、kraken)。 默认为binance。

请求示例: 获取http://127.0.0.1:8000/ticker/btc-usdt?交易所=coinbasepro

成功响应示例(200):

{ “符号”:“BTC/USDT”, “时间戳”:1678886400000, “日期时间”:“2023-03-15T12:00:00.000Z”, “最后”:25000.50, “体积”:1204.75 }

错误响应示例(404):

{ “message”:“在coinbasepro上找不到符号'BAD/symbol'。” }

  1. 获取历史烛台数据

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

GET/历史/{符号}

路径参数:

symbol(str):交易对(例如btc-usdt)。

查询参数:

timeframe(str,可选):蜡烛持续时间。默认值:1h。 (例如,1m、5m、1h、1d、1w)。

since(int,可选):以毫秒级Unix时间戳表示的开始时间。

limit(int,可选):要获取的蜡烛数量。默认值:100。

exchange(str,可选):交换ID。默认值:binance。

请求示例: 获取http://127.0.0.1:8000/historical/eth-美元?时间框架=1d,限额=5,交易所=kraken

成功响应示例(200):

[ { “时间戳”:1678838400000, “开放”:1650.1, “高”:1720.5, “低”:1645.0, “关闭”:1715.3, “体积”:8500.2 }, { “时间戳”:1678924800000, “开放”:1715.3, “高”:1740.0, “低”:1701.8, “关闭”:1725.0, “音量”:7900.0 } ]

假设和设计决策

CCXT与CoinMarketCap:我选择CCXT是因为请求中提到从“主要交易所”(复数)检索数据。CCXT是一个直接与数百个交易所交互的库,而CoinMarketCap是一个单一的(尽管是全面的)数据聚合器。CCXT提供了更大的灵活性。

符号规范化:API假设符号将以友好的格式传递,如btc-usdt或ETH-USD。它在内部将其标准化为CCXT要求的BTC/USDT格式。

缓存策略:只缓存实时/自动收报机数据。历史数据不是时间帧的组合,因为和限制对于简单的内存缓存来说太多了。一个更强大的解决方案是使用Redis处理历史数据。

异步连接:crypto_service在每次API调用后都会小心地调用wait-exchange.colose()。这在异步环境中对于关闭底层httpx会话和防止资源泄漏至关重要。

交易量:/ticker端点返回baseVolume(例如,BTC/USDT对的BTC交易量),并将其映射到响应中的交易量字段,因为这是用户最常见的期望。