该项目提供了一个模型上下文协议(MCP)服务器,该服务器将CCXT库中的各种函数作为大型语言模型(LLMs)的工具公开。
它允许LLMs以标准化和异步的方式与加密货币交易所进行交互,执行诸如获取余额、市场数据、创建订单等任务。
此服务器使用FastMCP构建,简化了在Python中创建MCP服务器的过程。
asyncio和ccxt.async_support构建,实现高效的非阻塞操作。typing.Annotated和pydantic.Field来明确参数描述和约束,使LLMs(以及开发者)更容易理解和使用这些工具。克隆仓库(如果尚未克隆):
git clone https://github.com/jcwleo/ccxt-mcp-server.git
cd ccxt-mmcp-server
创建并激活虚拟环境(推荐):
python -m venv .venv
source .venv/bin/activate # 在Windows上使用`.venv\Scripts\activate`
安装依赖项:
所需的库列在requirements.txt中。你可以使用pip或uv来安装它们。
pip:
pip install -r requirements.txt
uv(如果已安装):
uv pip install -r requirements.txt
# 或者,如果你更喜欢使用uv的环境管理:
# uv sync
一旦安装了依赖项,你可以直接运行MCP服务器:
uv run uvicorn mcp_server:app
你应该会看到类似以下的输出,表明服务器已启动:
正在启动 CCXT MCP 服务器(异步且带有注解参数和工具元数据)...
# ... (FastMCP 服务器启动日志)
然后,服务器将可供MCP客户端连接(通常默认由FastMCP管理的端口,除非另有配置)。
如果你使用的是需要手动配置服务器的MCP客户端(如Claude桌面应用),你需要提供类似于以下JSON的配置。
创建一个claude_desktop_config.json文件(或等效于你的MCP客户端的文件),其结构如下:
{
"mcpServers": {
"ccxt-mcp-server": {
"command": "npx",
"args": ["mcp-remote", "http://127.0.0.1:8000/mcp/"]
}
}
}
此配置告诉你的MCP客户端如何启动并与CCXT MCP服务器通信。
此服务器公开了以下工具,按是否需要API认证分类。
fetch_account_balance:获取当前账户余额。fetch_deposit_address:获取货币的存款地址。withdraw_cryptocurrency:将加密货币提现到指定地址。fetch_open_positions:获取开放仓位(主要用于期货/衍生品)。set_trading_leverage:设置交易符号的杠杆(主要用于期货)。create_spot_limit_order:下单新的现货限价单。create_spot_market_order:下单新的现货市价单。create_futures_limit_order:下单新的期货限价单。create_futures_market_order:下单新的期货市价单。cancel_order:取消现有的开放订单。fetch_order_history:获取订单历史(开放/关闭)。fetch_my_trade_history:获取用户执行的交易历史。fetch_ohlcv:获取历史OHLCV(蜡烛图)数据。fetch_funding_rate:获取永续期货合约的资金费率。fetch_long_short_ratio:获取多空比(需要交易所特定的params)。fetch_option_contract_data:获取期权合约的市场数据。fetch_market_ticker:获取符号的最新价格行情数据。fetch_public_market_trades:获取符号的最近公开交易。calculate_technical_indicator_tool:获取OHLCV数据并计算指定的技术指标(例如RSI、SMA、EMA、MACD、布林带、随机振荡器、真实波动幅度平均值(ATR))。每个工具都有详细的参数描述,可以通过MCP协议本身获得,这得益于Annotated和pydantic.Field的使用。
fetch_open_positions、create_futures_limit_order、fetch_funding_rate)时,请确保通过params参数正确配置CCXT客户端,特别是传递{'options': {'defaultType': 'future'}}(或'swap'、'option',根据需要)如果交易所需要或者不默认为所需的市场类型。fetch_long_short_ratio:这不是CCXT统一的方法。你必须在params参数中提供具体的交易所方法名称及其参数(例如,对于Binance期货,params={'method_name': 'fapiPublicGetGlobalLongShortAccountRatio', 'method_params': {'symbol': 'BTCUSDT', 'period': '5m'}})。"error"键的字典。