Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

BetSlip Doctor

REMOTE · API.BETSLIPDOCTOR.AI

Your agent grades every slip A+ to F-, links your books and tracks your record. No wager placement.

0 this week 89 Trust /100

Last scanned (8 hours ago)

Scores higher than 97% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Entertainment and Games

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security94
Transport & Reachability100
Schema Quality & AI Usability73
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 13789 tokens (~148/item across 93 items; 92 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management94
  • Stability check failed: schema churn in the 30 days we've observed: 1 tool removals, 2 breaking changes, 0 auth/transport breaks, 58 additions. See how to fix → Fail
Tool Coverage76
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 15% of tool parameters carry a description.Partial
  • Structured output schemas are declared (11% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 94 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities73
  • Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
  • Supports UI / widget rendering.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 0
    • Tool “get_grade_report” rewrote its description, which is the text the model reads security
    • Tool “grade_settings” rewrote its description, which is the text the model reads security
    • Tool “grade_slip” rewrote its description, which is the text the model reads security
    • Tool “show_saved_grade” rewrote its description, which is the text the model reads security
  • 3 Nov 26 0
    • Tool “get_league_order” rewrote its description, which is the text the model reads security
  • 1 Nov 26 0
    • Resource “bsd-customer-cards” now points somewhere else: ui://bsd/customer-cards-v3.html → ui://bsd/customer-cards-v4.html security
    • The server rewrote its instructions, which are the text every model session reads security
    • New tool “doctor_actions”, which the server declares destructive security
    • New tool “tail_social”, which the server declares destructive security
    • Tool “add_doctor_parlay_to_slip” rewrote its description, which is the text the model reads security
    • Tool “copy_tail_slip” rewrote its description, which is the text the model reads security
    • Tool “get_grade_report” rewrote its description, which is the text the model reads security
    • Tool “get_league_order” rewrote its description, which is the text the model reads security
    • Tool “get_todays_board” rewrote its description, which is the text the model reads security
    • Tool “list_grade_jobs” rewrote its description, which is the text the model reads security
    • Tool “price_shop_slip” rewrote its description, which is the text the model reads security
    • Tool “search_markets” rewrote its description, which is the text the model reads security
    • Tool “show_saved_grade” rewrote its description, which is the text the model reads security
    • Tool “tail_post” rewrote its description, which is the text the model reads security
    • Tool “tail_read” rewrote its description, which is the text the model reads security
    • Tool “price_shop_slip” no longer declares itself destructive security
    • Schema quality: 121 → 146 ▼ functional
    • “price_shop_slip” added a required parameter “ticketId”, so existing callers break ▼ functional
    • “price_shop_slip” dropped the required parameter “legs” ▼ functional
    • Server version: 1.3.0 → 1.6.0 functional
    • New tool “account_settings” functional
    • New tool “check_slip” functional
    • New tool “get_player_research” functional
    • New tool “history_actions” functional
    • New tool “look_up_fact” functional
    • New tool “notifications” functional
    • New tool “read_pasted_slip” functional
    • New tool “save_tail_post” functional
    • New tool “ticket_actions” functional
    • “get_history_summary” added an optional parameter “id” cosmetic
    • “get_history_summary” added an optional parameter “params” cosmetic
    • “get_tracked_slips” added an optional parameter “ticketId” cosmetic
    • “price_shop_slip” added an optional parameter “books” cosmetic
    • “tail_read” added an optional parameter “params” cosmetic
    • “tail_read” added an optional parameter “replyId” cosmetic
    • “get_history_summary” reworded the description of “recordId” cosmetic
    • “tail_post” reworded the description of “active” cosmetic
    • “tail_post” reworded the description of “postId” cosmetic
    • “price_shop_slip” dropped the optional parameter “bookKey” cosmetic
    • “price_shop_slip” dropped the optional parameter “intent” cosmetic
    • “price_shop_slip” dropped the optional parameter “jurisdiction” cosmetic
    • Tool “create_tracked_slip” changed its title: Save a slip → Save an app ticket cosmetic
  • 31 Oct 26 0
    • Tool “get_todays_board” rewrote its description, which is the text the model reads security
    • “get_todays_board” added an optional parameter “sport” cosmetic
  • 29 Oct 26 0
    • Tool “get_todays_board” rewrote its description, which is the text the model reads security
  • 28 Oct 26 0
    • Tool “get_todays_board” rewrote its description, which is the text the model reads security
    • “get_todays_board” added an optional parameter “includeStatus” cosmetic
    • “get_todays_board” added an optional parameter “mode” cosmetic
  • 25 Oct 26 0
    • Tool “get_league_order” rewrote its description, which is the text the model reads security
  • 24 Oct 26 0
    • Tool “add_doctor_parlay_to_slip” rewrote its description, which is the text the model reads security
    • Tool “cancel_doctor_reply” rewrote its description, which is the text the model reads security
    • Tool “cancel_grade” rewrote its description, which is the text the model reads security
    • Tool “connect_sportsbook” rewrote its description, which is the text the model reads security
    • Tool “doctor_conversation” rewrote its description, which is the text the model reads security
    • Tool “fix_grade_leg” rewrote its description, which is the text the model reads security
    • Tool “forget_doctor_note” rewrote its description, which is the text the model reads security
    • Tool “get_bettor_profile” rewrote its description, which is the text the model reads security
    • Tool “get_doctor_conversation” rewrote its description, which is the text the model reads security
    • Tool “get_doctor_events” rewrote its description, which is the text the model reads security
    • Tool “get_doctor_job” rewrote its description, which is the text the model reads security
    • Tool “get_doctor_memory” rewrote its description, which is the text the model reads security
    • Tool “get_doctor_parlays” rewrote its description, which is the text the model reads security
    • Tool “get_doctor_picks” rewrote its description, which is the text the model reads security
    • Tool “get_doctor_quota” rewrote its description, which is the text the model reads security
    • Tool “get_grade_evidence” rewrote its description, which is the text the model reads security
    • Tool “get_grade_job” rewrote its description, which is the text the model reads security
    • Tool “get_grade_progress” rewrote its description, which is the text the model reads security
    • Tool “get_grade_report” rewrote its description, which is the text the model reads security
    • Tool “get_league_order” rewrote its description, which is the text the model reads security
    • Tool “get_saved_reports” rewrote its description, which is the text the model reads security
    • Tool “get_tail_feed” rewrote its description, which is the text the model reads security
    • Tool “get_tail_post” rewrote its description, which is the text the model reads security
    • Tool “grade_slip” rewrote its description, which is the text the model reads security
    • Tool “list_doctor_conversations” rewrote its description, which is the text the model reads security
    • Tool “list_grade_jobs” rewrote its description, which is the text the model reads security
    • Tool “open_doctor_conversation” rewrote its description, which is the text the model reads security
    • Tool “preview_tail_post” rewrote its description, which is the text the model reads security
    • Tool “price_shop_slip” rewrote its description, which is the text the model reads security
    • Tool “publish_tail_post” rewrote its description, which is the text the model reads security
    • Tool “quote_doctor_reply” rewrote its description, which is the text the model reads security
    • Tool “quote_grade” rewrote its description, which is the text the model reads security
    • Tool “remember_doctor_note” rewrote its description, which is the text the model reads security
    • Tool “scan_slip” rewrote its description, which is the text the model reads security
    • Tool “set_show_my_record” rewrote its description, which is the text the model reads security
    • Tool “set_synced_record_consent” rewrote its description, which is the text the model reads security
    • Tool “share_graded_ticket_to_tail” rewrote its description, which is the text the model reads security
    • Tool “show_doctor_conversation” rewrote its description, which is the text the model reads security
    • Tool “show_saved_grade” rewrote its description, which is the text the model reads security
    • Tool “show_tail_feed” rewrote its description, which is the text the model reads security
    • Tool “show_tail_post” rewrote its description, which is the text the model reads security
    • Tool “start_doctor_reply” rewrote its description, which is the text the model reads security
    • Tool “start_grade” rewrote its description, which is the text the model reads security
    • Tool “tail_hot” rewrote its description, which is the text the model reads security
    • Tool “tail_my_posts” rewrote its description, which is the text the model reads security
    • Tool “tail_post” rewrote its description, which is the text the model reads security
    • Tool “tail_react” rewrote its description, which is the text the model reads security
    • Tool “tail_read” rewrote its description, which is the text the model reads security
    • Schema quality: 134 → 119 ▲ functional
    • Tool “disconnect_sportsbook” now declares an output schema ▲ functional
    • Tool “fix_grade_leg” now declares an output schema ▲ functional
    • Destructive annotations: All 4 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation. functional
    • “tail_post” reworded the description of “key” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://api.betslipdoctor.ai/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=api.betslipdoctor.ai CN=YR1,O=Let's Encrypt,C=US 17 Oct 2026 15 Jan 2027 RSA 2048 SHA256-RSA 6e02b6e40f2460e0ca0fec84714b0d00bf8
SANs: api.betslipdoctor.ai
CN=YR1,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA a20253f15f2691c05dc1ce13b9bcca4e
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of api.betslipdoctor.ai. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ai. present 1814, 3799 8, 8 Verified
betslipdoctor.ai. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer resource_metadata="https://api.betslipdoctor.ai/.well-known/oauth-protected-resource", error="invalid_token"

Bearer resource_metadata="https://api.betslipdoctor.ai/.well-known/oauth-protected-resource", error="invalid_token"
Header Value
strict-transport-security max-age=63072000
content-security-policy frame-ancestors 'none'
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=()

Protected resource metadata

Document https://api.betslipdoctor.ai/.well-known/oauth-protected-resource
Retrieved Yes
Resource https://api.betslipdoctor.ai/api/mcp
Authorisation server https://api.betslipdoctor.ai

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://api.betslipdoctor.ai/api/mcp Verified 200
http (plaintext) http://api.betslipdoctor.ai/api/mcp HTTPS enforced 308 https://api.betslipdoctor.ai/api/mcp
MCP tools · 92 exposed · ~12,842 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
account_settings ~217

This account's settings, exactly as the app's Settings screens read and write them. set_preferences: POST account/preferences {any app preference field, gradeDepthDefault}; favorite_teams: GET account/favorite-teams; set_favorite_teams: POST account/favorite-teams app body; set_timezone: POST account/timezone {timezone}; quota: GET account/quota; book_balances: GET sportsbooks/balances; set_book_currency: POST sportsbooks/currency app body {accountId, identityDigest, expectedRevision, currency, confirmation}; seen_books: GET sportsbooks/seen; bug_report: POST bug-reports app body; bug_reports: GET bug-reports; bug_rewards: GET bug-reports/rewards.

NameTypeReqDescription
actionstringyes–
bodyobject–The app request body for this action, unchanged.
commandKeystring–Writes: one stable key per write, reused on every retry.
paramsobject–The app query (filters, limit, cursor) for a read.

No output schema declared.

No examples provided.

add_doctor_parlay_to_slip ~155

Put one of the Doctor’s posted parlays (key from get_doctor_parlays) on this account’s slip in one step, with a unique commandKey. Checks every leg’s current price at the parlay’s book, saves the parlay as a private unplaced ticket and returns its legs (marketSelectionId, oddsAmerican, line, eventId) and ticketId; counts one tail per account per parlay. Run check_slip with the ticketId before Grade or the book link. Same paid-leg lock as get_doctor_parlays; never places a bet. Reuse its commandKey on every retry.

NameTypeReqDescription
commandKeystringyes–
keystringyes–

No output schema declared.

No examples provided.

cancel_doctor_reply ~59

Cancel an owned Doctor jobId under the app cancellation and reservation rules. Cannot undo a reply or provider work already completed. Reuse its commandKey on every retry.

NameTypeReqDescription
commandKeystringyes–
jobIdstringyes–

No output schema declared.

No examples provided.

cancel_grade ~65

Cancel an owned Grade jobId through the app service. Stops eligible work and releases its remaining reservation under the existing app rules; cannot undo provider work already performed. Reuse its commandKey on every retry.

NameTypeReqDescription
commandKeystringyes–
jobIdstringyes–
NameTypeReqDescription
createdAtstringyes–
deadlineAtstringyes–
eventSequenceintegeryes–
failureCode–yes–
idstringyes–
ownerIdstringyes–
queueobject––
quoteIdstringyes–
refundNoticeobject––
result–yes–
statestringyes–
terminalAt–yes–

No examples provided.

check_slip ~129

The app slip’s rule for this conversation’s slip. Send legs (ids plus the oddsAmerican, line, observedAt and startsAt they were added with) or a ticketId from add_doctor_parlay_to_slip or copy_tail_slip. Legs whose game started or finished or whose line is gone come back in removed: drop them. legs stay, at current odds and line. empty: the slip is gone, build a new one. Run before Grade, before a book link, and when they return.

NameTypeReqDescription
legsarray––
ticketIdstring––

No output schema declared.

No examples provided.

connect_sportsbook ~169

Return a 10-minute betslipdoctor.ai link (linkUrl, expiresAt) to the app’s sportsbook linking page, where the customer signs in to book (e.g. FanDuel) in state (two letters). While linking is not allowed it answers book_link_required with consent.text, consent.privacyUrl and consent.textVersion: show the text and privacy link word for word, and only after the customer’s explicit yes call again with consent true, that consentTextVersion and a commandKey (a missing or stale version is refused). Never sees sportsbook passwords; never places a wager.

NameTypeReqDescription
bookstringyes–
commandKeystring––
consentboolean––
consentTextVersionstring––
statestring––

No output schema declared.

No examples provided.

copy_tail_slip ~194

After the customer reviews every current leg and confirms the exact stake/currency/settlement fields, save the app’s owned Tail/Fade ticket using the preview binding and CONFIRM_COPY_TICKET. Keep commandKey stable on retries. Returns an unplaced slip; run check_slip with its ticketId before Grade or the book link. Never places a wager or grades automatically.

NameTypeReqDescription
bookIdstringyes–
clientRevisionintegeryes–
clientSlipIdstringyes–
commandKeystringyes–
confirmationstringyes–
currencystringyes–
expectedPostRevisionintegeryes–
jurisdictionstringyes–
modestringyes–
offeredReturnMinor–yes–
postIdstringyes–
previewBindingstringyes–
settlementTermsobjectyes–
stakeMinorintegeryes–

No output schema declared.

No examples provided.

create_api_key ~85

Create a personal API key (bsd_live_…) for scripts. Give it a name and the scopes it needs; they must be a subset of this connection's own scopes. The full key is returned once in this result and cannot be read again. API keys cannot create other keys. Requires Pro or Elite.

NameTypeReqDescription
namestringyes–
scopesarrayyes–

No output schema declared.

No examples provided.

create_tracked_slip ~127

Save one app ticket (the quote_grade ticket contract) to this account's saved slips through the app's POST tickets, with a stable client_mutation_id for retries. Stores the slip only; never prepares or places a wager.

NameTypeReqDescription
client_mutation_idstringyesCaller-generated idempotency key.
ticketobjectyesThe app ticket: clientSlipId, clientRevision, source, intent, bookId, currency, stakeMinor, confirmation, offeredReturnMinor, acceptedReturnMinor, settlementTerms and 1-25 selections (same as quote_g…
NameTypeReqDescription
createdAtstringyes–
idstringyes–
inputobjectyes–
inputDigeststringyes–
ownerIdstringyes–

No examples provided.

disconnect_sportsbook ~97

Disconnect an owned linked sportsbook accountId, the same as the app’s Disconnect: BSD imports for it stop at once and the link to your sportsbook is removed in the background. Requires confirm true after the customer explicitly asks; without it nothing changes. Saved bets stay in History. Reconnecting needs connect_sportsbook again.

NameTypeReqDescription
accountIdstringyes–
commandKeystring––
confirmbooleanyes–
NameTypeReqDescription
accountIdstringyes–
appliedAtstringyes–
confirmedAt–yes–
generationintegeryes–
requestedAt–yes–
revisionintegeryes–
statestringyes–
versionstringyes–

No examples provided.

doctor_actions ~390

The Doctor actions beside the conversation, as the app does them. Record a decision only when the customer says what they did; change memory consent only when they ask. decision: GET doctor/messages/{messageId}/decision params {beforeRevision}; record_decision: POST doctor/messages/{messageId}/decision {messageId, messageDigest, threadId, binding, expectedRevision, confirmation SAVE_RESPONSE, decision followed|changed|skipped|unknown, modifiedTicketId}; saved_reply: GET doctor/messages/{messageId}/saved-reply params {messageDigest, threadId, ticketId|reportId|historyKind+historyId}; grade_this: POST doctor/messages/{messageId}/grade-quote app body; compare_books: POST doctor/messages/{messageId}/book-prices app body; revise_ticket: POST doctor/messages/{messageId}/revisions app body; book_check: GET doctor/book-comparisons/{comparisonId}; delete_thread: POST doctor/threads/{threadId}/delete (confirmation DELETE); memory_status: GET doctor/memory; memory_context: GET doctor/memory/context; memory_consent: POST doctor/memory/consent {enabled, expectedGeneration, confirmation ALLOW_HONCHO_MEMORY|DISABLE_HONCHO_MEMORY}; memory_forget_all: POST doctor/memory/forget {expectedGeneration} (confirmation FORGET_RECALLED_MEMORY); notes_consent: POST memory/consent {enabled, expectedGeneration} (on/off switch).

NameTypeReqDescription
actionstringyes–
bodyobject–The app request body for this action, unchanged.
commandKeystring–Writes: one stable key per write, reused on every retry.
comparisonIdstring––
messageIdstring––
paramsobject–The app query (filters, limit, cursor) for a read.
threadIdstring––

No output schema declared.

No examples provided.

doctor_conversation ~252

Combined form of the Doctor tools, open_doctor_conversation through cancel_doctor_reply (same fields, same answers): version bsd-agent-doctor-v1 and one action. Show a quote before start; remember or forget a note only when the customer explicitly asks; never claim an answer until the job's saved result is readable. A response style affects that reply only.

NameTypeReqDescription
actionstringyes–
afterinteger––
beforeinteger––
commandKeystring–Stable key for one write action and all its retries.
confirmationstring––
expectedRevisioninteger––
historyobject––
idstring–Exact owned note ID to remove.
jobIdstring––
noteobject––
quoteIdstring––
reportIdstring|null––
responseStylestring–This reply only. Omit to preserve the account default.
sequenceinteger–Current thread sequence from conversation.
textstring––
threadIdstring––
ticketIdstring|null––
versionstringyes–

No output schema declared.

No examples provided.

export_betting_history ~58

Read one real CSV export page for the owned History filters. Returns complete/next, filename and CSV. Never call a partial page a full export. No account mutation.

NameTypeReqDescription
cursorstring––
queryobjectyes–

No output schema declared.

No examples provided.

fade_post ~160

Preview actual supported opposite selections for a visible Tail post at the customer’s bookId and jurisdiction. Unavailable legs remain unavailable; this is not the mathematical complement of a parlay. After explicit customer review, confirm with the original preview binding, post revision, exact stake/currency/settlement fields and CONFIRM_COPY_TICKET. Keep commandKey stable on retries. Saves a private unplaced ticket and records the existing confirmed Fade activity; never places a wager. Use get_tail_post for the source’s current Fade count and permitted actors.

NameTypeReqDescription
actionstringyes–
bookIdstring––
commandKeystring––
jurisdictionstring––
postIdstringyes–
requestobject––

No output schema declared.

No examples provided.

fix_grade_leg ~181

The app’s Fix it on an owned saved Grade jobId whose get_grade_report says fixable.offered: the Doctor reprices, swaps or drops weak legs at the slip’s own sportsbook and returns the app’s estimate (state fixed | best_reachable | no_moves, steps per leg, blockers, fixedTicket saved unplaced). after is the Doctor’s estimate, never a saved Grade: re-grade with regradeQuote to confirm. A Grade with no fix answers fix_not_offered with its reason. Paid plans, under the daily fix cap; costs no Grade. Keep commandKey (16-120 characters) stable; a replay returns the same estimate. Never places a wager or moves money.

NameTypeReqDescription
commandKeystringyes–
jobIdstringyes–
targetstring––
ticketDigeststring––
NameTypeReqDescription
after–yes–
before–yes–
blockersarrayyes–
book–yes–
createdAtstringyes–
estimateDigeststringyes–
expiresAtstringyes–
fixIdstringyes–
fixedTicket–yes–
gradeVersionstringyes–
jobIdstringyes–
payoutobjectyes–
placeablebooleanyes–
pricesAtstringyes–
regradeQuote–yes–
regradeUnavailable–yes–
statestringyes–
stepsarrayyes–
target–yes–
ticketDigeststringyes–
ticketIdstringyes–
versionstringyes–
workarrayyes–

No examples provided.

forget_doctor_note ~96

Remove the exact owned note only after the customer explicitly asks to forget it. Requires current id/expectedRevision and confirmation forget_for_future_consults. Rotates inferred memory under the existing account service; saved conversations remain separately retained until deleted. Reuse its commandKey on every retry.

NameTypeReqDescription
commandKeystringyes–
confirmationstringyes–
expectedRevisionintegeryes–
idstringyes–

No output schema declared.

No examples provided.

get_betting_leaks ~48

Read deterministic patterns from this account’s settled betting history, with coverage, sample sizes, thresholds and source ticket IDs.

NameTypeReqDescription
limitinteger––
rangestring––

No output schema declared.

No examples provided.

get_bettor_profile ~79

Read this authenticated account’s bettor model, optionally filtered by topic: confirmed notes and revisions, separately attributed Honcho inferred context, source IDs when supplied, generation, recall state and as-of. Unavailable inference stays unavailable. Memory and AI consent apply; recalled statements never establish bet outcomes or change Grade math.

NameTypeReqDescription
topicstring––

No output schema declared.

No examples provided.

get_box_score ~134

Read the in-play or final score and box score for one game (eventId from search_markets or the board), the same read as the app’s Live game page: status (in_progress, final or suspended), period and clock, each team’s score and period-by-period line, team statistics, and player statistic tables. state unavailable with a reason (e.g. unsupported_league, no_usable_body when the game has not started, source_stale) means the app shows no box score either. Covers the leagues the app’s Live game page covers, soccer included.

NameTypeReqDescription
eventIdstringyes–

No output schema declared.

No examples provided.

get_doctor_conversation ~54

Read the owned threadId, saved user messages, Doctor answers and jobs; optional before pages older messages. Does not generate a new answer.

NameTypeReqDescription
beforeinteger––
threadIdstringyes–

No output schema declared.

No examples provided.

get_doctor_events ~45

Read saved events for the owned Doctor jobId, optionally after a sequence. Never starts a consult.

NameTypeReqDescription
afterinteger––
jobIdstringyes–

No output schema declared.

No examples provided.

get_doctor_job ~41

Read the owned Doctor jobId, including its real saved answer when available. Never generates or restarts a reply.

NameTypeReqDescription
jobIdstringyes–

No output schema declared.

No examples provided.

get_doctor_memory ~53

Read this authenticated account’s confirmed notes, active status, current revisions and memory generation. Longer-term Honcho personalization is recalled inside consults. These notes are user-reported preferences and lessons, not authoritative betting outcomes.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_doctor_parlays ~148

Read the Doctor’s posted parlays for one league (e.g. LGUE_nfl): 2-3 legs on different games, each B+ or better when posted. Upcoming first with the newest regrade (currentGrade), then recent WON/LOST/PUSH results and the parlays record. Items carry parlayType (lock = 2 legs, moonshot = 3), title, pitch, legCount, oddsAmerican (combined price) and netUnits once settled. Empty means nothing cleared the bar today. App permissions and paid-leg lock apply; a paid reader gets the legs to put the parlay on a slip.

NameTypeReqDescription
leaguestringyes–

No output schema declared.

No examples provided.

get_doctor_picks ~131

Read today’s saved Doctor picks and recent settled WON/LOST/PUSH results. Each item carries league (first leg’s league id), sport (first leg’s sport id) and leagues (every leg’s league), the same fields the app’s league tabs filter by, for every reader. Optional league (e.g. LGUE_nfl) and/or sport (e.g. SPRT_americanfootball) keep only matching items. Uses the app’s account permissions and paid-leg lock; no generation or current-price claim.

NameTypeReqDescription
leaguestring––
sportstring––

No output schema declared.

No examples provided.

get_doctor_quota ~35

Read this account’s current app consult allowance, held and used amounts, and reset information. Does not reserve a consult.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_grade_evidence ~84

Return the evidence behind an owned completed Grade jobId: each claim checked (price, injury and lineup, matchup, form, line move, situational, weather, correlation), its sources with tier 1-5, age and supports/contradicts tag, unknowns, and whether it was verified. Never grades again.

NameTypeReqDescription
jobIdstringyes–

No output schema declared.

No examples provided.

get_grade_job ~35

Read the owned Grade jobId and its current durable status. Never starts or resumes work.

NameTypeReqDescription
jobIdstringyes–
NameTypeReqDescription
createdAtstringyes–
deadlineAtstringyes–
eventSequenceintegeryes–
failureCode–yes–
idstringyes–
ownerIdstringyes–
queueobject––
quoteIdstringyes–
refundNoticeobject––
result–yes–
statestringyes–
terminalAt–yes–

No examples provided.

get_grade_progress ~74

Read saved progress for the owned Grade jobId, with optional after sequence and limit 1-100. Progress is not proof that a saved report is ready; never starts work.

NameTypeReqDescription
afterinteger––
jobIdstringyes–
limitinteger––
representationstring––

No output schema declared.

No examples provided.

get_grade_report ~183

Return the verified saved report for a completed Grade this account owns, by jobId. Returns unavailable until the saved report is readable; never grades again. headline is the letter the app shows: A+, A, B, C, D, F or NG (No grade), with its label. rockySummary carries each leg’s modeled win chance against its break-even and its EV, the chance all legs win, confidence, top risks and the NG reasons (chances and EV as fractions), and view: Research and Price, each a level (Strong, OK or Weak, or null when it couldn’t be checked) with a plain reason; what moved the Grade, by name; the cap line when a better price at another book capped the letter; and the checks that couldn’t run. The same breakdown the app shows.

NameTypeReqDescription
jobIdstringyes–
NameTypeReqDescription
additionalFindingCount–––
assessment–––
catalogDigest–––
catalogVersion–––
checks–––
completeGrade–––
computedRisk–––
coverage–––
createdAt–––
depth–––
detailCheckpointKeys–––
doctorFix–––
earnedValueGrade–––
evidenceCutoff–––
evidenceManifestDigest–––
excerpts–––
finalEvidenceScore–––
findings–––
fixable–––
gates–––
gradeSettings–––
gradeViewobject––
headline–––
idstringyes–
legCoverage–––
legLabels–––
legacyGrade–––
limitations–––
market–––
meters–––
modelReceiptDigests–––
outcomeParlayGrade–––
outcomeValueGrade–––
ownerId–––
parlayMarketGrade–––
personalizedGrade–––
personalizedRockyGrade–––
priceTrail–––
profileDigest–––
profileSnapshot–––
provisional–––
publicProjectionDigeststringyes–
recordFirst–––
recordFirstAdmission–––
recordFirstLean–––
refundNotice–––
reportDigeststringyes–
researchStartedAt–––
researchStatus–––
rockyGrade–––
rockySummary–––
ruleVersion–––
sources–––
stateManifestDigest–––
ticket–––
v2–––
value–––
valueUnavailableReason–––
versionstringyes–

No examples provided.

get_history_summary ~299

The authenticated account's app History summary (GET history/summary): record, stake and net over the chosen range, with its source, currency and limitation rules. Numbers come only from the account's own records; nothing is fabricated. category reads the other History pages the app shows.

NameTypeReqDescription
categorystring–Current app History read (the app route body). Context takes only original recordId and recordKind; other categories require request. Advice also requires the original record references; every advice…
currencystring–ISO 4217 code.
idstring–earlier_report: the saved report; links: the import.
paramsobject–The app query for chart, record_doctor_decisions, earlier_reports, recall (filters as JSON text), recall_week, grade_comparison, doctor_overview and imports.
rangestring–1y is a rolling calendar year; ytd is year to date.
recordIdstring–Original owned History record ID (advice, context, record, recall_record, record_doctor_decisions).
recordKindstring––
request––Use the existing History filters/cursor for this category. Advice before placement is distinct from current or retrospective responses.
viewstring–Optional; the app History is the only view.

No output schema declared.

No examples provided.

get_league_order ~185

Read BetSlip Doctor’s league order right now: the same leagues in the same order as the app’s league strip (its Home and Odds chips: games in play first, then the soonest tip within 6 hours, then games in the next 24 hours); Tennis, Soccer and Golf are sport chips and carry their SPRT_ id. Each row has rank, weight and phase (this week’s popularity times season phase), inSeason and featured. `slate` carries the default league and the featured game (the in-play or soonest game with the most markets), refreshed every 5 minutes. Lists only leagues in season with a DraftKings price right now (the same leagues as the app’s chips, search and league lists); a league leaves when it has no priced game and comes back by itself when it does. Read-only; no account data.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_plan ~83

Read this account’s BetSlip Doctor plan exactly as the app shows it: the plan (free, starter, pro or elite), where it is paid (paymentSource), its status and current period end, the plan limits, and this period’s usage: Grades left and when they reset, Doctor chats left this month (and today on Free). Read only; changes nothing.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_player_research ~322

Research a player and his prop the way the Doctor does: his last 5 and last 10 games against his season average and tonight’s line (overs, unders and average margin, hot/cold/steady), his games against tonight’s opponent, the prop against the opponent’s defense (what it allowed in its last 5 finals against the league average per team-game, good/average/bad and rank), both teams’ last 5 results and their head-to-head. league is a LGUE_ id; player is his name (leave it out, with team and opponent, for just both teams’ last 5 and head-to-head); team (or teamId) places him on a roster when the name alone is not enough; opponent defaults to his team’s next game; market ("Points", "Passing Yards", "Shots on Goal", "Strikeouts", "PRA") and line (tonight’s number, e.g. from search_markets) set the over/under counts. Public stats, saved and reused across users. Covers the NBA, WNBA, NFL, college football, NHL, MLB and college basketball; state unavailable says why.

NameTypeReqDescription
eventIdstring––
leaguestringyes–
linenumber––
marketstring––
opponentstring––
opponentTeamIdstring––
playerstring––
playerIdstring––
teamstring––
teamIdstring––

No output schema declared.

No examples provided.

get_saved_reports ~108

Combined form of list_grade_jobs, get_grade_job, get_grade_progress, get_grade_report and get_grade_evidence (same fields, same answers): version bsd-agent-grade-v1 and action list, job, progress, report or evidence.

NameTypeReqDescription
actionstringyes–
afterinteger––
cursorstring––
jobIdstring––
limitinteger––
representationstring––
versionstringyes–

No output schema declared.

No examples provided.

get_tail_feed ~118

Doctor ticket posts include result WON/LOST/PUSH when settled, null otherwise. Read the app Tail feed with its account-filtered community, following, own, profile, bookmark or private-list visibility. Uses app moderation, mutes and account-bound cursor rules; does not post.

NameTypeReqDescription
cursorstring––
feedstring––
gradeFamilystring––
limitinteger––
listIdstring––
profileIdstring––
searchstring––

No output schema declared.

No examples provided.

get_tail_post ~107

Doctor ticket posts include result WON/LOST/PUSH when settled, null otherwise. Read one app Tail postId visible to this account under the same moderation and privacy rules. Supply fadedByLimit (1-25) or fadedByCursor to include the permitted public confirmed-Fade profile page. May contain another community member’s published content; does not post.

NameTypeReqDescription
fadedByCursorstring––
fadedByLimitinteger––
postIdstringyes–

No output schema declared.

No examples provided.

get_todays_board ~571

The app Live board (GET live/board): upcoming and in-play games, each with mainLines: its DraftKings game lines (slot, line, odds), optional league or sport, limit 1-20 and cursor. sport reads a sport chip's board across its leagues (SPRT_tennis, SPRT_soccer, SPRT_golf; tennis and golf games have no league). A league outside the app's chips is built on its first read, so that first answer can be 503 provider_unavailable with retryAfterSeconds: read again in about 60 s. Only leagues in season with a DraftKings price right now are listed: a league or sport without one answers no games (it is not in get_league_order either) and comes back by itself once its games are priced. mode: live with includeStatus: true lists only the games in play now, each with its status (a game in a league with no scoreboard feed, such as tennis or UFC, is listed while DraftKings prices it in play: its status is in_progress with the score, period and clock a public scoreboard has for it, or none; tennis: score = sets won, period = the set in play, displayClock = that set's games home-away; UFC: period = round); with includeStatus: true, eventSeries gives each game its playoff series line (round, game, summary; MLB now) or null; stale: true means some games could not be confirmed yet, so read again shortly. Use category: event_catalog for original event market identities, event_prices for an exact source-bound group at one book, or board_snapshot for one prewarmed page; those require request. pickem is the app's Pick'Em board for one game: request {eventId} returns the catalogue page and pickem.markets (full-game player Over/Under); request {eventId, marketId} returns that market's lines with DraftKings' price on each (pickem.prices). Never a wager.

NameTypeReqDescription
categorystring–Source-bound categories require request; board_snapshot reads one complete prewarmed page without provider work; games uses the board filters.
cursorstring––
includeStatusboolean–Adds each game's status.
leaguestring––
limitinteger––
modestring–Games in play now; needs includeStatus: true.
request––Required for event_catalog, event_prices or board_snapshot. Pass the exact original source-bound request; never relabel source IDs or periods.
sportstring–A sport chip board instead of league, e.g. SPRT_tennis.
viewstring–Optional; the app board is the only view.

No output schema declared.

No examples provided.

get_tracked_slips ~114

Read the authenticated account's saved-ticket library: the same list the app shows (GET tickets), newest first, with optional search, limit 1-20 and cursor. Provider placement ids and sportsbook deep links are never returned.

NameTypeReqDescription
cursorstring––
limitinteger––
searchstring––
ticketIdstring–One saved ticket (GET tickets/:id) instead of the list.
viewstring–Optional; the app library is the only view.

No output schema declared.

No examples provided.

grade_pickem_entry ~176

Use action settlement with ticketId to read this owned entry’s result (history.read also required). Use bsd-pickem-grade-v2. check returns per-pick availability without research or a model call; letters are not scored yet. quote saves the owned Power or complete Flex child-ticket structure. Whole-entry Grade stays unavailable without confirmed book payouts and supported engine shape. start never bypasses those requirements. report also requires reports.read. No wager is placed.

NameTypeReqDescription
actionstringyes–
childTicketIdsarray––
commandKeystring––
depthstring––
entry–––
jobIdstring––
quoteIdstring––
selectionsarray––
ticketIdstring––
versionstringyes–

No output schema declared.

No examples provided.

grade_settings ~91

Read or save this account’s Grade risk preference, analysis depth and unit size. Saving requires the exact confirmed settings, current revision and a stable command key. Risk preference is separate from computed report risk. No Grade or research starts.

NameTypeReqDescription
actionstringyes–
commandKeystring––
confirmedboolean––
expectedRevisioninteger––
settingsobject––

No output schema declared.

No examples provided.

grade_slip ~189

Combined form of quote_grade, start_grade and cancel_grade (same fields, same answers): version bsd-agent-grade-v1, action quote, start or cancel, and a commandKey. Paid plans can run Fast, Pro (wire depth deep) or Elite at the quoted price. If the Grade returns no letter, the units come back. Show the quote before a start; send force: true on quote only when the customer wants a new Grade of an already graded slip. Text and legacy SGP inputs return migration_required.

NameTypeReqDescription
actionstringyes–
commandKeystringyes–
depthstring––
forceboolean––
fundingstring––
jobIdstring––
quoteIdstring––
ticketobject––
ticketIdstring––
versionstringyes–

Structured output declared, but exposes no named fields.

No examples provided.

history_actions ~152

Write this account's History as the app does. Record a bet only when the customer says they placed it. save_manual: POST history/manual {id?, expectedRevision?, confirmation PLACED, input {ticketId, placedAt, status, outcome, ...}}; set_currency: POST history/currency app body; save_link: POST history/links app body (link an import to a manual record); recall_save: POST history/recall/organization app body (notes, tags, bookmark).

NameTypeReqDescription
actionstringyes–
bodyobject–The app request body for this action, unchanged.
commandKeystring–Writes: one stable key per write, reused on every retry.

No output schema declared.

No examples provided.

list_api_keys ~36

List your active personal BetSlip Doctor API keys (name, display prefix, scopes, created, last used). Secrets are never returned.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_connected_agents ~33

List the agents (OAuth apps) connected to your BetSlip Doctor account: name, scopes, connected and last used.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_doctor_conversations ~26

Read this account’s saved app Doctor threads. Does not generate an answer.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_grade_jobs ~84

Read the authenticated account’s current Grade library, with optional limit 1-20 and account-bound cursor. Each row’s headline is its Rocky letter (A+ to F, or NG) and report.rockyGradeSummary its label and score. Never starts research.

NameTypeReqDescription
cursorstring––
limitinteger––
representationstring––

No output schema declared.

No examples provided.

list_linkable_sportsbooks ~114

List the sportsbooks this account can link, the same list as the app’s Settings > Sportsbooks picker: each book (bookId, name, abbr) with the two-letter states it can be linked in. state (two letters, e.g. NJ) filters to the books linkable there; without it the account’s own linking state is used when its linked books share one. Use a listed book and state with connect_sportsbook. Never contacts a sportsbook.

NameTypeReqDescription
statestring––

No output schema declared.

No examples provided.

list_sportsbooks ~103

Read this account’s linked sportsbooks exactly as the app shows them: whether sportsbook linking is allowed, each account (accountId, book, region, betsSynced), its connection (verified, paused, reconnect_required, revoked, disabled, unknown), needsReconnect, its last check and last refresh, the newest bet import, and booksOnTickets: the books on the customer’s saved tickets (bookAbbr, tickets, lastSeenAt). Never contacts the sportsbook.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

look_up_fact ~182

Start a Doctor consult from its quote, then call with its jobId and structured fact, public subject names, league, date, timezone and optional eventId. If the fields do not match a planned lookup, the lookup_not_planned error includes extra.plannedLookups: the exact allowed {fact, subject, league, date, timezone, eventId} fields. Retry with one of those entries and the same jobId. If the plan is not ready yet, retry after the consult has planned it. Returns the outcome, reason and linked sources after the consult succeeds. Use the quoted sources for facts and numbers.

NameTypeReqDescription
datestringyes–
eventIdstring––
factstringyes–
jobIdstringyes–
league–yes–
subjectarrayyes–
timezonestringyes–

No output schema declared.

No examples provided.

Install

How do I install the BetSlip Doctor MCP server?

BetSlip Doctor is a hosted endpoint at https://api.betslipdoctor.ai/api/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · api.betslipdoctor.ai

# add to Claude Code
claude mcp add --transport http ai-betslipdoctor-mcp 'https://api.betslipdoctor.ai/api/mcp'
Common questions

What is the BetSlip Doctor MCP server?

BetSlip Doctor is an MCP server listed in the public MCP registry as ai.betslipdoctor/mcp. Your agent grades every slip A+ to F-, links your books and tracks your record. No wager placement. This page covers its hosted endpoint (https://api.betslipdoctor.ai/api/mcp).

Is the BetSlip Doctor MCP server safe to use?

BetSlip Doctor scores 89 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the BetSlip Doctor MCP server expose?

BetSlip Doctor exposes 92 tools: get_tracked_slips, track_slip, get_todays_board, grade_slip, get_saved_reports, and 87 more. Their descriptions and schemas cost roughly 12,842 tokens of context every time the server is loaded.

Does the BetSlip Doctor MCP server require authentication?

Yes. BetSlip Doctor asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the BetSlip Doctor MCP server still maintained?

BetSlip Doctor is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.