tastytrade-mcp

tastytrade-mcp

MCP server for the tastytrade brokerage API, providing tools for account management, market data, and order execution.

Category
Visit Server

README

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).

  1. 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).

  2. Put the secrets in your environment (shell profile, or a gitignored .env loaded by direnv — never in a file you commit):

    export TASTYTRADE_CLIENT_SECRET="..."
    export TASTYTRADE_REFRESH_TOKEN="..."
    
  3. Register with your MCP client.

    Project .mcp.json (Claude Code) — safe to commit. .mcp.json supports ${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 add defaults 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.git
    

    Claude Desktop. claude_desktop_config.json does 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.js

Environment variables

Variable Required Description
TASTYTRADE_CLIENT_SECRET yes OAuth client secret
TASTYTRADE_REFRESH_TOKEN yes OAuth personal-grant refresh token
TASTYTRADE_ENVIRONMENT no production (default) or sandbox (cert environment)
TASTYTRADE_SCOPES no OAuth scopes, default read trade

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 (1dall).
  • 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 explicit dry_run: false to 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_orders action.
  • set_stop_loss / set_take_profit are expressible through create_order (order_type: "Stop" / "Limit" with closing legs).

Development

npm run watch   # incremental compile
npm start       # run the built server

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured