MCP-Server

BetSlip Doctor

ai.betslipdoctor/mcp
Gaming Öffentlich und erreichbar MCP 2026-07-28

Was dieses MCP kann

Provides read-only sports betting analysis, odds comparisons, betslip grading, betting history, and slip tracking without placing wagers.

doctor_conversation
Ask the Doctor
The app Doctor conversation. Send version bsd-agent-doctor-v1 and one action: open (commandKey, optional owned subject), threads, conversation (threadId), quota, quote (commandKey, threadId, current sequence, text), start (commandKey, quoteId), job or events (jobId), or cancel (commandKey, jobId). Keep each write commandKey stable on retry. Show the quote before start; a succeeded job carries the saved Doctor answer and the conversation stores it. The app enforces AI consent, tier, allowance, cost cap and worker admission. Do not claim an answer until the saved result is readable.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['version', 'action'], 'properties': {'text': {'type': 'string', 'maxLength': 4000, 'minLength': 1}, 'after': {'type': 'integer', 'maximum': 1000000, 'minimum': 0}, 'jobId': {'type': 'string', 'format': 'uuid'}, 'action': {'enum': ['open', 'threads', 'conversation', 'quota', 'quote', 'start', 'job', 'events', 'cancel'], 'type': 'string'}, 'before': {'type': 'integer', 'maximum': 2001, 'minimum': 1}, 'history': {'type': 'object', 'required': ['kind', 'id'], 'properties': {'id': {'type': 'string', 'format': 'uuid'}, 'kind': {'enum': ['import', 'manual'], 'type': 'string'}}, 'additionalProperties': False}, 'quoteId': {'type': 'string', 'format': 'uuid'}, 'version': {'type': 'string', 'const': 'bsd-agent-doctor-v1'}, 'reportId': {'type': ['string', 'null'], 'format': 'uuid'}, 'sequence': {'type': 'integer', 'maximum': 1998, 'minimum': 0, 'description': 'Current thread sequence from conversation.'}, 'threadId': {'type': 'string', 'format': 'uuid'}, 'ticketId': {'type': ['string', 'null'], 'format': 'uuid'}, 'commandKey': {'type': 'string', 'maxLength': 120, 'minLength': 16, 'description': 'Stable key for one write action and all its retries.'}}, 'additionalProperties': False}
get_history_summary
Betting history summary
The authenticated user's imported betting-history ledger: W-L record, stake and net over lifetime/30d/7d windows, sync freshness, and their most recent bets. Numbers come only from the user's own imported slips; nothing is fabricated. Set view: app for the current app History summary with its source, currency and limitation rules.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'view': {'enum': ['app'], 'type': 'string', 'description': 'Use the current app History summary; omit for legacy imported history.'}, 'range': {'enum': ['1w', '1m', '3m', 'ytd', 'all'], 'type': 'string', 'description': 'Current app view only.'}, 'recent': {'type': 'integer', 'maximum': 20, 'minimum': 0, 'description': 'How many recent bets to include (default 5).'}, 'currency': {'type': 'string', 'description': 'Current app view only; ISO 4217 code.'}, 'recordKind': {'enum': ['all', 'import', 'manual'], 'type': 'string', 'description': 'Current app view only.'}}, 'additionalProperties': False}
get_saved_reports
Saved Grade jobs and reports
For current Grade, send version bsd-agent-grade-v1 and action: list (optional limit 1-20 and cursor), job or report (jobId UUID required), or progress (jobId UUID required; optional after 0-1000000 and limit 1-100). Readiness requires a readable saved report. For legacy reports only, omit version/action and send optional report_id and limit 1-25. Never mix current and legacy fields.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': [], 'properties': {'after': {'type': 'integer', 'default': 0, 'maximum': 1000000, 'minimum': 0}, 'jobId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1}, 'action': {'enum': ['list', 'job', 'progress', 'report'], 'type': 'string'}, 'cursor': {'type': 'string', 'maxLength': 2000, 'minLength': 1}, 'version': {'type': 'string', 'const': 'bsd-agent-grade-v1'}, 'report_id': {'type': 'string', 'description': 'Legacy saved report ID; omit version and action.'}}, 'additionalProperties': False}
get_todays_board
Today's board (live odds)
Live sports board: upcoming and in-play games with main-market prices (moneyline, spread, total) and the best posted price per selection across connected books. Read-only decision support; never a guarantee and never a wager. Set view: app for the current app Live board and its provider, filters and cursor.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'properties': {'view': {'enum': ['app'], 'type': 'string', 'description': 'Use the current app Live board; omit for the legacy main-market board.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Legacy main-market board: max 50. Current app games view: max 20.'}, 'cursor': {'type': 'string', 'maxLength': 800, 'description': 'Current app view only.'}, 'league': {'type': 'string', 'description': 'Current app view only.'}, 'offset': {'type': 'integer', 'minimum': 0, 'description': 'Window offset for paging (default 0).'}, 'leagues': {'type': 'array', 'items': {'type': 'string'}, 'description': "League labels to filter by, e.g. ['MLB','NFL']. Omit for all leagues."}, 'category': {'enum': ['games'], 'type': 'string', 'description': 'Current app games board only; current event prices are a separate app read.'}}, 'additionalProperties': False}
get_tracked_slips
Tracked slips
Read the authenticated user's tracked ticket trees and tracking lifecycle. Set view: app to read the current app saved-ticket library instead. Provider placement ids and sportsbook deep links are never returned.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'properties': {'view': {'enum': ['app'], 'type': 'string', 'description': 'Use current app saved-ticket library; omit for tracked trees.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Legacy tracked trees: max 50. Current app view: max 20.'}, 'cursor': {'type': 'string', 'maxLength': 1000, 'description': 'Current app view only.'}, 'search': {'type': 'string', 'maxLength': 128, 'description': 'Current app view only.'}}, 'additionalProperties': False}
grade_slip
Grade a confirmed betslip
Use version bsd-agent-grade-v1 and a unique commandKey (16-120 characters) for every action. quote requires depth plus exactly one of ticketId (saved UUID) or ticket (exact confirmed manual ticket); funding is optional. start requires quoteId. cancel requires jobId. A quote discloses the allowance; start reserves it and returns a durable job. Use get_saved_reports for progress and the saved result. Text and legacy SGP inputs return migration_required.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['version', 'action', 'commandKey'], 'properties': {'depth': {'enum': ['fast', 'smart', 'deep', 'elite'], 'type': 'string'}, 'jobId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'action': {'enum': ['quote', 'start', 'cancel'], 'type': 'string'}, 'ticket': {'type': 'object', 'required': ['clientSlipId', 'clientRevision', 'source', 'intent', 'bookId', 'currency', 'stakeMinor', 'selections', 'confirmation', 'offeredReturnMinor', 'acceptedReturnMinor', 'settlementTerms'], 'properties': {'bookId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'intent': {'enum': ['singles', 'parlay'], 'type': 'string'}, 'source': {'type': 'string', 'const': 'manual'}, 'currency': {'type': 'string', 'pattern': '^[A-Z]{3}$'}, 'bookLabel': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'selections': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'eventId', 'entityId', 'provider', 'sport', 'league', 'market', 'period', 'side', 'line', 'label', 'startsAt', 'bookId', 'jurisdiction', 'oddsAmerican', 'observedAt', 'quoteVersion'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'line': {'anyOf': [{'type': 'string', 'pattern': '^-?\\d{1,8}(\\.\\d{1,4})?$'}, {'type': 'null'}]}, 'side': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'label': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'sport': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'bookId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'future': {'type': 'boolean', 'const': True}, 'league': {'anyOf': [{'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, {'type': 'null'}]}, 'market': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'period': {'anyOf': [{'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, {'type': 'null'}]}, 'eventId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'entityId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'provider': {'type': 'string', 'const': 'manual'}, 'startsAt': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, {'type': 'null'}]}, 'observedAt': {'anyOf': [{'type': 'string', 'format': 'date-time', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$'}, {'type': 'null'}]}, 'jurisdiction': {'type': 'string', 'maxLength': 32, 'minLength': 2}, 'oddsAmerican': {'type': 'integer', 'maximum': 1000000, 'minimum': -1000000}, 'quoteVersion': {'anyOf': [{'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, {'type': 'null'}]}}, 'additionalProperties': False}, 'maxItems': 25, 'minItems': 1}, 'stakeMinor': {'type': 'integer', 'maximum': 1000000000000, 'minimum': 0}, 'clientSlipId': {'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, 'confirmation': {'type': 'string', 'const': 'exact_fields_confirmed'}, 'clientRevision': {'type': 'integer', 'maximum': 1000000000, 'minimum': 0}, 'parentTicketId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'settlementTerms': {'type': 'object', 'required': ['source', 'reference', 'version', 'pushes', 'voids'], 'properties': {'voids': {'enum': ['refund', 'reprice', 'unknown'], 'type': 'string'}, 'pushes': {'enum': ['refund', 'reprice', 'lose', 'unknown'], 'type': 'string'}, 'source': {'enum': ['provider', 'book_document', 'user_reported', 'unknown'], 'type': 'string'}, 'version': {'anyOf': [{'type': 'string', 'pattern': '^[a-zA-Z0-9_.:@/-]+$', 'maxLength': 200, 'minLength': 1}, {'type': 'null'}]}, 'reference': {'anyOf': [{'type': 'string', 'maxLength': 500, 'minLength': 1}, {'type': 'null'}]}, 'cashSingle': {'type': 'string', 'const': 'win_loss_refund'}}, 'additionalProperties': False}, 'offeredReturnMinor': {'anyOf': [{'type': 'integer', 'maximum': 1000000000000, 'minimum': 0}, {'type': 'null'}]}, 'acceptedReturnMinor': {'anyOf': [{'type': 'integer', 'maximum': 1000000000000, 'minimum': 0}, {'type': 'null'}]}}, 'additionalProperties': False}, 'funding': {'enum': ['auto', 'weekly', 'bug_bounty'], 'type': 'string', 'default': 'auto'}, 'quoteId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'version': {'type': 'string', 'const': 'bsd-agent-grade-v1'}, 'ticketId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'commandKey': {'type': 'string', 'pattern': '^[a-zA-Z0-9_-]+$', 'maxLength': 120, 'minLength': 16}}, 'additionalProperties': False}
price_shop_slip
Price-shop a slip
Compare posted prices across books for each leg of a slip (main markets). Reports every book's quote, the best price for the bettor, and how much the user's own line gives up. Only ever describes books with real posted data; read-only, never places a wager.
Nur Lesen Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['legs'], 'properties': {'legs': {'type': 'array', 'items': {'type': 'object', 'required': ['query'], 'properties': {'book': {'type': 'string', 'description': "The book the user is on (e.g. 'draftkings'), if known."}, 'odds': {'type': 'number', 'description': 'The american odds the user is on (e.g. -120), if known.'}, 'query': {'type': 'string', 'description': "Leg description, e.g. 'Yankees moneyline' or 'Brewers -1.5'."}}, 'additionalProperties': False}, 'maxItems': 12, 'minItems': 1}}, 'additionalProperties': False}
tail_post
Preview or publish to Tail
Send version bsd-agent-tail-v1. Preview a draft from either an owned saved Grade report (reportId, text, showStake, placement) or saved Doctor exchange (source doctor_exchange, threadId, messageId, text) through the app service. Publish only after showing the exact preview and getting the customer’s confirmation. For action publish reuse the same draft and previewBinding, pass confirmation PUBLISH_POST, placementConfirmation, fWarning and a stable commandKey. Publishing enters the app moderation queue; it is not a wager.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', 'required': ['version', 'action', 'draft'], 'properties': {'draft': {'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'maxLength': 280}, 'source': {'type': 'string', 'const': 'doctor_exchange'}, 'reportId': {'type': 'string', 'format': 'uuid', 'description': 'Owned saved Grade job ID for a ticket post.'}, 'threadId': {'type': 'string', 'format': 'uuid', 'description': 'Owned Doctor thread for an exchange post.'}, 'messageId': {'type': 'string', 'format': 'uuid', 'description': 'Saved Doctor reply in that thread.'}, 'placement': {'enum': ['asking', 'self_reported_placed'], 'type': 'string', 'description': 'Ticket post only.'}, 'showStake': {'type': 'boolean', 'description': 'Ticket post only.'}, 'pollOptions': {'type': 'array', 'items': {'type': 'string', 'maxLength': 50, 'minLength': 1}, 'maxItems': 4, 'minItems': 2}}, 'description': 'The exact app post draft: either a saved Grade report or a saved Doctor exchange.', 'additionalProperties': False}, 'action': {'enum': ['preview', 'publish'], 'type': 'string'}, 'version': {'type': 'string', 'const': 'bsd-agent-tail-v1'}, 'fWarning': {'enum': ['acknowledge', 'dont_ask_again', None], 'type': ['string', 'null']}, 'commandKey': {'type': 'string', 'maxLength': 120, 'minLength': 16}, 'confirmation': {'type': 'string', 'const': 'PUBLISH_POST'}, 'previewBinding': {'type': 'string', 'pattern': '^[a-f0-9]{64}$'}, 'placementConfirmation': {'enum': ['NOT_PLACED', 'SELF_REPORTED_PLACED'], 'type': 'string'}}, 'additionalProperties': False}
tail_read
Read Tail
Send version bsd-agent-tail-v1 and action feed (optional feed/profileId/listId/search/limit/cursor) or post (postId). Read the same account-filtered Tail feed or one visible post as the BSD app. Moderation, follows, mutes, private lists and cursor binding use the app service.
Nur Lesen Idempotent
Eingabeschema
{'type': 'object', 'required': ['version', 'action'], 'properties': {'feed': {'enum': ['community', 'for_you', 'following', 'own', 'profile', 'bookmarks', 'list'], 'type': 'string'}, 'limit': {'type': 'integer', 'maximum': 25, 'minimum': 1}, 'action': {'enum': ['feed', 'post'], 'type': 'string'}, 'cursor': {'type': 'string', 'maxLength': 1500}, 'listId': {'type': 'string', 'format': 'uuid'}, 'postId': {'type': 'string', 'format': 'uuid'}, 'search': {'type': 'string', 'maxLength': 100}, 'version': {'type': 'string', 'const': 'bsd-agent-tail-v1'}, 'profileId': {'type': 'string', 'format': 'uuid'}}, 'additionalProperties': False}
track_slip
Track a slip
Create or revise one of the authenticated user's ticket trees. This stores truth state only; it never places, prepares, or hands off a wager.
Idempotent
Eingabeschema
{'type': 'object', 'required': ['client_mutation_id', 'ticket'], 'properties': {'ticket': {'type': 'object', 'description': 'BSD two-level BetTicketContract. SGP children stay nested under one outer pick.'}, 'ticket_id': {'type': 'string', 'description': 'Server ticket id when revising an existing tracked slip.'}, 'expected_revision': {'type': 'integer', 'minimum': 1, 'description': 'Required with ticket_id; stale writes fail with a conflict.'}, 'client_mutation_id': {'type': 'string', 'maxLength': 160, 'minLength': 1, 'description': 'Caller-generated idempotency key.'}}, 'additionalProperties': False}
Hinzugefügt
tail_post
25. September 2026 03:00
Hinzugefügt
tail_read
25. September 2026 03:00
Hinzugefügt
doctor_conversation
25. September 2026 03:00
Geändert
get_history_summary
25. September 2026 03:00
Geändert
get_saved_reports
25. September 2026 03:00
Geändert
grade_slip
25. September 2026 03:00
Geändert
get_todays_board
25. September 2026 03:00
Geändert
get_tracked_slips
25. September 2026 03:00
Geändert
get_saved_reports
23. September 2026 02:51
Geändert
grade_slip
23. September 2026 02:51
Hinzugefügt
price_shop_slip
11. September 2026 15:31
Hinzugefügt
get_history_summary
11. September 2026 15:31
Hinzugefügt
get_saved_reports
11. September 2026 15:31
Hinzugefügt
grade_slip
11. September 2026 15:31
Hinzugefügt
get_todays_board
11. September 2026 15:31
Hinzugefügt
track_slip
11. September 2026 15:31
Hinzugefügt
get_tracked_slips
11. September 2026 15:31