Schwab MCP 服务器

一个用于 Charles Schwab API 的只读模型上下文协议 (MCP) 服务器,允许通过 AI 助手访问 Schwab 账户数据和市场信息。

  • by acidsolution
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 acidsolution/schwab-mcp-server

使用说明

Schwab MCP服务器

用于Charles Schwab API的只读模型上下文协议(MCP)服务器。通过Claude、ChatGPT等人工智能助手访问您的Schwab账户数据和市场信息。

特性

  • 投资组合分析 -查看具有成本基础、数量和市场价值的头寸
  • 实时行情 -获取股票和ETF的当前价格
  • 选项数据 -与希腊人建立访问选项链
  • 价格历史记录 -用于技术分析的OHLCV历史数据
  • 账户信息 -查看账户余额和详细信息

安全说明: 此服务器严格为只读。未实现交易或账户修改功能。

先决条件

  • Python 3.10或更高版本
  • 嘉信理财开发商账户:
    • 应用程序密钥(客户端ID)
    • 应用程序密钥(客户端密钥)
    • 有效的刷新令牌
    • 已配置回调URL

安装

  1. 克隆存储库:
git clone https://github.com/yourusername/schwab-mcp-server.git
cd schwab-mcp-server
  1. 创建并激活虚拟环境:
python -m venv venv

# On macOS/Linux:
source venv/bin/activate

# On Windows:
venv\Scripts\activate
  1. 安装软件包:
pip install -e .

配置

环境变量

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

SCHWAB_CALLBACK_URL=https://127.0.0.1:8182/callback
SCHWAB_TOKEN_PATH=~/.schwab-mcp/token.json
LOG_LEVEL=INFO
# Optional overrides if you don't keep them in the token file:
# SCHWAB_CLIENT_ID=your_app_key_here
# SCHWAB_CLIENT_SECRET=your_app_secret_here

初始令牌设置

在中指定的路径处创建令牌文件 SCHWAB_TOKEN_PATH (默认值: ~/.schwab-mcp/token.json):

{
  "client_id": "your_app_key_here",
  "client_secret": "your_app_secret_here",
  "access_token": "",
  "refresh_token": "YOUR_REFRESH_TOKEN_HERE",
  "expires_at": 0,
  "token_type": "Bearer"
}

设置 expires_at 到 0 首次使用时强制自动刷新令牌。

MCP服务器将加载 client_id 和 client_secret 直接从该令牌文件。如果需要,具有相同名称的环境变量可以覆盖这些值。


客户端设置

克劳德桌面版

Windows(自动)

运行PowerShell脚本以自动配置Claude Desktop:

.\scripts\update_claude_schwab.ps1

脚本将:

  1. 停止Claude Desktop(提示确认)
  2. 清除MCP相关缓存文件
  3. 使用venv Python和src目录的正确路径更新配置
  4. 重新启动克劳德桌面

选项:

  • -RepoPath -此仓库的路径(默认:自动检测)
  • -SkipRestart -在不重新启动Claude的情况下更新配置
  • -ServerName -配置中的MCP服务器名称(默认值: schwab)

手动配置

macOS: 编辑 ~/Library/Application Support/Claude/claude_desktop_config.json

窗户: 编辑 %APPDATA%\Claude\claude_desktop_config.json

添加以下配置:

{
  "mcpServers": {
    "schwab": {
      "command": "python",
      "args": ["-m", "schwab_mcp.server"],
      "cwd": "/path/to/schwab-mcp-server",
      "env": {
        "SCHWAB_CALLBACK_URL": "https://127.0.0.1:8182/callback",
        "SCHWAB_TOKEN_PATH": "/path/to/.schwab-mcp/token.json",
        "PYTHONPATH": "/path/to/schwab-mcp-server/src",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

保存配置后重新启动Claude Desktop。


ChatGPT桌面

ChatGPT Desktop通过其设置支持MCP服务器。要配置:

  1. 打开ChatGPT桌面
  2. 首选 设置 > 特性 > MCP服务器
  3. 点击 添加服务器 并输入:
    • 姓名: schwab
    • 命令: python
    • 论据: -m schwab_mcp.server
    • 工作目录: /path/to/schwab-mcp-server
  4. 添加环境变量(从令牌文件读取客户端id/secrete):
    • SCHWAB_CALLBACK_URL: https://127.0.0.1:8182/callback
    • SCHWAB_TOKEN_PATH:/path/to/.shwab-mcp/token.json
  5. 保存并重新启动ChatGPT桌面

基于文件的设置(由ChatGPT Desktop自动检测):

  • macOS:创建 ~/Library/Application Support/ChatGPT/.well-known/mcp.json
  • Windows:创建 %APPDATA%\ChatGPT\.well-known\mcp.json

复制 chatgpt_desktop_config.example.json 并更新路径以匹配您的环境(Python可执行文件、repo路径和令牌路径)。保存后重新启动ChatGPT桌面。


克劳德代码(CLI)

将MCP服务器添加到您的Claude Code配置中。创建或编辑 ~/.claude/claude_code_config.json:

{
  "mcpServers": {
    "schwab": {
      "command": "python",
      "args": ["-m", "schwab_mcp.server"],
      "cwd": "/path/to/schwab-mcp-server",
      "env": {
        "SCHWAB_CALLBACK_URL": "https://127.0.0.1:8182/callback",
        "SCHWAB_TOKEN_PATH": "/path/to/.schwab-mcp/token.json"
      }
    }
  }
}

或者,您可以将其添加到项目的 .claude/settings.json 对于项目特定配置:

{
  "mcpServers": {
    "schwab": {
      "command": "python",
      "args": ["-m", "schwab_mcp.server"],
      "cwd": "/path/to/schwab-mcp-server",
      "env": {
        "SCHWAB_CALLBACK_URL": "https://127.0.0.1:8182/callback",
        "SCHWAB_TOKEN_PATH": "/path/to/.schwab-mcp/token.json"
      }
    }
  }
}

OpenAI Codex

对于Codex CLI,请在您的环境中配置MCP服务器:

  1. 在shell配置文件中设置环境变量(.bashrc, .zshrc等等):
export SCHWAB_CALLBACK_URL="https://127.0.0.1:8182/callback"
export SCHWAB_TOKEN_PATH="$HOME/.schwab-mcp/token.json"
# Optional overrides if you don't keep them in the token file:
# export SCHWAB_CLIENT_ID="your_client_id"
# export SCHWAB_CLIENT_SECRET="your_client_secret"
  1. 通过添加到Codex配置中,配置Codex以使用MCP服务器:
{
  "mcpServers": {
    "schwab": {
      "command": "python",
      "args": ["-m", "schwab_mcp.server"],
      "cwd": "/path/to/schwab-mcp-server"
    }
  }
}

可用工具

工具 说明
get_account 获取账户信息,包括类型和余额
get_positions 获取所有基于成本和市场价值的头寸
get_quote 获取单个交易品种的实时报价
get_quotes 获取多个交易品种的实时报价
get_option_chain 获取带有希腊符号的选项链
get_price_history 获取历史OHLCV价格数据

使用示例

配置后,您可以向AI助手提出以下问题:

  • “我目前的职位和成本基础是什么?”
  • “给我AAPL的报价”
  • “显示1月份到期的MSFT期权链”
  • “过去6个月NVDA的价格历史是什么?”
  • “我的账户余额是多少?”

测试

使用MCP检查器

使用MCP检查器在本地测试服务器:

npx @modelcontextprotocol/inspector python -m schwab_mcp.server

手动测试

验证身份验证是否正常工作:

python -c "from schwab_mcp.auth import TokenManager; from schwab_mcp.config import settings; tm = TokenManager(settings.schwab_client_id, settings.schwab_client_secret, settings.schwab_token_path); tm.load_token(); print('Token loaded successfully')"

故障排除

令牌刷新失败

  • 确保您的刷新令牌有效且未过期(7天过期)
  • 验证您的客户端ID和密码是否正确
  • 检查您的Schwab Developer应用程序是否已获得批准并处于活动状态

服务器无法启动

  • 验证是否安装了Python 3.10+: python --version
  • 确保安装了所有依赖项: pip install -e .
  • 检查一下 .env 文件存在并且具有正确的值

未返回数据

  • 确认您的Schwab帐户具有适当的权限
  • 检查市场是否开放(部分数据在交易时间外受限)
  • 查看API错误消息的日志

安全

  • 只读访问 -没有交易或账户修改功能
  • 令牌存储 -令牌以受限的文件权限存储在本地(600)
  • 无凭据记录 -敏感数据从不写入日志
  • 环境变量 -凭据应通过环境传递,而不是硬编码

参考文献

许可证

麻省理工学院-使用风险自负。与嘉信理财无关。