{
  "server": "betslipdoctor",
  "url": "https://api.betslipdoctor.ai/api/mcp",
  "date": "2026-10-14",
  "protocolVersion": "2025-06-18",
  "serverInfo": {
    "name": "betslip-doctor",
    "title": "BetSlip Doctor",
    "version": "1.3.0"
  },
  "listChangedDeclared": false,
  "toolCount": 46,
  "outputSchemaCoveragePct": 0,
  "tools": [
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Cancel Doctor reply"
      },
      "description": "Cancel an owned Doctor jobId under the app cancellation and reservation rules. Cannot undo a reply or provider work already completed. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "commandKey",
          "jobId"
        ],
        "type": "object"
      },
      "name": "cancel_doctor_reply",
      "title": "Cancel Doctor reply"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.grade"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Cancel Grade"
      },
      "description": "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. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "commandKey",
          "jobId"
        ],
        "type": "object"
      },
      "name": "cancel_grade",
      "title": "Cancel Grade"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "tail.read",
              "slips.track",
              "odds.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Save reviewed Tail slip"
      },
      "description": "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; never places a wager or grades automatically.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "bookId": {
            "maxLength": 128,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "type": "string"
          },
          "clientRevision": {
            "maximum": 1000000000,
            "minimum": 0,
            "type": "integer"
          },
          "clientSlipId": {
            "maxLength": 200,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_.:@/-]+$",
            "type": "string"
          },
          "commandKey": {
            "maxLength": 120,
            "minLength": 16,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "confirmation": {
            "const": "CONFIRM_COPY_TICKET",
            "type": "string"
          },
          "currency": {
            "pattern": "^[A-Z]{3}$",
            "type": "string"
          },
          "expectedPostRevision": {
            "exclusiveMinimum": 0,
            "maximum": 999999999,
            "type": "integer"
          },
          "jurisdiction": {
            "maxLength": 32,
            "minLength": 2,
            "type": "string"
          },
          "mode": {
            "enum": [
              "tail",
              "fade"
            ],
            "type": "string"
          },
          "offeredReturnMinor": {
            "anyOf": [
              {
                "maximum": 1000000000000,
                "minimum": 0,
                "type": "integer"
              },
              {
                "type": "null"
              }
            ]
          },
          "postId": {
            "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"
          },
          "previewBinding": {
            "pattern": "^[a-f0-9]{64}$",
            "type": "string"
          },
          "settlementTerms": {
            "additionalProperties": false,
            "properties": {
              "cashParlay": {
                "const": "normal_win_loss",
                "type": "string"
              },
              "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"
          },
          "stakeMinor": {
            "maximum": 1000000000000,
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "confirmation",
          "mode",
          "bookId",
          "jurisdiction",
          "expectedPostRevision",
          "previewBinding",
          "clientSlipId",
          "clientRevision",
          "currency",
          "stakeMinor",
          "offeredReturnMinor",
          "settlementTerms",
          "postId",
          "commandKey"
        ],
        "type": "object"
      },
      "name": "copy_tail_slip",
      "title": "Save reviewed Tail slip"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.track"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Create tracked slip"
      },
      "description": "Create an owned ticket tree in building state with a stable client_mutation_id for retries. Stores truth only; never prepares or places a wager. Cannot revise an existing slip.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "client_mutation_id": {
            "description": "Caller-generated idempotency key.",
            "maxLength": 160,
            "minLength": 1,
            "type": "string"
          },
          "ticket": {
            "description": "BSD two-level BetTicketContract. SGP children stay nested under one outer pick.",
            "type": "object"
          }
        },
        "required": [
          "client_mutation_id",
          "ticket"
        ],
        "type": "object"
      },
      "name": "create_tracked_slip",
      "title": "Create tracked slip"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Ask the Doctor"
      },
      "description": "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, optional responseStyle learning/technical/roast), memory (current confirmed notes), remember (commandKey, explicitly requested note/correction), forget (commandKey, note id/current revision, explicit confirmation), 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. Styles affect this reply only; omit to use the account default. Remember/forget require the customer explicitly asking to save, correct or remove that note; never infer mastery or save betting results as personal memory. The app enforces AI consent, tier, allowance, cost cap and worker admission. Do not claim an answer until the saved result is readable.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "open",
              "threads",
              "conversation",
              "quota",
              "quote",
              "start",
              "job",
              "events",
              "cancel",
              "memory",
              "remember",
              "forget"
            ],
            "type": "string"
          },
          "after": {
            "maximum": 1000000,
            "minimum": 0,
            "type": "integer"
          },
          "before": {
            "maximum": 2001,
            "minimum": 1,
            "type": "integer"
          },
          "commandKey": {
            "description": "Stable key for one write action and all its retries.",
            "maxLength": 120,
            "minLength": 16,
            "type": "string"
          },
          "confirmation": {
            "const": "forget_for_future_consults",
            "type": "string"
          },
          "expectedRevision": {
            "minimum": 1,
            "type": "integer"
          },
          "history": {
            "additionalProperties": false,
            "properties": {
              "id": {
                "format": "uuid",
                "type": "string"
              },
              "kind": {
                "enum": [
                  "import",
                  "manual"
                ],
                "type": "string"
              }
            },
            "required": [
              "kind",
              "id"
            ],
            "type": "object"
          },
          "id": {
            "description": "Exact owned note ID to remove.",
            "format": "uuid",
            "type": "string"
          },
          "jobId": {
            "format": "uuid",
            "type": "string"
          },
          "note": {
            "additionalProperties": false,
            "properties": {
              "category": {
                "enum": [
                  "preference",
                  "goal",
                  "constraint",
                  "context"
                ],
                "type": "string"
              },
              "confirmation": {
                "const": "save_for_future_consults",
                "type": "string"
              },
              "expectedRevision": {
                "minimum": 1,
                "type": "integer"
              },
              "expiresAt": {
                "format": "date-time",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "format": "uuid",
                "type": "string"
              },
              "text": {
                "maxLength": 1000,
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "category",
              "text",
              "confirmation"
            ],
            "type": "object"
          },
          "quoteId": {
            "format": "uuid",
            "type": "string"
          },
          "reportId": {
            "format": "uuid",
            "type": [
              "string",
              "null"
            ]
          },
          "responseStyle": {
            "description": "This reply only. Omit to preserve the account default.",
            "enum": [
              "learning",
              "technical",
              "roast"
            ],
            "type": "string"
          },
          "sequence": {
            "description": "Current thread sequence from conversation.",
            "maximum": 1998,
            "minimum": 0,
            "type": "integer"
          },
          "text": {
            "maxLength": 4000,
            "minLength": 1,
            "type": "string"
          },
          "threadId": {
            "format": "uuid",
            "type": "string"
          },
          "ticketId": {
            "format": "uuid",
            "type": [
              "string",
              "null"
            ]
          },
          "version": {
            "const": "bsd-agent-doctor-v1",
            "type": "string"
          }
        },
        "required": [
          "version",
          "action"
        ],
        "type": "object"
      },
      "name": "doctor_conversation",
      "title": "Ask the Doctor"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "history.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Export History page"
      },
      "description": "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.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string"
          },
          "query": {
            "additionalProperties": false,
            "properties": {
              "advice": {
                "default": "all",
                "enum": [
                  "all",
                  "unknown",
                  "unseen",
                  "viewed",
                  "followed",
                  "modified",
                  "rejected"
                ],
                "type": "string"
              },
              "adviceBasis": {
                "default": "current_response",
                "enum": [
                  "current_response",
                  "recorded_before_placement"
                ],
                "type": "string"
              },
              "bookId": {
                "maxLength": 200,
                "minLength": 1,
                "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                "type": "string"
              },
              "currency": {
                "pattern": "^[A-Z]{3}$",
                "type": "string"
              },
              "graded": {
                "default": "all",
                "enum": [
                  "all",
                  "yes",
                  "no"
                ],
                "type": "string"
              },
              "includeLinkedManual": {
                "default": false,
                "type": "boolean"
              },
              "league": {
                "maxLength": 200,
                "minLength": 1,
                "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                "type": "string"
              },
              "limit": {
                "default": 25,
                "maximum": 50,
                "minimum": 1,
                "type": "integer"
              },
              "range": {
                "default": "1m",
                "enum": [
                  "1w",
                  "1m",
                  "3m",
                  "1y",
                  "ytd",
                  "all"
                ],
                "type": "string"
              },
              "recordKind": {
                "default": "all",
                "enum": [
                  "all",
                  "import",
                  "manual"
                ],
                "type": "string"
              },
              "result": {
                "default": "all",
                "enum": [
                  "all",
                  "open",
                  "win",
                  "loss",
                  "push",
                  "void",
                  "cashout",
                  "halfwin",
                  "halfloss",
                  "unknown"
                ],
                "type": "string"
              },
              "search": {
                "default": "",
                "maxLength": 128,
                "type": "string"
              },
              "sort": {
                "default": "newest",
                "enum": [
                  "newest",
                  "biggest_win",
                  "biggest_loss"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "export_betting_history",
      "title": "Export History page"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Forget Doctor note"
      },
      "description": "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. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "commandKey": {
            "maxLength": 120,
            "minLength": 16,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "confirmation": {
            "const": "forget_for_future_consults",
            "type": "string"
          },
          "expectedRevision": {
            "exclusiveMinimum": 0,
            "maximum": 9007199254740991,
            "type": "integer"
          },
          "id": {
            "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"
          }
        },
        "required": [
          "commandKey",
          "id",
          "expectedRevision",
          "confirmation"
        ],
        "type": "object"
      },
      "name": "forget_doctor_note",
      "title": "Forget Doctor note"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read Doctor conversation"
      },
      "description": "Read the owned threadId, saved user messages, Doctor answers and jobs; optional before pages older messages. Does not generate a new answer. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "before": {
            "maximum": 2001,
            "minimum": 1,
            "type": "integer"
          },
          "threadId": {
            "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"
          }
        },
        "required": [
          "threadId"
        ],
        "type": "object"
      },
      "name": "get_doctor_conversation",
      "title": "Read Doctor conversation"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read Doctor events"
      },
      "description": "Read saved events for the owned Doctor jobId, optionally after a sequence. Never starts a consult. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "after": {
            "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"
          }
        },
        "required": [
          "jobId"
        ],
        "type": "object"
      },
      "name": "get_doctor_events",
      "title": "Read Doctor events"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read Doctor job"
      },
      "description": "Read the owned Doctor jobId, including its real saved answer when available. Never generates or restarts a reply. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "jobId"
        ],
        "type": "object"
      },
      "name": "get_doctor_job",
      "title": "Read Doctor job"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read Doctor memory"
      },
      "description": "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. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "get_doctor_memory",
      "title": "Read Doctor memory"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read Doctor allowance"
      },
      "description": "Read this account’s current app consult allowance, held and used amounts, and reset information. Does not reserve a consult. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "get_doctor_quota",
      "title": "Read Doctor allowance"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "reports.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read Grade job"
      },
      "description": "Read the owned Grade jobId and its current durable status. Never starts or resumes work. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "jobId"
        ],
        "type": "object"
      },
      "name": "get_grade_job",
      "title": "Read Grade job"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "reports.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read Grade progress"
      },
      "description": "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. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "jobId"
        ],
        "type": "object"
      },
      "name": "get_grade_progress",
      "title": "Read Grade progress"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "reports.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Read saved Grade report"
      },
      "description": "Return the verified immutable saved report for an owned completed Grade jobId. Returns unavailable until the real saved report is readable; never grades again. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "jobId"
        ],
        "type": "object"
      },
      "name": "get_grade_report",
      "title": "Read saved Grade report"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "history.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Betting history summary"
      },
      "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. Set view: app for the current app History summary with its source, currency and limitation rules.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "currency": {
            "description": "Current app view only; ISO 4217 code.",
            "type": "string"
          },
          "range": {
            "description": "Current app view only. 1y is a rolling calendar year; ytd is year to date.",
            "enum": [
              "1w",
              "1m",
              "3m",
              "1y",
              "ytd",
              "all"
            ],
            "type": "string"
          },
          "recent": {
            "description": "Legacy-only: how many recent bets to include (default 5). Do not send with view: app.",
            "maximum": 20,
            "minimum": 0,
            "type": "integer"
          },
          "recordKind": {
            "description": "Current app view only.",
            "enum": [
              "all",
              "import",
              "manual"
            ],
            "type": "string"
          },
          "view": {
            "description": "Use the current app History summary; omit for legacy imported history.",
            "enum": [
              "app"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_history_summary",
      "title": "Betting history summary"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "reports.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Saved Grade jobs and reports"
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "list",
              "job",
              "progress",
              "report"
            ],
            "type": "string"
          },
          "after": {
            "default": 0,
            "maximum": 1000000,
            "minimum": 0,
            "type": "integer"
          },
          "cursor": {
            "maxLength": 2000,
            "minLength": 1,
            "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"
          },
          "limit": {
            "maximum": 100,
            "minimum": 1,
            "type": "integer"
          },
          "report_id": {
            "description": "Legacy saved report ID; omit version and action.",
            "type": "string"
          },
          "version": {
            "const": "bsd-agent-grade-v1",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "get_saved_reports",
      "title": "Saved Grade jobs and reports"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "tail.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Read Tail feed"
      },
      "description": "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. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "maxLength": 1500,
            "minLength": 1,
            "type": "string"
          },
          "feed": {
            "enum": [
              "community",
              "for_you",
              "following",
              "own",
              "profile",
              "bookmarks",
              "list"
            ],
            "type": "string"
          },
          "limit": {
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "listId": {
            "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"
          },
          "profileId": {
            "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"
          },
          "search": {
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "get_tail_feed",
      "title": "Read Tail feed"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "tail.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Read Tail post"
      },
      "description": "Read one app Tail postId visible to this account under the same moderation and privacy rules. May contain another community member’s published content; does not post. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "postId": {
            "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"
          }
        },
        "required": [
          "postId"
        ],
        "type": "object"
      },
      "name": "get_tail_post",
      "title": "Read Tail post"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "odds.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Today's board (live odds)"
      },
      "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. Decision support; never a guarantee and never a wager. The default board may reserve/spend odds-refresh units under the app rules; retries deduplicate only within the existing 60-second usage bucket. Set view: app for the current app Live board and its provider, filters and cursor.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "category": {
            "description": "Current app games board only; current event prices are a separate app read.",
            "enum": [
              "games"
            ],
            "type": "string"
          },
          "cursor": {
            "description": "Current app view only.",
            "maxLength": 800,
            "type": "string"
          },
          "league": {
            "description": "Current app view only.",
            "type": "string"
          },
          "leagues": {
            "description": "League labels to filter by, e.g. ['MLB','NFL']. Omit for all leagues.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "limit": {
            "description": "Legacy main-market board: max 50. Current app games view: max 20.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "offset": {
            "description": "Window offset for paging (default 0).",
            "minimum": 0,
            "type": "integer"
          },
          "view": {
            "description": "Use the current app Live board; omit for the legacy main-market board.",
            "enum": [
              "app"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_todays_board",
      "title": "Today's board (live odds)"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Tracked slips"
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "description": "Current app view only.",
            "maxLength": 1000,
            "type": "string"
          },
          "limit": {
            "description": "Legacy tracked trees: max 50. Current app view: max 20.",
            "maximum": 50,
            "minimum": 1,
            "type": "integer"
          },
          "search": {
            "description": "Current app view only.",
            "maxLength": 128,
            "type": "string"
          },
          "view": {
            "description": "Use current app saved-ticket library; omit for tracked trees.",
            "enum": [
              "app"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "name": "get_tracked_slips",
      "title": "Tracked slips"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.grade"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Grade a confirmed betslip"
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "quote",
              "start",
              "cancel"
            ],
            "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"
          },
          "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"
          },
          "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"
          },
          "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": {
                  "cashParlay": {
                    "const": "normal_win_loss",
                    "type": "string"
                  },
                  "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"
          },
          "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"
        ],
        "type": "object"
      },
      "name": "grade_slip",
      "title": "Grade a confirmed betslip"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "List Doctor conversations"
      },
      "description": "Read this account’s saved app Doctor threads. Does not generate an answer. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "list_doctor_conversations",
      "title": "List Doctor conversations"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "reports.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "List Grade jobs"
      },
      "description": "Read the authenticated account’s current Grade library, with optional limit 1-20 and account-bound cursor. Never starts research. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string"
          },
          "limit": {
            "default": 10,
            "maximum": 20,
            "minimum": 1,
            "type": "integer"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "list_grade_jobs",
      "title": "List Grade jobs"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Open Doctor conversation"
      },
      "description": "Persist an app Doctor thread, optionally attached to an owned ticket, report or history item. Does not start a reply or spend a consult allowance. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "commandKey": {
            "maxLength": 120,
            "minLength": 16,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "history": {
            "additionalProperties": false,
            "properties": {
              "id": {
                "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"
              },
              "kind": {
                "enum": [
                  "import",
                  "manual"
                ],
                "type": "string"
              }
            },
            "required": [
              "kind",
              "id"
            ],
            "type": "object"
          },
          "reportId": {
            "anyOf": [
              {
                "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"
              },
              {
                "type": "null"
              }
            ]
          },
          "ticketId": {
            "anyOf": [
              {
                "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"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "commandKey"
        ],
        "type": "object"
      },
      "name": "open_doctor_conversation",
      "title": "Open Doctor conversation"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "slips.read",
              "odds.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Prepare sportsbook link"
      },
      "description": "Prepare the existing app’s fresh, vetted direct sportsbook link for an owned saved ticket. Choose the same sportsbook as the saved ticket and the customer-provided state, or null if unknown. Returns full-slip or explicit individual-selection/manual fallbacks with expiry. Set sendToPhone=true only on an explicit customer request; this sends an ID-only push to that account’s registered devices. The phone opens BSD for review. Only an explicit customer tap in BSD opens the sportsbook; this tool never executes a wager or records placement.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "bookKey": {
            "enum": [
              "draftkings",
              "fanduel",
              "betmgm",
              "caesars",
              "hardrockbet",
              "betrivers",
              "thescorebet",
              "fanatics",
              "bet365_us",
              "ballybet",
              "betparx",
              "fliff"
            ],
            "type": "string"
          },
          "platform": {
            "enum": [
              "web",
              "ios",
              "android"
            ],
            "type": "string"
          },
          "sendToPhone": {
            "description": "Set true only when the customer explicitly asks to send this exact saved-ticket handoff to their BSD phone. Omit otherwise.",
            "type": "boolean"
          },
          "state": {
            "anyOf": [
              {
                "enum": [
                  "AL",
                  "AK",
                  "AZ",
                  "AR",
                  "CA",
                  "CO",
                  "CT",
                  "DE",
                  "FL",
                  "GA",
                  "HI",
                  "ID",
                  "IL",
                  "IN",
                  "IA",
                  "KS",
                  "KY",
                  "LA",
                  "ME",
                  "MD",
                  "MA",
                  "MI",
                  "MN",
                  "MS",
                  "MO",
                  "MT",
                  "NE",
                  "NV",
                  "NH",
                  "NJ",
                  "NM",
                  "NY",
                  "NC",
                  "ND",
                  "OH",
                  "OK",
                  "OR",
                  "PA",
                  "RI",
                  "SC",
                  "SD",
                  "TN",
                  "TX",
                  "UT",
                  "VT",
                  "VA",
                  "WA",
                  "WV",
                  "WI",
                  "WY",
                  "DC"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "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"
          }
        },
        "required": [
          "ticketId",
          "platform",
          "bookKey",
          "state"
        ],
        "type": "object"
      },
      "name": "prepare_sportsbook_handoff",
      "title": "Prepare sportsbook link"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "tail.post"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Preview Tail post"
      },
      "description": "Compute the exact app sharing preview and binding from an owned saved Grade report or Doctor exchange draft. Does not publish. Show the returned preview to the customer before requesting publication. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "draft": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "messageId": {
                    "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"
                  },
                  "pollOptions": {
                    "items": {
                      "maxLength": 50,
                      "minLength": 1,
                      "type": "string"
                    },
                    "maxItems": 4,
                    "minItems": 2,
                    "type": "array"
                  },
                  "source": {
                    "const": "doctor_exchange",
                    "type": "string"
                  },
                  "text": {
                    "maxLength": 280,
                    "type": "string"
                  },
                  "threadId": {
                    "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"
                  }
                },
                "required": [
                  "source",
                  "threadId",
                  "messageId",
                  "text"
                ],
                "type": "object"
              },
              {
                "anyOf": [
                  {
                    "additionalProperties": false,
                    "properties": {
                      "audience": {
                        "const": "vip",
                        "type": "string"
                      },
                      "placement": {
                        "enum": [
                          "asking",
                          "self_reported_placed"
                        ],
                        "type": "string"
                      },
                      "pollOptions": {
                        "items": {
                          "maxLength": 50,
                          "minLength": 1,
                          "type": "string"
                        },
                        "maxItems": 4,
                        "minItems": 2,
                        "type": "array"
                      },
                      "publicGradeBreakdownVersion": {
                        "const": "bsd-public-grade-breakdown-v1",
                        "type": "string"
                      },
                      "publicGradeVersion": {
                        "const": "bsd-public-grade-summary-v1",
                        "type": "string"
                      },
                      "publicResearchGradeVersion": {
                        "enum": [
                          "bsd-public-research-grade-v1",
                          "bsd-public-research-grade-v2"
                        ],
                        "type": "string"
                      },
                      "recordUnits": {
                        "maximum": 5,
                        "minimum": 0.5,
                        "type": "number"
                      },
                      "reportId": {
                        "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"
                      },
                      "showStake": {
                        "type": "boolean"
                      },
                      "text": {
                        "maxLength": 280,
                        "type": "string"
                      }
                    },
                    "required": [
                      "reportId",
                      "text",
                      "showStake",
                      "placement"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "audience": {
                        "const": "vip",
                        "type": "string"
                      },
                      "placement": {
                        "enum": [
                          "asking",
                          "self_reported_placed"
                        ],
                        "type": "string"
                      },
                      "pollOptions": {
                        "items": {
                          "maxLength": 50,
                          "minLength": 1,
                          "type": "string"
                        },
                        "maxItems": 4,
                        "minItems": 2,
                        "type": "array"
                      },
                      "publicGradeBreakdownVersion": {
                        "const": "bsd-public-grade-breakdown-v2",
                        "type": "string"
                      },
                      "publicGradeVersion": {
                        "const": "bsd-public-grade-summary-v1",
                        "type": "string"
                      },
                      "publicResearchGradeVersion": {
                        "enum": [
                          "bsd-public-research-grade-v1",
                          "bsd-public-research-grade-v2"
                        ],
                        "type": "string"
                      },
                      "recordUnits": {
                        "maximum": 5,
                        "minimum": 0.5,
                        "type": "number"
                      },
                      "reportId": {
                        "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"
                      },
                      "showStake": {
                        "type": "boolean"
                      },
                      "text": {
                        "maxLength": 280,
                        "type": "string"
                      }
                    },
                    "required": [
                      "reportId",
                      "text",
                      "showStake",
                      "placement",
                      "publicGradeVersion",
                      "publicGradeBreakdownVersion"
                    ],
                    "type": "object"
                  }
                ]
              }
            ]
          }
        },
        "required": [
          "draft"
        ],
        "type": "object"
      },
      "name": "preview_tail_post",
      "title": "Preview Tail post"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "tail.read",
              "odds.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Review Tail prices"
      },
      "description": "Show current supported prices for tailing or fading one visible public post at the customer’s chosen bookId and jurisdiction. Use original provider IDs, not guessed book names. Preserves changed/unavailable legs and exact preview binding. Does not save, Grade, publish or place.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "bookId": {
            "maxLength": 128,
            "minLength": 1,
            "pattern": "^[A-Za-z0-9_-]+$",
            "type": "string"
          },
          "jurisdiction": {
            "maxLength": 32,
            "minLength": 2,
            "type": "string"
          },
          "mode": {
            "enum": [
              "tail",
              "fade"
            ],
            "type": "string"
          },
          "postId": {
            "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"
          }
        },
        "required": [
          "mode",
          "bookId",
          "jurisdiction",
          "postId"
        ],
        "type": "object"
      },
      "name": "preview_tail_slip",
      "title": "Review Tail prices"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "odds.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": false,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Price-shop a slip"
      },
      "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 describes books with real posted data; never places a wager. May reserve/spend odds-refresh units under the app rules; retries deduplicate only within the existing 60-second usage bucket.",
      "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"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "tail.post"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Publish Tail post"
      },
      "description": "Submit the exact customer-approved draft and previewBinding to the app moderation queue. Requires confirmation PUBLISH_POST, placementConfirmation and fWarning. Shares approved content with the Tail community when moderation allows; this irreversible send never places a wager. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "commandKey": {
            "maxLength": 120,
            "minLength": 16,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "confirmation": {
            "const": "PUBLISH_POST",
            "type": "string"
          },
          "draft": {
            "anyOf": [
              {
                "additionalProperties": false,
                "properties": {
                  "messageId": {
                    "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"
                  },
                  "pollOptions": {
                    "items": {
                      "maxLength": 50,
                      "minLength": 1,
                      "type": "string"
                    },
                    "maxItems": 4,
                    "minItems": 2,
                    "type": "array"
                  },
                  "source": {
                    "const": "doctor_exchange",
                    "type": "string"
                  },
                  "text": {
                    "maxLength": 280,
                    "type": "string"
                  },
                  "threadId": {
                    "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"
                  }
                },
                "required": [
                  "source",
                  "threadId",
                  "messageId",
                  "text"
                ],
                "type": "object"
              },
              {
                "anyOf": [
                  {
                    "additionalProperties": false,
                    "properties": {
                      "audience": {
                        "const": "vip",
                        "type": "string"
                      },
                      "placement": {
                        "enum": [
                          "asking",
                          "self_reported_placed"
                        ],
                        "type": "string"
                      },
                      "pollOptions": {
                        "items": {
                          "maxLength": 50,
                          "minLength": 1,
                          "type": "string"
                        },
                        "maxItems": 4,
                        "minItems": 2,
                        "type": "array"
                      },
                      "publicGradeBreakdownVersion": {
                        "const": "bsd-public-grade-breakdown-v1",
                        "type": "string"
                      },
                      "publicGradeVersion": {
                        "const": "bsd-public-grade-summary-v1",
                        "type": "string"
                      },
                      "publicResearchGradeVersion": {
                        "enum": [
                          "bsd-public-research-grade-v1",
                          "bsd-public-research-grade-v2"
                        ],
                        "type": "string"
                      },
                      "recordUnits": {
                        "maximum": 5,
                        "minimum": 0.5,
                        "type": "number"
                      },
                      "reportId": {
                        "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"
                      },
                      "showStake": {
                        "type": "boolean"
                      },
                      "text": {
                        "maxLength": 280,
                        "type": "string"
                      }
                    },
                    "required": [
                      "reportId",
                      "text",
                      "showStake",
                      "placement"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "audience": {
                        "const": "vip",
                        "type": "string"
                      },
                      "placement": {
                        "enum": [
                          "asking",
                          "self_reported_placed"
                        ],
                        "type": "string"
                      },
                      "pollOptions": {
                        "items": {
                          "maxLength": 50,
                          "minLength": 1,
                          "type": "string"
                        },
                        "maxItems": 4,
                        "minItems": 2,
                        "type": "array"
                      },
                      "publicGradeBreakdownVersion": {
                        "const": "bsd-public-grade-breakdown-v2",
                        "type": "string"
                      },
                      "publicGradeVersion": {
                        "const": "bsd-public-grade-summary-v1",
                        "type": "string"
                      },
                      "publicResearchGradeVersion": {
                        "enum": [
                          "bsd-public-research-grade-v1",
                          "bsd-public-research-grade-v2"
                        ],
                        "type": "string"
                      },
                      "recordUnits": {
                        "maximum": 5,
                        "minimum": 0.5,
                        "type": "number"
                      },
                      "reportId": {
                        "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"
                      },
                      "showStake": {
                        "type": "boolean"
                      },
                      "text": {
                        "maxLength": 280,
                        "type": "string"
                      }
                    },
                    "required": [
                      "reportId",
                      "text",
                      "showStake",
                      "placement",
                      "publicGradeVersion",
                      "publicGradeBreakdownVersion"
                    ],
                    "type": "object"
                  }
                ]
              }
            ]
          },
          "fWarning": {
            "anyOf": [
              {
                "enum": [
                  "acknowledge",
                  "dont_ask_again"
                ],
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "placementConfirmation": {
            "enum": [
              "NOT_PLACED",
              "SELF_REPORTED_PLACED"
            ],
            "type": "string"
          },
          "previewBinding": {
            "pattern": "^[a-f0-9]{64}$",
            "type": "string"
          }
        },
        "required": [
          "commandKey",
          "confirmation",
          "draft",
          "previewBinding",
          "placementConfirmation",
          "fWarning"
        ],
        "type": "object"
      },
      "name": "publish_tail_post",
      "title": "Publish Tail post"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Quote Doctor reply"
      },
      "description": "Persist an app consult quote for text in the owned threadId at its current sequence, with optional responseStyle learning/technical/roast for this reply. Omit for the account default. Returns the allowance quote without starting a reply. Show the quote before requesting a start. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "commandKey": {
            "maxLength": 120,
            "minLength": 16,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "responseStyle": {
            "enum": [
              "learning",
              "technical",
              "roast"
            ],
            "type": "string"
          },
          "sequence": {
            "maximum": 1998,
            "minimum": 0,
            "type": "integer"
          },
          "text": {
            "maxLength": 4000,
            "minLength": 1,
            "type": "string"
          },
          "threadId": {
            "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"
          }
        },
        "required": [
          "commandKey",
          "threadId",
          "sequence",
          "text"
        ],
        "type": "object"
      },
      "name": "quote_doctor_reply",
      "title": "Quote Doctor reply"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.grade"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Quote Grade"
      },
      "description": "Persist a Grade quote for an owned saved ticketId or exactly one confirmed manual ticket, with the requested depth and optional funding. May save that manual ticket. Returns the app allowance quote; does not start work. Show the quote before requesting a start. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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": {
                  "cashParlay": {
                    "const": "normal_win_loss",
                    "type": "string"
                  },
                  "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"
          },
          "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"
          }
        },
        "required": [
          "commandKey",
          "depth"
        ],
        "type": "object"
      },
      "name": "quote_grade",
      "title": "Quote Grade"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Remember or correct Doctor note"
      },
      "description": "Save only a preference, goal, constraint or context note the customer explicitly asked Doctor to remember. Corrections require the exact owned note id and expectedRevision from get_doctor_memory. note.confirmation must be save_for_future_consults. Do not silently infer mastery or save sporting results; those belong in saved betting records. A committed edit rotates inferred memory so a superseded note does not return. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "commandKey": {
            "maxLength": 120,
            "minLength": 16,
            "pattern": "^[a-zA-Z0-9_-]+$",
            "type": "string"
          },
          "note": {
            "additionalProperties": false,
            "properties": {
              "category": {
                "enum": [
                  "preference",
                  "goal",
                  "constraint",
                  "context"
                ],
                "type": "string"
              },
              "confirmation": {
                "const": "save_for_future_consults",
                "type": "string"
              },
              "expectedRevision": {
                "exclusiveMinimum": 0,
                "maximum": 9007199254740991,
                "type": "integer"
              },
              "expiresAt": {
                "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"
                  }
                ],
                "default": null
              },
              "id": {
                "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"
              },
              "text": {
                "maxLength": 1000,
                "minLength": 1,
                "type": "string"
              }
            },
            "required": [
              "category",
              "text",
              "confirmation"
            ],
            "type": "object"
          }
        },
        "required": [
          "commandKey",
          "note"
        ],
        "type": "object"
      },
      "name": "remember_doctor_note",
      "title": "Remember or correct Doctor note"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.track"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Revise tracked slip"
      },
      "description": "Overwrite the owned tracked ticket_id with the supplied ticket tree in building state. Requires expected_revision; stale writes fail with the same app conflict. Keep client_mutation_id stable for retries. Never prepares or places 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",
          "ticket_id",
          "expected_revision"
        ],
        "type": "object"
      },
      "name": "revise_tracked_slip",
      "title": "Revise tracked slip"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "history.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Show betting History"
      },
      "description": "Show the connected account’s recorded profit/loss chart and actual win/loss counts. Requires currency and settlement source; never combine currencies or sources. Range/filter controls use the same app services. Missing results remain marked.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "advice": {
            "default": "all",
            "enum": [
              "all",
              "unknown",
              "unseen",
              "viewed",
              "followed",
              "modified",
              "rejected"
            ],
            "type": "string"
          },
          "adviceBasis": {
            "default": "current_response",
            "enum": [
              "current_response",
              "recorded_before_placement"
            ],
            "type": "string"
          },
          "bookId": {
            "maxLength": 200,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_.:@/-]+$",
            "type": "string"
          },
          "currency": {
            "pattern": "^[A-Z]{3}$",
            "type": "string"
          },
          "graded": {
            "default": "all",
            "enum": [
              "all",
              "yes",
              "no"
            ],
            "type": "string"
          },
          "league": {
            "maxLength": 200,
            "minLength": 1,
            "pattern": "^[a-zA-Z0-9_.:@/-]+$",
            "type": "string"
          },
          "range": {
            "default": "1m",
            "enum": [
              "1w",
              "1m",
              "3m",
              "1y",
              "ytd",
              "all"
            ],
            "type": "string"
          },
          "recordKind": {
            "default": "all",
            "enum": [
              "all",
              "import",
              "manual"
            ],
            "type": "string"
          },
          "result": {
            "default": "all",
            "enum": [
              "all",
              "open",
              "win",
              "loss",
              "push",
              "void",
              "cashout",
              "halfwin",
              "halfloss",
              "unknown"
            ],
            "type": "string"
          },
          "search": {
            "default": "",
            "maxLength": 128,
            "type": "string"
          },
          "source": {
            "enum": [
              "sportsbook_record",
              "provider_autograde",
              "self_reported"
            ],
            "type": "string"
          }
        },
        "required": [
          "currency",
          "source"
        ],
        "type": "object"
      },
      "name": "show_betting_history",
      "title": "Show betting History"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Show saved Doctor conversation"
      },
      "description": "Read the owned threadId, saved user messages, Doctor answers and jobs; optional before pages older messages. Does not generate a new answer. Action and version are fixed by this tool; do not supply them. Show the saved result in an interactive BSD card in the chat. Use this tool when the customer wants to see their saved result. This is a read-only view.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "before": {
            "maximum": 2001,
            "minimum": 1,
            "type": "integer"
          },
          "threadId": {
            "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"
          }
        },
        "required": [
          "threadId"
        ],
        "type": "object"
      },
      "name": "show_doctor_conversation",
      "title": "Show saved Doctor conversation"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "history.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Explore betting History"
      },
      "description": "Show a bounded page of owned History records and their saved Grade association. Use the returned cursor for more. Preserve provider versus self-reported provenance.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "maxLength": 2000,
            "minLength": 1,
            "type": "string"
          },
          "query": {
            "additionalProperties": false,
            "properties": {
              "advice": {
                "default": "all",
                "enum": [
                  "all",
                  "unknown",
                  "unseen",
                  "viewed",
                  "followed",
                  "modified",
                  "rejected"
                ],
                "type": "string"
              },
              "adviceBasis": {
                "default": "current_response",
                "enum": [
                  "current_response",
                  "recorded_before_placement"
                ],
                "type": "string"
              },
              "bookId": {
                "maxLength": 200,
                "minLength": 1,
                "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                "type": "string"
              },
              "currency": {
                "pattern": "^[A-Z]{3}$",
                "type": "string"
              },
              "graded": {
                "default": "all",
                "enum": [
                  "all",
                  "yes",
                  "no"
                ],
                "type": "string"
              },
              "includeLinkedManual": {
                "default": false,
                "type": "boolean"
              },
              "league": {
                "maxLength": 200,
                "minLength": 1,
                "pattern": "^[a-zA-Z0-9_.:@/-]+$",
                "type": "string"
              },
              "limit": {
                "default": 25,
                "maximum": 50,
                "minimum": 1,
                "type": "integer"
              },
              "range": {
                "default": "1m",
                "enum": [
                  "1w",
                  "1m",
                  "3m",
                  "1y",
                  "ytd",
                  "all"
                ],
                "type": "string"
              },
              "recordKind": {
                "default": "all",
                "enum": [
                  "all",
                  "import",
                  "manual"
                ],
                "type": "string"
              },
              "result": {
                "default": "all",
                "enum": [
                  "all",
                  "open",
                  "win",
                  "loss",
                  "push",
                  "void",
                  "cashout",
                  "halfwin",
                  "halfloss",
                  "unknown"
                ],
                "type": "string"
              },
              "search": {
                "default": "",
                "maxLength": 128,
                "type": "string"
              },
              "sort": {
                "default": "newest",
                "enum": [
                  "newest",
                  "biggest_win",
                  "biggest_loss"
                ],
                "type": "string"
              }
            },
            "type": "object"
          }
        },
        "required": [
          "query"
        ],
        "type": "object"
      },
      "name": "show_history_records",
      "title": "Explore betting History"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "reports.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Show saved Grade card"
      },
      "description": "Return the verified immutable saved report for an owned completed Grade jobId. Returns unavailable until the real saved report is readable; never grades again. Action and version are fixed by this tool; do not supply them. Show the saved result in an interactive BSD card in the chat. Use this tool when the customer wants to see their saved result. This is a read-only view.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "jobId"
        ],
        "type": "object"
      },
      "name": "show_saved_grade",
      "title": "Show saved Grade card"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "slips.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": true,
        "title": "Show saved slip"
      },
      "description": "Show an owned saved ticket with its exact single-book saved picks, odds and stake. Does not open a sportsbook or place anything. Offers a supported sportsbook handoff and optional Grade.",
      "inputSchema": {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "ticketId"
        ],
        "type": "object"
      },
      "name": "show_saved_slip",
      "title": "Show saved slip"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "tail.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Show Tail feed"
      },
      "description": "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. Action and version are fixed by this tool; do not supply them. Show the saved result in an interactive BSD card in the chat. Use this tool when the customer wants to see their saved result. This is a read-only view.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "cursor": {
            "maxLength": 1500,
            "minLength": 1,
            "type": "string"
          },
          "feed": {
            "enum": [
              "community",
              "for_you",
              "following",
              "own",
              "profile",
              "bookmarks",
              "list"
            ],
            "type": "string"
          },
          "limit": {
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "listId": {
            "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"
          },
          "profileId": {
            "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"
          },
          "search": {
            "maxLength": 100,
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "show_tail_feed",
      "title": "Show Tail feed"
    },
    {
      "_meta": {
        "openai/outputTemplate": "ui://bsd/customer-cards-v2.html",
        "openai/widgetAccessible": true,
        "securitySchemes": [
          {
            "scopes": [
              "tail.read"
            ],
            "type": "oauth2"
          }
        ],
        "ui": {
          "resourceUri": "ui://bsd/customer-cards-v2.html",
          "visibility": [
            "model",
            "app"
          ]
        }
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Show Tail post"
      },
      "description": "Read one app Tail postId visible to this account under the same moderation and privacy rules. May contain another community member’s published content; does not post. Action and version are fixed by this tool; do not supply them. Show the saved result in an interactive BSD card in the chat. Use this tool when the customer wants to see their saved result. This is a read-only view.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "postId": {
            "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"
          }
        },
        "required": [
          "postId"
        ],
        "type": "object"
      },
      "name": "show_tail_post",
      "title": "Show Tail post"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "doctor.use"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Start Doctor reply"
      },
      "description": "Start the owned consult quoteId after the customer has seen and accepted the quote. Reserves app allowance and queues the existing Doctor job; app AI consent, tier, credit, cost cap and admission rules apply. Does not return an answer before it is saved. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "commandKey",
          "quoteId"
        ],
        "type": "object"
      },
      "name": "start_doctor_reply",
      "title": "Start Doctor reply"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.grade"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Start Grade"
      },
      "description": "Start the owned Grade quoteId after the customer has seen and accepted its allowance quote. Reserves app allowance and queues the same durable Grade job; consent, tier, credit and admission rules apply. Returns a job, not a completed answer. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "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"
          }
        },
        "required": [
          "commandKey",
          "quoteId"
        ],
        "type": "object"
      },
      "name": "start_grade",
      "title": "Start Grade"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "tail.post"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": false,
        "title": "Preview or publish to Tail"
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "preview",
              "publish"
            ],
            "type": "string"
          },
          "commandKey": {
            "maxLength": 120,
            "minLength": 16,
            "type": "string"
          },
          "confirmation": {
            "const": "PUBLISH_POST",
            "type": "string"
          },
          "draft": {
            "additionalProperties": false,
            "description": "The exact app post draft: either a saved Grade report or a saved Doctor exchange.",
            "properties": {
              "messageId": {
                "description": "Saved Doctor reply in that thread.",
                "format": "uuid",
                "type": "string"
              },
              "placement": {
                "description": "Ticket post only.",
                "enum": [
                  "asking",
                  "self_reported_placed"
                ],
                "type": "string"
              },
              "pollOptions": {
                "items": {
                  "maxLength": 50,
                  "minLength": 1,
                  "type": "string"
                },
                "maxItems": 4,
                "minItems": 2,
                "type": "array"
              },
              "reportId": {
                "description": "Owned saved Grade job ID for a ticket post.",
                "format": "uuid",
                "type": "string"
              },
              "showStake": {
                "description": "Ticket post only.",
                "type": "boolean"
              },
              "source": {
                "const": "doctor_exchange",
                "type": "string"
              },
              "text": {
                "maxLength": 280,
                "type": "string"
              },
              "threadId": {
                "description": "Owned Doctor thread for an exchange post.",
                "format": "uuid",
                "type": "string"
              }
            },
            "required": [
              "text"
            ],
            "type": "object"
          },
          "fWarning": {
            "enum": [
              "acknowledge",
              "dont_ask_again",
              null
            ],
            "type": [
              "string",
              "null"
            ]
          },
          "placementConfirmation": {
            "enum": [
              "NOT_PLACED",
              "SELF_REPORTED_PLACED"
            ],
            "type": "string"
          },
          "previewBinding": {
            "pattern": "^[a-f0-9]{64}$",
            "type": "string"
          },
          "version": {
            "const": "bsd-agent-tail-v1",
            "type": "string"
          }
        },
        "required": [
          "version",
          "action",
          "draft"
        ],
        "type": "object"
      },
      "name": "tail_post",
      "title": "Preview or publish to Tail"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "tail.read"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": true,
        "readOnlyHint": true,
        "title": "Read Tail"
      },
      "description": "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.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "enum": [
              "feed",
              "post"
            ],
            "type": "string"
          },
          "cursor": {
            "maxLength": 1500,
            "type": "string"
          },
          "feed": {
            "enum": [
              "community",
              "for_you",
              "following",
              "own",
              "profile",
              "bookmarks",
              "list"
            ],
            "type": "string"
          },
          "limit": {
            "maximum": 25,
            "minimum": 1,
            "type": "integer"
          },
          "listId": {
            "format": "uuid",
            "type": "string"
          },
          "postId": {
            "format": "uuid",
            "type": "string"
          },
          "profileId": {
            "format": "uuid",
            "type": "string"
          },
          "search": {
            "maxLength": 100,
            "type": "string"
          },
          "version": {
            "const": "bsd-agent-tail-v1",
            "type": "string"
          }
        },
        "required": [
          "version",
          "action"
        ],
        "type": "object"
      },
      "name": "tail_read",
      "title": "Read Tail"
    },
    {
      "_meta": {
        "securitySchemes": [
          {
            "scopes": [
              "slips.track"
            ],
            "type": "oauth2"
          }
        ]
      },
      "annotations": {
        "destructiveHint": true,
        "idempotentHint": true,
        "openWorldHint": false,
        "readOnlyHint": false,
        "title": "Track a slip"
      },
      "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"
    }
  ]
}
