BeatLeader Helper
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., "@BeatLeader Helpershow me recent scores for player 76561198317719585 and suggest practice maps"
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.
BeatLeader Helper
Query public BeatLeader profiles and scores from Codex, ChatGPT, or another MCP client to review performance, choose practice maps, and compare later results
The service only reads public data, and the remote MCP is deployed on Vercel
Features
Tool | Capability |
| Get a profile, PP, and ranks; select stats, clans, socials, and badges with |
| Find nickname candidates by country and total PP range, with component PP sorting |
| Search leaderboard difficulties by stars, ratings, mode, difficulty and mapper IDs |
| Filter scores by time, stars, percentage accuracy, modifiers, difficulty, mode and song, with up to 100 results per page |
| Get 1–90 daily snapshots and changes between actual first and last dates |
| Get map details and leaderboard scores, with up to 50 results per page |
| Read up to 250 scores, calculate grouped statistics, and suggest up to 5 previously played maps |
All seven tools query public GET endpoints at https://api.beatleader.com
get_player accepts a player ID, alias, or profile URL. include defaults to [] for the basic profile
{ "player": "76561198317719585", "include": ["stats", "clans", "socials", "badges"] }Returns sources, context, data, and availability. Statistics use percentage accuracy and ISO 8601 times. Selected sections have status available, unavailable, or invalid; an empty list represents an available section with zero entries
All tools return sources, context and data; paginated results use pagination: { page, count, total }. Scores use accuracyPercent, playedAt and postedAt. Analysis candidates are in data.estimates.practiceCandidates
search_players({ search: "AQA", country: "CN", ppType: "acc" })
search_maps({ starsFrom: 6, starsTo: 8, mode: "Standard", type: "ranked" })
list_player_scores({ player: "76561198317719585", accFromPercent: 80, modifiers: "FS" })
analyze_player({ player: "76561198317719585", rankedOnly: true, maxPages: 2 })Profile, history and analysis support general, noMods, noPause. Search, score listing and leaderboard queries also support golf, sCPM, speedrun, speedrunBackup, funny, backUp, leftLeader
Related MCP server: osu-mcp
Connection options
Use case | Entry point |
Codex | Add the GitHub marketplace, then install 「BeatLeader Helper」 |
ChatGPT or another MCP client | Connect to |
Self-hosting | Import the repository into Vercel |
Local development | Use the HTTP or stdio entry point |
Remote Codex installation
Add the GitHub repository as a marketplace
codex plugin marketplace add https://github.com/Keitar0o0/beatleader-mcp.git --ref master
codex plugin add beatleader-mcp@beatleaderStart a new task after installation to load the 「BeatLeader Helper」 tools and skill
Each address has a separate role
The Git URL downloads the marketplace
source: localin.agents/plugins/marketplace.jsonpoints to the plugin inside the Git checkoutThe URL in
plugins/beatleader-mcp/.mcp.jsonconnects the installed plugin to the Vercel MCP service
Other MCP clients
Use this remote configuration
{
"mcpServers": {
"beatleader": {
"url": "https://beatleader-mcp.vercel.app/mcp"
}
}
}Player tools over HTTP require an explicit player ID, alias, or profile URL; search tools accept their query filters directly
Vercel deployment
Import the repository into Vercel with automatic framework detection; the deployed MCP endpoint is https://your-domain/mcp
Vercel's current deployment and project production domains are added to the Host allowlist automatically; for an additional custom domain, set BEATLEADER_PUBLIC_URL to its HTTPS origin, such as https://mcp.example.com
Verify the deployment through these endpoints
# Service status
Invoke-RestMethod https://your-domain/
# Health check
Invoke-RestMethod https://your-domain/health
# MCP handshake and tool discovery
node scripts/smoke.js --http https://your-domain/mcpLocal development
Requires Node.js 22 or later, pnpm, and network access to BeatLeader
pnpm install --frozen-lockfile --ignore-scripts
pnpm test
pnpm start:httpThe local HTTP endpoint defaults to http://127.0.0.1:3000/mcp
Run the stdio entry point with pnpm start; BEATLEADER_PLAYER_ID can provide a default player, while an explicit player argument always takes priority
To install the current source as a local marketplace
pnpm configure
codex plugin marketplace add .
codex plugin add beatleader-mcp@beatleaderpnpm configure switches the plugin MCP configuration to absolute paths for the current Node executable and project, so rerun it after moving the project or changing Node
After local verification, run git restore -- plugins/beatleader-mcp/.mcp.json to restore the repository's default Vercel configuration
Usage examples
The beatleader-helper Skill combines existing queries for trends, Top Plays, PP composition, player comparisons, map selection and follow-up reviews. Charts and files use the client's available tools
「My profile is https://beatleader.com/u/YOUR_ID — review my recent performance」
「Which previously played Standard maps from the past month should I practice again?」
「I want to practice accuracy today — give me three previously played maps and targets to watch」
「Compare my new score on this map with the pre-practice data in this conversation」
Data boundaries
Score lists are current samples from the selected leaderboard context
Daily history contains statistics snapshots whose missing dates and platform recalculations need separate interpretation
Complete practice sessions, movement causes, and improvement claims require attempt logs, replays, user feedback, or retesting
Partial pagination keeps the retrieved sample and reports completeness and stop reasons through
coverage
Project structure
.agents/plugins/marketplace.json Codex marketplace manifest
plugins/beatleader-mcp/
.codex-plugin/plugin.json Plugin metadata
.mcp.json Default Vercel MCP connection
skills/beatleader-helper/SKILL.md Analysis and practice workflow
src/ Tools, data processing, and MCP entry points
index.js Vercel Express Function entry point
scripts/ Local configuration and MCP verification
test/ Logic and HTTP integration tests
docs/development.md Development, verification, and troubleshootingSee Development and troubleshooting for implementation details
Available Tools
7 toolsanalyze_playerARead-onlyIdempotent
Read up to five pages of fifty current scores, compute grouped percentage statistics, and suggest previously played maps for practice; includes coverage and sample limits. Supports general, noMods and noPause
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO end time with an explicit timezone | |
| from | No | ISO start time with an explicit timezone | |
| mode | No | ||
| sort | No | date | |
| order | No | desc | |
| player | No | Player ID, alias, or https://beatleader.com/u/ID; stdio can use BEATLEADER_PLAYER_ID when omitted | |
| search | No | ||
| context | No | general | |
| starsTo | No | ||
| maxPages | No | ||
| modifiers | No | BeatLeader modifier filter, e.g. FS or FS,SF | |
| starsFrom | No | ||
| difficulty | No | ||
| rankedOnly | No | ||
| accToPercent | No | ||
| accFromPercent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behaviorais, so the safety profile is covered. The description adds meaningful behavioral details beyond those annotations: the five-page/fifty-score limit, coverage and sample limits, and supported play contexts. No contradiction with the annotations exists.
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 a single, dense sentence with no filler; it front-loads the resource and its limits before describing the computed outputs. The phrase 'includes coverage and sample limits' is fairly cryptic, but overall every clause contributes substantive 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 16 parameters, no required parameters, a low schema coverage, and no output schema, the description carries a heavy burden that it only partially meets. It gives page/score limits and supported contexts, but it does not clarify the return structure, how filters interact, or what 'coverage and sample limits' concretely mean for an agent invoking the 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 description coverage is only 25%, so the description must compensate for the many undocumented parameters. It only indirectly explains maxPages and context ('Supports general, noMods and noPause'), leaving mode, sort, order, search, starsFrom/starsTo, difficulty, rankedOnly, accFromPercent/accToPercent, and modifiers unexplained in the description.
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 set of actions: reading up to five pages of fifty scores, computing grouped percentage statistics, and suggesting practice maps. This clearly differentiates analyze_player from the sibling list_player_scores, which would handle raw score retrieval, by foregrounding analysis and recommendations rather than simple listing.
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 usage for analytical and practice-oriented tasks through 'compute grouped percentage statistics' and 'suggest previously played maps for practice,' but it never explicitly names alternatives or states when NOT to use this tool. The supported contexts (general, noMods, noPause) provide some usage framing but no clear routing against sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_leaderboardBRead-onlyIdempotent
Get map details and leaderboard scores to inspect difficulty, base ratings, and score conditions
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| page | No | ||
| count | No | ||
| context | No | general |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that the tool returns map details and leaderboard scores, which is useful context beyond the annotations. However, it does not disclose pagination behavior, default context behavior, or any rate limits. With annotations covering safety, 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?
The description is a single sentence that is concise and front-loaded with the main action and resource. It does not waste words, though it could be slightly more structured by separating map details from leaderboard scores. It earns a 4 for being efficient and readable.
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 has 4 parameters, no output schema, and no parameter descriptions, the description is somewhat thin. It tells the agent what the tool returns but not how to interpret the 'context' enum, what 'page' and 'count' control beyond obvious pagination, or what the response structure looks like. The annotations cover safety, but the description lacks enough detail for an agent to fully understand the tool's behavior in all contexts. A 3 is fair: 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 description coverage is 0%, so the description carries the burden of explaining parameters. The description mentions 'map details and leaderboard scores' and 'difficulty, base ratings, and score conditions', which loosely maps to the 'id' and 'context' parameters, but it does not explain 'page', 'count', or the meaning of the 'context' enum values. The schema provides names, types, and defaults, but the description adds minimal semantic value beyond that. Baseline 3 is appropriate because the schema is fairly self-documenting with defaults and enums, but the description does not compensate for the 0% 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 ('Get') and resource ('map details and leaderboard scores'), and mentions the purpose ('inspect difficulty, base ratings, and score conditions'). It is clear what the tool does, though it does not explicitly distinguish itself from sibling tools like list_player_scores or get_player. The verb+resource is specific enough to be useful.
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 usage for inspecting map difficulty and leaderboard scores, but it does not explicitly state when to use this tool versus alternatives like list_player_scores or search_maps. There is no exclusion or alternative guidance. The context is clear enough for a basic use case, but the lack of explicit routing to siblings leaves a gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playerARead-onlyIdempotent
Get a public player profile by ID, alias, or profile URL. Select stats, clans, socials, and badges with include; defaults to basic profile. Returns sources, context, data, and section availability. Accuracy uses percentages and times use ISO 8601
| Name | Required | Description | Default |
|---|---|---|---|
| player | No | Player ID, alias, or https://beatleader.com/u/ID; stdio can use BEATLEADER_PLAYER_ID when omitted | |
| context | No | general | |
| include | No | Optional profile sections; empty means basic profile only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds useful behavioral detail beyond that: the response includes sources, context, data, and section availability, and it specifies that accuracy uses percentages and times use ISO 8601. This helps the agent interpret results.
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 concise sentences, each carrying distinct information: identification, optional sections, and return format. There is no filler or repetition of schema fields.
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 3-parameter read-only tool with no required fields and no output schema, the description covers the key aspects: how to identify the player, what optional sections exist, and what shape the response takes. The context parameter's meaning is left implicit, but the enum values are self-descriptive enough for this 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 description coverage is 67%; player and include are documented in the schema. The description adds meaning to include by listing selectable sections and the basic-profile default, but it does not explain the context parameter beyond the schema's enum/default. This is adequate but not exceptional.
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 opens with a specific verb and resource: 'Get a public player profile by ID, alias, or profile URL.' It clearly identifies the lookup scope and the supported identifiers, and it is distinct from sibling tools like search_players or list_player_scores.
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 establishes clear context: use this tool when you need a public player profile by known identifier. It does not explicitly name alternatives or exclusions, but the direct lookup intent is obvious and distinguishable from search/analysis siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_player_historyARead-onlyIdempotent
Get 1–90 daily public player snapshots and calculate changes over actual returned dates, with percentage accuracy and ISO timestamps
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| player | No | Player ID, alias, or https://beatleader.com/u/ID; stdio can use BEATLEADER_PLAYER_ID when omitted | |
| context | No | general |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds meaningful behavioral context beyond annotations: it specifies that changes are calculated 'over actual returned dates' (not just the requested days), includes 'percentage accuracy', and notes ISO timestamps. This gives the agent useful expectations about the output format and calculation semantics that annotations don't 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?
The description is a single, dense sentence that front-loads the core action ('Get 1–90 daily public player snapshots') and packs additional useful details (calculation over actual returned dates, percentage accuracy, ISO timestamps) without redundancy. It's efficient and every phrase earns its place. It could be slightly improved by separating the calculation detail into a second sentence for readability, but it's not bloated.
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, idempotent tool with no output schema, the description covers the main behavior well: what it fetches, the range, the calculation semantics, and timestamp format. However, it doesn't explain the 'context' parameter's meaning or how it filters results, which is a gap given the low schema coverage. It also doesn't mention pagination or response structure, though the absence of an output schema lowers the bar. The description is adequate for basic invocation but incomplete for full understanding of all 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 only 33% (only the 'player' parameter has a description). The description adds some context: 'daily public player snapshots' implies the days parameter controls how many snapshots to fetch, and 'calculate changes over actual returned dates' clarifies how the days parameter relates to the output. However, it doesn't explain the 'context' enum values (general, noMods, noPause) or their effect on the data, and it doesn't add detail about the 'days' parameter beyond what the schema already provides (min/max/default). The description partially compensates for the low schema coverage but leaves the context parameter semantically unexplained.
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 ('Get') and resource ('daily public player snapshots'), and specifies a range of 1–90 days. It clearly indicates the tool retrieves player history data, which distinguishes it from siblings like get_player (single snapshot) and list_player_scores (score lists). However, it doesn't explicitly name a sibling or contrast itself, so it falls just short of full differentiation.
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 usage context: it's for retrieving historical player snapshots over a date range, which is distinct from get_player (current snapshot) and analyze_player (analysis). However, it doesn't explicitly state when to use this tool versus alternatives, nor does it mention any exclusions or prerequisites. The context is clear enough for an agent to infer, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_player_scoresBRead-onlyIdempotent
List current scores with pagination, percentage accuracy bounds, modifiers, dates, stars, difficulty, mode and song filters. Accuracy is 0–100; dates use ISO timestamps with timezones
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO end time with an explicit timezone | |
| from | No | ISO start time with an explicit timezone | |
| mode | No | ||
| page | No | ||
| sort | No | date | |
| count | No | ||
| order | No | desc | |
| player | No | Player ID, alias, or https://beatleader.com/u/ID; stdio can use BEATLEADER_PLAYER_ID when omitted | |
| search | No | ||
| context | No | general | |
| starsTo | No | ||
| modifiers | No | BeatLeader modifier filter, e.g. FS or FS,SF | |
| starsFrom | No | ||
| difficulty | No | ||
| rankedOnly | No | ||
| accToPercent | No | ||
| accFromPercent | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well established. The description adds minor behavioral context by specifying that accuracy uses 0–100 and dates are ISO timestamps with timezones, but it does not disclose pagination behavior, default ordering, or other runtime traits. With annotations covering the main safety aspects, the added context is useful but not extensive.
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 a single, efficient sentence that front-loads the primary action and resource, then lists filter categories compactly. Every clause carries information, and the added accuracy/date conventions are valuable without padding. No extraneous words 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?
Given 17 optional parameters, no output schema, and rich annotations, the description provides a reasonable high-level map of the tool's capabilities but leaves gaps. It does not explain the meaning of 'song filters' (presumably the 'search' parameter), does not mention the default sort/order/page/count behavior, and does not clarify the 'context' parameter's role. The read-only and idempotent hints reduce the need for safety disclaimers, but the operational details remain underspecified.
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 24%, so the description must compensate for many undocumented parameters. It does group parameters conceptually (e.g., 'percentage accuracy bounds' for accFromPercent/accToPercent, 'dates' for from/to, 'stars' for starsFrom/starsTo), which adds meaning beyond the raw schema. However, it omits or vaguely references several parameters such as 'mode', 'context', 'rankedOnly', 'sort', and 'order', leaving the agent to infer their semantics from names alone.
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 uses the specific verb 'List' with the resource 'current scores' and enumerates several filter dimensions, so the core action is clear. It distinguishes itself from most siblings (get_player, search_maps, analyze_player) by focusing on score listing, but does not explicitly differentiate from get_player_history or get_leaderboard, leaving some ambiguity about whether it returns a player's personal scores or general leaderboard entries.
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 is purely declarative and gives no explicit guidance about when to use this tool versus alternatives. It does not mention get_player_history for historical trends, get_leaderboard for map-specific leaderboards, or any exclusion criteria. An agent must infer the appropriate context from the name and schema rather than from the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_mapsARead-onlyIdempotent
Search leaderboard difficulties by song, ranked status, stars, Acc/Pass/Tech ratings, mode and BeatSaver mapper IDs. Results can be passed to get_leaderboard
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| page | No | ||
| sort | No | stars | |
| type | No | ranked | |
| count | No | ||
| order | No | desc | |
| search | No | ||
| context | No | general | |
| starsTo | No | ||
| mapperIds | No | BeatSaver mapper profile IDs | |
| starsFrom | No | ||
| difficulty | No | ||
| accRatingTo | No | ||
| passRatingTo | No | ||
| techRatingTo | No | ||
| accRatingFrom | No | ||
| passRatingFrom | No | ||
| techRatingFrom | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is clear. The description adds that this is a search/filter operation whose results can feed get_leaderboard, but discloses no additional behavioral traits beyond that. No contradiction with 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?
One well-structured sentence with no filler. The core action and filter dimensions are front-loaded, and the downstream integration note 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 an 18-parameter tool with no output schema, this definition is lean: it covers the main search facets and a chaining hint, but omits return shape, usage boundaries, and clarification of sort/pagination/context parameters. It is minimally adequate but leaves meaningful 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 only 6%, so the description must compensate for 18 parameters. It maps common filter categories to parameter groups (e.g., 'stars' → starsFrom/starsTo, 'Acc/Pass/Tech ratings' → rating bounds), but leaves many parameters only implied or undocumented, such as difficulty, context, sort, page, count, and order.
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 opens with a specific verb and resource: 'Search leaderboard difficulties'. It then enumerates the main filter dimensions (song, ranked status, stars, Acc/Pass/Tech ratings, mode, mapper IDs), which makes the tool's scope clear and distinguishes it from sibling tools like get_leaderboard or search_players.
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 closing note 'Results can be passed to get_leaderboard' provides useful pipeline context, implying this is a discovery/pre-filter step before retrieving a specific leaderboard. However, it does not explicitly state when to use this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_playersARead-onlyIdempotent
Search public players by nickname, country, total PP range and PP component sorting. Returns candidates with stable IDs; select an ID before querying a player
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| ppTo | No | ||
| sort | No | pp | |
| count | No | ||
| order | No | desc | |
| ppFrom | No | ||
| ppType | No | general | |
| search | No | ||
| context | No | general | |
| country | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnly, openWorld, and idempotent hints, and the description aligns with these by describing a search operation. The description adds the nuance that it returns candidates with stable IDs and advises selecting an ID before querying a player, which is useful for follow-up. It doesn't contradict annotations, and the added context is modest but sufficient for a search 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 one sentence that front-loads the primary search criteria and adds a note about ID usage. It is concise and free of fluff, though it could be slightly more structured with a second sentence for usage notes, but it is not overly verbose.
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 has 10 parameters, all optional, and no output schema, the description provides enough for basic use but does not explain pagination, default values, or the meaning of context. The annotations clarify safety and idempotency, but the description could have detailed how the search results are ordered and how to refine queries. Overall, it is adequate but has 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?
The schema coverage is 0%, meaning no parameter descriptions exist in the schema. The description mentions 'nickname, country, total PP range and PP component sorting' which maps to several parameters (search, country, ppFrom, ppTo, ppType, sort), but it does not explain all 10 parameters such as page, count, order, context, and their interactions. The description partially compensates for the lack of schema descriptions but is not exhaustive for a tool with this many parameters.
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 searches for public players by nickname, country, and PP range, with sorting on PP components, which are concrete and specific. It does not explicitly differentiate from sibling tools like get_player or list_player_scores, but the resource and action are clear enough for an agent to infer its role.
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 when to use it (to find players by search criteria) and notes that an ID should be selected before querying a player, which indicates a follow-up step. It does not explicitly state when not to use it or mention alternatives like search_maps or get_player, but the context is reasonably clear.
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.0- First observed
analyze_player - First observed
get_leaderboard - First observed
get_player - First observed
get_player_history - First observed
list_player_scores - First observed
search_maps - First observed
search_players
TDQS
Scored across 7 tools
Most tools target clearly distinct resources and actions, such as player lookup, player search, map search, and score history. The only mild overlap is between list_player_scores and analyze_player, since both deal with current scores, but their purposes are separated by listing versus statistical analysis.
All tool names follow a consistent lowercase snake_case verb_noun pattern, such as get_player, search_players, list_player_scores, and get_leaderboard. There are no mixed naming conventions or vague generic verbs.
Seven tools is a well-scoped size for a BeatLeader helper, covering player profiles, search, score listing, history, leaderboards, and analysis. Each tool has a clear role and none feel redundant or unnecessary.
The tool surface covers the main read-only workflows an agent would need: finding players, retrieving profiles, searching maps, viewing leaderboards, listing scores, examining history, and analyzing performance. The search tools feed cleanly into the detail tools, so there are no obvious dead ends or major missing operations.
Maintenance
Related MCP Connectors
Read-only MCP tools for Mana public creations, tags, creator profiles, and share pages.
Search MCP servers, MCP clients and AI agents, and retrieve listing details. Free, read-only access.
Chess.com MCP — wraps the Chess.com public API (free, no auth)
Related MCP Servers
- AlicenseBqualityBmaintenanceProvides access to Chess.com player data, game records, and public information through standardized MCP interfaces, allowing AI assistants to search and analyze chess information.1088MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that exposes the osu! API v2 as tools, allowing natural language queries about osu! profiles, beatmaps, rankings, and more.23 PyPIMIT
- AlicenseNot gradedqualityDmaintenanceEnables MCP-compatible clients to read and write a gamified self-improvement RPG character sheet, including quest management, profile viewing, skills, social challenges, and leaderboards.1MIT
- AlicenseNot gradedqualityBmaintenanceProvides Last.fm listening analytics and recommendations by combining Last.fm and MusicBrainz metadata, maintaining a local listening index, and recording explicit preferences. Enables queries for listening summaries, taste profiles, artist context, and evidence-backed recommendations via MCP tools.MIT