SnapTrade MCP服务器

一个只读的MCP(模型上下文协议)服务器,通过SnapTrade将AI代理连接到经纪数据。适用于Claude Code、Claude Desktop、Cursor、Windsurf和任何兼容MCP的客户端。
10个工具。只读。没有交易。设计安全。
你能做什么
| 工具 | 说明 |
|---|---|
snaptrade_list_accounts | 列出所有关联的经纪账户 |
snaptrade_get_balance | 账户现金余额 |
snaptrade_get_positions | 当前持有量(股票、ETF) |
snaptrade_get_orders | 带过滤器的订单历史记录 |
snaptrade_get_activities | 交易日志(股息、费用) |
snaptrade_portfolio_summary | 所有账户+余额+头寸在一次通话中 |
snaptrade_search_symbols | 按名称或股票代码查找股票/ETF |
snaptrade_list_brokerages | 支持的经纪公司 |
snaptrade_check_status | API健康检查 |
snaptrade_setup | 生成URL以连接新的经纪公司 |
先决条件
- SnapTrade API证书 一
clientId和consumerKey从 snaptrade.com。注册一个开发人员帐户,并在仪表板中找到您的密钥。 - Python 3.10+
我的API密钥在哪里?
您的SnapTrade凭据永远不会离开您的计算机。事情是这样的:
- 你的
clientId和consumerKey存储在a 本地配置文件 在您的计算机上(或在您自己设置的环境变量中)。 - MCP服务器在启动时读取它们,以通过SnapTrade的API进行身份验证。
- 他们是 从不 发送到您的AI客户端, 从不 包含在工具响应中,以及 从不 记录。
- 服务器是只读的,它不能交易、修改帐户或删除任何内容。
这与任何API集成处理凭据的方式相同。你的钥匙留在你的机器上,就这样。
安装
选项A:pip(推荐)
pip install snaptrade-mcp这将安装 snaptrade-mcp 命令和所有依赖项。
选项B:uvx(无需安装)
如果你有 紫外线 安装后,您可以直接运行服务器,而无需安装任何东西:
uvx snaptrade-mcp这会自动下载并在隔离环境中运行它。
选项C:从源代码安装
git clone https://github.com/l3a0/snaptrade-mcp-server.git
cd snaptrade-mcp-server
pip install .将MCP服务器添加到您的AI客户端
克劳德代码
这 -s user flag将您的凭据存储在您的个人Claude配置中(~/.claude/),不在项目中,所以它们永远不会出现在git中。
claude mcp add snaptrade -s user \
-e SNAPTRADE_CLIENT_ID=your_client_id \
-e SNAPTRADE_CONSUMER_KEY=your_consumer_key \
-- snaptrade-mcp然后重新启动Claude Code并运行 /mcp 验证服务器是否与所有10个工具一起出现。
备选方案: 如果您更喜欢将凭据设置为shell中的环境变量(添加到 ~/.zshrc 或 ~/.bashrc),您可以跳过 -e 旗帜:
# In your ~/.zshrc or ~/.bashrc:
export SNAPTRADE_CLIENT_ID="your_client_id"
export SNAPTRADE_CONSUMER_KEY="your_consumer_key"
# Then register without -e flags:
claude mcp add snaptrade -s user -- snaptrade-mcp克劳德桌面
添加到您的 claude_desktop_config.json (设置>开发人员>编辑配置)。此文件位于您的用户目录中,不属于任何项目。
{
"mcpServers": {
"snaptrade": {
"command": "snaptrade-mcp",
"env": {
"SNAPTRADE_CLIENT_ID": "your_client_id",
"SNAPTRADE_CONSUMER_KEY": "your_consumer_key"
}
}
}
}重新启动克劳德桌面。SnapTrade工具将出现在工具菜单中。
光标
添加 .cursor/mcp.json 在您的项目根目录中。 添加 .cursor/mcp.json 到你的 .gitignore 因此,凭据不会被提交。
{
"mcpServers": {
"snaptrade": {
"command": "snaptrade-mcp",
"env": {
"SNAPTRADE_CLIENT_ID": "your_client_id",
"SNAPTRADE_CONSUMER_KEY": "your_consumer_key"
}
}
}
}ChatGPT(通过可流式传输的http)
ChatGPT需要流式HTTP(--transport streamable-http)使用OAuth 2.0。
第一步——启动隧道 和 吸烟 要获取公共HTTPS URL:
ngrok http 8000
# note the forwarding URL, e.g. https://abc123.ngrok-free.app步骤2——生成OAuth客户端ID和密钥 您将使用此连接器:
python -c "import secrets; print('client_id=' + secrets.token_urlsafe(24)); print('client_secret=' + secrets.token_urlsafe(48))"保存这两个值。您将在ChatGPT和您的 .env 下面的文件。
步骤3——创建连接器 在ChatGPT中(需要Pro、Team、Enterprise或Edu):
- 首选 设置→ Apps,启用 开发者模式,然后单击 创建应用程序
- 设置 MCP服务器URL 到
https://abc123.ngrok-free.app/mcp
- 集 认证 到 OAuth 并注意 回调URL 显示(例如。
https://chatgpt.com/connector/oauth/xxxx)
- 扩展 高级设置 并设置 注册方法 到
User-Defined OAuth Client
- 使用您在步骤2中生成的值填写OAuth客户端ID和secret字段
- 选择 令牌端点身份验证方法:
client_secret_post
- 确认OAuth端点是从您的服务器自动发现的——它们都应该显示您的ngrok主机名
ChatGPT OAuth endpoints auto-discovered
- 点击 创建
步骤4——启动服务器 具有相同的客户端ID和密钥以及步骤3中的回调URL。
填写您的 .env 文件:
SNAPTRADE_CLIENT_ID=your_client_id
SNAPTRADE_CONSUMER_KEY=your_consumer_key
SNAPTRADE_OAUTH_CLIENT_ID=paste-the-client-id-from-step-2
SNAPTRADE_OAUTH_CLIENT_SECRET=paste-the-client-secret-from-step-2
SNAPTRADE_OAUTH_REDIRECT_URI=https://chatgpt.com/connector/oauth/xxxx
SNAPTRADE_PUBLIC_URL=https://abc123.ngrok-free.app然后启动服务器:
set -a && source .env && set +a # export all vars from .env to child processes
snaptrade-mcp --transport streamable-httpStreamable HTTP需要所有四个OAuth环境变量。集 SNAPTRADE_OAUTH_CLIENT_ID 和 SNAPTRADE_OAUTH_CLIENT_SECRET 将您在步骤2中生成并输入到ChatGPT连接器中的确切值。集 SNAPTRADE_OAUTH_REDIRECT_URI 指向上述步骤3中的回调URL(例如。 https://chatgpt.com/connector/oauth/xxxx).集 SNAPTRADE_PUBLIC_URL 指向您的面向公众的基本URL(例如您的ngrok URL),以便OAuth发现元数据通告可访问的端点。
两者 SNAPTRADE_OAUTH_REDIRECT_URI 和 SNAPTRADE_PUBLIC_URL 必须满 https://... URL。无效的URL值可能会导致在CLI达到正常验证错误之前启动失败。
要自定义主机或端口,请执行以下操作:
snaptrade-mcp --transport streamable-http --host 0.0.0.0 --port 3000首次设置
安装后,询问您的AI代理:
“设置我的SnapTrade连接”
这叫 snaptrade_setup,打开浏览器窗口 在运行服务器的计算机上 您在哪里授权您的经纪业务。这也适用于ChatGPT——AI会触发该工具,但浏览器会在本地打开。你只需要做一次。您的用户凭据保存在本地 ~/.snaptrade/config.json.
示例提示
- “我有什么经纪账户?”
- “显示我的完整投资组合摘要”
- “我所有账户的现金余额是多少?”
- “分析我的投资组合的多样化风险”
- “我最近做了什么交易?”
- “搜索苹果股票”
- “SnapTrade支持哪些券商?”
故障排除
服务器连接失败/“重新连接失败”
- 验证软件包是否已安装:
python -c "from snaptrade_mcp.server import main; print('OK')" - 如果使用虚拟环境,请确保
snaptrade-mcp安装在该环境中。
“缺少凭据”错误
- 检查一下
SNAPTRADE_CLIENT_ID和SNAPTRADE_CONSUMER_KEY设置在-e旗帜(克劳德代码)或env块(克劳德桌面/光标)。
“未找到配置”错误
- 跑
snaptrade_setup首先通过MCP服务器连接代理并创建~/.snaptrade/config.json.
“需要OAuth环境变量”/“需要PUBLIC_URL”错误
- 使用Streamable HTTP时会出现这些错误(
--transport streamable-http)没有所需的OAuth环境变量。必须设置所有四个:
- SNAPTRADE_OAUTH_CLIENT_ID --您生成并输入到ChatGPT连接器中的客户端ID - SNAPTRADE_OAUTH_CLIENT_SECRET --您生成并输入到ChatGPT连接器中的匹配客户端密钥 - SNAPTRADE_OAUTH_REDIRECT_URI --来自ChatGPT连接器的回调URL(上述步骤3) - SNAPTRADE_PUBLIC_URL --您面向公众的基本URL(例如您的ngrok转发URL)
“无效URL”启动错误
SNAPTRADE_OAUTH_REDIRECT_URI和SNAPTRADE_PUBLIC_URL必须是有效的绝对值https://URL。- 有效值示例:
- SNAPTRADE_OAUTH_REDIRECT_URI=https://chatgpt.com/connector/oauth/xxxx - SNAPTRADE_PUBLIC_URL=https://abc123.ngrok-free.app
安全
- 只读 --无交易、无账户修改、无删除
- 已隔离凭据 -API密钥从env vars加载,用户机密存储在
~/.snaptrade/config.json(600克)。两者均未出现在工具响应中。 - 无危险操作 --无法删除用户、重置机密或修改任何内容
建筑
snaptrade_mcp/
server.py # All 10 tools, 2 resources, 2 prompt templates
oauth_provider.py # In-memory OAuth 2.0 authorization server (for HTTP transport)
__init__.py # Package marker + version
__main__.py # Entry point (python -m snaptrade_mcp)服务器支持两种传输模式:
- 工作室 (默认)--用于本地MCP客户端(Claude Code、Claude Desktop、Cursor)
- 可流式传输的HTTP (
--transport streamable-http)--用于远程客户端(ChatGPT)。需要SNAPTRADE_OAUTH_CLIENT_ID,SNAPTRADE_OAUTH_CLIENT_SECRET,SNAPTRADE_OAUTH_REDIRECT_URI(来自OAuth客户端的回调URL),以及SNAPTRADE_PUBLIC_URL(您的ngrok URL)用于OAuth 2.0身份验证。
每个工具函数都调用SnapTrade Python SDK,将响应扁平化为干净的JSON,并将其返回给AI客户端。
