loading…
Search for a command to run...
loading…
Standalone Model Context Protocol server for PropProfessor, plus a small query CLI for local analysis.
Standalone Model Context Protocol server for PropProfessor, plus a small query CLI for local analysis.
Release CI Tests Coverage Node License
Lean, fast odds analysis engine for AI agents. 26 tools, 674 tests, all performance features active.
Screens 36+ sportsbooks across NBA, MLB, NHL, NFL, WNBA, UFC, Tennis, Soccer — ranks plays by sharp movement, consensus edge, and steam detection. Built for Model Context Protocol clients.
AI Agent → pp-mcp → PropProfessor API → Ranked plays with movement signals
recommended_bets returns 0 plays when no TIER 1/2 exist instead of surfacing lower-confidence playssharp_plays and novig_screen market param defaults now match actual behavior (ML+Spread+Total)recommended_bets response includes marketsBreakdown showing play count by market typeFull walkthrough: SETUP.md — covers install, auth setup (3 steps), configs for every MCP client, first commands, and troubleshooting.
git clone https://github.com/j17drake/propprofessor-mcp.git
cd propprofessor-mcp
npm install
npm link
pp-query login
pp-query doctor
Two commands after npm link:
| Command | Purpose |
|---|---|
pp-mcp |
MCP server for AI agents (stdio transport) |
pp-query |
CLI for setup, debug, quick checks |
get_started (user_type: "casual") — Get the workflowrecommended_bets (verbosity: "minimal") — Plain English top picksplayer_context — Check injury risk on specific playsThat's it. Three tools.
get_started (user_type: "intermediate") — Get the workflowrecommended_bets (verbosity: "standard") — Structured plays with edge/tier/riskplayer_context — Injury risk checkfind_best_price — Line shop across booksleague_presets — See league-specific ranking weightsget_started (user_type: "sharp") — Get the workflowscreen_ranked (verbosity: "full") — Complete ranked datasharp_consensus — Multi-window sharp movementsharp_plays — Plays with independent sharp supportget_play_details — Line history for specific playsstaking_plan — Kelly sizingplayer_context — Injury risk on final picks| Tool | Purpose | Casual | Intermediate | Sharp |
|---|---|---|---|---|
get_started |
Workflow guide | ✓ | ✓ | ✓ |
recommended_bets |
Top picks | ✓ | ✓ | ✓ |
player_context |
Injury risk | ✓ | ✓ | ✓ |
find_best_price |
Line shopping | ✓ | ✓ | |
league_presets |
Ranking weights | ✓ | ✓ | |
screen_ranked |
Full ranked data | ✓ | ||
sharp_consensus |
Multi-window movement | ✓ | ||
sharp_plays |
Independent sharp support | ✓ | ||
get_play_details |
Line history | ✓ | ||
staking_plan |
Kelly sizing | ✓ | ||
screen_raw |
Raw odds screen | ✓ | ||
ev_candidates |
+EV discovery | ✓ | ||
ufc_card |
UFC event analysis | ✓ | ||
all_slates |
All leagues at once | ✓ | ||
health_status |
System health | ✓ | ✓ | ✓ |
screen |
League screen | ✓ | ||
novig_screen |
NoVigApp-specific screen | ✓ | ✓ | |
hide_bet |
Hide a bet | ✓ | ✓ | |
unhide_bet |
Unhide a bet | ✓ | ✓ | |
clear_hidden_bets |
Reset hidden bets | ✓ | ✓ | |
get_hidden_bets |
List hidden bets | ✓ | ✓ | |
get_pick_history |
View logged picks | ✓ | ✓ | |
get_pick_stats |
Personal win rate + P&L | ✓ | ✓ | ✓ |
get_alerts |
Line movement alerts | ✓ | ||
log_pick |
Log your bet | ✓ | ✓ | ✓ |
resolve_pick |
Mark bet as won/lost | ✓ | ✓ | ✓ |
mcp_servers:
propprofessor:
command: node
args:
- /path/to/propprofessor-mcp/scripts/propprofessor-mcp-server.js
enabled: true
env:
AUTH_FILE: /path/to/.propprofessor/auth.json
PROPPROFESSOR_MCP_NDJSON: 'true'
Optional token compression for smaller context usage: install caveman-shrink globally, set command: caveman-shrink, and add node + server path to args.
See SETUP.md for client-specific configs. The server runs via:
{
"mcpServers": {
"propprofessor": {
"command": "node",
"args": ["/path/to/propprofessor-mcp/scripts/propprofessor-mcp-server.js"],
"env": {
"AUTH_FILE": "/path/to/.propprofessor/auth.json",
"PROPPROFESSOR_MCP_NDJSON": "true"
}
}
}
}
| Tool | Description |
|---|---|
screen_ranked |
Primary. Hydrated ranked rows with consensus, movement, freshness. Supports compact, fields, include, skipHistory. |
screen |
League-specific ranked rows (NBA, MLB, NHL, NFL, WNBA, UFC, Soccer, NCAAB, NCAAF, Tennis). |
screen_raw |
Raw odds payload. bestComps: true for sharper comparison books. |
all_slates |
Consolidated ranked list across multiple leagues. |
get_play_details |
Full detail (line history, consensus, movement) for specific game IDs. Use after compact screen query. |
| Tool | Description |
|---|---|
sharp_plays |
Target-book plays with independently confirmed sharp movement. Cross-references Pinnacle, Circa, BookMaker, BetOnline to verify supportive movement on the same game+selection. Only returns Bet candidate when a non-target sharp book confirms the move. |
sharp_consensus |
Multi-window (1h–48h) sharp book consensus analysis. |
| Tool | Description |
|---|---|
find_best_price |
Every book's odds sorted best→worst with spread from best price. |
| Tool | Description |
|---|---|
player_context |
News, tweets, riskFlag for a player. Nitter RSS → X → Google News RSS → ESPN fallback. Source authority scoring. |
| Tool | Description |
|---|---|
recommended_bets |
TIER 1/2 plays across leagues with movementGrade, riskScore, kaiCall, rationale. |
staking_plan |
Fractional Kelly stakes (TIER 1=2%, TIER 2=1% of bankroll). |
ev_candidates |
Fast +EV discovery (secondary; validate on /screen). |
| Tool | Description |
|---|---|
ufc_card |
First-class shortlist with official plays, best looks, passes. |
| Tool | Description |
|---|---|
hide_bet / unhide_bet |
Toggle fantasy optimizer visibility per bet. |
get_hidden_bets / clear_hidden_bets |
List or clear all hidden bets. |
| Tool | Description |
|---|---|
health_status |
Auth freshness, endpoint connectivity. |
league_presets |
Sport-specific ranking presets. |
All screen/recommended/staking tools support these params:
| Flag | Effect |
|---|---|
compact: true |
~90% smaller response. Retains movement signals (steamMove, consensusEdge, movementLabel). Does NOT skip history hydration. |
skipHistory: true |
Skips odds history hydration entirely. Use when you only need current odds/edges. |
fields: ["game","selection","odds","edge","tier","kai"] |
Selective field return (overrides compact). |
include: ["resultMeta"] |
Top-level section filtering. |
Find top NBA moneyline plays on screen right now (compact=true).
Show TIER 1/2 plays across NBA, MLB, NHL with player context for top 3.
Scan Fliff/NoVigApp sharp plays with supportive movement (includePasses=true).
What's the best price for Lakers moneyline across all books?
Get full line history for game ID 12345 on NBA screen.
pp-query login # automated browser login (requires playwright)
pp-query doctor # full setup check
pp-query health # quick health
pp-query screen --league NBA # ranked screen
pp-query nba --market Moneyline # league shorthand
pp-query tennis --limit 10 # tennis
pp-query sharp-plays --book Fliff # sharp plays
pp-query ufc-card --book NoVigApp # UFC card
pp-query all-slates # consolidated
pp-query presets # ranking presets
pp-query list # command inventory
The MCP uses three book categories:
Books you actually place bets on. Pass to sharp_plays, recommended_bets, screen:
{ "targetBooks": ["Fliff", "NoVigApp", "Rebet"] }
Books whose line movement signals sharp action. Pass to sharp_plays, sharp_consensus, screen_ranked:
{ "sharpBooks": ["Pinnacle", "Circa", "BookMaker", "BetOnline"] }
Books to show in find_best_price or screen_raw:
{ "books": ["Pinnacle", "FanDuel", "DraftKings", "NoVigApp"] }
Pre-configured in lib/propprofessor-sharp-books.js:
| Sport | Main Market | Props |
|---|---|---|
| NBA | Circa, Pinnacle, BookMaker, BetOnline, DraftKings | FanDuel, BookMaker, PropBuilder, NoVigApp, Pinnacle |
| NFL | Circa, Pinnacle, BookMaker, NoVigApp, FanDuel | Pinnacle, FanDuel, BookMaker, Circa, BetOnline |
| MLB | Pinnacle, Circa, BookMaker, BetOnline, DraftKings, BetMGM | Circa, FanDuel, PropBuilder, Pinnacle, DraftKings, Bet365 |
| Others | Pinnacle, Polymarket, Kalshi, BetOnline, Circa | Same |
| Variable | Default | Description |
|---|---|---|
AUTH_FILE |
~/.propprofessor/auth.json |
Auth file path |
PROPPROFESSOR_MCP_NDJSON |
(required) | Enable NDJSON framing |
PROPPROFESSOR_CACHE_TTL_MS |
60000 |
Response cache TTL (ms) |
PROPPROFESSOR_CACHE_MAX |
50 |
Max cache entries (LRU) |
LOCAL_TIMEZONE |
America/Chicago |
CLI display timezone |
| Issue | Fix |
|---|---|
pp-query doctor auth missing |
Export fresh session to ~/.propprofessor/auth.json |
| Endpoint check fails | Session stale — re-login and re-export |
| MCP client won't start | Run pp-query doctor; ensure caveman-shrink on PATH if using Hermes config |
| Large responses timeout | Use compact: true and/or fields param |
| No Bet candidates returned | Sharp book cross-reference requires overlap between target book and sharp book screens. Try different sharpBooks or check emptyState.failureBreakdown for reasons. |
| ChatGPT | Not supported for local stdio; use remote MCP endpoint |
| Tool | Status | Notes |
|---|---|---|
screen / screen_ranked |
Healthy | Primary discovery path |
sharp_plays |
Healthy | Sharp book cross-reference confirms NoVigApp/Fliff plays against Pinnacle, Circa, BookMaker, BetOnline. Only returns Bet candidate with independent sharp confirmation. |
recommended_bets |
Healthy | Returns 0 plays when no TIER 1/2 opportunities exist. Expected, not a bug. |
ev_candidates |
Healthy | Fast +EV discovery; validate with /screen |
npm test (674 passing, includes live API integration tests)npm run smoke:live (requires auth.json)npm run lintnpm run format:checkv* tag → GitHub Actions creates release automaticallylib/propprofessor-tool-definitions.jsВыполни в терминале:
claude mcp add propprofessor-mcp -- npx CSA PROJECT - FZCO © 2026 IFZA Business Park, DDP, Premises Number 31174 - 001
Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.