tt-agent: A TastyTrade MCP Server
A Model Context Protocol (MCP) server that exposes a TastyTrade brokerage account to LLM agents — execution-ready today with quotes, Greeks, IV metrics, multi-leg orders, and watchlists. Extending toward research and trade framing for options spreads.
Install
uvx tt-agent-mcp
Local development (from source):
git clone https://github.com/fbutera1/tt-agent
cd tt-agent
uv sync
uv run tt-agent
Authentication
OAuth Setup:
- Create an OAuth app at https://my.tastytrade.com/app.html#/manage/api-access/oauth-applications
- Check all scopes, save your client ID and client secret
- Create a "New Personal OAuth Grant" in your OAuth app settings (check all scopes)
- Copy the generated refresh token
- Configure the MCP server with your credentials (see Usage section below)
MCP Tools
Account & Portfolio
account_overview(include=["balances","positions"])- Account balances (including net liquidating value) and open positions.
Market Data & Research
get_quotes(instruments, timeout=10.0)- Real-time quotes for stocks, options, futures, and indices via DXLink streamingget_greeks(options, timeout=10.0)- Greeks (delta, gamma, theta, vega, rho) for equity and futures options via DXLink streamingget_market_metrics(symbols)- IV rank, percentile, beta, liquidity for multiple symbolsmarket_status(exchanges=['Equity'])- Market hours, status, holidays, and current NYC time ('Equity', 'CME', 'CFE', 'Smalls')search_symbols(symbol, limit=10)- Search for symbols by name/ticker
History
get_history(type, days=None, underlying_symbol=None, transaction_type=None, page_offset=0, limit=25)- Transaction history (type="transactions", default 90 days) or order history (type="orders", default 7 days). Paginated — usepage_offsetandlimitfor large result sets. Filter transactions by"Trade"or"Money Movement".
Order Management
place_order(legs, target_value=None, time_in_force="Day", dry_run=false)- Place multi-leg orders with quote-derived mid pricing only. The tool fetches live quotes for the exact resolved instruments, computes the signed net mid, validates the final limit against bid/ask guardrails, and optionally sizes quantity fromtarget_value.quantityis the actual share/contract count.target_value=50000sizes an equity or equity-option order from quote-derived pricing; omitquantityfor single-leg target-value orders. For multi-leg spreads withtarget_value, usequantityonly to express the leg ratio, such as 1:1 or 2:1.- Order prices are aligned to the broker's valid tick grid before submission. Option orders require tastytrade option tick-size data; if it is unavailable, the tool fails before placement instead of submitting an invalid price increment.
- Order actions follow the tastytrade Python SDK contract: equities and options use
Buy to Open,Buy to Close,Sell to Open, orSell to Close; futures useBuyorSell.
replace_order(order_id)- Reprice an existing live order at the current quote-derived mid.cancel_order(order_id)- Cancel an order.list_orders()- Get all live orders.- Tool outputs are compact: quote tables include actionable bid/ask/mid/size fields; order results include compact order, buying-power, fee, warning/error, and sizing summaries.
Watchlist Management
watchlist(action, ...)- Unified watchlist management:action="list"- Nonamereturns compact watchlist metadata (name,group,symbol_count); withname, returns compact symbol entries.action="add"- Add symbols to a watchlist (creates if doesn't exist)action="remove"- Remove symbols from a watchlistaction="delete"- Delete a watchlist
MCP Prompts
- IV Rank Analysis - Automated prompt to analyze IV rank extremes across positions and watchlists for entry/exit opportunities
Usage
Local (stdio)
Add to your MCP client configuration:
{
"mcpServers": {
"tastytrade": {
"command": "uvx",
"args": ["tt-agent-mcp"],
"env": {
"TASTYTRADE_CLIENT_SECRET": "your_client_secret",
"TASTYTRADE_REFRESH_TOKEN": "your_refresh_token",
"TASTYTRADE_ACCOUNT_ID": "your_account_id"
}
}
}
}
TASTYTRADE_ACCOUNT_ID may be omitted only when the OAuth grant exposes one
brokerage account. Set it explicitly when the grant exposes multiple accounts.
Remote (Modal)
Deploy as a remote MCP server on Modal with proxy auth:
uvx modal setup
# Create secrets
uvx modal secret create tt-agent-secrets \
TASTYTRADE_CLIENT_SECRET=your_secret \
TASTYTRADE_REFRESH_TOKEN=your_token \
TASTYTRADE_ACCOUNT_ID=your_account_id # optional for single-account grants
# Create a proxy auth token at https://modal.com/settings/proxy-auth-tokens
# Export your workspace host
export MODAL_HOST=<workspace>--tt-agent-mcp-server.modal.run
# Deploy
uvx modal deploy examples/modal_deploy.py
Clients authenticate with Modal-Key and Modal-Secret headers. See examples/modal_deploy.py.
Programmatic (Python client)
Connect to a remote tt-agent and call tools directly:
# List all tools
uv run examples/mcp_client.py
# Call a tool
uv run examples/mcp_client.py market_status
uv run examples/mcp_client.py get_market_metrics '{"symbols": ["AAPL", "SPY"]}'
See examples/mcp_client.py for the full client code.
Examples
"Get my account balances and current positions"
"What's my net liquidating value?"
"Get real-time quotes for SPY and AAPL"
"Get quotes for a TQQQ call at strike 100 expiring YYYY-MM-DD" (use a concrete listed expiration)
"Get Greeks for an AAPL put at strike 150 expiring YYYY-MM-DD" (use a concrete listed expiration)
"Get Greeks for an /ES call at strike 5800 expiring YYYY-MM-DD" (use a concrete listed expiration)
"Buy to open 100 AAPL shares at mid"
"Buy to open 17 TQQQ calls at strike 100 expiring YYYY-MM-DD" (use a concrete listed expiration)
"Buy $50K of TSLA calls at strike 300 expiring YYYY-MM-DD" (use a concrete listed expiration)
"Place an AAPL 150/155 call spread expiring YYYY-MM-DD" (use a concrete listed expiration)
"Buy one /ES-CONTRACT future at mid" (use a concrete active contract symbol)
"Reprice order 12345 at mid"
"Cancel order 12345"
"Show my live orders"
"Get my trading history from January"
"Get my order history for SPY"
"Get my private watchlists"
"Add TSLA and NVDA to my tech watchlist"
Development
# Run tests
uv run pytest
# Lint / format / type check
uv run ruff check .
uv run ruff format .
uv run pyright tasty_agent tests
# Interactive chat client (requires .env with credentials + OPENAI_API_KEY)
uv run examples/chat.py
# Debug with MCP inspector
npx @modelcontextprotocol/inspector uvx tt-agent-mcp
Releasing
Releases are cut by the maintainer: tag vX.Y.Z on main with a
CHANGELOG.md entry, then uv build + uv publish to PyPI.
Contributing
Public pull requests are not merged. If you'd like to contribute, fork the repo, make it better, and tell the maintainer — it may be pulled in.
Credits
Forked from and credits to ferdousbhai/tasty-agent (Ferdous).
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tt_agent_mcp-0.1.2.tar.gz.
File metadata
- Download URL: tt_agent_mcp-0.1.2.tar.gz
- Upload date:
- Size: 139.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6ac3de2861cbfcbf66a5a0e5b3a7f57417f0038c582ffa2e56c2f0fc2219ddfe
|
|
| MD5 |
69158a99946ee9d150503588552f03bb
|
|
| BLAKE2b-256 |
1660783b52f27a7ee2339e3642443660baa23f73539e4c17c3c5bdf851db6968
|
File details
Details for the file tt_agent_mcp-0.1.2-py3-none-any.whl.
File metadata
- Download URL: tt_agent_mcp-0.1.2-py3-none-any.whl
- Upload date:
- Size: 28.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a93d62fa4641d746606ac8375699672647e8e87e9deaf168ed284a6a2d26cbf0
|
|
| MD5 |
358e7ce88abf6aa83b7667f18062b91e
|
|
| BLAKE2b-256 |
f027ce0f1da80f061c40d0bd5cc27abd58cc6dd11033f1f2126db4b65f3bc342
|