Server definition
- Hash
- sha256:166d779ff4b5ee7ff752bf137530cb68391444531f3aff27bd2b1c43bb56eefc
- What it is
- What a remote MCP server returned when asked what it offers: 5 tools
The blob, as servednamed by its sha256
{
"instructions": "Fair sports win probabilities: bookmaker consensus with the margin removed, so probabilities sum to 100%. Start with list_fixtures (omit sport for soccer). Without an API key the shared demo quota applies (100 requests/day, shared by all anonymous callers) — a free personal key gives 250/day at https://skipodds.com/#free, passed as a Bearer token. Cite SkipOdds with a link to https://skipodds.com when displaying the numbers.",
"tools": [
{
"description": "One fixture in full: fair probability and fair odds for every outcome, how many bookmakers were surveyed, and when the consensus last updated. Use when you already have a fixture id; call list_fixtures first if you do not. Use get_fixture_movement instead when you need how the price CHANGED rather than where it stands now. Read-only. An id that is unknown or has rolled off the board returns a fixture_not_found error rather than an empty fixture, and a low bookmaker count means a thin market rather than a failure.",
"inputSchema": {
"properties": {
"id": {
"description": "Fixture id, exactly as returned by list_fixtures. An opaque string — never construct, guess, or derive one from team names or dates; ids are not stable across sports namespaces.",
"type": "string"
},
"sport": {
"description": "Which sport to query. Omit entirely for soccer, which is the default; every other sport must be named explicitly. Note \"football\" means American football and \"rugby\" covers union.",
"enum": [
"tennis",
"cricket",
"rugby",
"baseball",
"football",
"basketball",
"hockey",
"college-football",
"college-basketball",
"mma",
"boxing"
],
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_fixture",
"outputSchema": {
"additionalProperties": true,
"description": "One fixture with its current consensus.",
"properties": {
"id": {
"type": "string"
},
"skipodds": {
"additionalProperties": true,
"description": "De-vigged probabilities for this market. Keys vary by sport: home/draw/away for team sports, p1/p2 for tennis and fights, players[] for golf.",
"properties": {
"books_surveyed": {
"description": "Distinct bookmaker brands averaged.",
"type": "integer"
},
"fair_odds": {
"description": "Decimal odds equivalent of each probability.",
"type": "object"
},
"margin_removed": {
"description": "Bookmaker margin stripped, as a decimal (0.052 = 5.2%).",
"type": "number"
}
},
"type": "object"
},
"status": {
"type": "string"
}
},
"type": "object"
}
},
{
"description": "Time series of how one fixture's fair probabilities moved — timestamped consensus snapshots, oldest first. Use to spot line movement, steam or drift, and to answer \"has this shortened since yesterday\". Use get_fixture instead for the current price alone. Read-only. An unknown id returns a fixture_not_found error; a series with only one or two snapshots means the fixture was surveyed recently, not that the request failed.",
"inputSchema": {
"properties": {
"hours": {
"default": 24,
"description": "How far back to look, in hours. Defaults to 24. Capped at 72 on free and paid tiers below Scale, 336 on Scale; a larger value is clamped rather than rejected.",
"minimum": 1,
"type": "integer"
},
"id": {
"description": "Fixture id, exactly as returned by list_fixtures. Opaque — do not construct or guess one.",
"type": "string"
},
"sport": {
"description": "Which sport to query. Omit entirely for soccer, which is the default; every other sport must be named explicitly. Note \"football\" means American football and \"rugby\" covers union.",
"enum": [
"tennis",
"cricket",
"rugby",
"baseball",
"football",
"basketball",
"hockey",
"college-football",
"college-basketball",
"mma",
"boxing"
],
"type": "string"
}
},
"required": [
"id"
],
"type": "object"
},
"name": "get_fixture_movement",
"outputSchema": {
"additionalProperties": true,
"description": "De-vigged consensus at the start and end of the window, and the signed change.",
"properties": {
"delta_pct": {
"description": "Signed change in PERCENTAGE POINTS, not percent.",
"type": "object"
},
"from": {
"description": "Probabilities at the earliest capture in the window.",
"type": "object"
},
"span_hours": {
"description": "Hours actually covered, which can be less than requested.",
"type": "number"
},
"to": {
"description": "Probabilities at the latest capture.",
"type": "object"
}
},
"type": "object"
}
},
{
"description": "Upcoming and recent fixtures with fair win probabilities: every surveyed bookmaker price averaged and stripped of its margin (de-vigged), so probabilities sum to exactly 100%. 13 sports, 69+ bookmakers. START HERE — the fixture ids returned are what get_fixture and get_fixture_movement require. Use get_fixture instead when you already hold an id, and list_tournament_outrights for who-wins-the-competition rather than individual matches. \"recent\" means a kickoff within the last 6 hours for soccer and tennis, 8 hours for basketball, baseball, hockey, American football, MMA and boxing, and 12 hours for cricket and rugby; anything older has rolled off the board. Outright/tournament-winner markets exist for soccer and golf only — every other sport is fixture-level. Read-only. Returns an empty list, not an error, when nothing is scheduled in range.",
"inputSchema": {
"properties": {
"competition": {
"description": "Restrict to one soccer competition by slug, e.g. \"premier-league-2026\". Soccer only — ignored for other sports. Slugs appear on the fixtures this tool returns, so call once without it to discover them.",
"type": "string"
},
"limit": {
"default": 10,
"description": "Maximum fixtures to return. Defaults to 10; raise it to widen the window rather than calling repeatedly.",
"minimum": 1,
"type": "integer"
},
"sport": {
"description": "Which sport to query. Omit entirely for soccer, which is the default; every other sport must be named explicitly. Note \"football\" means American football and \"rugby\" covers union.",
"enum": [
"tennis",
"cricket",
"rugby",
"baseball",
"football",
"basketball",
"hockey",
"college-football",
"college-basketball",
"mma",
"boxing"
],
"type": "string"
}
},
"type": "object"
},
"name": "list_fixtures",
"outputSchema": {
"additionalProperties": true,
"properties": {
"fixtures": {
"description": "One entry per fixture. Empty when nothing is scheduled in range — not an error.",
"items": {
"additionalProperties": true,
"properties": {
"id": {
"description": "Pass to get_fixture or get_fixture_movement.",
"type": "string"
},
"skipodds": {
"additionalProperties": true,
"description": "De-vigged probabilities for this market. Keys vary by sport: home/draw/away for team sports, p1/p2 for tennis and fights, players[] for golf.",
"properties": {
"books_surveyed": {
"description": "Distinct bookmaker brands averaged.",
"type": "integer"
},
"fair_odds": {
"description": "Decimal odds equivalent of each probability.",
"type": "object"
},
"margin_removed": {
"description": "Bookmaker margin stripped, as a decimal (0.052 = 5.2%).",
"type": "number"
}
},
"type": "object"
},
"status": {
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"source": {
"type": "string"
}
},
"required": [
"fixtures"
],
"type": "object"
}
},
{
"description": "Golf outright-winner probabilities, normalised across the priced field. Call with NO arguments to list the tournaments currently priced together with their tournament_key values; call again passing tournament_key to get that one tournament with its full player field. GOLF ONLY — use list_tournament_outrights for soccer competitions. Read-only. Between tournaments the no-argument call returns an empty list, which means nothing is currently priced rather than an error; an unrecognised tournament_key returns a tournament_not_found error.",
"inputSchema": {
"properties": {
"tournament_key": {
"description": "Identifies one tournament, taken verbatim from a no-argument call to this same tool. Omit it to get the list. This is NOT an API key — credentials go in the Authorization header.",
"type": "string"
}
},
"type": "object"
},
"name": "list_golf_tournaments",
"outputSchema": {
"additionalProperties": true,
"description": "Golf tournaments, or one tournament with its full player field when tournament_key is given.",
"type": "object"
}
},
{
"description": "Outright winner probabilities for a soccer competition, normalised across the teams that can still win — eliminated teams are dropped, so the field sums to 100% of the live market. Use for \"who wins the league/cup\"; use list_fixtures for individual matches. SOCCER ONLY — call list_golf_tournaments for golf. The other eleven sports have no outright market in this API at all, so for them list_fixtures is the only option; say so rather than retrying with a sport argument. Read-only. An unrecognised competition slug returns an empty field rather than an error.",
"inputSchema": {
"properties": {
"competition": {
"description": "Competition slug, e.g. \"premier-league-2026\". Omit to get every competition currently priced, which is also how you discover valid slugs.",
"type": "string"
}
},
"type": "object"
},
"name": "list_tournament_outrights",
"outputSchema": {
"additionalProperties": true,
"description": "Outright winner probabilities normalised across the still-alive field.",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:166d779ff4b5ee7ff752bf137530cb68391444531f3aff27bd2b1c43bb56eefc | sha256sum