交易212 MCP服务器

全面的模型上下文协议(MCP)服务器,用于与Trading 212 API无缝集成。该服务器使像Claude这样的人工智能助手能够与您的Trading 212投资账户进行交互,提供对账户管理、投资组合跟踪、订单执行和历史数据分析的全面访问。
部署选项:
- 使用Node.js进行本地安装
- Docker容器(生产就绪)
- Docker Compose便于编排
特性
🏦 账户管理
- 获取账户信息(货币、ID)
- 查看现金余额(自由、投资、冻结、总计)
- 检索全面的帐户摘要
📊 投资组合管理
- 列出所有空缺职位
- 通过股票代码获取详细的位置信息
- 实时损益跟踪
📈 订单管理
- 查看所有活动订单
- 下达市价单、限价单、止损单和止损限价单
- 取消待处理订单
- 支持DAY和GTC(取消前有效)订单
- 延长交易时间支持
🔍 市场数据和工具
- 搜索和过滤数千种可交易工具
- 访问工具元数据(ISIN、货币、类型、交易时间表)
- 查看交易所信息和交易时间
🥧 投资馅饼
- 列出所有投资馅饼(投资组合桶)
- 使用自定义分配创建新馅饼
- 更新和删除现有的馅饼
- 配置股息再投资设置
📜 历史数据
- 带分页的访问订单历史记录
- 检索股息支付记录
- 查看完整的交易历史记录
- 将指定时间段的数据导出到CSV
⚡ 性能和可观察性
- 自动速率限制跟踪和标头
- 用于类型安全的Zod模式验证
- 使用自定义错误类进行全面的错误处理
- 生产级结构化测井(Pino)
- 支持演示和实时环境
- API请求/响应检查的调试模式
安装
先决条件
- 已安装Node.js 24+
- 交易212账户(投资或ISA)
- 交易212 API密钥(参见 安装指南)
选项1:Docker(推荐用于生产环境)
部署MCP服务器最简单的方法是使用Docker:
# Clone the repository
git clone https://github.com/enderekici/trading212-mcp.git
cd trading212-mcp
# Create .env file with your API key
echo "TRADING212_API_KEY=your_api_key_here" > .env
echo "TRADING212_ENVIRONMENT=demo" >> .env
# Start with Docker Compose
docker-compose up -d看 医生.md 获取全面的Docker部署指南。
选项2:本地安装
从源代码安装和构建:
# Install dependencies
npm install
# Build the project
npm run build配置
获取API密钥
- 打开Trading 212应用程序(移动或网络)
- 导航到 设置 → API(测试版)
- 点击 生成API密钥
- 配置权限:
- ✅ 账户数据 (阅读)-查看帐户信息 - ✅ 历史 (读取)-访问历史数据 - ✅ 订单 (读/写)-查看和下订单 - ✅ 投资组合 (阅读)-查看位置
- (可选)设置IP地址白名单以增强安全性
- 复制API密钥并安全存储
⚠️ 安全警告:切勿将API密钥提交给版本控制或公开共享。
环境变量
创建一个 .env 项目根目录中的文件:
# Required: Your Trading 212 API key
TRADING212_API_KEY=your_api_key_here
# Optional: Environment (demo or live), defaults to demo
TRADING212_ENVIRONMENT=demo
# Optional: Log level (trace, debug, info, warn, error, fatal), defaults to info
LOG_LEVEL=info
# Optional: Node environment (development or production), defaults to development
NODE_ENV=development环境:
demo-纸张交易环境(建议测试)
- API基本URL: https://demo.trading212.com/api/v0 - 使用纸质交易账户(没有真钱) - 测试和开发安全 - 默认值 如果未指定
live-真实货币交易环境
- API基本URL: https://live.trading212.com/api/v0 - 使用真钱交易账户 - 谨慎使用
⚠️ 重要提示: 您的API密钥是特定于环境的。演示API密钥仅适用于 TRADING212_ENVIRONMENT=demo,并且API活动密钥仅适用于 TRADING212_ENVIRONMENT=live你不能把它们混在一起。
📖 有关环境的详细信息,请参见 环境.md
日志级别:
trace-最冗长,记录每一个细节debug-详细日志,包括API请求、速率限制和调试信息info-标准操作日志(默认,推荐)warn-仅警告和错误error-只有错误fatal-只有致命错误
节点环境:
development-印刷精美的彩色原木(人类可读)production-JSON日志(用于结构化日志系统)
MCP集成
此服务器可与任何兼容MCP的客户端配合使用。它支持两种传输方式:
| 传输 | 使用时 | 启动命令 |
|---|---|---|
| 标准 | 客户端生成流程 | trading212-mcp 或 node dist/index.js |
| 流式HTTP | 服务器单独运行 | trading212-mcp --http (服务于 http://localhost:3012/mcp) |
克劳德桌面
增添 ~/Library/Application Support/Claude/claude_desktop_config.json (macOS)或 %APPDATA%\Claude\claude_desktop_config.json (Windows):
标准(推荐):
{
"mcpServers": {
"trading212": {
"command": "trading212-mcp",
"env": {
"TRADING212_API_KEY": "your_api_key_here",
"TRADING212_ENVIRONMENT": "demo"
}
}
}
}HTTP(首先启动服务器 trading212-mcp --http):
{
"mcpServers": {
"trading212": {
"url": "http://localhost:3012/mcp"
}
}
}Docker(标准操作系统):
{
"mcpServers": {
"trading212": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "TRADING212_API_KEY=your_api_key_here",
"-e", "TRADING212_ENVIRONMENT=demo",
"trading212-mcp:latest"
]
}
}
}克劳德代码
增添 .claude/settings.json 或奔跑 claude mcp add:
音乐节目 :
{
"mcpServers": {
"trading212": {
"command": "trading212-mcp",
"env": {
"TRADING212_API_KEY": "your_api_key_here",
"TRADING212_ENVIRONMENT": "demo"
}
}
}
}HTTP(先启动服务器):
{
"mcpServers": {
"trading212": {
"url": "http://localhost:3012/mcp"
}
}
}光标
添加到Cursor的MCP设置(设置>MCP服务器>添加):
{
"mcpServers": {
"trading212": {
"command": "trading212-mcp",
"env": {
"TRADING212_API_KEY": "your_api_key_here",
"TRADING212_ENVIRONMENT": "demo"
}
}
}
}帆板运动
增添 ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"trading212": {
"command": "trading212-mcp",
"env": {
"TRADING212_API_KEY": "your_api_key_here",
"TRADING212_ENVIRONMENT": "demo"
}
}
}
}VS代码(副本)
增添 .vscode/mcp.json 在您的工作区或用户设置中:
{
"servers": {
"trading212": {
"command": "trading212-mcp",
"env": {
"TRADING212_API_KEY": "your_api_key_here",
"TRADING212_ENVIRONMENT": "demo"
}
}
}
}Gemini CLI
增添 ~/.gemini/settings.json:
{
"mcpServers": {
"trading212": {
"command": "trading212-mcp",
"env": {
"TRADING212_API_KEY": "your_api_key_here",
"TRADING212_ENVIRONMENT": "demo"
}
}
}
}OpenAI Codex命令行界面
增添 ~/.codex/config.json:
{
"mcpServers": {
"trading212": {
"command": "trading212-mcp",
"env": {
"TRADING212_API_KEY": "your_api_key_here",
"TRADING212_ENVIRONMENT": "demo"
}
}
}
}任何MCP兼容客户端
对于 标准,将您的客户指向 trading212-mcp 命令(或 node dist/index.js)使用所需的env变量。对于 超文本传输协议,先启动服务器(trading212-mcp --http --port 3012)并将您的客户指向 http://localhost:3012/mcp.
设置方法比较
| 方法 | 优点 | 缺点 | 最适合 |
|---|---|---|---|
| 全球npm | 快速、简单 | 需要安装Node.js | 大多数用户 |
| Docker(标准操作系统) | 孤立、一致 | 启动稍慢(约2秒) | 生产、团队 |
| HTTP传输 | 解耦、可共享 | 必须单独启动服务器 | 远程、多客户端 |
| 本地建设 | 完全控制 | 手动更新 | 贡献者 |
看 医生.md 用于高级Docker部署选项,包括持久容器。
可用工具
账户管理
get_account_info
检索账户元数据,包括货币代码和账户ID。
例子:
Get my account informationget_account_cash
获取详细的现金余额信息。
退货: 自由现金、总计、已投资、冻结金额等。
例子:
How much cash do I have available?get_account_summary
获取包含所有余额和损益的全面账户摘要。
例子:
Show me my complete account summary投资组合管理
get_portfolio
列出所有当前价值和损益的未结头寸。
例子:
What stocks do I own?get_position
获取特定职位的详细信息。
参数:
ticker(字符串,必填)-股票代码(例如“AAPL”、“TSLA”)
例子:
Show me my Apple position details订单管理
get_orders
检索所有活动订单。
例子:
What are my pending orders?get_order
获取特定订单的详细信息。
参数:
orderId(数字,必填)-订单ID
例子:
Show me details for order 12345cancel_order
取消当前订单。
参数:
orderId(数字,必填)-要取消的订单ID
例子:
Cancel order 12345place_market_order
下达市价单,以当前市场价格立即执行。
参数:
ticker(字符串,必填)-票务符号quantity(数字,必填)-购买(正)或出售(负)的数量timeValidity(字符串,可选)-“DAY”或“GTC”(默认值:“DAY“)
例子:
Buy 10 shares of Apple at market priceplace_limit_order
下达限价单,以指定价格或更高价格执行。
参数:
ticker(字符串,必填)-票务符号quantity(数字,必填)-买卖数量limitPrice(数字,必填)-最高买入价或最低卖出价timeValidity(字符串,可选)-“DAY”或“GTC”
例子:
Place a limit order to buy 5 shares of Tesla at $200place_stop_order
下达止损单,触发后成为市价单。
参数:
ticker(字符串,必填)-票务符号quantity(数字,必填)-买卖数量stopPrice(数字,必填)-触发订单的价格timeValidity(字符串,可选)-“DAY”或“GTC”
例子:
Place a stop order to sell 10 shares of MSFT if price drops below $300place_stop_limit_order
下达一个止损限价单,当触发时,该限价单将成为限价单。
参数:
ticker(字符串,必填)-票务符号quantity(数字,必填)-买卖数量stopPrice(数字,必填)-触发订单的价格limitPrice(数字,必填)-一旦触发限价timeValidity(字符串,可选)-“DAY”或“GTC”
例子:
Place a stop-limit order to sell GOOGL at $140 with stop at $145工具和市场数据
get_instruments
列出所有可交易的工具,并可选择搜索过滤。
参数:
search(字符串,可选)-按股票代码、名称或ISIN筛选
例子:
Search for all Apple instrumentsget_exchanges
获取有关交易所和交易时间表的信息。
例子:
Show me exchange trading hours投资馅饼
get_pies
列出所有投资馅饼及其配置。
例子:
Show me all my piesget_pie
获取特定馅饼的详细信息。
参数:
pieId(数字,必填)-馅饼ID
例子:
Show details for pie 123create_pie
创造新的投资蛋糕。
参数:
name(字符串,必填)-饼图名称(1-50个字符)icon(字符串,必填)-图标标识符instrumentShares(对象,必填)-Ticker到分配映射dividendCashAction(字符串,必填)-“REINVEST”或“TO_ACCOUNT_CASH”goal(数字,可选)-投资目标金额
例子:
Create a new pie called "Tech Portfolio" with 50% AAPL and 50% GOOGL, reinvesting dividendsupdate_pie
更新现有的饼图配置。
参数:
pieId(数字,必填)-馅饼ID- 其他参数与create_pie相同(均为可选)
例子:
Update pie 123 to change allocation to 60% AAPL and 40% GOOGLdelete_pie
删除投资馅饼。
参数:
pieId(数字,必填)-要删除的饼图ID
例子:
Delete pie 123历史数据
get_order_history
使用分页支持获取历史订单。
参数:
cursor(数字,可选)-分页光标limit(数字,可选)-每页结果(默认值:50)ticker(字符串,可选)-按股票代码筛选
例子:
Show me my order history for the last monthget_dividends
获取股息支付历史记录。
参数:
cursor(数字,可选)-分页光标limit(数字,可选)-每页结果ticker(字符串,可选)-按股票代码筛选
例子:
Show me all dividends received this yearget_transactions
获取完整的交易历史记录。
参数:
cursor(数字,可选)-分页光标limit(数字,可选)-每页结果
例子:
Show me my recent transactionsrequest_export
请求CSV导出帐户数据。
参数:
timeFrom(字符串,必填)-开始日期(ISO 8601格式)timeTo(字符串,必填)-结束日期(ISO 8601格式)includeDividends(布尔值,可选)-包括股息(默认值:true)includeInterest(布尔值,可选)-包括兴趣(默认值:true)includeOrders(布尔值,可选)-包括订单(默认值:true)includeTransactions(布尔值,可选)-包括交易(默认值:true)
例子:
Export all my data from January 1st to December 31st 2024对话示例
投资组合分析
User: What's my current portfolio performance?
Claude: Let me check your account summary and portfolio.
[Calls get_account_summary and get_portfolio]
You have a total portfolio value of $10,523.45 with an overall profit of $523.45 (+5.2%).
Your positions:
- AAPL: 10 shares at $150.00 (avg $145.00) - +$50.00 profit
- GOOGL: 5 shares at $140.00 (avg $135.00) - +$25.00 profit
- TSLA: 8 shares at $200.00 (avg $210.00) - -$80.00 loss下单
User: Buy 5 shares of Microsoft at market price
Claude: I'll place a market order for 5 shares of MSFT.
[Calls place_market_order]
Order placed successfully:
- Order ID: 12345
- Ticker: MSFT
- Quantity: 5
- Type: MARKET
- Status: CONFIRMED
- Filled at: $350.25 per share历史分析
User: How much have I received in dividends this year?
Claude: Let me check your dividend history.
[Calls get_dividends]
You've received $125.50 in dividends this year:
- AAPL: $45.00 (3 payments)
- MSFT: $50.50 (4 payments)
- JNJ: $30.00 (2 payments)速率限制
交易212 API在每终结点的基础上强制执行利率限制。此MCP服务器通过响应标头自动跟踪速率限制信息:
x-ratelimit-limit-允许的最大请求数x-ratelimit-remaining-剩余请求x-ratelimit-reset-限制重置时的Unix时间戳
已知限制:
- 帐户摘要:1个请求/5秒
- 市价单:1个请求/2秒
- 限价订单:1个请求/2秒
如果超过速率限制,服务器将抛出错误。始终检查错误消息中的速率限制信息。
错误处理
所有错误都会返回描述性消息:
{
"error": "Trading 212 API Error (401): Invalid API key"
}常见错误:
- 401未经授权 -API密钥无效
- 403禁止 -权限不足
- 404未找到 -资源不存在
- 429请求太多 -超出费率限制
- 500内部服务器错误 -交易212服务问题
发展
以开发模式运行
npm run dev为生产而建
npm run build监视模式(自动重建)
npm run watchAPI 文档
有关API完整文档,请访问:
支持的帐户类型
- ✅ 投资账户 (一般交易账户)
- ✅ ISA账户 (英国税收优惠账户)
- ❌ 差价合约账户 (Trading 212 API不支持)
局限性
- API目前处于BETA阶段,正在积极开发中
- 不支持WebSocket/流媒体(仅限REST)
- Pies API已弃用,不会收到进一步的更新
- 不支持差价合约账户
- 费率限制适用于每个帐户(而不是每个API密钥)
安全最佳实践
- 永远不要提交API密钥 到版本控制
- 使用环境变量 用于敏感配置
- 启用IP白名单 如有可能
- 在演示环境中测试 使用live之前
- 使用最小权限 您的用例所需
- 旋转API键 定期
- 监控API使用情况 通过速率限制标头
日志记录和调试
Trading 212 MCP服务器包括专业结构化日志记录,由 皮诺,提供生产级的可观察性和调试能力。
日志级别
使用控制日志的冗长程度 LOG_LEVEL 环境变量:
# Development - detailed logs
LOG_LEVEL=debug npm run dev
# Production - minimal logs
LOG_LEVEL=warn node dist/index.js可用级别 (从最冗长到最不冗长):
trace-一切,包括内部细节debug-API请求、速率限制、详细操作info-服务器启动、工具执行(默认)warn-警告和潜在问题error-仅错误fatal-导致关机的致命错误
日志输出格式
开发模式 (印刷精美,彩色):
NODE_ENV=development npm run dev输出示例:
[16:32:15.423] INFO: Starting Trading 212 MCP server
environment: "demo"
version: "1.0.0"
nodeVersion: "v20.10.0"
platform: "darwin"
logLevel: "info"生产模式 (结构化JSON):
NODE_ENV=production npm start输出示例:
{"level":"info","time":"2026-02-10T16:32:15.423Z","msg":"Starting Trading 212 MCP server","environment":"demo","version":"1.0.0"}调试API请求
启用调试日志记录以查看所有API调用和速率限制信息:
LOG_LEVEL=debug node dist/index.js调试日志包括:
- API请求方法和端点
- 速率限制标头(限制、剩余、重置时间)
- 接近速率限制时的警告
- 请求/响应时间
- 带有上下文的错误详细信息
错误跟踪
服务器使用结构化错误类进行更好的调试:
AuthError-API关键问题(401)ApiError-API请求失败(4xx,5xx)RateLimitError-超出速率限制(429)ValidationError-无效的请求参数(400)
所有错误都记录在:
- 错误类型和代码
- HTTP状态代码
- 上下文信息
- 请求详情
- 堆栈痕迹(非生产中)
调试会话示例
# Enable detailed logging
export LOG_LEVEL=debug
export NODE_ENV=development
# Run the server
npm run dev查找这些日志条目:
[DEBUG] API request - Shows every API call
[DEBUG] Rate limit info - Track API quota usage
[WARN] Approaching rate limit - Proactive warnings
[ERROR] Tool execution failed - Detailed error context登录克劳德桌面
通过Claude Desktop运行时,日志会写入stderr,可以在以下位置查看:
macOS:
tail -f ~/Library/Logs/Claude/mcp*.log视窗:
Get-Content "$env:APPDATA\Claude\Logs\mcp*.log" -Wait故障排除
服务器未出现在Claude桌面中
- 验证中的路径
claude_desktop_config.json是绝对的 - 确保项目建成(
npm run build) - 检查一下
dist/index.js存在 - 完全重新启动克劳德桌面
- 检查Claude Desktop日志是否有错误
身份验证错误
- 在中验证API密钥是否正确
.env或配置 - 检查API密钥是否具有所需的权限
- 确保您使用的是正确的环境(演示/直播)
- 验证IP白名单设置(如果已启用)
速率限制错误
- 等待速率限制窗口重置
- 检查
x-ratelimit-reset重置时间标题 - 降低API调用频率
- 在适当的情况下实施缓存
贡献
欢迎投稿!拜托:
- 克隆该仓库
- 创建要素分支
- 通过测试进行更改
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件
免责声明
这是一种非正式的整合。在使用真钱之前,始终在演示环境中进行彻底测试。交易涉及风险,你应该只投资你能承受损失的东西。
支持
对于此MCP服务器的问题:
- 在GitHub上打开一个问题
对于Trading 212 API问题:
致谢
内置:
- 模型上下文协议SDK
- 佐德 用于模式验证
- 交易212公共API
______________________________________________________________________
由...制作❤️ Trading 212和人工智能社区
