PropProfessor MCP
Provides tools to query MLB sports screen data from PropProfessor, including ranked screens, validated positive EV candidates, and sharp plays.
Provides tools to query NBA sports screen data from PropProfessor, including ranked screens, validated positive EV candidates, and sharp plays.
Provides tools to query NHL sports screen data from PropProfessor, including ranked screens, validated positive EV candidates, and sharp plays.
Provides tools to query UFC sports screen data from PropProfessor, including ranked screens, validated positive EV candidates, and sharp plays.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@PropProfessor MCPget NBA moneyline odds"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
PropProfessor MCP โโ Sharp Money Intelligence for AI Agents
PropProfessor MCP is a Model Context Protocol server that lets AI agents see what the sharpest sportsbooks are doing. It screens 36 books across 10 leagues, detects coordinated sharp movement, surfaces steam moves and line lags, and explains the consensus โ so you can decide what to bet, not be told.
Connect it to Claude Desktop, Cursor, Cline, Hermes, or any MCP client. Requires a PropProfessor account.
Honest scope: This is a sharp-money signal feed, not a betting oracle. The ranking pipeline detects what sharp books are doing โ it does not predict outcomes. TIER 1 hit rate sits around chance (~50%). Use it to inform your own handicapping, not to outsource decisions.
๐ Overview
Your AI agent gets 30 tools that surface the same signal feed professional bettors use:
Screen & rank โ query live odds across 36 sportsbooks, ranked by consensus edge and movement
Detect sharp coordination โ Pinnacle, Circa, BookMaker, and BetOnline moving together? That's a signal
Explain the "why" โ every play comes with a human-readable rationale: what moved, on which books, over what timeframe
Natural language routing โ agents call
ask("best plays on Fliff tonight")and get routed to the right tool automatically
The pipeline extracts odds, hydrates line history, ranks by movement quality + consensus strength, assigns a tier and risk score, and returns everything your agent needs to present an informed recommendation. The betting decision stays with the human.
Related MCP server: RDF Explorer
๐ Architecture
PropProfessor MCP follows a layered data pipeline:
API Layer
PropProfessor Backend โ authenticated REST API for live odds, line history, and fantasy data
ESPN Integration โ live scores for tennis time correction and game verification
X / Google News โ player context (injury news, tweets) for bet validation
Ranking Pipeline (Node.js)
Extract โ parse raw odds payloads from the screen API, expand multi-book selections
Hydrate โ enrich each row with 12-hour odds history via the backend API (cached cross-call with 5-min TTL)
Rank โ score by consensus edge (% advantage over sharp consensus), CLV proxy (opening vs current line movement), and league-specific market priorities
Tier โ assign TIER 1โ4 based on movement grade (green/yellow/red) ร risk score (1โ10) ร sharp book confirmation, with hysteresis to prevent thrashing
Format โ output at three verbosity levels:
minimal(plain English),standard(tier/edge/risk/rationale),full(raw movement data)
MCP Server (stdio)
JSON-RPC over stdio โ standard MCP transport with Content-Length framing (NDJSON optional)
30 tools โ organized into situational, analytical, and research tiers
Server-side validation โ enforces input schemas at the server, not trusting the client
Categorized errors โ auth, backend, transport, validation, internal โ each with structured recovery hints
Data Flow
flowchart LR
subgraph BOOKS["36 Sportsbooks"]
B1[Pinnacle]
B2[Circa]
B3[BookMaker]
B4[BetOnline]
B5[NoVigApp]
B6[Fliff]
BN[...30 more]
end
API[PropProfessor API]
subgraph PIPE["Ranking Pipeline"]
E[Extract odds]
H[Hydrate with line history]
R[Rank by movement + consensus]
T[Tier + risk score]
end
subgraph OUTPUT["29 MCP Tools"];
RB[recommended_bets]
SP[sharp_plays]
SC[sharp_consensus]
SR[screen_ranked]
QS[quick_screen]
SB[smart_bet]
ASK[ask]
OTH[...23 more]
end
CLIENT[Your AI Agent<br/>Claude / Cursor / Cline / Hermes]
BOOKS --> API --> PIPE --> OUTPUT --> CLIENT
CLIENT -. "you decide what to bet" .- BOOKS๐ Getting Started
Quick Start
git clone https://github.com/j17drake/propprofessor-mcp.git
cd propprofessor-mcp
npm install
npm link
pp-query init # auth + verification + config โ all at oncepp-query init checks Node version, opens PropProfessor login if needed, runs doctor, and prints ready-to-paste MCP config for your client. Or do it step by step:
pp-query login # browser login
pp-query doctor # verify everything worksRequires a paid PropProfessor account. That's it โ you're ready to connect your AI agent.
MCP Client Setup
Add to your client's MCP config:
{
"mcpServers": {
"propprofessor": {
"command": "node",
"args": ["/path/to/propprofessor-mcp/scripts/propprofessor-mcp-server.js"],
"env": {
"PROPPROFESSOR_MCP_NDJSON": "true",
"AUTH_FILE": "/path/to/.propprofessor/auth.json"
}
}
}
}Replace /path/to/ with your actual install path (e.g. /Users/you/projects/propprofessor-mcp). Supports Claude Desktop, Cursor, Cline, Zed, Continue.dev, Windsurf, and any other stdio-based MCP client. See each client's docs for where MCP config lives.
For short-lived one-off sessions:
{ "command": "npx", "args": ["-y", "propprofessor-mcp"] }Works out of the box โ no git clone needed. Requires a PropProfessor account.
For headless/CI environments (no Chrome):
Set the PROPPROFESSOR_COOKIES env var with your PropProfessor cookies exported as JSON. This bypasses the CDP/Chrome auth path entirely:
{
"mcpServers": {
"propprofessor": {
"command": "npx",
"args": ["-y", "propprofessor-mcp"],
"env": {
"PROPPROFESSOR_COOKIES": "[{\"name\":\"__Secure-next-auth.session-token\",\"value\":\"...\",\"domain\":\".propprofessor.com\"}]"
}
}
}
}CLI Commands
Command | Purpose |
| MCP server (stdio) โ what your AI agent connects to |
| One-command setup (Node check + auth + doctor + config) |
| Browser login to PropProfessor |
| Full diagnostic check |
Hermes Agent
If you use Hermes Agent:
make install # register MCP server + install default configOr manually: add propprofessor to your mcp_servers in config.yaml. The get_started tool provides on-demand workflow guidance.
Optional: Sharp-money alert cron
make install-cronRuns hourly, delivers TIER 1 plays to your home Telegram channel.
CLI commands
Command | Purpose |
| MCP server (stdio) โ what your AI agent connects to |
| CLI for setup, debug, and quick one-off queries |
| Browser login to PropProfessor |
| Full diagnostic check |
๐ฏ The Natural Language Flow
Agents don't need to memorize tool names. Call ask to parse a user's query, then call the suggested tool:
You: "Tell me the best plays on Fliff tonight"
Agent: ask({ query: "best plays on Fliff tonight" })
โ { parsed: { book: "Fliff" }, suggestedTool: "quick_screen", suggestedArgs: { books: ["Fliff"] } }
Agent: quick_screen({ books: ["Fliff"] })
โ [ranked plays with odds, edge, tier, risk, rationale โ all on Fliff]You say |
| Returns |
"best plays on Novig" |
| Playable bets with player context |
"what should I bet today" |
| TIER 1 & TIER 2 across 10 leagues |
"Tatum over 29.5 points" |
| Injury/news risk check |
"show me MLB sharp plays" |
| Multi-sharp consensus plays |
"line shop Celtics ML" |
| Best price across 36 books |
"validate that Warriors spread play" |
| BET/CONSIDER/PASS verdict |
๐ Available Tools
Quick Situational Checks
Tool | What it does |
| Parse natural language into the right tool + args |
| Returns recommended workflow for casual/intermediate/sharp users |
| List available markets for a sport, with per-book market names (e.g. Soccer โ Draw No Bet) |
| Best plays on any book with sharp consensus + player context |
| One-call: play details + validate_play verdict + best price + staking |
| Top flagged movements with tier, risk, and plain English rationale |
| Injury/availability check on a specific player |
| One-call verdict: re-fetches odds, checks injury news, returns BET/CONSIDER/PASS + playId + drift detection |
| Starting pitchers, park factor, hourly weather, lineup lock for an MLB game |
| Line-shop across all books for the best execution price |
| Auth freshness and endpoint connectivity |
Deeper Signal Analysis
Tool | What it does |
| Plays with independent sharp confirmation across Pinnacle/Circa/BookMaker/BetOnline |
| Multi-window (1hโ48h) sharp movement โ is the move sustained? |
| Full ranked data for a (league, market) pair with consensus and movement metadata |
| Consolidated ranked list across multiple leagues in one call |
| Sport-specific ranking weights and sharp-book reference sets |
| Line movement and steam move alerts since last check |
| Fast +EV discovery โ validate on |
| UFC card shortlist with official plays, best looks, and pass notes |
Research & Bet Management
Tool | What it does |
| Line history for specific game IDs |
| Fractional Kelly sizing (TIER 1: 2%, TIER 2: 1% of bankroll) |
| DFS-style fantasy picks (PrizePicks, Underdog โ requires Fantasy Optimizer sub) |
| Track your own bet outcomes |
| View logged bets and win rate / P&L |
| Hide/unhide bets on the fantasy table |
| Reset tier trajectory tracking for a fresh session |
Output Tuning
Every tool accepts:
Parameter | Values | What it does |
|
| Controls explanation depth and field output |
|
| Strips line history and debug payloads โ reduces response size by ~90% |
|
| Return only specified fields per row |
quick_screen and recommended_bets additionally accept:
Parameter | Values | What it does |
|
| Date filter. |
|
| Max plays shown per game in |
|
| When |
|
| Run player_context research on each returned play and attach |
|
| Max final plays to run research on. Bounds payload size on large scans. |
Player research is ON by default in
quick_screenandrecommended_bets(passincludeResearch: falseto disable). It's scoped to the final returned plays and de-duplicated per game, soresearchalways maps 1:1 to what you got back. On a huge unfiltered scan, lowerresearchLimitor useliteif the response nears the transport cap.
cardWindowhonesty: whentodayis alive and next-day rows are merged, the response reportscardWindow: "today"(not tomorrow's date) plusnextDayMerged: trueandnextDayDate. Earlier builds mislabeled this as tomorrow โ that bug is fixed.
Tier consistency: as of 2.8.x,
tierCacheis cleared at the start of every MCP screen call (quick_screen,recommended_bets,screen_ranked,validate_play). A given play's tier is therefore stable within a call and recomputed fresh per call โ no cross-call drift from stale hysteresis state.
verbosity: minimalreturns a plain-English SUMMARY STRING, not structured JSON โ agents that need to parse the response must usestandard/full, OR passparseable: trueonminimalto get a structuredplaysarray next to the summary.
Tool Surface Modes
Set PROPPROFESSOR_MCP_MODE at server boot to control how many tools the agent sees on tools/list:
Mode | Default | Tools exposed | Best for |
| โ yes | 29 | Sharp users โ every discovery, screen, research tool |
| no | 13 | Casual / intermediate agents โ covers the full workflow (discover โ drill-down โ validate โ track) without overwhelming the tool catalog |
Lite mode exposes: ask, smart_bet, tonight_bets, recommended_bets, quick_screen, find_best_price, validate_play, get_play_details, player_context, log_pick, get_pick_history, resolve_pick, get_market_registry.
The tools/list response always includes a _meta block so agents can tell which mode is active:
{
"tools": [...],
"_meta": { "mode": "full", "toolCount": 29, "liteToolCount": 13, "fullToolCount": 29 }
}Tool Categories
Every tool carries a category field that groups it by purpose โ agents can use this to mentally cluster the surface rather than reading 29 individual descriptions:
Category | Count | Purpose | Tools |
| 6 | Find plays (scout, multi-league, DFS, +EV) |
|
| 8 | Score / rank plays for a target book |
|
| 3 | Deep dive on a specific play |
|
| 3 | Context data (player news, game weather, alerts) |
|
| 4 | Personal bet log |
|
| 2 | Bookkeeping (cache, hidden bets) |
|
| 3 | Server info / workflow guides |
|
Canonical vs Deprecated Param Names
A handful of params accept both a clean canonical name and a legacy alias โ every existing call site keeps working, and new code can use the cleaner names:
Canonical (prefer) | Deprecated alias | Where |
|
| 13 tools โ |
|
|
|
|
|
|
Deprecated aliases are documented in each schema's description field and are normalized to the canonical key at dispatch time. No code change required for existing callers.
๐งช How the Ranking Works
The pipeline grades every play in 5 steps:
Movement grade โ green (all sharp books aligned), yellow (some signals, some not), red (adverse)
Risk score (1โ10) โ weighted from movement quality, consensus count, CLV strength, execution quality, and freshness
Tier assignment โ lookup table: green + low risk โ TIER 1, green-yellow + moderate โ TIER 2, yellow โ TIER 3, red โ TIER 4
Hysteresis โ a play doesn't thrash between TIER 1 and TIER 3 on small odds changes; tier trajectory is smoothed
Sharp cross-reference โ verifies target-book moves independently against non-target sharp books
Tier system:
Tier | Label | Meaning | Stake |
TIER 1 | Lock | Green movement, risk 1โ3, BET call. All signals aligned. | 2% of bankroll |
TIER 2 | Value | Yellow-green movement, risk 3โ5, BET or CONSIDER. Solid play. | 1% of bankroll |
TIER 3 | Speculative | Yellow movement, risk 5โ7, usually CONSIDER. | Skip or 0.25% max |
TIER 4 | Avoid | Red movement, risk 7+, PASS call. Do not bet. | 0% โ no exceptions |
Full methodology, weight tables, and the tier assignment lookup in docs/METHODOLOGY.md. Backtesting results in docs/BACKTESTING.md.
๐ Integrations
See Quick Start for Hermes Agent setup. The MCP is self-documenting โ agents call get_started to discover the right workflow.
Discord / Telegram Alerts
The Positive EV Command Center is a companion project that monitors PropProfessor for high-EV slips and plays, then pushes them to Discord and Telegram in real-time. It uses the same auth session and API client.
CLI
pp-query is a standalone CLI for one-off queries without an MCP client:
pp-query screen --league NBA --market Moneyline
pp-query recommended --leagues NBA,MLB
pp-query login
pp-query doctor๐ Backtesting
Validated via synthetic scenarios (sharp_move, stable_no_edge, adverse) and daily snapshots of pre-game odds:
node scripts/backtest-synthetic.jsTIER 1 hit rate sits around chance (~50%) โ expected, because the system measures signal quality, not predictive power. See docs/BACKTESTING.md.
โ FAQ
Does this tell me what to bet? No. It surfaces what sharp books are doing. The betting decision is yours.
Do I need a PropProfessor account? Yes. Live data requires a paid subscription at propprofessor.com.
What books does it cover? 36 sportsbooks across 10 leagues. Sharp cross-reference: Pinnacle, Circa, BookMaker, BetOnline.
Is it free? Code is MIT-licensed. Data requires a paid PropProfessor subscription. No paid tier of the MCP itself.
Can I run it without an MCP client? Yes โ pp-query is a standalone CLI.
What if I find a bug? Run pp-query doctor first, then open an issue.
โญ Support
This is free, MIT-licensed software. If it saves you time or makes you money:
โญ Star the repo โ helps others find it
๐ Open an issue when you find a bug
๐ธ Sponsor on GitHub โ funds ongoing development
No paid tier. No upsell. The whole codebase is open and the priority is making it better for the people who use it.
๐ง For Maintainers
npm test # 1396 tests, 0 failures
npm run test:coverage # ~82% statements
npm run lint # clean
npm run format:check # clean (npm run format to fix)
npm run check:version # verifies package.json โ CHANGELOG
npm run smoke:live # end-to-end live smoke (requires auth.json)Release: push a v* tag โ CI runs lint + tests on Node 20 + 22 โ auto-creates the GitHub release.
Docs index
Quick Start โ install, auth, MCP client configs, troubleshooting
Auth & Session Management โ auth flow, session management
CONFIG.md โ env vars, book config
CONTRIBUTING.md โ how to add a tool
SECURITY.md โ auth handling, threat model
MAINTAINERS.md โ release process
docs/METHODOLOGY.md โ full ranking methodology
docs/BACKTESTING.md โ tier validation
docs/MARKET-BOOK-AVAILABILITY.md โ book/market matrix
docs/AGENT_PROMPT.md โ system prompt for agents
docs/RELEASES.md โ full release history
๐ License
MIT. PropProfessor is a paid service; this MCP is an unofficial client built by j17drake, not affiliated with PropProfessor.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/j17drake/propprofessor-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server