NBA Prop Lab MCP Server
Provides tools for NBA and WNBA player-prop analysis via the nbaproplab.com API: a daily picks board and dashboard, model track record by league/tier/stat/date range, the day's games, player search, plus authenticated backtest summaries (daily, by rating, by stat), pick details, hypothetical pick evaluation, and per-player research.
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., "@NBA Prop Lab MCP Servershow me today's NBA player prop picks"
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.
NBA Prop Lab MCP Server
Model Context Protocol server for NBA and WNBA player props: the picks of a 7-block scoring model, graded in public against the official box score, plus the daily board, backtests, player research and the day's games.
Every tool calls the public nbaproplab.com REST API over HTTPS. No database access, no shell, no local secrets beyond the API key you put in the environment. The track record, daily dashboard, games, player search and status tools need no key at all.
The record the tools report is measured, not claimed: every pick is published before tip-off and settled afterwards — the same figures as nbaproplab.com/track-record.
Quick start
Add it to any MCP client (Claude Code shown here) — no install step, npx fetches it:
{
"mcpServers": {
"proplab": {
"command": "npx",
"args": ["-y", "proplab-mcp-server"]
}
}
}Then ask for today's board: proplab_dashboard for the slate and its top picks,
proplab_track_record for how the model has done (by league, tier, stat and date range),
proplab_games for who plays today.
To unlock the research and backtest tools, add the key:
{
"mcpServers": {
"proplab": {
"command": "npx",
"args": ["-y", "proplab-mcp-server"],
"env": {
"PROPLAB_API_KEY": "…"
}
}
}
}Related MCP server: propzapi
Building from source
git clone https://github.com/Khavel/proplab-mcp.git
cd proplab-mcp
npm install
npm run build # compiles src/index.ts → dist/index.jsFor local development with hot reload: npm run dev.
Environment variables
Variable | Required for | Description |
| No | API base URL (default: |
| Research and backtest tools | Bearer API key |
Public tools work with no key at all.
Where to get the key
Mint it from the web app: nbaproplab.com → Account → API keys. The raw key is shown once at creation; keys can be revoked from the same screen.
Tools
Public (no auth)
Tool | Endpoint | Key params |
|
|
|
|
|
|
|
|
|
|
|
|
|
| — |
With PROPLAB_API_KEY
Tool | Endpoint | Key params |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Public JSON the site also exposes without a key, readable with any HTTP tool: the daily board
(/api/v1/seo/board?league=nba|wnba), defense vs position (/api/v1/seo/defense-vs-position),
usage-rate leaders (/api/v1/seo/usage-leaders), referee assignments (/api/v1/seo/referees/today)
and the day's slate with standings (/api/v1/seo/nba-hoy). See
nbaproplab.com/llms.txt.
Verify locally
npx @modelcontextprotocol/inspector node dist/index.jsThen call proplab_system_status (no key needed) — it should return live system status.
Security
No tool reads database connection strings, app settings or shells into a server.
All inputs are validated with zod; responses are truncated at 40 000 characters.
The key is read from the environment only and never logged.
Authenticated tools fail with a clear message when the key is missing — they never fall back to an unauthenticated call.
Every tool is read-only except
proplab_evaluate_pick, which scores a hypothetical pick and stores nothing.
Available Tools
12 toolsproplab_backtest_by_ratingGet Backtest By RatingARead-onlyIdempotent
Hit rate and profit broken down by pick rating tier (Elite, Good, Marginal, Weak, Avoid). Requires auth. Use to compare tier quality across leagues.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD | |
| from | No | Start date YYYY-MM-DD | |
| league | No | Filter by league |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds one useful non-annotation fact ('Requires auth.') but says nothing about return format, pagination, or behavior with empty ranges. Modest added value over structured data.
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 returned metrics and tier names before the auth note and usage hint. Every sentence carries information; no filler.
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?
With no output schema, the description does the work of telling the agent what comes back (hit rate and profit per tier) and notes the auth requirement. It is close to complete, missing only default/date-range behavior for the optional from/to parameters.
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% and all three parameters (from, to, league) are documented in the schema, so the baseline is 3. The description alludes to league comparison but adds no date-range syntax, format, or default behavior beyond what the schema already provides.
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 precise verb+resource: hit rate and profit broken down by rating tier, and enumerates the tiers (Elite, Good, Marginal, Weak, Avoid). This clearly separates it from siblings like backtest_summary, backtest_daily, and backtest_by_stat, though the name's 'Get' verb adds little.
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?
Offers an implied use case ('compare tier quality across leagues') but gives no explicit when-not guidance and never names the alternative backtest tools an agent should consider instead. An agent can infer usage, but routing between the four backtest siblings is left to guesswork.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_backtest_by_statGet Backtest By Stat TypeARead-onlyIdempotent
Hit rate and profit broken down by stat market (Points, Rebounds, Assists, PtsRebAst, etc.). Requires auth. Use to find which markets the model performs best on.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD | |
| from | No | Start date YYYY-MM-DD | |
| league | No | Filter by league |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only, idempotent, open-world safety. The description adds the auth requirement and confirms the return content (hit rate and profit). No contradictions. This is adequate but not rich beyond the annotations.
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 core output and breakdown dimension, followed by a direct usage hint. No wasted words.
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 read-only backtest tool with no output schema, the description adequately explains what is returned and the auth requirement. It could specify whether the breakdown is a list or a mapping, but the core information is present.
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 the schema already documents from, to, and league (with enum). The description mentions 'stat market' but does not document any parameter. Baseline 3 is appropriate when the schema does the heavy lifting.
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 and resource: backtest metrics (hit rate, profit) broken down by stat market. Distinguishes itself from siblings like proplab_backtest_summary and proplab_backtest_by_rating by naming the breakdown dimension.
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?
Gives a clear use case: find which markets the model performs best on. However, it does not provide explicit when-not-to-use guidance or suggest alternatives for other backtest breakdowns (e.g., by rating vs by stat).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_backtest_dailyGet Backtest DailyARead-onlyIdempotent
Day-by-day backtest results with hits, misses, daily profit, and cumulative profit. Requires auth (PROPLAB_API_KEY). Good for charting profit curves.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD | |
| from | No | Start date YYYY-MM-DD | |
| league | No | Filter by league |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, non-destructive, and open-world. The description adds useful behavioral context by stating that auth with PROPLAB_API_KEY is required and by listing the returned data fields, which goes beyond the annotation coverage.
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 tight sentences with no redundancy. The core output is front-loaded, followed by auth and usage notes, so 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 read-only, three-parameter tool with complete schema coverage and no output schema, the description is nearly complete: it names the returned fields and auth requirement. It still does not cover sibling alternatives or date-range defaults, but those are minor gaps given the annotations and schema.
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 all three parameters are already documented in the schema. The description does not add meaning, format details, or constraints beyond what the schema provides, so the baseline of 3 applies.
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 specifies the resource and granularity: day-by-day backtest results, including hits, misses, daily profit, and cumulative profit. It is clear and distinct in granularity from siblings like backtest_summary, but it does not explicitly name or contrast those siblings.
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 'Good for charting profit curves' gives one implied use case, but there is no explicit guidance on when to choose this over backtest_summary, backtest_by_rating, or backtest_by_stat, nor any when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_backtest_summaryGet Backtest SummaryARead-onlyIdempotent
Aggregate backtest over PREMIUM (Good+) picks only: total picks, hits, misses, pushes, hit rate, profit, and ROI for a date range. Requires auth (PROPLAB_API_KEY). Supports league filter.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD (default: today) | |
| from | No | Start date YYYY-MM-DD (default: 14 days ago) | |
| league | No | Filter by league |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context the annotations do not: it requires auth via PROPLAB_API_KEY, and it restricts results to PREMIUM (Good+) picks rather than all picks. It does not discuss defaults or rate limits, but the additions are substantive.
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 with no filler: the scope and returned metrics come first, then the auth and filter constraints. Every clause carries information an agent needs, especially given there is no output 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?
With no output schema, the description usefully enumerates the metrics returned (picks, hits, misses, pushes, hit rate, profit, ROI), and it discloses the auth requirement and PREMIUM-only scope. The main omission is that defaults for from/to live only in the schema, but overall an agent has enough to call 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?
Schema description coverage is 100% with per-parameter descriptions and an enum for league, so the schema already carries parameter meaning. The description only restates 'for a date range' and 'Supports league filter', adding no syntax or default information beyond the schema. Baseline 3 applies.
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 names a specific operation (aggregate backtest) and a precise scope: 'PREMIUM (Good+) picks only', which separates it from the rating/stat/daily breakdown siblings. It also enumerates the returned metrics, so an agent knows exactly what this tool produces. It stops short of naming a sibling as the alternative, so it is clear but not fully differentiated.
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?
'OVER PREMIUM (Good+) picks only' and 'Supports league filter' imply when the tool applies, but there is no explicit statement of when to choose this over proplab_backtest_daily, proplab_backtest_by_rating, or proplab_backtest_by_stat. Usage is inferable from the aggregation scope rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_dashboardGet Daily DashboardARead-onlyIdempotent
Get today's (or a specific date's) dashboard: games with spreads/totals, top 10 scored picks, and rating distribution. Public — no auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format. Defaults to today (CST) | |
| league | No | Filter by league |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world traits. The description adds a useful detail: 'Public — no auth required.' Beyond that, it doesn't disclose return format, ordering, or rate limits. Adds some value over annotations but not rich context.
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 tool's purpose and contents, then the auth note. Zero waste, appropriately sized.
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 read-only dashboard tool with annotations covering safety and 100% schema coverage, the description gives the agent enough to call it: contents, optional date, league filter implied, and auth status. Minor gap: no mention of sorting or pagination, but output schema absent and this is a dashboard summary, so adequate.
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 100%, so both params (date, league) are documented in the schema. Description mentions 'today's (or a specific date's)' and 'top 10 scored picks' which loosely aligns with params but adds no syntax or enum detail beyond the schema. Baseline 3.
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+resource ('Get dashboard') with concrete contents listed (games with spreads/totals, top 10 scored picks, rating distribution). Clearly distinct from siblings like proplab_games and proplab_pick_details.
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?
Notes optionally getting a specific date's dashboard, but doesn't say when to use this vs proplab_games (raw games) or proplab_pick_details. The usage context is implied but no explicit alternatives or exclusions given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_evaluate_pickEvaluate a PickB
Score a custom pick on-demand through PropLab's 7-block engine. Returns a confidence score (0-100), rating, and block-by-block breakdown. Requires auth.
| Name | Required | Description | Default |
|---|---|---|---|
| line | Yes | The prop line, e.g. 25.5 | |
| statType | Yes | Stat market: Points, Rebounds, Assists, Threes, Steals, Blocks, PtsRebAst, PtsReb, PtsAst, RebAst | |
| direction | Yes | Over or Under | |
| playerName | Yes | Full player name, e.g. 'LeBron James' | |
| opponentTeam | No | Opponent team abbreviation, e.g. 'LAL'. Auto-detected from today's schedule if omitted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so the agent knows this is a non-idempotent operation with external dependencies. The description adds that it 'Requires auth' and returns a confidence score and breakdown, but does not elaborate on rate limits, execution time, or side effects. This is adequate but not rich behavioral context.
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 two concise sentences, front-loaded with the core action. Every sentence earns its place, though it could be slightly more structured by separating usage or return details. Not maximally efficient but close.
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?
With no output schema, the description partially explains return values ('confidence score (0-100), rating, and block-by-block breakdown'), which is helpful. However, for a tool with five parameters and annotations that don't cover all behavioral aspects, it lacks details on authentication mechanics, error handling, or when the output might be unavailable. Adequate but with clear gaps.
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 100%, so the schema already documents all five parameters, including enums and examples. The description adds no parameter-specific meaning beyond what the schema provides, so baseline 3 is correct. No syntax or format details are added.
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 clear verb and resource: 'Score a custom pick on-demand through PropLab's 7-block engine.' It distinguishes this tool from sibling tools like proplab_pick_details because it processes a custom pick rather than fetching an existing pick's details. However, it could more explicitly differentiate from proplab_player_research or proplab_track_record, which also provide evaluations, leaving slight ambiguity for an agent choosing between them.
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 'on-demand' implies usage context but does not explicitly state when to use this tool versus alternatives like proplab_pick_details. No exclusions or prerequisites beyond authentication are mentioned, leaving the agent to infer the appropriate scenario. This is minimum viable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_gamesGet GamesARead-onlyIdempotent
Get NBA/WNBA games for a date: teams, spreads, totals, game status. Defaults to today.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Date in YYYY-MM-DD format. Defaults to today |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so safety is covered. The description contributes the returned field set and the default-date behavior, useful context beyond the annotations, though it says nothing about game status semantics (live vs final) 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?
One front-loaded sentence that leads with the resource and scope, followed by the returned fields and default. No redundancy or filler.
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?
With no output schema, the description usefully names the returned attributes, and annotations carry the safety profile for this one-optional-param read tool. Only minor details, such as what 'game status' values mean or result scope, are left unspecified.
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% and the single 'date' parameter is already documented in the schema with format and default. The description only restates the same default, adding no new syntax or edge-case meaning, so the baseline 3 applies.
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 (NBA/WNBA games for a date) and enumerates what comes back (teams, spreads, totals, game status). No sibling tool in the list offers a games-by-date listing, so an agent can route here unambiguously.
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 'Defaults to today' note implies when the tool applies, but there is no explicit when-to-use vs when-not guidance or reference to alternatives. Since no sibling overlaps this functionality, the gap is minor, but usage is only implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_pick_detailsGet Pick DetailsARead-onlyIdempotent
Get full details for a specific pick by ID: player, stat, line, direction, score, 7-block breakdown, spider chart data, and settlement result.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Pick ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, covering the safety profile. The description adds the return contents but does not disclose authentication needs, error behavior for invalid IDs, or rate limits, so it adds only modest behavioral context beyond annotations.
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?
A single front-loaded sentence: the purpose is stated first, and the field list earns its place by compensating for the missing output schema. There is no filler.
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 simple one-parameter lookup tool with rich annotations and no output schema, the description is nearly complete. It explains what data comes back, which is valuable without an output schema, though it could mention error behavior or invalid-ID handling.
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 single parameter is fully documented in the schema as 'Pick ID,' so the schema already does the heavy lifting. The description reinforces that lookup is 'by ID' but adds no syntax, format, or constraint details beyond what the schema provides; baseline 3 is appropriate given 100% schema coverage.
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 and resource: 'Get full details for a specific pick by ID,' and enumerates the returned fields. It is clear what the tool does, but it does not explicitly differentiate itself from siblings such as proplab_evaluate_pick or proplab_track_record.
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 'for a specific pick by ID' – the agent can infer this is for looking up one pick's details. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives for related tasks like evaluating or searching picks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_player_researchGet Player ResearchARead-onlyIdempotent
Deep research data for a player: season averages, recent game logs, matchup history, DvP, trends, and injury status. Use proplab_search_players first to get the playerId.
| Name | Required | Description | Default |
|---|---|---|---|
| playerId | Yes | Internal player ID (from search_players) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered. The description adds useful context about what data is returned and the ID dependency, but says nothing about response shape, rate limits, or data freshness beyond what annotations provide.
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 with zero waste. The first sentence front-loads the data scope; the second delivers the critical prerequisite. Ideal length for a simple lookup tool.
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 read-only, single-parameter, idempotent tool with annotations covering safety and no output schema, the description is sufficient. It tells the agent what it returns, how to get the parameter, and that the operation is a safe read. No significant gaps.
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 the single playerId parameter is already fully documented in the schema (internal ID, exclusiveMinimum 0, sourced from search_players). The description only restates the search_players dependency, adding no schema-level detail.
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+resource (get player research) and enumerates the data dimensions returned (season averages, game logs, matchup history, DvP, trends, injury status). Differentiates from sibling proplab_search_players by contrasting its ID-based lookup against the search tool.
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 states the precondition: 'Use proplab_search_players first to get the playerId.' This is a clear when-to-use instruction that routes the agent to the correct sibling for ID resolution, leaving no inference needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_search_playersSearch PlayersARead-onlyIdempotent
Search for NBA/WNBA players by name. Returns player ID, full name, team, and position. Use the returned ID with proplab_player_research or proplab_evaluate_pick.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Player name or partial name, e.g. 'LeBron' or 'Gilgeous' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered. The description adds behavior the annotations do not: the exact set of returned fields (player ID, full name, team, position), which matters since there is no output schema. It omits match semantics (partial vs exact, ranking, result limits).
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 what it does, then returns, then the chaining instruction. No filler; every sentence carries distinct information.
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?
With no output schema, the description correctly compensates by enumerating the returned fields, and it closes the loop with the downstream tools that consume the ID. For a single-parameter lookup tool with full annotation coverage, nothing an agent needs to invoke it correctly is missing.
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 100% and the schema itself supplies the example ('LeBron' or 'Gilgeous'), so the parameter is fully documented in structured data. The description adds no syntax, matching, or length guidance beyond that, making the baseline 3 appropriate.
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 (Search) and resource (NBA/WNBA players) with the matching key (by name), and differentiates itself from siblings by naming the two tools that consume its output. An agent can identify this as the entry-point lookup tool without opening any schema.
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?
Gives clear forward guidance: use the returned ID with proplab_player_research or proplab_evaluate_pick, which tells the agent this is a prerequisite lookup rather than a terminal call. It does not state when NOT to use it (e.g., if you already have an ID), but the intended context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_system_statusGet System StatusARead-onlyIdempotent
Check PropLab system health: API health status, recent pipeline runs, data freshness, and any errors.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered by structured data. The description adds useful content context (what is inspected: pipelines, freshness, errors) but says nothing about auth requirements, rate limits, or scope constraints. Adds some value over annotations, so a 3 is appropriate.
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?
A single front-loaded sentence with a colon-delimited enumeration of returned content — no filler or restatement of the name. Efficient, though the list is slightly abbreviated rather than fully structured.
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?
There is no output schema, so the description must convey return content, and it does so by naming the four areas inspected. With zero parameters and full annotation coverage, this is largely sufficient; only the absence of any note on failure/error signaling keeps it from the top band.
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 takes zero parameters, which is the baseline-4 case. The description accurately implies a parameterless full-status snapshot with no filtering options, consistent with the empty 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 (Check) plus resource (PropLab system health) and enumerates the exact content returned: API health, pipeline runs, data freshness, errors. It is clearly distinct in domain from the data-oriented siblings (games, backtests, picks), though it does not explicitly name an alternative, so it lands just below the top band.
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 nature of a health/status check, but there is no explicit when-to-use guidance, no mention of when not to call it, and no routing to or away from any sibling tool. Adequate but with a clear gap for an agent deciding whether this is the right diagnostic call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
proplab_track_recordGet Track RecordARead-onlyIdempotent
Get PropLab's historical pick performance: overall hit rate, profit, rating breakdown (Elite/Good/Marginal/Weak), daily results, and recent Good+ picks. Without a tier filter the overall/total fields cover ALL tiers (including internal Weak/Avoid picks that are never published) and the premium* fields cover Good+; with a tier filter EVERY headline field describes that tier only. Supports league filter (nba/wnba), tier filter, stat type, and date range. Public — no auth required.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End date YYYY-MM-DD | |
| from | No | Start date YYYY-MM-DD | |
| tier | No | Filter by pick tier | |
| league | No | Filter by league | |
| statType | No | Filter by stat: Points, Rebounds, Assists, Threes, PtsRebAst, etc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: internal Weak/Avoid picks are never published yet still appear in overall totals, and premium* fields are scoped to Good+. It also discloses that no auth is required. Missing only rate limits/volume notes.
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 dense sentences, front-loaded with the payload description before the scoping and filter details. Every clause carries information, though the tier-semantics sentence is heavy and would benefit from being split. 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?
There is no output schema, so the description must carry the return-value burden, and it does: headline metrics, rating breakdown, daily results and recent picks are all named. Parameter behavior for the tricky tier case is also covered. Nothing about result limits, sorting, or date-range defaults is specified, which leaves a small gap.
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 the baseline is 3, and the schema already documents each parameter's type and format. The description goes beyond it by explaining the semantic effect of the tier filter on the returned fields and restating the supported filter axes (league, tier, stat type, date range). That marginal meaning justifies a 4.
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 (PropLab's historical pick performance) and enumerates the return fields: hit rate, profit, rating breakdown, daily results, recent Good+ picks. That is far more concrete than a tautology. It does not explicitly name the sibling tools it differs from (e.g., proplab_backtest_summary), 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?
Gives real semantic guidance: without a tier filter the totals cover all tiers while premium* fields cover Good+, and with a tier filter every headline field describes that tier. That tells an agent when the tier parameter materially changes the answer. It does not state when to prefer this over the backtest_* siblings, which keeps it from a 5.
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.
12 tool updates
v1.0.0- First observed
proplab_backtest_by_rating - First observed
proplab_backtest_by_stat - First observed
proplab_backtest_daily - First observed
proplab_backtest_summary - First observed
proplab_dashboard - First observed
proplab_evaluate_pick - First observed
proplab_games - First observed
proplab_pick_details - First observed
proplab_player_research - First observed
proplab_search_players - First observed
proplab_system_status - First observed
proplab_track_record
TDQS
Scored across 12 tools
While most tools have distinct purposes, there is notable overlap between proplab_track_record, proplab_backtest_summary, and proplab_backtest_by_rating, which all report historical hit rates and profit, and both track_record and backtest_by_rating provide rating-tier breakdowns. This could confuse agents selecting the right tool, though the descriptions help differentiate scope and auth requirements.
All tools use the consistent `proplab_` prefix and snake_case with clear verb_noun or noun_noun patterns (e.g., proplab_search_players, proplab_backtest_summary). No deviations in convention.
With 12 tools, the set is well-scoped for an NBA prop analytics server, covering games, picks, backtesting, and player research without excessive fragmentation or missing core areas.
The surface covers core workflows: game data, pick details, historical performance, backtesting, custom pick evaluation, and player research. Minor gap: no explicit tool to list all picks for a date (dashboard only shows top 10), but agents can work around via track_record or backtest tools.
Maintenance
Related MCP Connectors
Flash Props API: player-prop analysis, projections, evidence, and line movement over REST/MCP.
Live odds, cross-book +EV and graded player-prop results across 27 books. Hosted endpoint included.
NFL/NBA/MLB/NHL/PGA + DFS and prediction-market data. Browse free; query with a free API key.
NBA MCP — player, team, and game data via the BallDontLie API
Related MCP Servers
- 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.10 npmMIT
- AlicenseNot gradedqualityBmaintenanceProps-first sports odds API with a hosted MCP server. Live odds and player props (moneyline, spreads, totals) across US sportsbooks, normalized to JSON. Tools: get_odds, get_props, get_events, get_books. API-key auth, free tier.MIT No Attribution
- AlicenseNot gradedqualityCmaintenanceEnables querying basketball data including players, games, season averages, and stats from the balldontlie.io API.13 npmMIT
- AlicenseAqualityFmaintenanceProvides AI agents with direct access to KingsPlaybook's sports data including confirmed lineups, player projections, game lines, and pick history via native MCP tools.519 npmMIT