股票交易协议服务器

一个通过多经纪商API提供股票市场数据和交易功能的MCP(模型上下文协议)服务器。

  • by Open-Agent-Tools
  • Python
  • 本地部署
  • 11 星标
  • 更新于
在 GitHub 查看 Open-Agent-Tools/open-stocks-mcp

使用说明

未平仓股票MCP

MCP(模型上下文协议)服务器,通过多个经纪商API提供对股票市场数据和交易功能的访问。

特性

🚀 当前状态:v0.6.5-多经纪商支持(Robinhood+Schwab)

  • ✅ MCP工具 罗宾汉+施瓦布(见 工具参考 电流细分)
  • ✅ 多代理架构 -支持Robinhood和Charles Schwab
  • ✅ 完整的交易功能 -股票、期权、订单管理
  • ✅ 实时交易已验证 -Robinhood股票和期权交易已通过真实订单测试
  • ✅ 生产就绪 -HTTP传输、Docker支持、全面测试
  • ✅ Schwab集成完成 -OAuth身份验证,准备进行测试的工具(请参阅 工具参考)
  • 🔧 账户详细信息已固定 -真实财务数据而非N/A值

安装

pip install open-stocks-mcp

发展:

git clone https://github.com/Open-Agent-Tools/open-stocks-mcp.git
cd open-stocks-mcp
uv sync   # installs all deps including dev group

快速开始

1.设置凭据

创建一个 .env 文件:

对于Robinhood:

ROBINHOOD_USERNAME=your_email@example.com
ROBINHOOD_PASSWORD=your_password

对于Schwab(可选):

SCHWAB_API_KEY=your_api_key
SCHWAB_APP_SECRET=your_app_secret
SCHWAB_CALLBACK_URL=https://127.0.0.1:8182/
SCHWAB_TOKEN_PATH=~/.tokens/schwab_token.json

# Enable both brokers
ENABLED_BROKERS=robinhood,schwab

注: 嘉信理财需要一个开发者帐户和API的批准(几天)。看 Schwab设置指南 有关完整的设置说明。

2.启动服务器

HTTP传输(推荐)

open-stocks-mcp-server --transport http --port 3001

STDIO传输

open-stocks-mcp-server --transport stdio

3.测试服务器

# Health check (HTTP transport)
curl http://localhost:3001/health

# Prometheus metrics (no auth required)
curl http://localhost:3001/metrics

# Interactive testing
uv run mcp dev src/open_stocks_mcp/server/app.py

这个 /metrics 端点公开:

  • open_stocks_mcp_tool_calls_total (按工具计数)
  • open_stocks_mcp_tool_avg_calls_per_minute (按工具测量;滚动窗口内的平均值)
  • open_stocks_mcp_tool_latency_ms (按工具和分位数计量: 0.50, 0.95, 0.99)

分布式跟踪设置(OpenTetry、Jaeger、Tempo):

MCP工具执行超时

每个MCP tools/call 调用受可配置截止日期的限制。超越的工具 deadline返回一个结构化的JSON错误,而不是无限期地阻塞服务器。

  • YAML密钥: timeout.tool_execution_timeout_seconds (默认值: 30)
  • 环境覆盖: OPEN_STOCKS_MCP_TOOL_EXECUTION_TIMEOUT_SECONDS (例如。, 60)

当工具超时时,其响应体为:

{
  "status": "error",
  "error_type": "ToolExecutionTimeout",
  "failure_class": "timeout",
  "tool": "<tool_name>",
  "timeout_seconds": 30,
  "error": "Tool '...' exceeded the 30s execution limit"
}

MCP结果为 isError: true;HTTP /mcp 返回状态200(不是500),因此 客户端可以检查结构化错误。代理级别请求超时(Robinhood 16秒, Schwab 30秒)仍然独立有效,并计入该截止日期。

操作断路器默认值

默认情况下启用代理呼叫保护,并在MCP中报告状态 health_check, 主控程序 rate_limit_status,HTTP /health,以及HTTP /status.

  • OPEN_STOCKS_MCP_CIRCUIT_BREAKER_ENABLED (默认值: true)
  • OPEN_STOCKS_MCP_CIRCUIT_BREAKER_FAILURE_THRESHOLD (默认值: 5)
  • OPEN_STOCKS_MCP_CIRCUIT_BREAKER_COOLDOWN_SECONDS (默认值: 60)

状态含义:

  • closed:请求流正常。
  • open:经纪人呼叫会很快失败,直到冷却期满。
  • half_open:允许一次探测呼叫;成功重置为 closed,故障返回 open.

Docker部署

生产Docker设置:

cd examples/open-stocks-mcp-docker
docker-compose up -d

特征:

  • 持久会话存储
  • 自动原木轮换
  • 健康监测
  • 安全标头和CORS

Kubernetes/编排部署: 看 示例/kubernetes/README.md Kustomize清单涵盖HTTP传输、非根安全上下文、PVC支持的令牌/日志持久性和健康探测。

MCP客户端集成

Claude 桌面版

添加到MCP设置(~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "open-stocks": {
      "command": "open-stocks-mcp-server",
      "args": ["--transport", "stdio"]
    }
  }
}

HTTP传输集成

{
  "mcpServers": {
    "open-stocks": {
      "command": "python",
      "args": ["-m", "mcp_http_client", "http://localhost:3001/mcp"]
    }
  }
}

可用工具

参考文档和可运行示例:

🏦 多经纪商支持

罗宾汉工具:

  • 保留了所有现有的Robinhood功能
  • 对现有API无重大更改

Schwab工具:

  • 账户和投资组合-账号、余额、头寸、日内交易
  • 市场数据-报价、价格历史、工具搜索、市场时间、变动因素
  • 交易-市场/限价买入/卖出、订单管理、交易
  • 期权-连锁、到期、头寸、买入/卖出、点差、取消
  • 流媒体-实时账户活动、期权报价和二级快照
  • 股息/收入-股息、按符号划分的股息、利息支付、股票贷款支付

所有Schwab工具都使用 schwab_ 前缀(例如。, schwab_get_portfolio, schwab_buy_stock_market).


Robinhood工具分类

账户和投资组合

  • 账户信息和详细信息
  • 投资组合头寸和持股
  • 日内交易指标和历史
  • 股票和期权订单历史

市场数据

  • 实时股票报价和基本面
  • 市场推动者和表现最佳者
  • 行业分析和市场趋势
  • 历史价格数据

期权交易

  • 期权链和市场数据
  • 职位汇总与分析
  • 历史期权数据
  • 选项工具搜索

监视列表和配置文件✅ 观察名单管理测试

  • 观察名单管理 -所有5个工具均正常工作(添加/删除AMC测试的符号)
  • 用户配置文件和设置
  • 投资偏好
  • 帐户功能

市场调研

  • 收益数据和分析
  • 股票评级和新闻
  • 股息信息
  • 公司行为和分裂

分析和监控

  • 组合分析
  • 性能指标
  • 服务器健康监控
  • 利息和贷款支付

通知

  • 帐户通知
  • 追加保证金和利息
  • 订阅管理
  • 推荐跟踪

先进仪器

  • 多符号仪器查找
  • 增强的搜索功能
  • 二级市场数据(需要黄金)
  • 直接仪器访问

交易能力

库存订单(✅ 现场测试):

  • ✅ 市价单-用XOM和AMC测试买入/卖出
  • ✅ 限价订单-用XOM(106美元)和AMC(3美元)测试买入/卖出
  • ✅ 止损单-AMC测试卖出(25股,2.50美元)
  • 个人和批量订单取消
  • ❌ 已弃用:尾随止损单、零碎股票(不常见用例)

期权订单(✅ 现场测试):

  • ✅ 期权限价单(买入/卖出)- 修复了API错误
  • ✅ 期权发现和合约搜索
  • ✅ 信用和借记价差策略- 修复了API错误,准备进行测试
  • 实时验证:F$9卖出订单成功下达

订单管理:

  • 取消单个或所有订单(股票和期权)
  • 查看空缺职位
  • 订单状态跟踪

认证

服务器处理Robinhood的身份验证要求:

  • 应用推送审批:自动处理基于应用程序的设备审批(通过Robinhood移动应用程序审批)。
  • 短信/电子邮件MFA代码:设置 ROBINHOOD_MFA_CODE 在登录之前尝试完成基于代码的验证(时间敏感,通常为5-10分钟)。
  • 会话保持:缓存和加密身份验证,以减少重新验证。

发展

测试

uv run pytest                           # All tests (works after uv sync)
uv run pytest -m "journey_account"      # Fast account tests (~1.8s)
uv run pytest -m "journey_market_data"  # Market data tests (~3.8s)
uv run pytest -m "not slow and not exception_test"  # Recommended for development
uv run pytest -m rate_limited           # Opt-in live API tests that may hit broker rate limits
RUN_RATE_LIMITED=1 uv run pytest        # Include rate-limited tests in a full run
uv run pytest -m performance tests/performance -v  # Mocked, CI-safe benchmarks
RUN_PERFORMANCE=1 uv run pytest         # Include performance tests in a full run

# See CLAUDE.md for complete journey testing guide

代码质量

ruff check . --fix              # Lint and fix
ruff format .                   # Format code
mypy .                          # Type check

YAML配置

未平仓股票MCP可以从以下位置加载配置 open-stocks-mcp.yaml 或 config.yaml 在当前工作目录中。 您还可以使用以下命令设置显式路径 OPEN_STOCKS_CONFIG=/path/to/config.yaml 或 OPEN_STOCKS_CONFIG_FILE=/path/to/config.yaml (OPEN_STOCKS_MCP_CONFIG 仍然支持向后兼容性)。

环境变量总是胜过YAML值,包括:

  • MCP_SERVER_NAME, LOG_LEVEL
  • RATE_LIMIT_CALLS_PER_MINUTE, RATE_LIMIT_CALLS_PER_HOUR, RATE_LIMIT_BURST_SIZE
  • CACHE_TTL_MARKET_SECONDS, CACHE_TTL_ACCOUNT_SECONDS, CACHE_MAX_SIZE
  • ENABLE_CACHE
  • OPEN_STOCKS_MCP_BATCH_SIZE, OPEN_STOCKS_MCP_QUEUE_MAX_WAIT

功能标志支持安全默认值以及每个环境的覆盖:

environment: production
feature_flags:
  brokers.robinhood:
    default: true
  brokers.schwab:
    default: false
    environments:
      production: true

未知功能标志解析为禁用(false).

看 config.yaml.example 对于支持的架构。

谷歌ADK评估

# Set environment variables
export GOOGLE_API_KEY="your-google-api-key"
export ROBINHOOD_USERNAME="email@example.com"
export ROBINHOOD_PASSWORD="password"

# Start Docker server
cd examples/open-stocks-mcp-docker && docker-compose up -d

# Run evaluation
MCP_HTTP_URL="http://localhost:3001/mcp" adk eval examples/google_adk_agent tests/evals/0_list_available_tools_test.json --config_file_path tests/evals/test_config.json

项目范围

在v0.7.0版本中完成:

  • ✅ 多代理架构 -支持多个代理的抽象代理层
  • ✅ Schwab整合 -跨账户、市场数据、交易、期权、流媒体和股息/收入的工具(请参见 工具参考)
  • ✅ OAuth身份验证 -Schwab OAuth 2.0流程,带有自动令牌刷新功能
  • ✅ 优雅降级 -即使代理身份验证失败,服务器也会启动
  • ✅ 向后兼容性 -所有Robinhood工具不变,无重大变化

在v0.6.4中完成:

  • ✅ 增强选项工具 新 open_option_positions_with_details() 通过看涨/看跌类型丰富头寸
  • ✅ 股票交易API修复 -市场、限价和止损买入/卖出功能现在工作正常
  • ✅ 实时股票交易验证 -XOM和AMC订单成功下达(市价、限价、止损)
  • ✅ 工具弃用 -删除了4个不常见的交易功能(buy_stock_stop_loss、尾随止损、零碎股票)
  • ✅ 期权交易API修复 - buy_option_limit, sell_option_limit,传播策略现在正在发挥作用
  • ✅ 实时选项验证 -9斐济元看跌期权成功交易
  • ✅ 选项发现 - find_options 功能正常工作
  • ✅ 期权价差固定 -已更正的借贷利差函数(API签名、数据结构、符号提取)
  • ✅ 观察名单管理完成 -所有5个用于实时测试的观察名单工具
  • ✅ 监视列表API修复程序 -修复了响应格式更改和参数绑定问题
  • ✅ 所有交易功能就绪 -第7阶段完成,为第8阶段做好准备

下一个优先事项(Schwab测试):

  • ⏳ 施瓦布旅行测试(被API证书阻止)
  • ⏳ Schwab实时交易验证
  • ⏳ 多代理集成测试
  • ⏳ Schwab特定文件

超出范围:

  • 加密货币交易工具
  • 银行/ACH转账
  • 帐户修改
  • 存款/取款功能

贡献

许可证

Apache许可证2.0-请参阅 许可证 文件以获取详细信息。

安全

重要安全注意事项:

  • 实时交易功能 -真正的订单是用实际的钱下的
  • 从不将凭据提交到版本控制
  • 使用适当的文件权限 .env 文件
  • 交易验证完成 -股票和期权交易都经过测试
  • 在生产执行之前,始终验证交易
  • 期权交易说明:出售期权(如看跌期权)可能导致转让和股票所有权

有关安全问题,请参阅我们的 安全策略.


免责声明: 此软件用于教育和开发目的。股票和期权交易涉及重大风险。在执行任何金融交易之前,始终验证交易并了解风险。