股票市场数据服务

E*TRADE MCP Server是一个为LLMs(如Claude)提供股票和期权市场数据的模型上下文协议服务器,支持实时股票报价、批量报价、期权链数据获取等功能。

  • by ohenak
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 ohenak/etrade-mcp

使用说明

E*TRADE MCP服务器

E*TRADE API的模型上下文协议(MCP)服务器,使Claude等LLM能够检索股票和期权市场数据。

特性

  • OAuth 1.0身份验证 -安全、持久的令牌存储,具有自动生命周期管理功能
  • 股票报价 -具有可选收益日期的实时和延迟股票报价
  • 批量报价 -在单个请求中检索多达25个股票报价
  • 期权链 -包含罢工、到期、希腊和买卖的完整期权链数据
  • 期权报价 -特定期权合约的详细报价
  • 自动检索 -用于处理API速率限制和令牌激活的内置重试逻辑
  • MCP集成 -与Claude Desktop和其他MCP客户端无缝集成

先决条件

安装

1.安装uv(如果尚未安装)

# macOS/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

2.克隆和设置项目

cd etrade-mcp

# Create virtual environment
uv venv

# Activate virtual environment
# On Windows:
.venv\Scripts\activate
# On macOS/Linux:
source .venv/bin/activate

# Install dependencies
uv pip install -e .

3.配置环境

创建一个 .env 项目根目录中的文件:

# Copy example file
cp .env.example .env

# Edit .env with your credentials

.env文件:

ETRADE_CONSUMER_KEY=your_consumer_key_here
ETRADE_CONSUMER_SECRET=your_consumer_secret_here
ETRADE_ENVIRONMENT=sandbox  # Use 'production' for live trading

重要提示:

  • 从开始 sandbox 测试环境
  • 切换到 production 只有在彻底测试之后
  • 制作需要实时的E*TRADE经纪账户

OAuth设置

OAuth身份验证是通过MCP服务器自动处理的。当您第一次与Claude一起使用服务器时,系统会提示您授权:

  1. 克劳德会打电话给 setup_oauth 工具(最初不需要验证码)
  2. 您的浏览器将打开E*TRADE授权页面
  3. 授权后,E*TRADE将显示一个5个字符的验证码
  4. 将代码提供给Claude,Claude将致电 setup_oauth 再次使用代码
  5. 令牌在本地加密保存并自动续订

或者,您可以运行独立的OAuth设置:

python -m server.auth.setup

运行测试

# Install dev dependencies
uv pip install -e ".[dev]"

# Run all tests
pytest

# Run with coverage
pytest --cov=server tests/

# Run specific test file
pytest tests/test_token_store.py -v

Claude桌面配置

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "etrade": {
      "command": "python",
      "args": [
        "-m",
        "server.main"
      ],
      "cwd": "/absolute/path/to/etrade-mcp",
      "env": {
        "ETRADE_CONSUMER_KEY": "your_consumer_key",
        "ETRADE_CONSUMER_SECRET": "your_consumer_secret",
        "ETRADE_ENVIRONMENT": "sandbox"
      }
    }
  }
}

替换 /absolute/path/to/etrade-mcp 使用您的实际项目路径并添加您的凭据。

与Claude一起使用

配置后,Claude可以通过自然语言访问E*TRADE数据:

股票报价:

  • “苹果股票的当前价格是多少?”
  • “获取AAPL、MSFT和GOOGL的报价以及收益日期”
  • “显示TSLA的价格和数量”

选项数据:

  • “给我看看2025年1月到期的特斯拉期权链”
  • “对于AAPL要求180美元罢工,希腊人有什么看法?”
  • “获得接近450美元的SPY周期权的买卖价差”
  • “显示下个月到期的NVDA看跌期权”

可用工具

认证

setup_oauth -OAuth 1.0身份验证流程

  • 第一步:不打电话 verification_code 获取授权URL
  • 第二步:致电 verification_code (来自E*TRADE的5个字符)完成身份验证
  • 代币会自动存储和管理

股票报价

get_stock_quote -获取单一股票的报价

  • 输入: symbol (例如,“AAPL”),可选 include_earnings (默认值:false)
  • 回报:价格、交易量、买卖、变动,以及可选的下一个收益日期

get_batch_quotes -获取多只股票的报价

  • 输入: symbols (阵列,最多25个),可选 include_earnings (默认值:false)
  • 返回:所有请求符号的引号

选项数据

get_option_chains -获取期权链数据

  • 输入: symbol,可选过滤器:
    • expiry_year, expiry_month, expiry_day -按过期日期筛选
    • chain_type -“CALL”、“PUT”或“CALLPUT”(默认)
    • strike_price_near -在特定价格附近进行罢工
    • no_of_strikes -限制返回的罢工次数
    • include_weekly -包括每周选项(默认值:false)
    • skip_adjusted -跳过调整后的选项(默认值:true)
    • option_category -“标准”(默认)、“全部”或“迷你”
    • price_type -“ATNM”(违约)或“全部”
  • 回报:可用罢工、到期、买卖、希腊、未平仓合约、交易量

get_option_quote -获取特定期权报价

  • 输入: option_symbols (OSI格式符号数组,最多25个)
  • 回报:详细的期权报价数据,包括希腊语和理论值

项目结构

etrade-mcp/
├── server/
│   ├── auth/
│   │   ├── oauth_manager.py    # OAuth session & token lifecycle
│   │   ├── token_store.py      # Encrypted token storage
│   │   └── setup.py            # Standalone OAuth setup
│   ├── tools/
│   │   ├── oauth_tools.py      # MCP OAuth tool
│   │   ├── stock_quotes.py     # Stock quote tools
│   │   └── options_quotes.py   # Options chain & quote tools
│   ├── utils/
│   │   └── retry.py            # Automatic retry logic
│   ├── config.py               # Configuration management
│   └── main.py                 # MCP server entry point
├── tests/
│   ├── test_token_store.py     # Token storage tests
│   └── test_auth.py            # OAuth manager tests
├── .env.example                # Example environment config
├── pyproject.toml              # Project metadata & dependencies
└── README.md

开发状态

✅ v0.1.0-完成所有核心功能

基础

  • [x] 使用现代工具(uv、pyproject.toml)进行项目设置
  • [x] 基于环境的配置管理
  • [x] 具有生命周期管理的加密令牌存储
  • [x] OAuth 1.0身份验证流程
  • [x] 身份验证组件的单元测试

股市数据

  • [x] 具有收益支持的单一股票报价工具
  • [x] 批量报价(最多25个符号)
  • [x] 实时和延迟报价处理

选项数据

  • [x] 具有全面过滤功能的选项链
  • [x] 按OSI符号列出的期权报价
  • [x] 希腊人、理论价值观和开放利益
  • [x] 支持标准、每周和迷你选项

MCP集成

  • [x] 通过MCP工具的两步OAuth流程
  • [x] API速率限制的自动重试逻辑
  • [x] 令牌激活延迟处理
  • [x] 与Claude Desktop完全集成

质量与可靠性

  • [x] 全面的错误处理
  • [x] 调试文件和stderr的日志记录
  • [x] 自动令牌续订
  • [x] E*TRADE实时账户生产就绪

安全说明

  • 永不承诺 .env 文件 -包含敏感凭据
  • 令牌已加密 -存储在 .etrade_tokens.enc
  • 先使用沙盒 -生产前彻底测试
  • 密钥的环境变量 -设置 ETRADE_TOKEN_KEY 生产中

故障排除

OAuth安装失败

  • 验证消费者密钥和密钥是否正确
  • 检查您是否使用了正确的环境(沙盒/生产环境)
  • 确保您的E*TRADE帐户具有API访问权限

“未找到令牌”错误

  • 跑 python -m server.auth.setup 鉴定
  • 检查 .etrade_tokens.enc 文件存在
  • 验证 ETRADE_TOKEN_KEY 是一致的

导入错误

  • 确保虚拟环境已激活
  • 跑 uv pip install -e . 安装依赖项

最近的改进

令牌生命周期管理(最新)

  • 到期时自动续订令牌
  • 妥善处理令牌激活延迟
  • 重新启动时持续会话状态

增强的选项支持

  • 完全符合E*TRADE API规范
  • 支持每周和迷你选项
  • 按到期和执行价格灵活过滤
  • 完整的希腊和理论定价数据

可靠性增强

  • API速率限制的自动重试逻辑
  • 令牌激活的指数回退
  • 全面的错误处理和记录
  • 使用实时E*TRADE帐户进行生产测试

资源

许可证

麻省理工学院

贡献

欢迎投稿!拜托:

  1. 遵循测试驱动开发
  2. 为新功能添加测试
  3. 更新文档
  4. 首先使用沙盒环境进行测试