MCP server that surfaces sharp-money movement across 36 sportsbooks — signal feed, not betting oracle.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
tools
-
all_slates
Consolidated ranked list across multiple leagues.
-
ev_candidates
Fast +EV discovery (secondary; validate on /screen).
-
find_best_price
Every book's odds sorted best→worst with spread from best price.
-
get_play_details
Full detail (line history, consensus, movement) for specific game IDs. Use after compact screen query.
-
health_status
Auth freshness, endpoint connectivity.
-
league_presets
Sport-specific ranking presets.
-
player_context
News, tweets, riskFlag for a player. Nitter RSS → X → Google News RSS → ESPN fallback. Source authority scoring.
-
recommended_bets
TIER 1/2 plays across leagues with movementGrade, riskScore, kaiCall, rationale.
-
screen
League-specific ranked rows (NBA, MLB, NHL, NFL, WNBA, UFC, Soccer, NCAAB, NCAAF, Tennis).
-
screen_ranked
Primary. Hydrated ranked rows with consensus, movement, freshness. Supports compact, fields, include, skipHistory.
-
screen_raw
Raw odds payload. bestComps: true for sharper comparison books.
-
sharp_consensus
Multi-window (1h–48h) sharp book consensus analysis.
-
sharp_plays
Target-book plays (Fliff, NoVigApp) with supportive non-target sharp movement.
-
staking_plan
Fractional Kelly stakes (TIER 1=2%, TIER 2=1% of bankroll).
-
ufc_card
First-class shortlist with official plays, best looks, passes.
analyzed commit b46b1d1 · analyzer v17 · 3d ago
skills & prompt files 1
filesystem 9
- fs j17drake-propprofessor-mcp-b46b1d1/lib/propprofessor-auth.js :3
const fs = require('fs'); - fs j17drake-propprofessor-mcp-b46b1d1/lib/propprofessor-picks.js :3
const fs = require('node:fs'); - fs j17drake-propprofessor-mcp-b46b1d1/lib/propprofessor-source-authority.js :3
const fs = require('fs'); - fs j17drake-propprofessor-mcp-b46b1d1/scripts/backtest.js :25
const fs = require('node:fs'); - fs j17drake-propprofessor-mcp-b46b1d1/scripts/check-claims.js :33
const fs = require('fs'); - fs j17drake-propprofessor-mcp-b46b1d1/scripts/check-version-consistency.js :3
const fs = require('fs'); - fs j17drake-propprofessor-mcp-b46b1d1/scripts/export-ranked-screen.js :3
const fs = require('fs'); - fs j17drake-propprofessor-mcp-b46b1d1/scripts/pp-login.js :4
const fs = require('node:fs'); - fs j17drake-propprofessor-mcp-b46b1d1/scripts/query-propprofessor.js :5
const fs = require('node:fs');
shell / exec 5
- shell j17drake-propprofessor-mcp-b46b1d1/lib/propprofessor-news-sources.js :3
const cp = require('child_process'); - shell j17drake-propprofessor-mcp-b46b1d1/lib/propprofessor-player-context.js :3
const cp = require('child_process'); - shell j17drake-propprofessor-mcp-b46b1d1/scripts/check-claims.js :35
const { execSync } = require('child_process'); - shell j17drake-propprofessor-mcp-b46b1d1/scripts/prop-professor.exe.js :17
const { spawn } = require('child_process'); - shell j17drake-propprofessor-mcp-b46b1d1/scripts/query-propprofessor.js :565
const { execSync } = require('child_process');
network 2
- net j17drake-propprofessor-mcp-b46b1d1/lib/propprofessor-player-context.js :249
* @param {number} [options.maxAgeMinutes=60] - Max age of tweets/news to fetch (passed to RSS/news sources). - net j17drake-propprofessor-mcp-b46b1d1/lib/propprofessor-tennis.js :440
const response = await fetch(url, {
declared dependencies 8
- got-scraping@^4.2.1
- superjson@^2.2.6
- @eslint/js@^9.0.0
- c8@^11.0.0
- eslint@^9.0.0
- globals@^17.6.0
- prettier@^3.8.3
- playwright@^1.52.0