FirstCycling MCP Server
FirstCycling MCP 서버
FirstCycling의 전문 사이클링 데이터를 제공하는 모델 컨텍스트 프로토콜(MCP) 서버입니다. 프로 사이클 선수, 경기 결과, 경기 세부 정보, 그리고 과거 사이클링 데이터에 대한 포괄적인 정보를 검색할 수 있습니다.
특징
이 MCP 서버는 전문적인 사이클링 데이터에 대한 풍부한 액세스를 제공하며 다음과 같은 도구를 제공합니다.
프로 사이클 선수에 대한 정보 찾기
경주 결과 및 세부 정보 검색
과거 레이스 데이터 탐색
라이더 성과 및 경력 진행 분석
자전거 팀 및 대회에 대한 정보 접근
Related MCP server: F1 MCP Server
실제 사용 사례
이 MCP 서버를 사용하면 Claude를 사용하여 다음을 수행할 수 있습니다.
라이더 분석
성과 추적 : "타데이 포가차르는 지난 몇 년 동안 투르 드 프랑스에서 어떤 성과를 거두었나요?"
경력 진행 : "Wout van Aert의 팀 역사와 경력 진행 상황을 보여주세요."
특수화 분석 : "Monument classics에서 Mathieu van der Poel의 성과는 무엇인가?"
승리 분석 : "요나스 빈게고르의 월드투어 승리를 모두 나열하세요."
역사적 비교 : "Primož Roglič와 Jonas Vingegaard의 그랜드 투어 결과를 비교하십시오."
인종 연구
최근 결과 : "2023년 파리-루베의 결과를 보여주세요."
역사적 맥락 : "플랜더스 투어에서 가장 어린 우승자와 가장 나이 많은 우승자는 누구입니까?"
팀 분석 : "자세한 팀 정보와 함께 2023년 투르 드 프랑스의 출발 목록을 확인하세요."
레이스 통계 : "리에주-바스토뉴-리에주의 우승 기록을 보여주세요. 누가 가장 많이 우승했습니까?"
스테이지 정보 : "2023년 지로 디탈리아의 스테이지 프로필을 보여 주시겠습니까?"
스포츠 저널리즘
"사이클링 잡지 기사에 렘코 에베네포엘의 자세한 프로필을 작성하세요."
"타데이 포가차르와 요나스 빈게고르 등 최고 경쟁자들의 최근 결과를 바탕으로 다가올 투르 드 프랑스에 대한 미리보기를 작성하세요."
"톰 피드콕의 레이스 결과와 팀 역사를 바탕으로 그의 경력 변화를 분석하세요."
자전거 교육
"역사와 수상자에 대한 데이터를 사용하여 Monument 클래식을 특별하게 만드는 요소를 설명하세요."
"그랜드 투어와 프로 사이클링에서의 중요성에 대한 교육적 요약을 작성하세요."
"데이터에서 추출한 예를 사용하여 프로 자전거 선수의 일반적인 경력 진행 과정을 설명하세요."
요구 사항
Python 3.10 이상
uv패키지 관리자(추천)pyproject.toml에 나열된 종속성은 다음과 같습니다.엠씨피
아름다운수프4
lxml
팬더
무기력 상태
웹 스크래핑 및 데이터 처리를 위한 기타 패키지
설정
이 저장소를 복제하세요
가상 환경을 만들고 활성화하세요.
지엑스피1
종속성 설치:
uv pip install -e .
FirstCycling API
이 서버는 프로젝트에 직접 통합된 FirstCycling API를 사용합니다. 이 API는 웹 스크래핑을 통해 FirstCycling 웹사이트에서 데이터를 가져오는 방법을 제공합니다.
MCP 도구
서버는 모델 컨텍스트 프로토콜을 통해 다음 도구를 제공합니다.
라이더 정보
도구 | 설명 |
| 국적, 생년월일, 체중, 키, 현재 팀을 포함한 라이더의 기본적인 전기 정보를 얻으세요. |
| 중요도 순으로 정렬된 라이더의 최고 경력 결과를 검색합니다. |
| 그랑 투르(투르 드 프랑스, 지로 디탈리아, 부엘타 아 에스파냐) 라이더의 결과를 확인하세요 |
| 자전거의 Monument classics에서 라이더의 결과를 검색하세요 |
| 라이더의 팀 이력과 시간 경과에 따른 UCI 랭킹 추이를 알아보세요. |
| 라이더의 전체 레이스 참가 기록을 검색합니다(연도별로 필터링 가능). |
| 1일 경주에서 라이더의 결과를 얻으세요. 연도별로 필터링할 수도 있습니다. |
| 연도별로 필터링하여 여러 날에 걸친 단계 경주에서 라이더의 결과를 확인하세요. |
| 라이더의 경력 전반에 걸친 전체 팀 기록을 검색합니다. |
| WorldTour 또는 UCI 레이스에 대한 선택적 필터가 포함된 라이더의 경력 승리 목록을 받으세요. |
레이스 정보
도구 | 설명 |
| 레이스 ID 및 연도별로 특정 레이스 에디션에 대한 결과를 검색합니다. |
| 역사, 기록, 과거 우승자를 포함한 경주에 대한 일반 정보를 얻으세요 |
| 다단계 레이스에 대한 단계 프로필 및 세부 정보 검색 |
| 세부적이거나 기본적인 팀 정보가 포함된 특정 레이스 에디션의 시작 목록을 받으세요 |
| 가장 많은 승리를 거둔 라이더를 보여주는 경주의 역대 승리 표를 검색합니다. |
| 선택적인 분류 필터를 사용하여 경주에 대한 연도별 결과를 얻으세요 |
| 경주에서 가장 어린 우승자와 가장 나이 많은 우승자에 대한 정보를 검색합니다. |
| 다단계 경주에서 단계 승리에 대한 정보를 얻으세요 |
검색 도구
도구 | 설명 |
| 라이더를 이름으로 검색하고, 라이더의 ID와 기본 정보를 반환합니다. |
| 이름으로 레이스를 검색하고 해당 레이스의 ID와 기본 정보를 반환합니다. |
용법
개발 모드
다음을 실행하여 MCP Inspector로 서버를 테스트할 수 있습니다.
uv run mcp dev firstcycling.py이렇게 하면 서버가 시작되고 브라우저에서 MCP 검사기가 열려 사용 가능한 도구를 테스트할 수 있습니다.
데스크톱용 Claude와 통합
이 서버를 Claude for Desktop과 통합하려면:
다음 위치에 있는 Claude for Desktop 구성 파일을 편집하세요.
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
구성에 서버를 추가합니다.
{ "mcpServers": { "firstcycling": { "command": "uv", "args": ["--directory", "/path/to/server/directory", "run", "firstcycling.py"] } } }데스크톱용 Claude를 다시 시작하세요
특허
MIT
Available Tools
18 toolsget_race_detailsA
Get comprehensive details about a cycling race. This tool provides detailed information about a specific race, including its history, key statistics, route details, and other relevant information. The data can be filtered by specific classification.
Note: If you don't know the race's ID, use the search_race tool first to find it by name.
Example usage:
- Get details for Tour de France (ID: 17)
- Get details for Paris-Roubaix (ID: 30)
Returns a formatted string with:
- Race name, country, and category
- Historical information and key statistics
- Course details and characteristics
- Optional classification details| Name | Required | Description | Default |
|---|---|---|---|
| classification_num | No | ||
| race_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It describes what information is returned (history, statistics, route) and mentions filtering by classification, but lacks critical behavioral details: whether this is a read-only operation, potential rate limits, authentication requirements, error conditions, or pagination behavior. The description covers basic functionality but misses important operational 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 well-structured with purpose statement, usage note, examples, and return format. While slightly verbose, each section adds value. The front-loaded purpose statement is clear, and the examples are helpful. Minor trimming could improve conciseness without losing 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?
Given 2 parameters with 0% schema coverage and no output schema, the description provides adequate context for basic usage but has gaps. It explains the return format (formatted string with specific sections) which compensates for missing output schema, but doesn't fully document parameter semantics or behavioral traits. For a read operation with filtering, this is minimally complete but could be more comprehensive.
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 must compensate. It explains that race_id identifies a specific race and mentions filtering by classification (mapping to classification_num), but doesn't specify valid ranges, formats, or examples for classification_num. The description adds some meaning but doesn't fully document both parameters, especially classification_num's purpose and constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get comprehensive details about a cycling race' with specific information types (history, statistics, route). It distinguishes from siblings like search_race (which finds races) and get_race_edition_results (which focuses on results). However, it doesn't explicitly differentiate from all siblings like get_race_victory_table.
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 provides explicit guidance: 'If you don't know the race's ID, use the search_race tool first to find it by name.' This clearly states when to use an alternative tool (search_race) and establishes a prerequisite workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_race_edition_resultsA
Get detailed results for a specific edition of a cycling race. This tool provides comprehensive results for a particular edition of a race, including rankings, time gaps, and other relevant statistics. Results can be filtered by classification or stage.
Note: If you don't know the race's ID, use the search_race tool first to find it by name.
Example usage:
- Get 2023 Tour de France general classification results (Race ID: 17, Year: 2023)
- Get 2022 Paris-Roubaix results (Race ID: 30, Year: 2022)
- Get results for stage 5 of 2023 Tour de France (Race ID: 17, Year: 2023, Stage: 5)
Returns a formatted string with:
- Race name, year, and category
- Complete result list with rankings and time gaps
- Rider names and teams
- Classification or stage specific information| Name | Required | Description | Default |
|---|---|---|---|
| classification_num | No | ||
| race_id | Yes | ||
| stage_num | No | ||
| year | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes what the tool returns (formatted string with race details, results, rider info) but doesn't mention important behavioral aspects like rate limits, error conditions, authentication requirements, or whether results are cached/live. The description doesn't contradict annotations (none exist), but leaves significant behavioral context unspecified.
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 well-structured and appropriately sized: it starts with the core purpose, adds filtering context, provides prerequisite guidance, gives concrete examples, and details the return format. Every sentence adds value with zero redundant 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 tool with 4 parameters, 0% schema coverage, no annotations, and no output schema, the description does a good job explaining the tool's purpose, usage, and return format. However, it doesn't fully compensate for the lack of behavioral context (rate limits, errors, etc.) or detailed parameter semantics (what classification numbers mean, valid ranges).
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?
With 0% schema description coverage (titles only provide parameter names), the description must compensate. It effectively explains the purpose of race_id and year through examples, clarifies that classification_num and stage_num are optional filters, and shows how they work together. However, it doesn't explain what classification_num values represent or provide format details for any 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's purpose with specific verb ('Get detailed results') and resource ('for a specific edition of a cycling race'), distinguishing it from sibling tools like get_race_details (which likely provides metadata) or search_race (which finds races). It explicitly mentions what results include: rankings, time gaps, and statistics.
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 provides explicit guidance on when to use this tool vs. alternatives: it instructs to use search_race first if the race ID is unknown, and mentions filtering by classification or stage. It also gives three concrete example use cases that illustrate different parameter combinations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_race_victory_tableA
Get the all-time victory table for a cycling race. This tool provides a historical summary of the most successful riders in a specific race, showing the number of victories for each rider throughout the race's history.
Note: If you don't know the race's ID, use the search_race tool first to find it by name.
Example usage:
- Get victory table for Tour de France (ID: 17)
- Get victory table for Paris-Roubaix (ID: 30)
Returns a formatted string with:
- Race name
- List of riders with the most victories
- Number of victories for each rider
- Years of victories where available| Name | Required | Description | Default |
|---|---|---|---|
| race_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool returns ('a formatted string with: race name, list of riders with the most victories, number of victories for each rider, years of victories where available'), which is crucial since there's no output schema. However, it doesn't mention potential limitations like data availability for all races or pagination for large result sets, leaving some behavioral aspects unspecified.
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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by elaboration, usage note, examples, and return format. Every sentence adds value—none are redundant or wasteful—making it efficient and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (historical data retrieval), no annotations, no output schema, and low schema coverage, the description does a good job of covering key aspects: purpose, usage guidelines, parameter context, and return format. However, it lacks details on error handling or data completeness (e.g., what happens if no victory data exists), which would enhance completeness for this context.
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 description coverage is 0%, so the description must compensate. It adds meaningful context for the single parameter (race_id) by explaining it's needed to identify the race and providing examples (Tour de France ID: 17, Paris-Roubaix ID: 30), which clarifies the parameter's purpose beyond the schema's basic type definition. However, it doesn't specify where to find these IDs or if they're standardized, leaving some ambiguity.
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 specific action ('Get the all-time victory table') and resource ('for a cycling race'), distinguishing it from sibling tools like get_race_details or get_race_edition_results by focusing on historical rider victories rather than race details or specific edition results. It explicitly mentions what the tool provides: 'a historical summary of the most successful riders in a specific race, showing the number of victories for each rider throughout the race's history.'
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 includes explicit guidance on when to use this tool versus alternatives: 'If you don't know the race's ID, use the search_race tool first to find it by name.' This directly addresses a common prerequisite and names the specific sibling tool to use as an alternative, providing clear context for proper tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_best_resultsA
Retrieve the best career results of a professional cyclist, including their top finishes in various races. This tool provides a comprehensive overview of a rider's most significant achievements throughout their career, including their highest positions in major races, stage wins, and overall classifications. Results are sorted by importance and include detailed information about each race.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get top 10 best results for Tadej Pogačar (ID: 16973)
- Get top 5 best results for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- Rider's name and career highlights
- Top results sorted by importance
- Race details including category and country
- Date and position for each result| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| rider_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses that results are 'sorted by importance' and include 'detailed information about each race,' which adds behavioral context beyond basic retrieval. However, it doesn't mention potential limitations like rate limits, authentication needs, or error conditions, leaving some behavioral aspects unclear.
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 well-structured with a clear purpose statement, usage note, examples, and return format details. Each sentence adds value, but it could be slightly more concise by integrating the return format into the initial overview without a separate bulleted list.
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 no annotations and no output schema, the description does a good job covering purpose, usage, parameters, and return format. It provides enough context for an agent to use the tool effectively, though it could benefit from mentioning any prerequisites or error handling to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains that 'rider_id' identifies the cyclist and provides example IDs, and implies 'limit' controls the number of results returned (e.g., 'top 10' or 'top 5'). This adds meaningful context beyond the bare schema, though it doesn't detail parameter constraints or formats explicitly.
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 specific action ('retrieve'), resource ('best career results of a professional cyclist'), and scope ('including top finishes, stage wins, overall classifications'). It distinguishes from siblings like 'get_rider_info' or 'get_rider_victories' by focusing on comprehensive best achievements rather than general info or just wins.
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 explicitly provides when-to-use guidance: 'If you don't know the rider's ID, use the search_rider tool first to find it by name.' It also implies usage context through example queries, helping differentiate from sibling tools that might return different data types or scopes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_grand_tour_resultsA
Get comprehensive results for a rider in Grand Tours (Tour de France, Giro d'Italia, and Vuelta a España). This tool provides detailed information about a rider's performance in cycling's most prestigious three-week races, including their overall classification positions, stage wins, and special classification results. The data is organized chronologically and includes all relevant race details.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get Grand Tour results for Tadej Pogačar (ID: 16973)
- Get Grand Tour results for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- Results for each Grand Tour (Tour de France, Giro, Vuelta)
- Overall classification positions
- Stage wins and special classification results
- Time gaps and race details| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns 'detailed information' and a 'formatted string' with specific content (overall classification, stage wins, etc.), and mentions data is 'organized chronologically.' However, it doesn't cover potential limitations like rate limits, error conditions, or authentication needs, leaving some behavioral aspects unspecified.
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 well-structured and front-loaded with the core purpose, followed by usage notes, examples, and return details. Every sentence adds value—no redundancy or fluff—making it efficient and easy to parse.
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 single parameter, lack of annotations, and no output schema, the description does a solid job by covering purpose, usage, parameter context, and return format. However, it could be more complete by mentioning any data recency limits or access constraints, which are relevant for a data-fetching 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?
The input schema has 0% description coverage, but the description compensates by explaining that the rider_id parameter should be obtained via search_rider if unknown, and provides example IDs (e.g., 16973 for Tadej Pogačar). This adds meaningful context beyond the bare schema, though it doesn't detail ID format or validation rules.
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 specific action ('Get comprehensive results'), resource ('rider in Grand Tours'), and scope ('Tour de France, Giro d'Italia, and Vuelta a España'), distinguishing it from sibling tools like get_rider_monument_results or get_rider_one_day_races by focusing exclusively on three-week races.
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?
Explicit guidance is provided: 'If you don't know the rider's ID, use the search_rider tool first to find it by name.' This directly addresses a common prerequisite and names the alternative tool, giving clear when-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_infoA
Get comprehensive information about a professional cyclist including their current team, nationality, date of birth, and recent race results. This tool provides a detailed overview of a rider's current status and recent performance in professional cycling races. The information includes their current team affiliation, nationality, age, and their most recent race results with positions and times.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get basic info for Tadej Pogačar (ID: 16973)
- Get basic info for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- Full name and current team
- Nationality and date of birth
- UCI ID and social media handles
- Last 5 race results with positions and times
- Total number of UCI victories| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns 'comprehensive information' and lists specific data points (e.g., team, nationality, recent results), which helps set expectations. However, it lacks details on potential limitations (e.g., data freshness, error handling, or rate limits), leaving behavioral gaps for a tool with no annotation support.
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 well-structured and front-loaded, starting with the core purpose. It uses bullet points for returns and examples efficiently, but includes some redundancy (e.g., repeating 'basic info' in examples when the description already states 'comprehensive information'). Overall, most sentences add value without excessive verbosity.
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 no annotations, no output schema, and low schema coverage, the description does a good job by detailing the return format (formatted string with specific data points) and providing usage examples. It covers key aspects like purpose, parameters, and outputs, though it could improve by addressing potential errors or data scope limitations for better completeness.
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 input schema has 0% description coverage (only 'rider_id' with type integer), so the description must compensate. It adds meaning by explaining that rider_id is required and provides examples (e.g., Tadej Pogačar ID: 16973), clarifying the parameter's purpose. However, it doesn't specify format constraints or sourcing details beyond the examples.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get comprehensive information about a professional cyclist' with specific details like current team, nationality, date of birth, and recent race results. It distinguishes itself from siblings by focusing on a comprehensive overview rather than specialized queries (e.g., get_rider_victories or get_rider_race_history).
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 provides explicit guidance: 'If you don't know the rider's ID, use the search_rider tool first to find it by name.' This clearly indicates when to use this tool (with a known ID) versus an alternative (search_rider for unknown IDs), addressing a key usage scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_monument_resultsA
Retrieve detailed results for a rider in cycling's five Monument races (Milan-San Remo, Tour of Flanders, Paris-Roubaix, Liège-Bastogne-Liège, and Il Lombardia). These are the most prestigious one-day races in professional cycling. The tool provides comprehensive information about a rider's performance in these historic races, including their positions, times, and any special achievements.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get Monument results for Tadej Pogačar (ID: 16973)
- Get Monument results for Mathieu van der Poel (ID: 16975)
Returns a formatted string with:
- Results for each Monument race
- Position and time for each participation
- Race details and special achievements
- Chronological organization by year| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses what information will be returned (positions, times, achievements, chronological organization) and the output format (formatted string), but doesn't mention error handling, rate limits, or authentication requirements that would be helpful for a read operation.
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 well-structured with purpose, context, prerequisites, examples, and return format. While slightly longer than minimal, every sentence adds value. The front-loading of the core purpose followed by practical guidance is effective.
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 single-parameter read tool with no annotations or output schema, the description provides substantial context: clear purpose, usage prerequisites, examples, and detailed return format. The main gap is lack of error case information, but otherwise it's quite complete for this complexity level.
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?
With 0% schema description coverage for the single parameter (rider_id), the description compensates by explaining what the parameter represents (rider's ID) and providing guidance on how to obtain it (use search_rider tool). The examples also demonstrate proper usage with specific rider IDs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Retrieve detailed results for a rider in cycling's five Monument races' with specific resources (rider's performance data) and scope (five named races). It distinguishes from siblings like get_rider_grand_tour_results by focusing exclusively on Monument races.
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 provides explicit guidance on when to use this tool ('If you don't know the rider's ID, use the search_rider tool first') and includes two concrete usage examples. It clearly positions this tool for Monument-specific results versus other rider result tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_one_day_racesA
Get a rider's results in one-day races, optionally filtered by year. This tool retrieves detailed information about a rider's performance in one-day races (classics and one-day events). It provides comprehensive data about positions, times, and race categories. Results can be filtered by a specific year.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get one-day race results for Mathieu van der Poel (ID: 16672)
- Get 2023 one-day race results for Wout van Aert (ID: 16948)
Returns a formatted string with:
- Results in one-day races organized by year
- Position and time for each race
- Race category and details
- Chronological organization| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes | ||
| year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes the tool's function and output format (a formatted string with organized results), but lacks details on potential limitations, error handling, or performance aspects like rate limits. It doesn't contradict annotations, but could be more comprehensive for a tool with no structured behavioral hints.
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 well-structured and front-loaded, starting with the core purpose, followed by details, usage notes, examples, and return format. Every sentence adds value without redundancy, and it's appropriately sized for the tool's complexity, making it easy to scan and understand quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is largely complete. It covers purpose, usage, parameters, and output format adequately. However, it could improve by mentioning any constraints on the 'year' parameter or error cases, but overall it provides sufficient context for an agent to use the tool effectively.
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 description coverage is 0%, so the description must compensate. It effectively explains the semantics of both parameters: 'rider_id' is required for identifying the rider, with a note to use 'search_rider' if unknown, and 'year' is optional for filtering results. This adds meaningful context beyond the bare schema, though it doesn't specify format constraints or examples for the 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's purpose with specific verbs ('get', 'retrieves') and resources ('rider's results in one-day races'), distinguishing it from siblings like 'get_rider_grand_tour_results' or 'get_rider_stage_races' by focusing exclusively on one-day races. It explicitly mentions the type of races (classics and one-day events) and the data provided (positions, times, race categories).
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 provides explicit guidance on when to use this tool vs. alternatives, including a prerequisite note to use 'search_rider' if the rider ID is unknown, and it distinguishes usage from other tools by specifying it's for one-day races only. The example usage further clarifies typical scenarios, making it easy for an agent to determine applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_race_historyA
Get the complete race history of a professional cyclist, optionally filtered by year. This tool retrieves a comprehensive list of all races the rider has participated in, including their positions, times, and race categories. It provides a detailed overview of their racing career.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get complete race history for Tadej Pogačar (ID: 16973)
- Get 2023 race history for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- All races organized by year
- Position and time for each race
- Race category and details
- Chronological organization| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes | ||
| year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes the retrieval operation and output format, but lacks details about error handling, rate limits, authentication requirements, or data freshness. It doesn't contradict any annotations since none exist.
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 well-structured with purpose, usage note, examples, and return format sections. While slightly verbose, each sentence adds value. It could be more concise by combining some details about the return format.
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 2-parameter tool with no annotations and no output schema, the description provides good coverage: purpose, parameters, usage guidance, examples, and return format. It adequately compensates for the lack of structured metadata, though could benefit from more behavioral details.
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 description adds meaningful context beyond the schema's 0% coverage. It explains that rider_id identifies the cyclist and year is an optional filter, and provides concrete examples with specific IDs (16973, 16974). This compensates well for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('get', 'retrieves') and resource ('complete race history of a professional cyclist'). It distinguishes from siblings by focusing on comprehensive historical data rather than specific result types (e.g., best results, victories) or other rider information.
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 provides explicit guidance on when to use this tool versus alternatives: it specifies to use search_rider first if the rider ID is unknown, and mentions optional year filtering. This directly addresses a key usage scenario and references a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_stage_racesA
Get a rider's results in stage races, optionally filtered by year. This tool retrieves detailed information about a rider's performance in stage races (multi-day races like Tour de France, Giro d'Italia, etc.). It provides comprehensive data about positions, times, and race categories. Results can be filtered by a specific year.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get stage race results for Tadej Pogačar (ID: 16973)
- Get 2023 stage race results for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- Results in stage races organized by year
- Position and time for each race
- Race category and details
- Chronological organization| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes | ||
| year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes the tool's function (retrieving detailed performance data) and output format (formatted string with organized results), but lacks information on potential limitations like rate limits, error conditions, or data freshness. It doesn't contradict any annotations since none exist.
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 well-structured and front-loaded with the core purpose, followed by details and examples. While slightly verbose in listing return format details, every sentence adds value (e.g., distinguishing stage races, providing usage notes, and examples). It could be more concise by combining some return format details.
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 no annotations and no output schema, the description does a good job explaining the tool's purpose, usage, parameters, and return format. It covers the essential context for a read-only query tool with two parameters. Minor gaps include lack of error handling or performance characteristics, but it's largely complete for its complexity.
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 description coverage is 0%, so the description must compensate. It explains that rider_id identifies the rider and year provides optional filtering, adding meaningful context beyond the bare schema. However, it doesn't specify format constraints (e.g., valid year ranges) or provide examples of invalid inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get a rider's results in stage races') and resource ('stage races'), distinguishing it from siblings like get_rider_one_day_races and get_rider_grand_tour_results by specifying multi-day races like Tour de France and Giro d'Italia. It explicitly mentions what data is retrieved (positions, times, race categories).
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 provides explicit guidance on when to use this tool vs alternatives: it specifies to use search_rider first if the rider ID is unknown, and it distinguishes from other tools by focusing on stage races. The examples reinforce proper usage with specific rider IDs and filtering by year.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_team_and_rankingA
Get information about a professional cyclist's team affiliations and UCI rankings throughout their career. This tool retrieves the rider's team history and their UCI ranking points over time. It provides a comprehensive overview of their professional career progression through different teams and their performance in the UCI rankings.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get team and ranking history for Tadej Pogačar (ID: 16973)
- Get team and ranking history for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- Complete team history with years
- UCI ranking positions and points
- Career progression timeline
- Current team and ranking status| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the tool returns (formatted string with team history, ranking positions, timeline, current status) but lacks details on error handling, rate limits, authentication needs, or data freshness. It adequately covers the output format but misses operational constraints.
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 well-structured with a clear purpose statement, usage note, examples, and return format. It's slightly verbose but each section adds value. The front-loaded purpose is effective, though the 'Returns' section could be more concise.
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 no annotations, 1 parameter with 0% schema coverage, and no output schema, the description does a good job covering purpose, usage, parameter meaning, and output format. It lacks details on errors or constraints, but for a read-only lookup tool, it provides sufficient context for basic use.
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 input schema has 0% description coverage, but the description compensates by explaining the parameter's meaning: 'rider's ID' is required, and examples show it's a numeric identifier (e.g., 16973 for Tadej Pogačar). This adds crucial context beyond the bare schema, though it doesn't detail ID format or sourcing beyond the search_rider reference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('get information', 'retrieves', 'provides') and resources ('professional cyclist's team affiliations and UCI rankings', 'team history', 'ranking points over time'). It distinguishes from siblings like get_rider_info or get_rider_teams by emphasizing the combined career progression focus.
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 explicitly provides when-to-use guidance: 'If you don't know the rider's ID, use the search_rider tool first to find it by name.' It names the alternative tool (search_rider) and specifies the prerequisite condition, offering clear operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_teamsA
Get a detailed history of a professional cyclist's team affiliations throughout their career. This tool provides a chronological list of all teams the rider has been part of, including years and team details.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get team history for Peter Sagan (ID: 12345)
- Get career team changes for Chris Froome (ID: 67890)
Returns a formatted string with:
- Complete team history
- Years with each team
- Team names and details
- Chronological organization| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes the tool's function and output format, but doesn't mention potential limitations like rate limits, authentication requirements, error conditions, or data freshness. It provides basic behavioral context but lacks operational details.
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 efficiently structured with purpose statement, usage note, examples, and return format - each section earns its place. It's front-loaded with the core functionality and avoids unnecessary verbosity while covering all essential aspects.
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 single-parameter read operation with no output schema, the description provides good completeness: it explains the tool's purpose, parameter semantics, usage workflow, and output format. The main gap is lack of operational constraints (rate limits, errors, etc.), but given the tool's relative simplicity and clear sibling relationships, it's mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage (just 'Rider Id' with type integer), so the description must fully compensate. It clearly explains that the rider_id parameter should be obtained from the search_rider tool and provides concrete examples with sample IDs (12345, 67890), adding substantial meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('Get a detailed history', 'provides a chronological list') and resources ('professional cyclist's team affiliations', 'all teams the rider has been part of'). It distinguishes from siblings by focusing specifically on team history rather than race results, victories, or general rider info.
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 provides explicit guidance on when to use this tool versus alternatives: it directs users to 'use the search_rider tool first to find [the rider's ID] by name' if they don't know the ID. This creates a clear workflow relationship with a specific sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_victoriesA
Get a comprehensive list of a rider's UCI victories. This tool retrieves detailed information about all UCI-registered race victories achieved by the cyclist throughout their career. Victories can be filtered to show only WorldTour wins if desired.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get all UCI victories for Tadej Pogačar (ID: 16973)
- Get WorldTour victories for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- Complete list of victories
- Race details including category
- Date and year of each victory
- Option to filter by WorldTour races only| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes | ||
| world_tour_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes what the tool does (retrieves detailed victory information), mentions filtering options (WorldTour only), and outlines the return format (formatted string with specific details). However, it lacks information on potential limitations like rate limits, error handling, or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: it starts with the core purpose, adds filtering details, provides usage notes, includes practical examples, and ends with return value information. Every sentence adds value without redundancy, making it efficient and easy to parse.
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 complexity (2 parameters, no output schema, no annotations), the description does an excellent job covering purpose, usage, parameters, and return format. It lacks only minor details like error cases or pagination, but for a read-only query tool, it is nearly complete. The absence of an output schema is mitigated by the detailed return description.
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 description coverage is 0%, so the description must compensate. It fully explains both parameters: rider_id is described in the context of retrieving victories for a specific cyclist, and world_tour_only is explicitly mentioned as a filter option. The example usage further clarifies how these parameters are applied.
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 specific action ('retrieves detailed information about all UCI-registered race victories') and distinguishes it from siblings by focusing on comprehensive victory data rather than specific race types (e.g., grand_tour_results, monument_results) or basic rider info. It explicitly mentions filtering by WorldTour wins, which adds specificity.
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 provides explicit guidance on when to use this tool vs. alternatives: it instructs to use search_rider first if the rider ID is unknown, and it distinguishes from siblings by specifying that this tool is for 'comprehensive list of UCI victories' rather than subsets like best_results or race_history. The example usage reinforces this context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rider_year_resultsA
Retrieve detailed results for a professional cyclist for a specific year. This tool provides comprehensive information about a rider's performance in all races during a given calendar year. It includes positions achieved, race categories, dates, and additional details.
Note: If you don't know the rider's ID, use the search_rider tool first to find it by name.
Example usage:
- Get 2023 results for Tadej Pogačar (ID: 16973)
- Get 2022 results for Jonas Vingegaard (ID: 16974)
Returns a formatted string with:
- Complete results for the specified year
- Position and time for each race
- Race category and details
- Chronological organization by date| Name | Required | Description | Default |
|---|---|---|---|
| rider_id | Yes | ||
| year | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It describes what the tool returns (formatted string with results, positions, categories, chronological organization) and implies it's a read-only operation, but lacks details on error handling, rate limits, authentication needs, or data freshness. It adds some value but is incomplete for a tool with no 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 description is well-structured and front-loaded with the core purpose, followed by usage notes, examples, and return details. Every sentence adds value without redundancy, and the length is appropriate for the tool's complexity.
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 no annotations, 0% schema coverage, and no output schema, the description does a good job explaining purpose, parameters, and returns. However, it lacks details on error cases (e.g., invalid IDs/years), performance limits, or data sources, leaving some gaps for a tool with rich output.
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 must compensate. It explains that 'rider_id' corresponds to a professional cyclist's identifier (with examples like '16973' for Tadej Pogačar) and 'year' is a calendar year for results (e.g., 2023). This adds meaningful context beyond the bare schema, though it doesn't detail format constraints or validation rules.
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 specific action ('retrieve detailed results'), resource ('professional cyclist'), and scope ('for a specific year'). It distinguishes from sibling tools by focusing on comprehensive yearly performance data rather than specific race types (e.g., 'get_rider_grand_tour_results') or general rider information ('get_rider_info').
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 explicitly provides when-to-use guidance by stating 'If you don't know the rider's ID, use the search_rider tool first to find it by name,' naming an alternative tool. It also implies usage context through example scenarios (e.g., 'Get 2023 results for Tadej Pogačar'), though it doesn't explicitly exclude other use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_start_listA
Get the start list for a specific edition of a cycling race. The start list includes rider numbers, names, and teams.
Note: If you don't know the race's ID, use the search_race tool first to find it by name.
If no year is specified, the current year will be used.
Example usage:
- Get start list for current year's Tour de France (Race ID: 17)
- Get start list for 2023 Paris-Roubaix (Race ID: 30, Year: 2023)
Returns a formatted string with:
- Race name and year
- List of participating teams
- Riders for each team with their race numbers| Name | Required | Description | Default |
|---|---|---|---|
| race_id | Yes | ||
| year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adequately describes the tool's function and output format, but doesn't address potential behavioral aspects like error conditions (e.g., what happens with invalid race IDs), rate limits, authentication requirements, or whether the operation is read-only (though 'Get' implies it).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with purpose statement, important notes, usage examples, and return format - all in well-organized paragraphs. Every sentence adds value without redundancy, and critical information (like the search_race prerequisite) is front-loaded.
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 2-parameter tool with no annotations and no output schema, the description provides excellent coverage of purpose, usage, parameters, and return format. The only minor gap is lack of explicit mention about the tool being read-only or any error handling, but given the clear 'Get' verb and detailed examples, it's largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by explaining both parameters: 'race_id' is required and identifies the specific race edition, while 'year' is optional with default behavior (current year if unspecified). The examples further clarify parameter usage with concrete values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verb ('Get') and resource ('start list for a specific edition of a cycling race'), and distinguishes it from siblings by focusing on rider/team participation data rather than race results, rider history, or rankings. It explicitly mentions what the start list includes (rider numbers, names, and teams).
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 provides explicit guidance on when to use this tool vs alternatives: it directs users to use 'search_race' first if they don't know the race ID, and clarifies that if no year is specified, the current year will be used. This addresses both prerequisites and parameter defaults.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uci_rankingsB
Get UCI rankings for riders, teams, or nations. This tool provides access to the UCI ranking data for professional cyclists, teams, or nations. Results can be filtered by ranking type, year, and category.
Example usage:
- Get World UCI rider rankings for 2023
- Get Europe Tour UCI team rankings for 2022
- Get UCI nation rankings for 2023 in the World category
Returns a formatted string with:
- Ranking list with positions and points
- Filtered by specified categories
- Organized in a readable format
- Option to filter by country| Name | Required | Description | Default |
|---|---|---|---|
| category | No | world | |
| country_code | No | ||
| page_num | No | ||
| rank_type | No | riders | |
| year | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It mentions the tool 'returns a formatted string' with details like ranking list and filtering, which adds some behavioral context. However, it doesn't disclose critical traits such as whether this is a read-only operation, rate limits, authentication needs, or pagination behavior (implied by 'page_num' parameter but not explained).
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 appropriately sized and front-loaded, starting with a clear purpose statement. The example usage and return format sections are useful but could be more concise. Overall, most sentences earn their place, though the return format description is somewhat repetitive (e.g., 'Filtered by specified categories' could be integrated).
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 5 parameters with 0% schema coverage and no output schema, the description provides basic purpose and examples but lacks completeness. It doesn't fully explain parameter semantics, behavioral traits (e.g., pagination, errors), or output details beyond a vague 'formatted string'. For a tool with this complexity, it should do more to compensate for missing structured data.
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 must compensate. It mentions filtering by 'ranking type, year, and category' and provides examples that hint at parameters (e.g., 'World UCI rider rankings for 2023'), but doesn't fully explain all 5 parameters (category, country_code, page_num, rank_type, year) or their semantics (e.g., what values rank_type accepts). The description adds some meaning but insufficiently covers the 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 'gets UCI rankings for riders, teams, or nations' with specific resources (riders/teams/nations) and action (get rankings). It distinguishes from siblings by focusing on rankings rather than race details, rider histories, or search functions. However, it doesn't explicitly contrast with 'get_rider_team_and_ranking' which might overlap.
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 provides implied usage through examples (e.g., 'Get World UCI rider rankings for 2023'), suggesting when to use this tool for ranking data. However, it lacks explicit guidance on when to choose this over alternatives like 'get_rider_team_and_ranking' or other sibling tools, and doesn't mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_raceA
Search for cycling races by name. This tool helps find races by their name, returning a list of matching races with their IDs and countries. This is useful when you know a race's name but need its ID for other operations.
Example usage:
- Search for "tour" to find Tour de France and other tours
- Search for "giro" to find Giro d'Italia
Returns a formatted string with:
- List of matching races
- Each race's ID, name, and country
- Number of matches found| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses that the tool returns a list of matching races with IDs and countries, and mentions the output format. However, it doesn't cover important behavioral aspects like pagination, rate limits, error conditions, or whether the search is case-sensitive/fuzzy. The example usage adds some context but leaves gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: purpose first, then utility, examples, and return format. Every sentence earns its place - no redundant information. The example usage is helpful without being 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's moderate complexity (single parameter search), no annotations, and no output schema, the description does a good job covering purpose, usage, parameter meaning, and return format. However, it lacks details about search behavior (exact vs. partial matching, sorting) and error handling that would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage (no parameter descriptions in schema), but the description compensates well. It explains that the 'query' parameter is for searching by race name, provides two concrete examples ('tour' and 'giro'), and clarifies this is for name-based search. This adds significant meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search for cycling races by name' (specific verb+resource). It distinguishes from siblings by focusing on name-based search rather than retrieving details, results, or rider information like get_race_details or search_rider. The description explicitly mentions what it returns and why it's 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 provides clear context: 'useful when you know a race's name but need its ID for other operations,' which implicitly suggests using this tool for ID lookup rather than get_race_details for comprehensive race information. However, it doesn't explicitly state when NOT to use this tool or name specific alternatives among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_riderA
Search for professional cyclists by name. This tool helps find riders by their name, returning a list of matching riders with their IDs and basic information. This is useful when you need a rider's ID for other operations but only know their name.
Example usage:
- Search for "Tadej Pogacar" to find Tadej Pogačar's ID
- Search for "Van Aert" to find Wout van Aert's ID
Returns a formatted string with:
- List of matching riders
- Each rider's ID, name, nationality, and current team
- Number of matches found| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes the tool's behavior: it performs a search operation (implying read-only, non-destructive), returns a list of matches with specific fields (IDs, names, nationality, team), and indicates the output format. However, it lacks details on error handling, rate limits, or authentication needs.
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 well-structured and front-loaded with the core purpose, followed by usage guidance, examples, and output details. Each sentence adds value without redundancy, making it efficient and easy to parse for an AI agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity (1 parameter, no output schema, no annotations), the description is largely complete. It covers purpose, usage, parameters, and output format adequately. However, it could improve by mentioning limitations (e.g., partial name matching) or error cases, which would enhance completeness for a search 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?
The schema has 0% description coverage for its single parameter (query), but the description compensates by explaining that the query is used to 'search for professional cyclists by name' and provides examples (e.g., 'Tadej Pogacar', 'Van Aert'). This adds meaningful context beyond the bare schema, though it does not specify format constraints like case sensitivity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('search') and resource ('professional cyclists by name'), distinguishing it from sibling tools that focus on retrieving specific rider data (e.g., get_rider_info) or race-related information. It explicitly mentions returning IDs and basic information, which sets it apart as a lookup 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?
The description provides explicit guidance on when to use this tool ('when you need a rider's ID for other operations but only know their name'), including example use cases. It implicitly distinguishes it from sibling tools by focusing on name-based searching rather than retrieving pre-defined rider data, though it does not explicitly name alternatives.
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.
18 tool updates
v1.0.0- First observed
get_race_details - First observed
get_race_edition_results - First observed
get_race_victory_table - First observed
get_rider_best_results - First observed
get_rider_grand_tour_results - First observed
get_rider_info - First observed
get_rider_monument_results - First observed
get_rider_one_day_races - First observed
get_rider_race_history - First observed
get_rider_stage_races - First observed
get_rider_team_and_ranking - First observed
get_rider_teams - First observed
get_rider_victories - First observed
get_rider_year_results - First observed
get_start_list - First observed
get_uci_rankings - First observed
search_race - First observed
search_rider
TDQS
Scored across 18 tools
The tools have clear distinctions between race-focused and rider-focused operations, but there is significant overlap within rider tools. For example, get_rider_best_results, get_rider_grand_tour_results, get_rider_monument_results, get_rider_one_day_races, get_rider_race_history, get_rider_stage_races, and get_rider_year_results all retrieve subsets of race results, which could confuse an agent about which to use for specific queries. The descriptions help differentiate, but the boundaries are fuzzy.
All tool names follow a consistent snake_case pattern with a verb_noun structure (e.g., get_race_details, search_rider). The naming is predictable and readable throughout, with no deviations in style or convention, making it easy for an agent to parse and understand the tool purposes.
With 18 tools, the count is on the higher side for a cycling data server, bordering on heavy. While the domain of professional cycling is broad, the tool set includes many overlapping rider result tools that could potentially be consolidated, making it feel slightly bloated but still within a reasonable scope.
The tool surface covers the cycling domain well with race details, results, rider information, and search functionalities. However, there are minor gaps, such as no tools for team details beyond rider affiliations, race calendars, or live race data, which agents might need for comprehensive coverage. The core operations are well-represented, allowing agents to work around these omissions.
Related MCP Connectors
AI cycling coach: training plans, workouts, nutrition, strength training, Strava, Garmin and Wahoo.
- FlaMapOAuthapp.flamap
Your own cycling data for your AI assistant: rides, power, climbs and routes. Read-only.
AI cycling coach — training plans and beginner guidance via the Etapa API.
Turn Claude or ChatGPT into a cycling coach that plans your week, grades it, and adapts. Free beta.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn AI-powered companion that provides access to the RideWithGPS API, allowing you to interact with cycling routes, trips, events, and user data through natural language.7MIT
- AlicenseBqualityDmaintenanceProvides comprehensive Formula 1 data access including race schedules, session results, lap times, telemetry data, driver/constructor standings, and circuit information. Enables users to retrieve and analyze F1 racing data through natural language queries using the FastF1 Python package.5MIT
- AlicenseAqualityAmaintenanceProvides access to Formula 1 data including driver and constructor championship standings with support for current and historical seasons. Enables users to query F1 championship information through natural language with plans for expanded race data and telemetry.221MIT
- AlicenseAqualityFmaintenanceProvides professional cycling data from ProCyclingStats, enabling race discovery, stage results, rider profiles, startlists, and free-text search through MCP tools.63-