tastytrade-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tastytrade-mcpshow my account balances"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tastytrade-mcp
MCP server for the tastytrade brokerage API, built in TypeScript on the official @tastytrade/api SDK. Runs over stdio.
This is a rebuild of the earlier Python tastytrade_mcp server with a deliberately leaner surface: single-tenant, env-var auth, no database, and only tools backed by real API endpoints.
Setup
No clone, no build — npx installs straight from this repo and compiles automatically on first run. You need Node 20+ and SSH access to this GitHub repo (the same git@github.com key you use for pushing).
Create an OAuth client and a personal-grant refresh token at my.tastytrade.com → Manage → API Access. You need the client secret and the refresh token (access tokens are generated and refreshed automatically).
Put the secrets in your environment (shell profile, or a gitignored
.envloaded by direnv — never in a file you commit):export TASTYTRADE_CLIENT_SECRET="..." export TASTYTRADE_REFRESH_TOKEN="..."Register with your MCP client.
Project
.mcp.json(Claude Code) — safe to commit..mcp.jsonsupports${VAR}environment-variable expansion, so the file holds only references; values are read from the environment Claude Code was launched in. If a variable is missing, the config fails to load rather than silently sending an empty secret:{ "mcpServers": { "tastytrade": { "command": "npx", "args": ["-y", "git+ssh://git@github.com/bholzer/tastytrade-mcp.git"], "env": { "TASTYTRADE_CLIENT_SECRET": "${TASTYTRADE_CLIENT_SECRET}", "TASTYTRADE_REFRESH_TOKEN": "${TASTYTRADE_REFRESH_TOKEN}", "TASTYTRADE_ENVIRONMENT": "${TASTYTRADE_ENVIRONMENT:-production}" } } } }⚠️ Don't use
claude mcp add --scope project --env TASTYTRADE_CLIENT_SECRET=...— that writes the literal secret value into.mcp.json, which is exactly the file that gets committed. Write the${VAR}form by hand as above.One-liner (Claude Code, user scope).
claude mcp adddefaults to local/user config (~/.claude.json), which never leaves your machine, so passing values directly is acceptable there:claude mcp add tastytrade \ --env TASTYTRADE_CLIENT_SECRET="$TASTYTRADE_CLIENT_SECRET" \ --env TASTYTRADE_REFRESH_TOKEN="$TASTYTRADE_REFRESH_TOKEN" \ -- npx -y git+ssh://git@github.com/bholzer/tastytrade-mcp.gitClaude Desktop.
claude_desktop_config.jsondoes not support${VAR}expansion — you have to paste the values in. That file is local-only (not committed), but be aware the secrets sit in plaintext on disk.The first launch takes ~30s while npm clones and compiles; after that it starts from cache. To pin a specific version, append a tag or commit:
...tastytrade-mcp.git#v1.0.0.
Updating
npx caches the install. To pick up new commits:
npx clear-npx-cache # then the next launch re-installs from HEAD(Or pin to tags and bump the tag in your config.)
Running from a local checkout (development)
claude mcp add tastytrade \
--env TASTYTRADE_CLIENT_SECRET="$TASTYTRADE_CLIENT_SECRET" \
--env TASTYTRADE_REFRESH_TOKEN="$TASTYTRADE_REFRESH_TOKEN" \
-- node /path/to/tastytrade-mcp/dist/index.jsEnvironment variables
Variable | Required | Description |
| yes | OAuth client secret |
| yes | OAuth personal-grant refresh token |
| no |
|
| no | OAuth scopes, default |
Related MCP server: ib-async-mcp
Tools (18)
System
health_check— verify credentials, report environment and customer.
Accounts & portfolio
get_accounts— list accounts.get_balances— cash, net liq, buying power, margin usage.get_positions— open positions, filterable by symbol/underlying, optional marks.get_transactions— transaction history with date/symbol/type filters and paging.get_net_liq_history— historical net liquidating value (1d–all).get_margin_requirements— margin/buying-power requirements report.
Market data
search_symbols— symbol search.get_instrument— full instrument definition (tick size, streamer symbol, …) for equities, options, futures, future options, crypto.get_market_metrics— IV rank/percentile, liquidity, beta, earnings/dividend dates.get_option_chain— nested option chain with expiration/DTE/strike/type filters; returns an expiration summary when unfiltered to keep responses small.get_quotes— live bid/ask, last trade, OHLC summary, and Greeks (for options) via the dxLink websocket streamer. Accepts equity, OCC option, futures, and future-option symbols.
Trading
create_order— 1–4 leg orders for any instrument type. Dry-run by default: returns the preview (buying-power effect, fees, warnings) without placing anything; requires explicitdry_run: falseto submit.list_orders— order history or live working orders.get_order— single order status.cancel_order— cancel one order.replace_order— modify price/type/TIF of a working order.cancel_all_orders— cancel every working order in an account (optionally one underlying).
Differences from the Python server
OAuth only (the v7 JS SDK no longer supports session login as a client config). Sandbox use requires a cert-environment OAuth client instead of sandbox username/password.
Dropped: multi-user database mode, encrypted token storage, shortcuts, and tools that had stub/fake implementations (fake streaming endpoints, correlation analysis, opportunity scanning). The persistent "emergency state" machinery is replaced by the real
cancel_all_ordersaction.set_stop_loss/set_take_profitare expressible throughcreate_order(order_type: "Stop"/"Limit"with closing legs).
Development
npm run watch # incremental compile
npm start # run the built serverMaintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bholzer/tastytrade-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server