内容
# trading212-mcp
Trading 212 公共 API 的 MCP 服务器 —
Invest 和 Stocks ISA 账户的股票和 ETF 投资。它将账户、投资组合、订单、投资组合和历史记录等端点作为 MCP 工具公开,默认为演示(模拟交易)环境,除非明确启用,否则隐藏交易工具。
## 功能
- 读取整个公共 API 的覆盖范围:账户摘要、交易品种、交易所时间表、开仓、挂单、投资组合、历史订单、股息、现金交易和 CSV 导出。
- 交易工具(订单放置/取消、投资组合管理、导出请求)通过环境标志选择启用,否则对 MCP 客户端不可见。
- 默认演示环境;实时环境为明确选择。
- 响应被修剪为交易者操作的字段,列表工具接受 `limit` 参数以保持负载小。
- HTTP 429 自动重试一次,遵守 `Retry-After` 头部,限制在 30 秒内(Trading 212 速率限制严格且按端点)。
- 默认stdio传输,根据请求使用HTTP(/mcp)。
## 工具
读取工具(始终注册):
| 工具 | 描述 |
|---|---|
| `get_account_summary` | 账户摘要:现金明细、投资和整体结果 |
| `list_exchanges` | 交易所及其交易时间表,修剪至开/闭市事件 |
| `list_instruments` | 按股票代码/名称子字符串和类型搜索可交易的交易品种 |
| `get_portfolio` | 列出所有开仓的仓位,包含数量、价格和未实现盈亏 |
| `get_position` | 通过 Trading 212 股票代码获取单个开仓仓位 |
| `list_orders` | 列出所有待处理的股票订单 |
| `get_order` | 通过 ID 获取一个待处理的股票订单 |
| `list_pies` | 列出所有投资组合,包含投入资金、进度和表现 |
| `get_pie` | 获取一个投资组合的完整定义和每个交易品种的明细 |
| `list_historical_orders` | 列出已执行的股票订单,最新的在前(光标分页) |
| `list_dividends` | 列出已支付的股息(光标分页) |
| `list_transactions` | 列出现金交易:存款、取款、费用、转账(光标分页) |
| `list_exports` | 列出请求的 CSV 导出报告及其处理状态 |
写入工具(仅在 `T212_MCP_ENABLE_TRADING` 为真时注册):
| 工具 | 描述 |
|---|---|
| `place_market_order` | 放置市场订单(正数量 = 买入,负数量 = 卖出) |
| `place_limit_order` | 放置限价订单,包含限价和 DAY/GTC 有效期 |
| `place_stop_order` | 放置止损订单,当止损价格触发时放置市场订单 |
| `place_stop_limit_order` | 放置止损限价订单(当止损触发时放置限价订单) |
| `cancel_order` | 通过 ID 取消待处理的股票订单 |
| `create_pie` | 从股票代码到权重分配映射创建新的投资组合 |
| `update_pie` | 替换现有的投资组合定义(名称和完整分配) |
| `delete_pie` | 删除投资组合 ID(不可逆转) |
| `duplicate_pie` | 在新名称下复制现有的投资组合 |
| `request_export` | 请求账户历史的异步 CSV 导出报告 |
## 配置
所有配置均通过环境变量完成 — 永远不要提交凭证。
| 变量 | 默认值 | 用途 |
|---|---|---|
| `T212_API_KEY` | — (必填) | API 密钥(基本身份验证用户名),在 Trading 212 应用中生成 |
| `T212_API_SECRET` | — (必填) | API 秘密(基本身份验证密码) |
| `T212_ENV` | `demo` | 目标环境:`demo`(模拟交易)或 `live`(真实资金) |
| `T212_MCP_ENABLE_TRADING` | off | 设置为 `true`/`1`/`yes`/`on` 以注册写入工具 |
## 入门
使用 [uv](https://docs.astral.sh/uv/) 直接从仓库运行:
```bash
uvx --from git+https://github.com/florinel-chis/trading212-mcp trading212-mcp
```
服务器默认使用stdio;添加 `--transport http --port 8000` 以在 `/mcp` 处通过 HTTP 提供 MCP 服务。HTTP 默认绑定到 `127.0.0.1`,除非使用 `--allow-remote` 标志,否则拒绝非环回 `--host`。
## MCP 客户端配置
将服务器添加到 MCP 客户端的配置中(stdio,通过 `uvx`):
```json
{
"mcpServers": {
"trading212": {
"command": "uvx",
"args": ["--from", "git+https://github.com/florinel-chis/trading212-mcp", "trading212-mcp"],
"env": {
"T212_API_KEY": "your-api-key",
"T212_API_SECRET": "your-api-secret"
}
}
}
}
```
或运行 Docker 镜像(首先构建,见下文):
```json
{
"mcpServers": {
"trading212": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "T212_API_KEY",
"-e", "T212_API_SECRET",
"trading212-mcp"
],
"env": {
"T212_API_KEY": "your-api-key",
"T212_API_SECRET": "your-api-secret"
}
}
}
}
```
## Docker
```bash
docker build -t trading212-mcp .
# stdio(MCP 客户端生成的)
docker run -i --rm -e T212_API_KEY -e T212_API_SECRET trading212-mcp
# HTTP at http://127.0.0.1:8000/mcp — 发布端口仅在环回上:
# MCP 端点是未经身份验证的(参见安全)
docker run --rm -p 127.0.0.1:8000:8000 -e T212_API_KEY -e T212_API_SECRET \
trading212-mcp --transport http --host 0.0.0.0 --port 8000 --allow-remote
```
(`--host 0.0.0.0` 在容器内绑定,以便端口映射有效 —
这就是为什么需要 `--allow-remote`;`-p` 上的 `127.0.0.1:` 前缀
仅限于此机器可访问端点。)
## 安全
- HTTP 传输 **没有身份验证**:任何可以访问 `/mcp` 端点的人都可以调用每个注册的工具 — 读取账户,放置/取消订单或删除投资组合,如果设置了 `T212_MCP_ENABLE_TRADING` — 所有操作都使用您的 API 密钥签名。将其绑定到 `127.0.0.1`(CLI 默认值;使用 Docker,发布为 `-p 127.0.0.1:8000:8000`)或将其放在身份验证的反向代理后面。永远不要直接在公共或共享网络上公开它。
- 服务器默认为演示(模拟交易)环境;故意设置 `T212_ENV=live`。
- 交易工具除非 `T212_MCP_ENABLE_TRADING` 为真,否则不可见。
- Trading 212 API 是 v0 测试版:订单端点 **不是幂等的**(重新发送请求可能会创建重复订单),并且速率限制严格且按端点(每个工具都会记录其限制)。
- 自担风险。这里没有任何投资建议。
## 开发
```bash
uv sync
uv run pytest -q
uv run ruff check .
```
## 许可证
MIT