Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugins/tastytrade/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "tastytrade",
"version": "0.3.0",
"version": "0.4.0",
"description": "MCP server for the TastyTrade Open API: brokerage accounts, positions, market data, option chains, transactions, and order preview.",
"author": {
"name": "Walker Hughes"
Expand Down
9 changes: 7 additions & 2 deletions plugins/tastytrade/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: lint lint-fix format typecheck check test test-unit test-integration coverage install-hooks validate-tasks mock-api benchmark-build benchmark benchmark-view
.PHONY: lint lint-fix format typecheck check selftest test test-unit test-integration coverage install-hooks validate-tasks mock-api benchmark-build benchmark benchmark-view

lint:
uv run ruff check .
Expand All @@ -12,7 +12,12 @@ format:
typecheck:
uv run mypy src/

check: lint typecheck test-unit
check: lint typecheck selftest test-unit

# Skill scripts are shipped payload but live outside src/, so pytest never sees
# them. Each carries its own assertions; this is what runs them.
selftest:
python3 scripts/calendars.py --selftest

test:
uv run pytest
Expand Down
23 changes: 23 additions & 0 deletions plugins/tastytrade/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,29 @@ Authentication uses the OAuth2 refresh-token flow with automatic token refresh.
`TT_ENABLE_TRADING=true`, **and** each call must pass `confirm=true`. Otherwise the order is not
sent and the previewed effect is returned. Always call `preview_order` first.

## Skills

| Skill | What it does |
|---|---|
| `earnings-calendars` | Analyse an option chain for calendar spreads around an earnings event and rank them by risk-adjusted return. |

`earnings-calendars` decomposes the vol term structure into base vol plus a one-time event
jump, then prices every candidate calendar against three move regimes using real bid/ask.
The screening rule it enforces is that a calendar only has edge if its profit band is wider
than the implied expected move, which is usually not the case and is the point.

Its analysis runs in [`scripts/calendars.py`](scripts/calendars.py), which is standard
library only (no numpy) and self-testing:

```bash
python3 scripts/calendars.py --selftest
python3 scripts/calendars.py fit skills/earnings-calendars/reference/pltr-2026-08-03.json
python3 scripts/calendars.py rank skills/earnings-calendars/reference/pltr-2026-08-03.json
```

That reference file is a real PLTR chain captured the afternoon of its 2026-08-03 print, and
doubles as a regression fixture. The skill never places orders; it is analysis only.

## Architecture

The design follows the Honeycomb MCP: a few curated tools, responses shaped for a model rather
Expand Down
Loading
Loading