使用说明
TastyTrade MCP服务器
A. 模型上下文协议 (MCP)服务器,连接到您的TastyTrade经纪账户,并公开72个交易工具。与官方合作建造 TastyTrade JavaScript SDK 和 DXLink 的 实时市场数据、报价和期权。
适用于 ChatGPT桌面, 克劳德桌面版,或任何兼容MCP的客户端——本地和云中。
特性
- 72个MCP工具 涵盖整个TastTrade API
- 自动身份验证 使用存储的TastyTrade凭据(客户端机密+刷新令牌)
- OAuth 2.1授权服务器 用于ChatGPT和远程MCP客户端(PKCE、动态客户端注册)
- 实时市场数据 通过DXLink(报价、蜡烛、希腊选项)
- 双重运输:stdio(本地)和流式HTTP(云)
- 承载令牌安全 用于云部署
先决条件
- Node.js 20或更晚
- 具有API访问权限的TastTrade帐户(客户端机密和刷新令牌)
安装
git clone <your-repo-url>
cd tastytrade-mcp-server
npm install
npm run build
用法
选项1:本地(stdio)
直接运行服务器,并通过stdio连接MCP客户端。
node build/index.js
ChatGPT桌面
将此添加到您的ChatGPT桌面MCP配置中:
{
"mcpServers": {
"tastytrade": {
"command": "node",
"args": ["/absolute/path/to/build/index.js"]
}
}
}
克劳德桌面版
添加到您的Claude桌面配置(claude_desktop_config.json):
{
"mcpServers": {
"tastytrade": {
"command": "node",
"args": ["/absolute/path/to/build/index.js"]
}
}
}
MCP检查员(用于测试)
npx @modelcontextprotocol/inspector node build/index.js
选项2:云(流式HTTP)
将服务器作为web服务运行,以便MCP客户端可以远程连接。
MCP_TRANSPORT=http MCP_BEARER_TOKEN=your-secret-token node build/index.js
服务器在端口5000上启动(可通过配置 PORT 有人)。
- MCP端点:
https://your-server-url/mcp - 健康检查:
https://your-server-url/health
将您的MCP客户端连接到 /mcp 端点,并将承载令牌包含在 Authorization 头球
Authorization: Bearer your-secret-token
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
MCP_TRANSPORT |
没有 | stdio |
运输方式: stdio (本地)或 http (云) |
MCP_BEARER_TOKEN |
用于保护HTTP端点的云 | - | 秘密令牌 |
TASTYTRADE_CLIENT_SECRET |
是 | - | TastyTrade OAuth客户端密钥(启动时自动加载) |
TASTYTRADE_REFRESH_TOKEN |
是 | - | TastyTrade OAuth刷新令牌(启动时自动加载) |
TASTYTRADE_SANDBOX |
没有 | false |
设置为 true 使用TastyTrade的沙盒/测试环境 |
PORT |
没有 | 5000 |
HTTP服务器端口(仅限云模式) |
TOOL_DISCOVERY_MODE |
没有 | false |
启用动态工具发现模式(见下文) |
动态刀具发现模式
默认情况下,所有工具在启动时都会注册,并在每次调用时向LLM广播(每个请求约12000-15000个模式开销令牌)。对于对令牌敏感的部署,您可以启用 动态工具发现 模式,将初始模式开销减少到约200-500个令牌。
启用发现模式
TOOL_DISCOVERY_MODE=true node build/index.js
启用后,启动时只显示三个轻量级元工具:
| 元工具 | 描述 |
|---|---|
list_tool_categories |
返回顶级工具类别(账户、订单、市场数据、工具、观察名单、风险、授权),并计算每个类别中的工具数量 |
search_tools |
对所有工具名称和描述进行关键字搜索——返回具有一句话摘要的匹配工具 |
get_tool_details |
按名称返回特定工具的完整输入模式和注释 |
完整的工具模式存储在内部注册表中,但 不广播 在最初的背景下,LLM。该模型根据需要发现和获取模式。
交互流程示例
User: What's the current price of AAPL?
Model → list_tool_categories()
← "Market Data (7 tools), Account (9 tools), ..."
Model → search_tools("quote price real-time")
← "get_quote [Market Data]: Get real-time quote data for one or more symbols using DXLink..."
Model → get_tool_details("get_quote")
← Full JSON schema with parameters (symbols, timeoutMs)
Model → get_quote(symbols=["AAPL"])
← { bid: 174.20, ask: 174.22, last: 174.21, ... }
在同一会话中的后续回合中,模型可以跳过发现步骤并调用 get_quote 如果它已经知道对话早期的模式,则直接使用。
向后兼容
当 TOOL_DISCOVERY_MODE 未设置(或设置为 false),所有工具在启动时都会像以前一样注册。现有集成不受影响。
TastyTrade认证
服务器在启动时使用TastyTrade自动进行身份验证 TASTYTRADE_CLIENT_SECRET 和 TASTYTRADE_REFRESH_TOKEN 环境变量。不需要手动身份验证步骤。
若要获取您的客户机密和刷新令牌,请通过TastTrade的开发者门户注册API访问。
使用 check_auth_status 用于验证连接状态或在需要时重试身份验证的工具。
OAuth 2.1授权服务器
对于像ChatGPT这样的远程MCP客户端,该服务器包括一个内置的OAuth 2.1授权服务器,支持:
- PKCE (S256)用于安全授权码交换
- 动态客户端注册 (RFC 7591)用于自动客户入职
- 发现端点 (
/.well-known/oauth-authorization-server,/.well-known/oauth-protected-resource)
OAuth流
- 客户端通过以下方式发现OAuth配置
/.well-known/oauth-protected-resource和/.well-known/oauth-authorization-server - 客户端通过以下方式动态注册
POST /oauth/register - 客户端将用户重定向到
GET /oauth/authorizePKCE挑战 - 用户输入他们的
MCP_BEARER_TOKEN在授权页面上 - 服务器使用授权码重定向回
- 客户端在以下位置交换访问令牌代码
POST /oauth/token使用PKCE验证器 - 客户端使用访问令牌作为MCP请求的承载令牌
可用工具(72)
身份验证(2)
| 工具 | 说明 |
|---|---|
check_auth_status |
检查当前身份验证状态 |
disconnect |
断开与TastyTrade的连接 |
账目(4)
| 工具 | 说明 |
|---|---|
get_customer_accounts |
获取已验证客户的所有帐户 |
get_customer_resource |
获取客户资料信息 |
get_full_account_resource |
获取特定帐户的完整详细信息 |
get_account_status |
获取账户的交易状态 |
平衡与头寸(3)
| 工具 | 说明 |
|---|---|
get_account_balances |
获取账户的当前余额 |
get_positions |
获取一个账户的所有头寸 |
get_balance_snapshots |
获取历史余额快照 |
订单(14)
| 工具 | 说明 |
|---|---|
get_live_orders |
获取账户的实时(未结)订单 |
get_orders |
使用可选过滤功能获取订单 |
get_order |
按ID获取特定订单 |
create_order |
提交新订单 |
order_dry_run |
预览订单而不提交 |
cancel_order |
取消未结订单 |
replace_order |
替换现有订单 |
edit_order |
编辑现有订单 |
create_complex_order |
创建多腿复杂订单 |
cancel_complex_order |
取消复杂订单 |
reconfirm_order |
重新确认订单 |
replacement_order_dry_run |
预览替换订单 |
get_customer_live_orders |
获取所有账户的实时订单 |
get_customer_orders |
获取所有账户的订单 |
仪器(24)
| 工具 | 说明 |
|---|---|
get_equity |
获取特定股权的详细信息 |
get_equity_definitions |
通过过滤获取股权定义 |
get_active_equities |
获取所有活跃股票 |
get_equity_options |
获取某个交易品种的股票期权 |
get_single_equity_option |
获得特定的股票期权 |
get_option_chain |
获取符号的选项链 |
get_nested_option_chain |
获取嵌套选项链 |
get_compact_option_chain |
获得紧凑的选项链 |
get_futures |
获取期货合约 |
get_single_future |
获取特定的期货合约 |
get_future_option_chain |
获取期货期权链 |
get_nested_future_option_chain |
获取嵌套期货期权链 |
get_future_options |
获取未来选项 |
get_single_future_option |
获取特定的未来选项 |
get_futures_products |
获取所有期货产品 |
get_single_future_product |
获取特定的期货产品 |
get_future_option_products |
获取未来的可选产品 |
get_single_future_option_product |
获取特定的未来选项产品 |
get_cryptocurrencies |
获取可用的加密货币 |
get_single_cryptocurrency |
获取特定的加密货币 |
get_warrants |
获取可用的认股权证 |
get_single_warrant |
获得特定的搜查令 |
get_quantity_decimal_precisions |
获取数量小数精度规则 |
search_symbols |
通过文本查询搜索符号 |
市场数据(7)
| 工具 | 说明 |
|---|---|
get_market_metrics |
获取市场指标(IV排名、IV百分位数等) |
get_historical_dividends |
获取历史股息数据 |
get_historical_earnings |
获取历史收益数据 |
get_quote |
通过DXLink获取实时报价 |
get_candles |
通过DXLink获取历史烛台数据 |
get_options_greeks |
通过DXLink获取选项希腊语(delta、gamma、theta、vega、rho) |
get_api_quote_token |
获取DXLink API报价令牌 |
交易记录(3)
| 工具 | 说明 |
|---|---|
get_transactions |
获取帐户的交易历史记录 |
get_transaction |
按ID获取特定交易 |
get_total_fees |
获取帐户的总费用 |
观察名单(9)
| 工具 | 说明 |
|---|---|
get_all_watchlists |
获取所有个人观察名单 |
get_watchlist |
获取特定的观察名单 |
create_watchlist |
创建新的观察列表 |
replace_watchlist |
替换/更新观察名单 |
delete_watchlist |
删除监视列表 |
get_public_watchlists |
获取公共观察名单 |
get_public_watchlist |
获取特定的公共观察名单 |
get_pairs_watchlists |
获取配对交易观察名单 |
get_pairs_watchlist |
获取特定配对观察列表 |
风险与利润(6)
| 工具 | 说明 |
|---|---|
get_margin_requirements |
获取账户的保证金/资本要求 |
estimate_margin_requirements |
估计订单的利润(模拟运行) |
get_effective_margin_requirements |
获取特定交易品种的有效保证金 |
get_position_limit |
获取帐户的头寸限制 |
get_net_liq_history |
获取净清算价值历史记录 |
get_net_liq_value |
获取当前净变现价值 |
提示缓存
Anthropic和OpenAI都支持 快速缓存:当发送到模型的工具定义在连续回合之间相同时,提供者会缓存模式计算,并对后续请求收取正常费率的一小部分。使用73个工具(大约12000-15000个模式开销令牌),缓存可以通过以下方式降低每轮令牌成本 50–90% 在多回合对话中。
它如何与此服务器配合使用
此服务器的设计使工具定义始终在 相同的确定性顺序 在每次启动时:
- 身份验证工具
- 账户工具
- 平衡和定位工具
- 订购工具
- 仪器工具
- 市场数据工具
- 交易工具
- 监视列表工具
- 风险和利润工具
因为顺序永远不会改变,所以将工具列表转发给Anthropic或OpenAI的MCP客户端将在会话内和会话间的每个请求上发送相同的模式前缀,允许提供者从其缓存中提供模式。
验证缓存是否处于活动状态(Anthropic)
当您通过带有工具定义的Anthropic API使用Claude时,响应包括使用统计信息。查找非零 cache_read_input_tokens 字段:
{
"usage": {
"input_tokens": 512,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 14203
}
}
非零 cache_read_input_tokens 该值确认工具模式是从Anthropic的提示缓存中提供的。在新缓存窗口中的第一个请求上,您将看到 cache_creation_input_tokens 相反,这是缓存种子的一次性成本。
HTTP缓存控制标头
服务器设置以下内容 Cache-Control 每种响应类型的标头:
| 端点 | 标题 | 原因 |
|---|---|---|
/.well-known/oauth-protected-resource |
public, max-age=3600 |
稳定的OAuth元数据 |
/.well-known/oauth-authorization-server |
public, max-age=3600 |
稳定的OAuth元数据 |
POST /mcp |
no-store |
动态工具调用可能包含敏感的财务数据 |
GET /mcp 上海证券交易所 no-store |
实时服务器发送的事件流不可缓存 | |
DELETE /mcp |
no-store |
会话拆分响应不可缓存 |
/health |
no-store |
实时服务器状态 |
客户端要求
提示缓存由处理 客户端应用程序,不是这个服务器。当前的MCP SDK没有公开API来注入特定于提供商的 cache_control 注释(例如Anthropic的 {"type": "ephemeral"})到协议级别的工具列表中——这存在于客户端组装的LLM API请求中。要启用缓存,请执行以下操作:
- 无烟煤API:添加
{"type": "ephemeral"}作为cache_control注释到发送到Anthropic API的列表中的最后一个工具定义。此服务器中工具模式的稳定、确定性排序确保了内容哈希在每一轮都匹配。 - OpenAI API:对于超过1024个令牌的提示,会自动进行提示缓存;不需要额外的配置。
在Replit上部署
此项目已配置为在Replit上作为永远在线的VM进行部署:
- 在“答复机密”面板中设置以下机密:
MCP_BEARER_TOKENTASTYTRADE_CLIENT_SECRETTASTYTRADE_REFRESH_TOKEN
- 点击 发布 部署
- 您的MCP端点将在
https://your-replit-url/mcp
项目结构
src/
index.ts - Entry point (dual transport + OAuth 2.1 + bearer auth + TOOL_DISCOVERY_MODE)
tastytrade-client.ts - TastyTrade client wrapper (auto-authentication on startup)
oauth-provider.ts - Built-in OAuth 2.1 authorization server (DCR, PKCE, token management)
auth-page.ts - HTML authorization page rendered during OAuth flow
tools/
tool-registry.ts - Internal registry of all tool definitions (used by discovery mode)
discovery-tools.ts - Meta-tools: list_tool_categories, search_tools, get_tool_details
auth-tools.ts - Authentication tools
account-tools.ts - Account & customer tools
balance-position-tools.ts - Balances & positions
order-tools.ts - Order management
instrument-tools.ts - Instrument lookups
market-data-tools.ts - Market data (DXLink)
transaction-tools.ts - Transaction history
watchlist-tools.ts - Watchlist management
risk-margin-tools.ts - Margin & risk parameters
许可证
麻省理工学院