WSDC Points MCP Server
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., "@WSDC Points MCP ServerHow many more Intermediate points does WSDC ID 12345 need to move up?"
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.
WSDC Points MCP Server
Ask Claude, ChatGPT, Cursor or any AI assistant about West Coast Swing dancers' WSDC points, divisions, level-ups and competition results. A free, public, read-only Model Context Protocol (MCP) server for the World Swing Dance Council (WSDC) Points Registry: ~27,000 dancers and ~8,000 events.
Endpoint:
https://wcspoints.com/mcp(Streamable HTTP, no API key, no sign-up)Website: wcspoints.com · llms.txt · server card
Official MCP Registry name:
com.wcspoints/wsdc-points
Unofficial project, not affiliated with the World Swing Dance Council. The official registry is at worldsdc.com/registry.
What you can ask
"What divisions can I dance as a follower? My name is …"
"How many more Intermediate points do I need to move up? My WSDC ID is …"
"Show the Champions results of the latest Swing Diego."
"Who moved up to All-Stars in Germany in the last 3 months?"
"How many active Advanced leaders are there in France?"
"How many points does 1st place earn in a Novice Jack & Jill with 45 followers?"
Related MCP server: portfolio-mcp
Connect
Client | How |
Claude (claude.ai, Desktop) | Settings → Connectors → Add custom connector → URL |
Claude Code |
|
ChatGPT | Enable developer mode for apps/connectors, create a connector with the URL above, no authentication |
Cursor / Windsurf |
|
VS Code (Copilot) |
|
Anything else | Any MCP client with Streamable HTTP transport |
Tools
All tools are read-only (readOnlyHint: true) and return structured JSON with an output schema.
Tool | What it does |
| Find dancers by name (any order, partial, misspelled, Cyrillic) or WSDC ID |
| Current division and points per role (Leader/Follower), allowed Jack & Jill divisions per role, points per division, level-up timeline |
| A dancer's placements: event, date, division, role, placement, points; filters by division, role, year |
| Find WSDC registry events by name, city, year, country |
| All Jack & Jill placements of one event, by division |
| Dancers who recently moved up a division, by country and division |
| Dancer counts by current division and role, worldwide or per country |
| Search the current WSDC Registry Event Rules (move-up thresholds, points per tier, secondary role rules…) |
| Data coverage and freshness |
Resource: wsdc://rules/current, the full text of the current rulebook.
How it works
Data comes from a continuously synchronised mirror of the public WSDC Points Registry (the same database behind the @wsdc_bot Telegram bot).
Division eligibility per role, including the primary/secondary role rules, is computed in the database and returned as-is, so the server and the bot always agree.
Stateless Streamable HTTP (JSON responses), results cached for minutes, per-IP rate limits.
Python 3.12, MCP Python SDK v2, psycopg 3, Starlette.
Development
python3.12 -m venv venv && venv/bin/pip install -r requirements-dev.txt
venv/bin/python -m pytest -q # unit tests (no database needed)
WSDC_MCP_TEST_DSN="dbname=wsdc host=127.0.0.1" venv/bin/python -m pytest -q # + end-to-end tests
WSDC_MCP_DB_DSN="dbname=wsdc host=127.0.0.1" venv/bin/python -m wsdc_mcp # serve on 127.0.0.1:8001Variable | Meaning |
| PostgreSQL DSN of the WSDC registry database (read-only role) |
| Public origin used in links and discovery documents (default |
| Bind address (default |
| Plain-text WSDC rulebook; enables |
| DB pool size (3) and per-query timeout (8000 ms) |
The server expects the registry schema of the WSDC parser project (contester_view,
contester_view_roles, entry_view, event, …); the code is published for transparency and reuse.
Privacy
No accounts, cookies or trackers. Requests and tool calls are logged for up to 30 days for operations. Results contain only what the WSDC publishes in its public registry. See wcspoints.com/privacy.
License
MIT
Available Tools
9 toolsget_dancer_profileGet WSDC dancer profileBRead-onlyIdempotentInspect
Get a dancer's WSDC profile: current division and points per role (Leader/Follower), the Jack & Jill divisions they are allowed to enter in each role, points per division, level-up timeline, and first/last competition dates.
| Name | Required | Description | Default |
|---|---|---|---|
| wsdc_id | Yes | WSDC competitor ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| note | No | |
| roles | Yes | Primary role first |
| country | No | |
| wsdc_id | Yes | |
| last_name | No | |
| first_name | No | |
| last_points | No | |
| first_points | No | |
| is_dual_role | No | True when the dancer has points as both Leader and Follower |
| primary_role | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful context about the shape of the payload, but says nothing about error behavior for an invalid or unknown wsdc_id, whether inactive/retired dancers are covered, or how current the points data is.
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 with a colon-delimited field list and no filler. It is slightly long for a single-parameter read tool, and much of the field enumeration duplicates what the output schema already conveys.
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 one-parameter, fully-annotated read tool with an output schema, the definition is sufficient to call it correctly. The only real gap is the absence of any usage or failure-mode guidance, which is minor given the structured metadata.
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 parameter is documented as 'WSDC competitor ID' with bounds 1-9999999. The description adds no meaning beyond that, 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 and resource ('Get a dancer's WSDC profile') and enumerates exactly what is returned (division/points per role, allowed Jack & Jill divisions, level-up timeline, competition dates). This makes it distinguishable in practice from get_dancer_results and search_dancers, though it never explicitly contrasts itself with 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?
There is no when-to-use guidance, no statement of prerequisites (e.g. needing a valid WSDC ID), and no routing to alternatives such as get_dancer_results for competition history. Usage is only weakly implied by the returned-field list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dancer_resultsGet WSDC dancer competition resultsARead-onlyIdempotentInspect
List a dancer's WSDC Jack & Jill placements (event, date, division, role, placement, points), most recent first. Totals are computed over all results matching the filters.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | Only results as 'Leader' or 'Follower' | |
| year | No | Only results from this year | |
| limit | No | Maximum number of results to return | |
| wsdc_id | Yes | WSDC competitor ID | |
| division | No | Only this division, e.g. 'Novice', 'All-Stars', 'Masters' |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| results | Yes | Most recent first |
| wsdc_id | Yes | |
| total_points | Yes | Sum of points over all matching results (before limit) |
| total_results | Yes | Number of results matching the filters (before limit) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile needs no restating. The description adds two pieces of real behavioral context beyond that: results are ordered most recent first, and totals are aggregated over all matching results rather than the limited page. It stops short of describing pagination limits or empty-result 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 short sentences, front-loaded with the resource and shape of the result, then the ordering and aggregation caveat. No redundant restatement of the title or parameter list, though the trailing fragment about totals is slightly dangling without saying where totals appear.
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?
An output schema exists, so return-value details are not the description's burden, and the schema fully documents all five parameters. What remains missing is minor but real: no guidance on the relationship to get_event_results or on behavior for an unknown dancer ID, which matters for an ID-keyed lookup.
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 every parameter documented including role values, division examples, and limit bounds, so the baseline is 3. The description only refers to 'filters' generically and adds no syntax or semantics the schema does not already carry.
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 ('List a dancer's WSDC Jack & Jill placements') and enumerates the returned fields (event, date, division, role, placement, points), so the agent knows exactly what comes back. It does not name any sibling such as get_event_results or get_dancer_profile to distinguish the inverse/predecessor view, so differentiation is only implicit.
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 rather than stated: the agent can infer this is the per-dancer results lookup, and the mention of filters hints that role/year/division narrow results. There is no explicit when-to-use versus get_event_results or search_dancers, and no note on what happens when the wsdc_id is unknown or the filters match nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_division_statsGet WSDC division statisticsARead-onlyIdempotentInspect
Count dancers by current division and role (Leader/Follower), worldwide or for one country, optionally only recently active dancers.
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | Only dancers from this country | |
| active_within_months | No | Only count dancers who earned points within this many months |
Output Schema
| Name | Required | Description |
|---|---|---|
| country | No | |
| dancers | Yes | Distinct dancers counted |
| divisions | Yes | Dancers by current division and role, lowest division first |
| active_since | No | Only dancers with points on/after this date were counted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, non-open-world behavior, so the description only needs to add what they cannot: that this is an aggregation returning counts split by division and role rather than a list of dancers. That grouping semantic is genuinely useful and would not be inferable from the annotations; it does not add anything about result shape or performance, which keeps it below 5.
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 compact sentence with the verb and grouping front-loaded and the two optional scoping knobs trailing. No filler, though the parenthetical role list makes it slightly dense.
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?
An output schema exists and both parameters are fully documented in the schema, so the description does not need to explain return values. For a simple two-optional-parameter aggregate tool, what remains is adequate, with only the sibling-selection guidance 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 description coverage is 100%, so the baseline is 3. The description restates the two filters in plain language (country scope, recent activity) but adds no format, valid value, or edge-case detail beyond what the schema properties already say.
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?
Uses a specific verb ('Count dancers') plus the exact grouping dimensions ('current division and role (Leader/Follower)'), which distinguishes it from list-oriented siblings such as search_dancers and get_dancer_profile. It stops short of naming a sibling explicitly, so it is clear but not maximally 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?
The scoping clause ('worldwide or for one country, optionally only recently active dancers') implies when the two filters are appropriate, but there is no explicit when-to-use-this-vs-search_dancers guidance and no stated exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_event_resultsGet WSDC event resultsARead-onlyIdempotentInspect
Get the Jack & Jill placements recorded in the WSDC registry for one event, grouped by division (highest first): placement, role, points awarded, dancer name and WSDC ID.
| Name | Required | Description | Default |
|---|---|---|---|
| division | No | Only this division, e.g. 'Champions' | |
| event_id | Yes | Event ID from search_events |
Output Schema
| Name | Required | Description |
|---|---|---|
| event | Yes | |
| divisions | Yes | Highest division first; placements in order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description still adds real context beyond them: results are limited to Jack & Jill placements (not other event categories), are grouped by division with the highest division first, and carry placement, role, points, dancer name and WSDC ID.
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 sentence that front-loads the resource, scope, grouping and returned fields with no filler. Every clause carries information an agent can act on.
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?
An output schema exists, yet the description still summarizes the returned fields and ordering, which is a mild redundancy but confirms shape. The main gap is that it never states behavior when division is omitted or when an event has no recorded results.
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 both event_id and the optional division filter with an example. The description adds only the implicit 'one event' and 'grouped by division' framing, not new syntax or format detail for either parameter, so 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 gives a specific verb and resource: retrieve Jack & Jill placements from the WSDC registry for a single event, grouped by division and ordered highest first. The 'for one event' scoping implicitly separates it from the per-dancer sibling get_dancer_results, though no sibling is named explicitly.
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 only implied: the 'for one event' scope plus the event_id parameter described as coming 'from search_events' suggests the search-then-fetch workflow. There is no explicit statement of when to use this versus get_dancer_results or get_division_stats, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_levelupsGet recent WSDC level-upsARead-onlyIdempotentInspect
List dancers who recently moved up to a higher WSDC division (in either role), most recent first, optionally filtered by country and target division.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days | |
| limit | No | Maximum number of level-ups to return | |
| country | No | Only dancers from this country | |
| division | No | Only moves into this division: Novice, Intermediate, Advanced, All-Stars or Champions |
Output Schema
| Name | Required | Description |
|---|---|---|
| since | Yes | |
| total | Yes | Total matching level-ups (before limit) |
| country | No | |
| division | No | |
| levelups | Yes | Most recent first |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description's added value is the sort order ('most recent first') and the notable domain nuance that a level-up in either role counts as an entry. It stops short of describing what a record contains or how the look-back window is applied, but the output schema carries the return-shape burden.
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 sentence, front-loaded with the resource and action, followed by ordering and filters in priority order. Nothing is redundant with the schema and nothing is padding.
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 a full output schema, complete parameter documentation and rich annotations, the description only needs to convey scope and ordering, which it does. A brief mention of the default 90-day window or how results are bounded would make it airtight, but nothing essential for a correct call 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 description coverage is 100% and all four parameters (days, limit, country, division) are documented inline with defaults and bounds, so the baseline is 3. The description reinforces that 'division' means the target division moved into, but adds no format, matching, or naming conventions 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 and resource ('List dancers who recently moved up to a higher WSDC division'), plus scope details: both roles, most-recent-first ordering, and optional country/division filters. This is clearly distinguishable from siblings like search_dancers (roster lookup) or get_dancer_results (competition outcomes), since it returns a time-windowed promotion feed.
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 data shape (recent division changes over a look-back window), but the description never says when to prefer this over search_dancers or get_division_stats, nor does it state exclusion conditions. An agent can infer the right context but must reason about alternatives on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_registry_infoGet WSDC registry infoARead-onlyIdempotentInspect
Data coverage and freshness: number of dancers and events, date of the most recent event in the mirror, the rulebook version, and links to the official sources.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description meaningfully adds that the data is a 'mirror' with links to official sources, signalling that figures may lag the authoritative dataset — a behavioral nuance not present in 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?
A single tight sentence with the key concept ('coverage and freshness') front-loaded and no filler. It is a sentence fragment without a verb, which slightly softens the opening, but no wording is wasted.
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?
An output schema exists, so return values need not be spelled out, yet the description helpfully enumerates the main fields anyway. For a zero-argument metadata tool this is nearly complete; only the intended trigger (e.g., 'use before citing result counts') 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?
The tool takes zero parameters, so the schema imposes nothing for the description to clarify; baseline for a no-arg tool is 4. Nothing in the description contradicts or muddies the empty argument object.
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 concrete resource and enumerates its contents: dancer/event counts, most-recent-event date, rulebook version, and official-source links. It is clearly distinct from every sibling (search_*, get_*_profile/results, get_division_stats). It stops short of a verb phrase like 'Return registry metadata', so it reads more as a field list than a statement of action.
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?
There is no explicit guidance on when to call this versus the sibling tools, nor any precondition such as 'call before relying on results to check data freshness'. The phrase 'coverage and freshness' implies a metadata/pre-flight check, but the agent must infer that intended usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_dancersSearch WSDC dancersARead-onlyIdempotentInspect
Find West Coast Swing dancers in the WSDC Points Registry by name or WSDC ID.
Returns WSDC ID, country, primary role and current division for each match, most recently active dancers first. Use the WSDC ID with the other dancer tools.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of dancers to return | |
| query | Yes | Dancer name (any order, partial names OK, Latin or Cyrillic) or a WSDC ID |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| query | Yes | |
| dancers | Yes | |
| match_type | Yes | 'id', 'name' or 'fuzzy' (no exact name match, closest spellings) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description still adds real behavioral value: it names the returned fields, the ordering ("most recently active dancers first"), and the follow-on handoff via WSDC ID. It does not say what happens on zero matches, which keeps this from a 5.
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 purpose, then return shape and ordering, then the handoff instruction. Nothing is repeated for filler and each 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?
For a two-parameter, read-only search with an output schema already covering return structure, this is nearly complete. The one gap is edge-case behavior on no matches or overly broad queries, which an agent would have to discover by calling it.
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 both parameters are fully documented, including partial/any-order names and Latin/Cyrillic support. The description only restates "by name or WSDC ID" and adds no syntax or formatting detail beyond the schema, which is the expected baseline-3 outcome.
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 ("Find West Coast Swing dancers in the WSDC Points Registry") plus the two lookup keys (name or WSDC ID). That is enough for an agent to distinguish it from siblings like search_events or get_dancer_profile 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?
Usage is only implied: the closing line "Use the WSDC ID with the other dancer tools" positions this as an entry point, and the name-vs-ID phrasing hints at both lookup modes. There is no explicit when-not guidance or named alternative (e.g., when to go straight to get_dancer_profile with a known ID).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsSearch WSDC eventsARead-onlyIdempotentInspect
Find WSDC registry events (West Coast Swing conventions with points-awarding Jack & Jill contests) by name, city, year and/or country. Most recent first. Use the event_id with get_event_results.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | Only events held in this year | |
| limit | No | Maximum number of events to return | |
| query | No | Words from the event name or city, e.g. 'Swing Diego' | |
| country | No | Only events in this country, e.g. 'Germany', 'USA' |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| events | Yes | Most recent first |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely new behavior beyond them: results are returned most recent first and each carries an event_id usable downstream. Pagination/limit behavior is left entirely to the schema, which keeps this from a 5.
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 what the tool finds, followed by ordering and the downstream call. No filler; every clause carries information the agent needs.
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 an output schema present and annotations covering safety, the description needn't explain return values, and it supplies the one thing that isn't structured: ordering. It leaves open what happens when no filters are supplied (presumably a most-recent default) and says nothing about the limit cap, which is a minor but real gap for a zero-required-parameter 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 100%, so each parameter is already documented in the schema with examples ('Swing Diego', 'Germany'). The description only restates the filterable fields and the 'and/or' combination semantics, adding no format or precedence detail beyond the schema. Baseline 3 is 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?
Names a specific verb and resource ('Find WSDC registry events') and even defines the domain term in parentheses (conventions with points-awarding Jack & Jill contests). It enumerates the filterable fields and states result ordering ('Most recent first'), which is enough for an agent to distinguish it from search_dancers and the get_* lookup 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?
Gives a clear use case (finding events by name, city, year and/or country) and an explicit follow-up route: 'Use the event_id with get_event_results.' It does not state when NOT to use it or how it relates to search_dancers beyond the obvious resource difference, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_wsdc_rulesSearch the WSDC rulesARead-onlyIdempotentInspect
Search the official WSDC Registry Event Rules (current rulebook) and return the most relevant sections verbatim: division move-up thresholds, points per placement and tier, primary/secondary role rules, contest requirements, age divisions, judging.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to look up, e.g. 'points needed to move up from Novice', 'points per tier' | |
| max_results | No | Maximum number of rulebook excerpts |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| version | Yes | Rulebook version, e.g. '2026.1B' |
| excerpts | Yes | |
| sections | Yes | All section headings in the rulebook, for follow-up searches |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety and scope are largely covered. The description adds real value by disclosing that results are excerpts returned 'verbatim' rather than summaries, and that the corpus is the current rulebook only — a meaningful scoping constraint an agent would otherwise have to discover.
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 sentence, front-loaded with the verb and corpus, then a compact enumeration of covered topics — no filler or restated title. The trailing list is dense but each item earns its place by showing query coverage; the only minor cost is that the enumeration carries no structural grouping.
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 two-parameter, read-only retrieval tool with an output schema, the description covers what is searched, what is returned, and how results are presented (verbatim excerpts). Gaps are minor: it does not state what happens on a no-match query or whether results include rulebook section citations.
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 the query parameter carrying its own natural-language examples and max_results documented with default and bounds, so the schema does the heavy lifting. The description restates the same topic set but adds no guidance on query phrasing strategy (e.g. keyword vs. natural-language) or how to choose max_results.
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'), a specifically named resource ('official WSDC Registry Event Rules (current rulebook)'), and the return shape ('most relevant sections verbatim'). The enumerated topic list (move-up thresholds, points per placement/tier, role rules, contest requirements, age divisions, judging) makes it unmistakable versus siblings like search_dancers or get_event_results, which cover entirely different domains.
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 topic enumeration effectively defines the queries this tool answers, and no sibling handles rulebook lookups, so the when-to-use context is clear. It stops short of an explicit routing statement ('use this instead of X when...') or an exclusion such as 'not for historical/superseded rulebooks'.
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.
9 tool updates
v1.0.0- First observed
get_dancer_profile - First observed
get_dancer_results - First observed
get_division_stats - First observed
get_event_results - First observed
get_recent_levelups - First observed
get_registry_info - First observed
search_dancers - First observed
search_events - First observed
search_wsdc_rules
TDQS
Scored across 9 tools
Each tool targets a clearly distinct entity/action pair: dancer search vs. dancer profile vs. dancer results, and event search vs. event results. The descriptions explicitly cross-reference which tool to use next (e.g., 'Use the WSDC ID with the other dancer tools'), leaving no realistic chance of misselection.
All nine tools follow a strict snake_case verb_noun pattern using only two verbs (search_/get_) matched to the correct semantics. No camelCase, no vague verbs like 'process' or 'handle'.
Nine tools is well within the ideal 3-15 range and each maps to a distinct query type (search, profile, results, stats, level-ups, rules, metadata). No filler or redundant tools are present.
The read-only registry domain is well covered: entity search, detail views, results, aggregate stats, level-up tracking, rules lookup, and data freshness metadata. Minor gaps exist (e.g., no cross-dancer comparison or points-to-next-division projection), but agents can work around them by combining existing tools.
Maintenance
Related MCP Connectors
Read-only search of 2,189 AI agent tools (MCP servers, x402 APIs) with daily automated trust scores.
Read-only MCP tools for AI agent discovery, structured resources, and NIULAI information.
Read-only search over 2,065+ AI agent tools and 276 MCP servers. Free, no sign-up needed.
Free, source-checked directory of AI agent tools, MCP servers and skills, with read-only search.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI assistants to query the FACEIT platform for players, matches, hubs, and tournaments through typed MCP tools generated from the FACEIT Data API v4.64MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to query the author's career, projects, publications, and technical documents through read-only MCP tools.-
- AlicenseNot gradedqualityBmaintenanceProvides read-only MCP tools for AI agents and coding assistants to search podcast transcripts and episode metadata, retrieve transcript excerpts, and generate citations. It requires no login or API key.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to read a Concept2 Logbook account through MCP, covering training summaries, personal bests, workout lists, splits, intervals, stroke data and profile details. Access is read-only via an API key created after signing in with Concept2.1MIT