使用说明
Schwab MCP服务器
用于Charles Schwab API的只读模型上下文协议(MCP)服务器。通过Claude、ChatGPT等人工智能助手访问您的Schwab账户数据和市场信息。
特性
- 投资组合分析 -查看具有成本基础、数量和市场价值的头寸
- 实时行情 -获取股票和ETF的当前价格
- 选项数据 -与希腊人建立访问选项链
- 价格历史记录 -用于技术分析的OHLCV历史数据
- 账户信息 -查看账户余额和详细信息
安全说明: 此服务器严格为只读。未实现交易或账户修改功能。
先决条件
- Python 3.10或更高版本
- 嘉信理财开发商账户:
- 应用程序密钥(客户端ID)
- 应用程序密钥(客户端密钥)
- 有效的刷新令牌
- 已配置回调URL
安装
- 克隆存储库:
git clone https://github.com/yourusername/schwab-mcp-server.git
cd schwab-mcp-server
- 创建并激活虚拟环境:
python -m venv venv
# On macOS/Linux:
source venv/bin/activate
# On Windows:
venv\Scripts\activate
- 安装软件包:
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
脚本将:
- 停止Claude Desktop(提示确认)
- 清除MCP相关缓存文件
- 使用venv Python和src目录的正确路径更新配置
- 重新启动克劳德桌面
选项:
-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服务器。要配置:
- 打开ChatGPT桌面
- 首选 设置 > 特性 > MCP服务器
- 点击 添加服务器 并输入:
- 姓名:
schwab - 命令:
python - 论据:
-m schwab_mcp.server - 工作目录:
/path/to/schwab-mcp-server
- 姓名:
- 添加环境变量(从令牌文件读取客户端id/secrete):
SCHWAB_CALLBACK_URL: https://127.0.0.1:8182/callbackSCHWAB_TOKEN_PATH:/path/to/.shwab-mcp/token.json
- 保存并重新启动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服务器:
- 在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"
- 通过添加到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)
- 无凭据记录 -敏感数据从不写入日志
- 环境变量 -凭据应通过环境传递,而不是硬编码
参考文献
许可证
麻省理工学院-使用风险自负。与嘉信理财无关。
