sharpapi-mcp
OfficialYou can query live sports betting odds and surface betting opportunities via SharpAPI in MCP-compatible AI applications.
List covered sports with live/upcoming event counts.
List normalized sportsbooks and ids; plan limits which books are readable.
List events with ids, start times, and teams; filter by sport, league, date, live status, and limit.
Fetch normalized odds across books with American/decimal prices and implied probability; filter by event, sport, league, market, sportsbook, live, and limit.
Get the best available price per selection across books for line shopping.
Find cross-book arbitrage opportunities (Hobby plan or above).
Find +EV bets with a de-vigged
fairProbabilityfield (Pro plan or above).Find middle opportunities, sorted by quality/EV/probability/middle size, with optional minimum middle width.
Provides tools for querying live sports betting data from SharpAPI: listing covered sports, sportsbooks and events, fetching normalized odds across books (American/decimal/implied probability), finding the best price per selection, and surfacing cross-book arbitrage, +EV bets and middles opportunities.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sharpapi-mcpfind arbitrage opportunities in NBA games"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SharpAPI MCP Server
MCP server for SharpAPI. Exposes live sports betting odds, +EV, arbitrage and middles as Model Context Protocol tools, for compatible AI applications to query sports betting data.
Uses the official TypeScript SDK, @sharp-api/client, for HTTP requests.
Install
Install the npm package globally, which puts sharpapi-mcp on your PATH:
npm install -g @sharp-api/mcp-serverOr run it without installing:
npx -y @sharp-api/mcp-serverTo run from source instead, use the GitHub repository:
npx github:Sharp-API/SharpAPI-MCPRelated MCP server: MCP Prediction Markets
Configure
Set SHARPAPI_KEY in the environment. Get a free key at https://sharpapi.io; the free tier serves DraftKings and FanDuel at 12 requests/min with no card.
The key is read from the environment only. There is deliberately no way to pass it as a tool argument: tool arguments are model-generated and end up in transcripts and logs.
Claude Desktop (claude_desktop_config.json), running the npm package through npx:
{
"mcpServers": {
"sharpapi": {
"command": "npx",
"args": ["-y", "@sharp-api/mcp-server"],
"env": { "SHARPAPI_KEY": "sk_your_key_here" }
}
}
}With the global install, call the sharpapi-mcp binary directly:
{
"mcpServers": {
"sharpapi": {
"command": "sharpapi-mcp",
"env": { "SHARPAPI_KEY": "sk_your_key_here" }
}
}
}Tools
tool | what it does | plan |
| Sports covered, with live/upcoming counts. Start here to find valid sport ids. | any |
| Book ids for the | any |
| Events with ids, start times, teams. | any |
| Normalized odds across books: American, decimal, implied probability. | any |
| Best price per selection across books. The line-shopping view. | any |
| Cross-book arbitrage: combined implied probability under 100%. | Hobby+ |
| +EV bets against fair probability. Carries | Pro+ |
| Two-sided gaps where both bets can win. | any |
| Every odds row for one event across books, in one call with no pagination. Takes an event id from | any |
The API enforces plan requirements. The server returns API errors unchanged, including details about the required tier.
There is no separate no-vig tool. SharpAPI does not expose de-vigged odds as its own endpoint; the fair number arrives as fairProbability on each get_ev opportunity.
Notes
Tool errors are returned with
isErrorso clients can handle rate limits and plan requirements.Diagnostics are written to stderr; stdout is reserved for the MCP protocol.
License
MIT
Available Tools
9 toolsget_arbitrageB
Find cross-book arbitrage opportunities: sets of prices whose combined implied probability is under 100%, so backing every outcome locks a margin. Requires a Hobby plan or above.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sport | No | ||
| league | No | ||
| min_profit | No | Minimum profit percent, e.g. 1.5 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the plan-tier prerequisite, which is genuinely useful, and explains what counts as an opportunity, but says nothing about result ordering, cap/default behavior for limit, or whether prices are live or cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the concept and ending with the access constraint. No filler; slightly more could be spent on parameters instead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must cover the full surface. It handles the concept and the plan gate but leaves the return shape, result ordering, and three of four parameters unexplained — adequate but with clear gaps for a discovery tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 25% — only min_profit has a description — yet the description never mentions any parameter. An agent must infer that sport/league are free-text filters and what limit bounds, with no help on accepted values or default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource (cross-book arbitrage opportunities) and defines the mechanism — combined implied probability under 100% so backing every outcome locks a margin — which clearly separates it from siblings like get_ev and get_middles. It doesn't name those siblings directly, so no full differentiation credit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the definition (use when you want a locked margin rather than an edge or a middle), and the Hobby-plan gate is stated. There is no explicit when-not guidance or pointer to the alternative tools such as get_ev or get_middles for non-arbitrage analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_best_oddsB
Get the best available price per selection across all covered books. This is the line shopping view: one row per selection rather than one per book.
| Name | Required | Description | Default |
|---|---|---|---|
| event | No | ||
| limit | No | ||
| sport | No | ||
| league | No | ||
| market | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses result granularity and coverage ('one row per selection', 'across all covered books'), but does not address data freshness, permissions, pagination/limit behavior, or how missing books are handled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core operation and followed by a high-value disambiguation of row shape. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter tool with no annotations, no output schema, and no schema parameter descriptions, the definition is too thin. It describes the return shape at a high level but leaves filter semantics, limit behavior, and edge cases undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All five parameters (event, sport, league, market, limit) have 0% schema description coverage, and the description explains none of them. It does not say whether filters are optional, how they combine, or what limit controls, so it fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (best available price per selection), and clarifies output granularity with 'one row per selection rather than one per book.' That distinguishes it from per-book odds siblings such as get_odds and get_event_odds, even though those tools are not named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'line shopping view' implies the comparison use case, and the row-shape contrast hints at when this differs from per-book tools. However, there is no explicit when-to-use/when-not guidance and no named alternative, so the agent must infer how it relates to get_odds, get_event_odds, get_arbitrage, and others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_evB
Find positive expected value (+EV) bets: prices that beat the fair probability implied by the wider market. Each opportunity carries a fairProbability field, which is the de-vigged number. Requires a Pro plan or above.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sport | No | ||
| league | No | ||
| min_ev | No | Minimum EV percent, e.g. 2 | |
| sportsbook | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that fairProbability is de-vigged and that a Pro plan is required, but it omits return shape, pagination/limit behavior, and other operational details an agent would need for a filtered query.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is two efficient sentences, front-loads the core purpose, and every sentence adds useful context. There is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the core concept and one returned field, but with five parameters, low schema coverage, no annotations, and no output schema, it leaves too much unsaid about filtering and result structure. It is minimally usable but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20%, with min_ev documented in the schema but limit, sport, league, and sportsbook left unexplained. The description does not compensate by clarifying those parameters or their filtering behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Find positive expected value (+EV) bets', and clarifies the core criterion as prices beating the fair market probability. It does not explicitly differentiate this from siblings like get_best_odds or get_arbitrage, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used to discover +EV betting opportunities and notes the Pro plan requirement, but it gives no explicit when-to-use/when-not-to-use guidance or alternative tools. Usage is therefore implied rather than clearly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_oddsA
Get all odds for a specific event across every covered sportsbook. Returns the complete set of rows for that event in one call — no pagination. Use list_events to find event ids. To narrow by book, pass sportsbook.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Event id from list_events, e.g. "nfl_chiefs_ravens_2026-01-18_a4" | |
| sportsbook | No | Restrict to one book id from list_sportsbooks |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key behavioral trait: the complete row set comes back in one call with no pagination, which tells the agent the response can be large. It doesn't cover behavior for unknown/invalid event ids or whether the call is a pure read, leaving minor gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the primary purpose and the no-pagination guarantee. Minor waste in repeating the list_events/sportsbook guidance already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, yet the description conveys the return shape (complete set of rows per event, unpaginated), which is the main thing an agent needs. Error/empty-result behavior for a bad event id is the only notable omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (event_id and sportsbook) are already documented with examples and sourcing hints. The description restates the same guidance (use list_events, restrict by book) without adding format or edge-case semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (odds) with clear scope: all odds for one event across every covered sportsbook. The scope phrase implicitly contrasts with get_best_odds and get_odds, but it never names those siblings, so the differentiation is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs the agent to list_events for the required event_id and explains how to narrow by book via the sportsbook parameter. It stops short of saying when to prefer get_best_odds or get_odds over this full-set tool, so no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_middlesC
Find middle opportunities: two prices on opposite sides with a gap where both bets can win. Sorted by quality unless told otherwise.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| limit | No | ||
| sport | No | ||
| league | No | ||
| market | No | ||
| min_size | No | Minimum middle width in points |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It does add one genuine behavioral fact — default ordering is by quality — but says nothing about the result shape, whether the scan is live or cached, cost/rate limits, or what happens when no middles exist. Domain-definition text substitutes for behavior rather than supplementing it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the purpose and jargon definition, then the default-ordering fact. No filler; near-ideal size for what it chooses to cover.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Six optional parameters with near-zero schema documentation, no output schema, and no annotations means the description is the only source of meaning — and it covers neither most parameters nor the return values. An agent can guess intent but not how to filter or what it will receive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (just min_size), and 6 parameters exist. The description only hints at the default value of 'sort' ('quality'); it says nothing about sport/league/market filtering syntax, the meaning of the sort enums (ev vs probability vs middle_size), or how limit interacts with result size. With low coverage, the description should compensate and largely doesn't.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Find') and resource ('middle opportunities') and defines the domain concept ('two prices on opposite sides with a gap where both bets can win'), so an agent knows what a middle is. It doesn't explicitly contrast with the adjacent sibling get_arbitrage, which is the main confusable tool, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to call this versus get_arbitrage, get_ev, or get_best_odds, and no preconditions (sport/league required? live vs pregame?). 'Sorted by quality unless told otherwise' is behavioral, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_oddsA
Get normalized odds across sportsbooks. Returns American and decimal prices plus implied probability, one row per book/market/selection, so prices are directly comparable between books. Results are paginated at 100 rows by default; pass the cursor from pagination.next_cursor to fetch the next page when pagination.has_more is true.
| Name | Required | Description | Default |
|---|---|---|---|
| live | No | Only in-play markets | |
| event | No | Event id from list_events | |
| limit | No | ||
| sport | No | Sport id from list_sports | |
| cursor | No | Pagination cursor from a previous response (pagination.next_cursor). Pass this to fetch the next page of results when pagination.has_more is true. | |
| league | No | ||
| market | No | e.g. "moneyline", "spread", "total" | |
| sportsbook | No | Restrict to one book id | |
| player_name | No | Filter to one player. Full name, case-insensitive exact match — "Travis Kelce" matches, "Kelce" does not. Only appears on player-prop markets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It usefully discloses the return shape, normalization, comparability across books, default page size of 100 rows, and cursor-based pagination behavior, though it does not discuss other operational constraints such as rate limits or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then adds return format and pagination details in a compact, well-structured way. Each sentence contributes useful information without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter read tool with 78% schema coverage and no output schema, the description supplies the key missing context: return fields, row granularity, comparability, and pagination. It could be slightly more complete by mentioning when to prefer this over sibling odds tools, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 78%, so the schema already documents most parameters. The description adds useful context about default pagination size and the relationship between cursor and pagination.has_more, but most filter parameters are left to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: it gets normalized odds across sportsbooks and explains the row shape. It is clear what the tool does, but it does not explicitly distinguish itself from nearby siblings such as get_best_odds or get_event_odds.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'across sportsbooks' and by the emphasis on directly comparable prices, but the description does not explicitly state when to use this versus get_best_odds, get_event_odds, or other odds-related siblings. Pagination guidance is present, but selection guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsA
List events (games) with ids, start times and teams. Use this to find an event id before fetching odds for it.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ISO date, e.g. "2026-09-08" | |
| live | No | Only events currently in play | |
| limit | No | ||
| sport | No | Sport id from list_sports, e.g. "baseball" | |
| league | No | League id, e.g. "mlb" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden; it does disclose the returned fields (ids, start times, teams), which is genuinely useful. However it says nothing about default behavior with zero filters, result caps/pagination (limit max 500), or ordering, all of which matter for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero waste, purpose front-loaded and workflow appended. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-optional-filter tool with no annotations and no output schema, the description covers what the tool is and the key downstream workflow, and partially describes the return shape. The remaining gap is default/no-arg behavior and result limiting, which an agent must guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% and the description mentions no parameters at all. The uncovered parameter (limit, which has no schema description) is not compensated for in the description, so this is baseline at best.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("List events (games)") plus the payload it returns (ids, start times, teams), so an agent knows exactly what it gets. It is distinguishable from list_sports/list_sportsbooks by the resource, though no sibling is named directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use this to find an event id before fetching odds for it" gives an explicit workflow that routes the agent here before get_event_odds/get_odds. No exclusion conditions are stated (e.g. when to prefer a different listing), so it stops short of a full when/when-not treatment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sportsA
List the sports SharpAPI covers, with live and upcoming event counts for each. Call this first to discover valid sport ids for the other tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. The 'list' verb implies a read-only operation, and the description discloses that output includes live and upcoming event counts. However, it does not explicitly state that no data is modified or describe any edge-case behavior, though these gaps are minor for a simple list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences with no wasted words. The core function and output content are front-loaded in the first sentence, and the usage directive is placed in the second, making it immediately actionable for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, zero parameters, and no output schema, the description provides enough detail about what the tool returns (sports with live/upcoming counts) and how to use it (call first for valid ids). Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema trivially covers semantics. The description adds value by explaining that the output provides valid sport ids for use in other tools, which implicitly clarifies why no parameters are needed for this discovery call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ('List'), resource ('sports SharpAPI covers'), and distinguishing output (live and upcoming event counts). It also frames the tool's role as the discovery entry point for valid sport ids, distinguishing it from sibling tools like list_events or list_sportsbooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The guidance 'Call this first to discover valid sport ids for the other tools' explicitly tells the agent when to use this tool and positions it before the sibling tools. It does not name specific alternatives, but for a zero-parameter discovery tool, the sequencing instruction provides sufficient usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sportsbooksA
List the sportsbooks SharpAPI normalizes, with their ids. Use the returned ids for the sportsbook argument elsewhere. Which books a key can actually read depends on its plan: the free tier serves DraftKings and FanDuel only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that availability is plan-dependent and mentions the free-tier limitation, which is a behavioral trait not otherwise visible. The verb 'List' implies a read-only operation, though it doesn't explicitly state side-effect-free behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: the first states what the tool does, the second supplies usage guidance and plan caveats. No filler, front-loaded with the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with no output schema, the description is complete: it explains what is listed, what the ids are for, and how plan restrictions affect results. An agent can call this tool correctly and understand its role within the sibling ecosystem.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers parameter meaning by having none. The description adds value by explaining how the resulting ids feed into another argument, which is relevant even though this tool takes no inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('List'), a specific resource ('sportsbooks SharpAPI normalizes'), and the key detail that ids are included. It clearly differentiates from siblings like list_sports and list_events by naming the domain object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: returned ids should be used for the 'sportsbook' argument elsewhere, and plan-based access limits are explained. It doesn't mention explicit alternatives or when-not-to-use, but the guidance is concrete and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.1- Changed
get_arbitrage1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_best_odds1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_ev1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
get_event_odds - Changed
get_middles1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
get_odds3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / cursorAdded value: +{ + "description": "Pagination cursor from a previous response (pagination.next_cursor). Pass this to fetch the next page of results when pagination.has_more is true.", + "type": "string" +} - added
Input schema / properties / player_nameAdded value: +{ + "description": "Filter to one player. Full name, case-insensitive exact match — \"Travis Kelce\" matches, \"Kelce\" does not. Only appears on player-prop markets.", + "type": "string" +}
- Changed
list_events1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
8 tool updates
v0.1.0- First observed
get_arbitrage - First observed
get_best_odds - First observed
get_ev - First observed
get_middles - First observed
get_odds - First observed
list_events - First observed
list_sports - First observed
list_sportsbooks
TDQS
Scored across 9 tools
The analytics tools (get_arbitrage, get_ev, get_middles) and discovery tools (list_sports, list_sportsbooks, list_events) each have clearly distinct purposes. The main soft spot is the odds trio: get_odds, get_event_odds, and get_best_odds all return prices, and an agent must read carefully to know that get_odds is paginated/book-row oriented, get_event_odds is event-scoped and unpaginated, and get_best_odds collapses to one row per selection.
All nine tools follow a clean snake_case verb_noun convention (get_*/list_*), with consistent resource naming (odds, event_odds, best_odds, sports, sportsbooks, events). No style mixing or vague verbs.
Nine tools is well within the ideal 3-15 range and each one earns its place: three discovery tools, three odds retrieval views, and three betting-analysis views. Nothing feels redundant or bolted on.
The surface covers the core lifecycle: discover sports/books/events, fetch normalized odds, and derive best-price, arbitrage, EV, and middle views. Minor gaps exist — there is no dedicated market/selection listing tool (markets only appear implicitly in odds rows), no line-movement or historical odds, and no tool to check plan/quota despite several tools being plan-gated.
Maintenance
Related MCP Connectors
Sports odds, player props and source coverage for AI assistants. Connect with your own API key.
Sports prediction markets for AI agents — live prices, quotes, orders, and positions.
Grounded sports predictions plus European soccer and tennis arbitrage data for AI agents.
Real-time sports betting data: odds, player props, edges and arbitrage from 35+ books and DFS apps.
Related MCP Servers
AlicenseAqualityBmaintenanceEnables AI assistants to access sports betting odds data from 265+ bookmakers across 34 sports, including events, odds, historical data, arbitrage, and value bets.25160 npm2MIT- AlicenseAqualityDmaintenanceProvides search, trending, odds, arbitrage, and category browsing for prediction markets (Polymarket & Kalshi) via the Model Context Protocol, enabling AI agents to access live market data without API keys.51MIT
- AlicenseNot gradedqualityCmaintenanceEnables fetching sportsbook odds, live scores, and event information across 70+ books and 30+ leagues, with tools to list sports, get scores, and discover events.430 npm1MIT
- FlicenseNot gradedqualityDmaintenanceProvides AI agents with professional-grade tools for expected value calculation, Monte Carlo predictions, historical backtesting, and portfolio risk management in sports betting.-