{
  "server": "betslipdoctor",
  "url": "https://api.betslipdoctor.ai/api/mcp",
  "date": "2026-09-22",
  "protocolVersion": "2025-06-18",
  "serverInfo": {
    "name": "betslip-doctor",
    "title": "BetSlip Doctor",
    "version": "1.1.0"
  },
  "listChangedDeclared": false,
  "toolCount": 7,
  "outputSchemaCoveragePct": 0,
  "tools": [
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "recent": {
            "description": "How many recent bets to include (default 5).",
            "maximum": 20,
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "get_history_summary",
      "title": "Betting history summary"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "Read your saved Grade job, exact paginated live progress, saved report, or job library. Use bsd-agent-grade-v1 actions list/job/progress/report. Readiness requires a readable saved report. Unversioned report_id/limit reads are retained for legacy reports only.",
      "inputSchema": {
        "anyOf": [
          {
            "$schema": "https://json-schema.org/draft/2020-12/schema",
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "const": "list",
                    "type": "string"
                  },
                  "cursor": {
                    "maxLength": 2000,
                    "minLength": 1,
                    "type": "string"
                  },
                  "limit": {
                    "default": 10,
                    "maximum": 20,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "version": {
                    "const": "bsd-agent-grade-v1",
                    "type": "string"
                  }
                },
                "required": [
                  "version",
                  "action"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "const": "job",
                    "type": "string"
                  },
                  "jobId": {
                    "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)$",
                    "type": "string"
                  },
                  "version": {
                    "const": "bsd-agent-grade-v1",
                    "type": "string"
                  }
                },
                "required": [
                  "version",
                  "action",
                  "jobId"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "const": "report",
                    "type": "string"
                  },
                  "jobId": {
                    "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)$",
                    "type": "string"
                  },
                  "version": {
                    "const": "bsd-agent-grade-v1",
                    "type": "string"
                  }
                },
                "required": [
                  "version",
                  "action",
                  "jobId"
                ],
                "type": "object"
              },
              {
                "additionalProperties": false,
                "properties": {
                  "action": {
                    "const": "progress",
                    "type": "string"
                  },
                  "after": {
                    "default": 0,
                    "maximum": 1000000,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "jobId": {
                    "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)$",
                    "type": "string"
                  },
                  "limit": {
                    "default": 100,
                    "maximum": 100,
                    "minimum": 1,
                    "type": "integer"
                  },
                  "version": {
                    "const": "bsd-agent-grade-v1",
                    "type": "string"
                  }
                },
                "required": [
                  "version",
                  "action",
                  "jobId"
                ],
                "type": "object"
              }
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "limit": {
                "maximum": 25,
                "minimum": 1,
                "type": "integer"
              },
              "report_id": {
                "type": "string"
              }
            },
            "type": "object"
          }
        ],
        "type": "object"
      },
      "name": "get_saved_reports",
      "title": "Saved Grade jobs and reports"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "leagues": {
            "description": "League labels to filter by, e.g. ['MLB','NFL']. Omit for all leagues.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "limit": {
            "description": "Games to return (default 20, max 50). Live plus soonest first.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "Window offset for paging (default 0).",
            "minimum": 0,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "get_todays_board",
      "title": "Today's board (live odds)"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true
      },
      "description": "Read the authenticated user's tracked ticket trees and tracking lifecycle. Provider placement ids and sportsbook deep links are never returned.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "limit": {
            "description": "Tickets to return (default 20).",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "name": "get_tracked_slips",
      "title": "Tracked slips"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": false
      },
      "description": "Quote the current Grade service for an existing saved ticket or exact confirmed manual ticket, then start the quote to reserve its disclosed allowance. Returns a durable job; use get_saved_reports to follow progress and read the saved result. Requires bsd-agent-grade-v1. Text and legacy SGP inputs return migration_required.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "anyOf": [
          {
            "additionalProperties": false,
            "properties": {
              "action": {
                "const": "quote",
                "type": "string"
              },
              "commandKey": {
                "maxLength": 120,
                "minLength": 16,
                "pattern": "^[a-zA-Z0-9_-]+$",
                "type": "string"
              },
              "depth": {
                "enum": [
                  "fast",
                  "smart",
                  "deep",
                  "elite"
                ],
                "type": "string"
              },
              "funding": {
                "default": "auto",
                "enum": [
                  "auto",
                  "weekly",
                  "bug_bounty"
                ],
                "type": "string"
              },
              "ticketId": {
                "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)$",
                "type": "string"
              },
              "version": {
                "const": "bsd-agent-grade-v1",
                "type": "string"
              }
            },
            "required": [
              "version",
              "action",
              "commandKey",
              "depth",
              "ticketId"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "action": {
                "const": "quote",
                "type": "string"
              },
              "commandKey": {
                "maxLength": 120,
                "minLength": 16,
                "pattern": "^[a-zA-Z0-9_-]+$",
                "type": "string"
              },
              "depth": {
                "enum": [
                  "fast",
                  "smart",
                  "deep",
                  "elite"
                ],
                "type": "string"
              },
              "funding": {
                "default": "auto",
                "enum": [
                  "auto",
                  "weekly",
                  "bug_bounty"
                ],
                "type": "string"
              },
              "ticket": {
                "additionalProperties": false,
                "properties": {
                  "acceptedReturnMinor": {
                    "anyOf": [
                      {
                        "maximum": 1000000000000,
                        "minimum": 0,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "bookId": {
                    "maxLength": 200,
                    "minLength": 1,
                    "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                    "type": "string"
                  },
                  "bookLabel": {
                    "maxLength": 80,
                    "minLength": 1,
                    "type": "string"
                  },
                  "clientRevision": {
                    "maximum": 1000000000,
                    "minimum": 0,
                    "type": "integer"
                  },
                  "clientSlipId": {
                    "maxLength": 200,
                    "minLength": 1,
                    "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                    "type": "string"
                  },
                  "confirmation": {
                    "const": "exact_fields_confirmed",
                    "type": "string"
                  },
                  "currency": {
                    "pattern": "^[A-Z]{3}$",
                    "type": "string"
                  },
                  "intent": {
                    "enum": [
                      "singles",
                      "parlay"
                    ],
                    "type": "string"
                  },
                  "offeredReturnMinor": {
                    "anyOf": [
                      {
                        "maximum": 1000000000000,
                        "minimum": 0,
                        "type": "integer"
                      },
                      {
                        "type": "null"
                      }
                    ]
                  },
                  "parentTicketId": {
                    "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)$",
                    "type": "string"
                  },
                  "selections": {
                    "items": {
                      "additionalProperties": false,
                      "properties": {
                        "bookId": {
                          "maxLength": 200,
                          "minLength": 1,
                          "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                          "type": "string"
                        },
                        "entityId": {
                          "maxLength": 200,
                          "minLength": 1,
                          "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                          "type": "string"
                        },
                        "eventId": {
                          "maxLength": 200,
                          "minLength": 1,
                          "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                          "type": "string"
                        },
                        "future": {
                          "const": true,
                          "type": "boolean"
                        },
                        "id": {
                          "maxLength": 200,
                          "minLength": 1,
                          "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                          "type": "string"
                        },
                        "jurisdiction": {
                          "maxLength": 32,
                          "minLength": 2,
                          "type": "string"
                        },
                        "label": {
                          "maxLength": 300,
                          "minLength": 1,
                          "type": "string"
                        },
                        "league": {
                          "anyOf": [
                            {
                              "maxLength": 200,
                              "minLength": 1,
                              "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "line": {
                          "anyOf": [
                            {
                              "pattern": "^-?\\d{1,8}(\\.\\d{1,4})?$",
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "market": {
                          "maxLength": 200,
                          "minLength": 1,
                          "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                          "type": "string"
                        },
                        "observedAt": {
                          "anyOf": [
                            {
                              "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": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "oddsAmerican": {
                          "maximum": 1000000,
                          "minimum": -1000000,
                          "type": "integer"
                        },
                        "period": {
                          "anyOf": [
                            {
                              "maxLength": 200,
                              "minLength": 1,
                              "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "provider": {
                          "const": "manual",
                          "type": "string"
                        },
                        "quoteVersion": {
                          "anyOf": [
                            {
                              "maxLength": 200,
                              "minLength": 1,
                              "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                              "type": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        },
                        "side": {
                          "maxLength": 200,
                          "minLength": 1,
                          "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                          "type": "string"
                        },
                        "sport": {
                          "maxLength": 200,
                          "minLength": 1,
                          "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                          "type": "string"
                        },
                        "startsAt": {
                          "anyOf": [
                            {
                              "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": "string"
                            },
                            {
                              "type": "null"
                            }
                          ]
                        }
                      },
                      "required": [
                        "id",
                        "eventId",
                        "entityId",
                        "provider",
                        "sport",
                        "league",
                        "market",
                        "period",
                        "side",
                        "line",
                        "label",
                        "startsAt",
                        "bookId",
                        "jurisdiction",
                        "oddsAmerican",
                        "observedAt",
                        "quoteVersion"
                      ],
                      "type": "object"
                    },
                    "maxItems": 25,
                    "minItems": 1,
                    "type": "array"
                  },
                  "settlementTerms": {
                    "additionalProperties": false,
                    "properties": {
                      "cashSingle": {
                        "const": "win_loss_refund",
                        "type": "string"
                      },
                      "pushes": {
                        "enum": [
                          "refund",
                          "reprice",
                          "lose",
                          "unknown"
                        ],
                        "type": "string"
                      },
                      "reference": {
                        "anyOf": [
                          {
                            "maxLength": 500,
                            "minLength": 1,
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "source": {
                        "enum": [
                          "provider",
                          "book_document",
                          "user_reported",
                          "unknown"
                        ],
                        "type": "string"
                      },
                      "version": {
                        "anyOf": [
                          {
                            "maxLength": 200,
                            "minLength": 1,
                            "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                            "type": "string"
                          },
                          {
                            "type": "null"
                          }
                        ]
                      },
                      "voids": {
                        "enum": [
                          "refund",
                          "reprice",
                          "unknown"
                        ],
                        "type": "string"
                      }
                    },
                    "required": [
                      "source",
                      "reference",
                      "version",
                      "pushes",
                      "voids"
                    ],
                    "type": "object"
                  },
                  "source": {
                    "const": "manual",
                    "type": "string"
                  },
                  "stakeMinor": {
                    "maximum": 1000000000000,
                    "minimum": 0,
                    "type": "integer"
                  }
                },
                "required": [
                  "clientSlipId",
                  "clientRevision",
                  "source",
                  "intent",
                  "bookId",
                  "currency",
                  "stakeMinor",
                  "selections",
                  "confirmation",
                  "offeredReturnMinor",
                  "acceptedReturnMinor",
                  "settlementTerms"
                ],
                "type": "object"
              },
              "version": {
                "const": "bsd-agent-grade-v1",
                "type": "string"
              }
            },
            "required": [
              "version",
              "action",
              "commandKey",
              "depth",
              "ticket"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "action": {
                "const": "start",
                "type": "string"
              },
              "commandKey": {
                "maxLength": 120,
                "minLength": 16,
                "pattern": "^[a-zA-Z0-9_-]+$",
                "type": "string"
              },
              "quoteId": {
                "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)$",
                "type": "string"
              },
              "version": {
                "const": "bsd-agent-grade-v1",
                "type": "string"
              }
            },
            "required": [
              "version",
              "action",
              "commandKey",
              "quoteId"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "action": {
                "const": "cancel",
                "type": "string"
              },
              "commandKey": {
                "maxLength": 120,
                "minLength": 16,
                "pattern": "^[a-zA-Z0-9_-]+$",
                "type": "string"
              },
              "jobId": {
                "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)$",
                "type": "string"
              },
              "version": {
                "const": "bsd-agent-grade-v1",
                "type": "string"
              }
            },
            "required": [
              "version",
              "action",
              "commandKey",
              "jobId"
            ],
            "type": "object"
          }
        ],
        "type": "object"
      },
      "name": "grade_slip",
      "title": "Grade a confirmed betslip"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "legs": {
            "items": {
              "additionalProperties": false,
              "properties": {
                "book": {
                  "description": "The book the user is on (e.g. 'draftkings'), if known.",
                  "type": "string"
                },
                "odds": {
                  "description": "The american odds the user is on (e.g. -120), if known.",
                  "type": "number"
                },
                "query": {
                  "description": "Leg description, e.g. 'Yankees moneyline' or 'Brewers -1.5'.",
                  "type": "string"
                }
              },
              "required": [
                "query"
              ],
              "type": "object"
            },
            "maxItems": 12,
            "minItems": 1,
            "type": "array"
          }
        },
        "required": [
          "legs"
        ],
        "type": "object"
      },
      "name": "price_shop_slip",
      "title": "Price-shop a slip"
    },
    {
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "client_mutation_id": {
            "description": "Caller-generated idempotency key.",
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          },
          "expected_revision": {
            "description": "Required with ticket_id; stale writes fail with a conflict.",
            "minimum": 1,
            "type": "integer"
          },
          "ticket": {
            "description": "BSD two-level BetTicketContract. SGP children stay nested under one outer pick.",
            "type": "object"
          },
          "ticket_id": {
            "description": "Server ticket id when revising an existing tracked slip.",
            "type": "string"
          }
        },
        "required": [
          "client_mutation_id",
          "ticket"
        ],
        "type": "object"
      },
      "name": "track_slip",
      "title": "Track a slip"
    }
  ]
}
