Rot Trading Intelligence
About
The first financial intelligence MCP server. Live AI-scored trading signals from Reddit, SEC filings, FDA approvals, Congressional trades, and 15+ sources. 7 tools, 2 resources, hosted remotely, free, no API key required.
Details
- Author
- Mattbusel
- GitHub stars
- 12
- Downloads
- 335
- Categories
- Finance, Other
Jump to
- Real-time Reddit and RSS feed monitoring with ML/NLP pipeline.
- Options chain analysis with max pain, put/call ratio, and IV skew.
- Paper options trader with BSM mark-to-market and portfolio metrics.
- Signal strength ranking across sentiment, IV rank, volume, momentum, options flow.
- Sentiment aggregator combining Reddit, news, options flow, and technical indicators.
- Backtester for historical Reddit‑generated signals against price data.
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Rot Trading IntelligenceCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
ROT can be started via Docker (docker compose up --build after copying .env.example and setting ROT_REDDIT_CLIENT_ID and ROT_REDDIT_CLIENT_SECRET) or manually with a virtualenv (pip install -e ".[dev]" then python -m rot.app.server). The web dashboard is available at http://localhost:8000/dashboard and API docs at http://localhost:8000/docs. No LLM API key is required — the system runs in stub‑reasoning mode and still generates trade ideas.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"rot trading intelligence": {
"rot": {
"command": "npx",
"args": [
"mcp-remote",
"https://web-production-71423.up.railway.app/mcp/sse"
]
}
}
}
}
McpServers
{
"rot": {
"command": "npx",
"args": [
"mcp-remote",
"https://web-production-71423.up.railway.app/mcp/sse"
]
}
}
Reddit Options Trader (ROT)
> IMPORTANT DISCLAIMER -- READ BEFORE PROCEEDING
>
> ROT is a research and educational tool only. It is a signal intelligence platform, not a trading execution engine. Nothing in this repository constitutes financial advice, investment advice, or a recommendation to buy or sell any security or derivative. Options trading carries significant financial risk -- you can lose 100% of the premium paid. Signal scores and trade ideas are experimental and have not been independently validated. Never risk capital you cannot afford to lose. The authors accept no liability for financial losses arising from use of this software.
---
Round 7 Features
Options Paper Trader (src/rot/paper/options_paper.py)
Simulates options trades with full position tracking, BSM mark-to-market, and portfolio metrics — no real capital required.
| Class / Type | Role |
|---|---|
| OptionPosition | Open position: contract_id, ticker, strategy, strikes, expiry, quantity, entry_premium, current_value, delta, pnl |
| ClosedTrade | Closed trade record with realised_pnl and is_winner |
| PortfolioSummary | Snapshot: total_pnl, open_positions, closed_trades, win_rate, max_drawdown, cash |
| OptionsPaperTrader | open_trade(), close_trade(), mark_to_market(), get_summary() |
Signal Strength Ranker (src/rot/ranking.py)
Ranks tickers by composite signal strength across five dimensions with tiered labels and ASCII leaderboard output.
| Class / Type | Role |
|---|---|
| RankingDimension | SENTIMENT, IV_RANK, VOLUME_SURGE, MOMENTUM, OPTIONS_FLOW |
| TierRanking | ticker, score, tier (S/A/B/C/D), breakdown |
| SignalRanker | rank(tickers, dimension_scores), leaderboard(top_n=10), configurable weights |
---
Round 6 Features
Options Chain Analyzer (src/rot/analytics/chain_analyzer.py)
Fetches and analyses the full options chain for any ticker via yfinance.
| Class / Type | Role |
|---|---|
| OptionQuote | Single contract: strike, bid, ask, mid, iv, delta, gamma, theta, open_interest, volume |
| ChainSnapshot | Full chain for one expiry: ticker, spot_price, expiry, calls, puts, timestamp |
| ChainAnalyzer | fetch_chain(ticker, expiry_target_days=30), max_pain(snapshot), put_call_ratio(snapshot), skew(snapshot) |
API route: GET /api/v1/options/chain/{ticker}?expiry_days=30 — returns max-pain, PCR, IV skew, and the full call/put quote list.
from rot.analytics.chain_analyzer import ChainAnalyzer
analyzer = ChainAnalyzer()
snapshot = analyzer.fetch_chain("AAPL", expiry_target_days=30)
print(analyzer.max_pain(snapshot)) # e.g. 190.0
print(analyzer.put_call_ratio(snapshot)) # e.g. 1.2
print(analyzer.skew(snapshot)) # e.g. 0.05 (5 pp)
Watchlist Manager (src/rot/watchlist.py)
SQLite-backed persistent watchlist with async CRUD and price-alert detection.
| Class / Type | Role |
|---|---|
| WatchlistItem | Item: ticker, added_date, tags, notes, alert_price |
| Watchlist | add(item), remove(ticker), list(), get(ticker), tag_filter(tag), check_alerts(prices) |
API routes:
- GET /watchlist — HTML dashboard page
- GET /api/v1/watchlist — JSON list of all items
- POST /api/v1/watchlist — add an item
- DELETE /api/v1/watchlist/{ticker} — remove an item
from rot.watchlist import Watchlist, WatchlistItem
wl = Watchlist("watchlist.db")
await wl.init()
await wl.add(WatchlistItem(ticker="AAPL", tags=["tech"], alert_price=180.0))
alerts = await wl.check_alerts({"AAPL": 175.0}) # returns AAPL item
---
Round 5 Features
Reddit Signal Backtester (src/rot/backtest/options_backtest.py — Round 5 additions)
Replays historical Reddit-generated signals against price data and evaluates ATM options profitability.
| Class / Type | Role |
|---|---|
| HistoricalSignal | One Reddit signal: ticker, signal_type, date, predicted_direction, confidence |
| BacktestTrade | Simulated trade: entry_price, exit_price, strategy_pnl, holding_days, outcome |
| BacktestResult | Aggregate stats: win_rate, avg_pnl, total_pnl, sharpe, max_drawdown, best_trade, worst_trade |
| BacktestEngine | run(signals, price_data) — simulates ATM call/put entry, walks forward, exits on stop-loss (20%), take-profit (50%), or expiry (30 days) |
from rot.backtest.options_backtest import BacktestEngine, HistoricalSignal
import datetime
signals = [
HistoricalSignal(ticker="AAPL", signal_type="bull_call",
date=datetime.date(2024, 1, 2),
predicted_direction="bullish", confidence=0.75),
]
price_data = {"AAPL": {datetime.date(2024, 1, 2): 185.0, ...}}
result = BacktestEngine().run(signals, price_data)
print(result.win_rate, result.sharpe)
Sentiment Aggregator (src/rot/sentiment/aggregator.py)
Combines Reddit, news, options flow, and technical indicator sentiment into a single composite signal with confidence weighting and recency decay.
| Class / Type | Role |
|---|---|
| SentimentSource | Enum: REDDIT, NEWS, OPTIONS_FLOW, TECHNICAL_INDICATOR |
| SentimentScore | One source score: source, ticker, score [-1,1], confidence, timestamp |
| AggregatedSentiment | Output: composite_score, source_breakdown, signal_strength, n_sources |
| SentimentAggregator | aggregate(scores) — weighted average with per-source weights and exponential recency decay |
Signal strength thresholds: STRONG_BULL (>0.6), BULL (>0.2), NEUTRAL, BEAR (<-0.2), STRONG_BEAR (<-0.6).
from rot.sentiment.aggregator import SentimentAggregator, SentimentScore, SentimentSource
import datetime
scores = [
SentimentScore(SentimentSource.REDDIT, "AAPL", 0.65, 0.8, datetime.datetime.utcnow()),
SentimentScore(SentimentSource.OPTIONS_FLOW, "AAPL", 0.80, 0.9, datetime.datetime.utcnow()),
]
result = SentimentAggregator().aggregate(scores)
print(result.composite_score, result.signal_strength) # e.g. 0.74 STRONG_BULL
---
Round 4 Features
Options Position Tracker (src/rot/portfolio/positions.py)
Provides an in-memory ledger for multi-leg options positions with mark-to-market updates, portfolio Greeks aggregation, and expiry-risk detection.
| Class / Type | Role |
|---|---|
| OptionLeg | One contract leg: contract, side (Long/Short), strike, expiry, premium, quantity, Greeks |
| OptionsPosition | Full position: symbol, strategy, legs, entry_cost, current_value, theta_decay |
| PositionTracker | Ledger: add_position, close_position, mark_to_market, positions_at_risk, portfolio_greeks |
| PortfolioGreeks | Aggregated total_delta, total_gamma, total_theta, total_vega |
| render_positions_page | Renders GET /portfolio/positions as a dark-themed HTML page with position cards |
Delta-adjusted PnL: realized_pnl + unrealized_pnl + theta_decay_collected.
…
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



