Skip to main content
Glama

Server Details

Race course profiling, catalog search, course submission, and personalized race plans.

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.4/5 across 16 of 16 tools scored. Lowest: 3.3/5.

Server CoherenceA
Disambiguation4/5

Each tool targets a distinct step in the course/race-planning workflow, and descriptions carefully separate concerns like importing, enriching, segmenting, and generating a plan. The main ambiguity is among the multiple get_*_requirements helpers, but their target phases are clear enough to avoid persistent misselection.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (create_, enrich_, export_, generate_, get_, import_, search_, submit_, validate_). There is no mixing of camelCase or inconsistent verb styles, making the API predictable and easy to navigate.

Tool Count4/5

With 16 tools, the server is at the upper edge of the ideal range but each tool serves a distinct purpose in a complex pipeline covering course import, enrichment, segmentation, runner profiling, plan creation, PDF export, validation, and catalog submission. The count feels justified for the domain rather than bloated.

Completeness4/5

The toolset covers the full lifecycle from course discovery/import through enrichment, segmentation, runner profiling, race plan generation, PDF export, and catalog submission. Minor gaps exist, such as lack of artifact list/delete/update tools and no direct race-plan editing, but agents can work around these via get_artifact and get_job.

Available Tools

16 tools
create_race_planCreate race planAInspect

Primary CourseProfiler tool for creating a personalized race plan and optional PDF. Use this after obtaining both a course input and runner input. Course input may be course_file, course.source with kind=url/artifact/raw_file, or course.crsprof_artifact_id. Do not use raw_json or reconstruct/synthesize a course from roadbooks, checkpoint tables, elevation profiles, aid-station lists, or screenshots; those are enrichment/context only and are not valid course geometry. Runner input may be runner_profile_file, runner.sources, or runner.usrprof_artifact_id. Prefer generate_runner_profile first when the user has GPX/FIT/CRSProf activity evidence or an uploaded .usrprof source but no already-converted usrprof_artifact_id; then call create_race_plan with runner.usrprof_artifact_id. Before generating a runner profile for a race plan, resolve the target course if possible and ask the user whether the profile should be target-race-specific, target-distance/elevation-specific, general trail, or insights-only; select evidence that matches the intended distance, elevation gain/loss, terrain/technicality, altitude, duration, and recency. Do not silently use all files in a local folder. Use runner.usrprof_artifact_id only for an already-converted USRProf artifact; uploaded .usrprof/source_file artifacts from POST /api/artifact-uploads must be passed through runner.sources[{kind:'artifact'}] or through generate_runner_profile. Bare local filesystem paths never work in hosted MCP clients; send inline content/base64 when the MCP client can read the file, or use the REST POST /api/artifact-uploads flow outside MCP, complete the upload, then pass the returned source_file artifact ID. There is no raw-byte MCP upload tool; get_artifact_upload_requirements only explains the REST flow. Use get_runner_profile_requirements when the user needs instructions for creating/exporting a USRProf, using Strava/browser import, or uploading GPX/FIT/CRSProf evidence. If the user provides only a race name, check the CourseProfiler race catalog manifest first, but do not rely on uniqueness alone: confirm the catalog match is the same event/course/location before using its assetPath CRSProf URL. Auto-resolution only uses exact/strong catalog matches; weak matches require explicit confirmation or an explicit course.source URL/artifact. Use search_race_catalog first when the user may need to choose among multiple matching catalog courses or when the match confidence is not clearly exact/strong. If no catalog match exists, try to resolve it to a fetchable official GPX/FIT/CRSProf URL or ask the user to upload/provide the course file or URL; do not stop at the race name. Third-party route hosts such as Wikiloc may return 403 to server fetches. If an official or third-party GPX/FIT/CRSProf URL cannot be fetched or is blocked, stop and ask the user to download the official file and upload it through POST /api/artifact-uploads, then continue with the returned source_file artifact ID. Do not create a race plan until a real route file/trusted CRSProf is available. Use import_course to create a CRSProf, enrich_course_waypoints to add structured aid stations/resources/cutoffs, then generate_course_segments before creating the race plan. Catalog CRSProf files may already include official waypoints/resources/cutoffs; if they do not, call enrich_course_waypoints or ask the user for structured aid/resource/cutoff data before segmentation. If official pages and regulation PDFs disagree, or exact aid locations are not fully listed in machine-readable form, ask the user to confirm and include only confirmed aid stations; do not invent missing locations. Route-only plans are incomplete unless the user explicitly accepts missing aid/resource details. If browsing/search is available, prefer the catalog first, then official race sources and direct GPX links over generic home pages; course-only pacing is incomplete without waypoint/resource enrichment. If runner data is missing, ask for a USRProf file/artifact or runner evidence, explain that the profile drives estimated times plus insights such as uphill running limit, durability/fatigue tendencies, downhill sensitivity, and terrain strengths/weaknesses, generate a segment-evidence runner profile with generate_runner_profile after user-approved evidence selection, and do not invent personalized fitness data. This race-plan flow creates a personalized plan/PDF only; it does not submit the course to the public catalog and does not need to. Only call submit_course when the user explicitly asks to submit/add/update a course for catalog review. Returns a top-level job with artifact role metadata; use get_job to poll and get_artifact to fetch outputs.

ParametersJSON Schema
NameRequiredDescriptionDefault
pdfNo
courseNo
runnerNo
estimateNo
race_nameNoRace/course name to resolve through the CourseProfiler catalog when no course source is provided, e.g. Val d'Aran PDA.
course_fileNoUse this only when the MCP client provides an inline/proxied GPX, FIT, CRSProf, or ZIP-with-one-GPX file object. Provide content for text GPX/XML/JSON/CRSProf, base64 for FIT/ZIP/binary, or a fetchable URL. Bare local filesystem paths and file:// URLs are rejected. Hosted clients with local files must use the REST POST /api/artifact-uploads flow outside MCP and pass the returned source_file artifact as course.source.kind=artifact.
runner_profile_fileNoUse this only when the MCP client provides an inline/proxied USRProf runner profile file object. Provide content for text USRProf/JSON or base64 for binary. Personalized plans require runner input. Bare local filesystem paths and file:// URLs are rejected. Hosted clients with local .usrprof files should use POST /api/artifact-uploads and pass the returned source_file artifact via runner.sources[{kind:'artifact'}], not usrprof_artifact_id.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full transparency burden, and it delivers: it states the tool does not submit to the public catalog, only creates plan/PDF, blocks plan creation without a real route file, avoids inventing runner fitness data, and returns a top-level job to be polled via get_job and get_artifact. It also explains the artifact-upload flow limitations and third-party 403 behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the main purpose and key exclusions, but it is a very long single paragraph with repetitive statements (e.g., the submit_course restriction appears twice, and the 'stop and ask the user to download/upload' flow is described multiple times). It could be tightened and organized without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, no annotations, and 15 sibling tools, the description is exceptionally comprehensive: it covers prerequisites, exact pre-processing pipeline, catalog resolution and confirmation, error handling for blocked fetches, runner-profile evidence selection, and output polling. It even notes when not to call submit_course, making the tool safe and self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (43%), but the description compensates by explaining valid course sources (course_file, course.source kind=url/artifact/raw_file, course.crsprof_artifact_id), invalid raw_json course geometry, and runner sources (runner_profile_file, runner.sources, runner.usrprof_artifact_id). It clarifies when to use usrprof_artifact_id vs runner.sources artifacts and notes bare local paths fail, though segments/estimate options are largely left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly identifies itself as the primary CourseProfiler tool for creating a personalized race plan and optional PDF. It further differentiates itself by specifying prerequisites (course + runner input) and naming companion tools like generate_runner_profile, making its scope unambiguous relative to siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: only after course and runner inputs exist, and never by synthesizing course geometry from roadbooks or elevation profiles. It names concrete alternatives for sub-tasks (import_course, enrich_course_waypoints, generate_course_segments, generate_runner_profile, search_race_catalog) and tells the agent when to stop and ask for user-provided files.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

enrich_course_waypointsEnrich course waypointsAInspect

Add structured aid stations, checkpoints, cutoffs, and canonical resources to a CRSProf artifact that lacks them. Before enriching, inspect whether the imported source already contains GPX/CRSProf waypoints; if it already contains GPX/CRSProf waypoints, avoid duplicate Start/Finish/aid stations and prefer merging/updating resources, cutoffs, notes, or links on existing waypoint metadata. Prefer waypoints.mode=structured; put non-canonical/free-text aid details in notes/source text because unsupported resource strings are ignored with warnings. Route-only plans should be labeled incomplete unless the CRSProf already includes official waypoints/resources/cutoffs or the user explicitly accepts missing aid/resource details.

ParametersJSON Schema
NameRequiredDescriptionDefault
waypointsYes
crsprof_artifact_idYesCRSProf artifact ID returned by import_course or get_artifact.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well: it discloses that unsupported resource strings are ignored with warnings, that existing waypoints should be merged rather than duplicated, and that route-only plans should be labeled incomplete. It does not spell out persistence or side effects, but the 'Add to artifact' phrasing implies mutation and the warnings about ignored data are valuable behavioral details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences, front-loaded with the core purpose, and every sentence earns its place by addressing usage, duplicate avoidance, mode preference, and incompleteness labeling. There is no fluff or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested waypoints object, many enum options, no annotations) the description is quite comprehensive. It covers critical corner cases: existing waypoints, free-text resources, unsupported strings, and route-only plans. It does not mention return value format, but an output schema exists, so that is not required. A few minor gaps remain, such as explicit idempotency or confirmation behavior when official data is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, but the description compensates by adding strategic guidance: prefer waypoints.mode=structured, place non-canonical details in notes/source text, and use table_url with caution ('verify results'). It also clarifies resource handling, which maps to the items.resources enum. This adds meaning beyond the raw schema, though it does not explain every nested field.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Add structured aid stations, checkpoints, cutoffs, and canonical resources to a CRSProf artifact that lacks them.' This clearly distinguishes the tool from siblings like generate_course_segments or validate_course_profile by focusing on enriching waypoint metadata. The scope is precise and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear when-to-use context: enrich when the artifact lacks waypoints, inspect for existing GPX/CRSProf waypoints first, and avoid duplicates by merging/updating. It also advises preferring waypoints.mode=structured and marking route-only plans as incomplete unless official details exist. It does not explicitly name an alternative tool, but the guidance is strong enough for an agent to decide when to invoke this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_race_plan_pdfExport race plan PDFAInspect

Export a Hi-Fi PDF from an existing CRSProf artifact. The CRSProf supplies the course/profile/plan data; options are presentation-only overrides such as title, subtitle, metric/imperial unit system, and file name. Omit unit_system unless the user explicitly asks for metric or imperial.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsNo
crsprof_artifact_idYesExisting CRSProf artifact ID containing the course/profile/plan data to render.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool only exports a PDF and that options are 'presentation-only overrides,' implying no mutation of the underlying artifact. It also clarifies the relationship between the artifact and options. This adds useful behavioral context beyond what the schema provides, though it does not discuss side effects or error scenarios.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place. The first states the action, the second clarifies the artifact vs. options relationship, and the third gives a critical usage pointer. It is front-loaded and has no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (two params, one nested object), the description is complete. It explains the source of data, the optionality and role of options, and a specific parameter omission rule. Since an output schema exists, return values need not be described. The description effectively covers all necessary context for an agent to select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (only one of two top-level params has a description). The description compensates by explaining the roles of the parameters: crsprof_artifact_id supplies course/profile/plan data, and options are presentation-only overrides. It also adds a specific rule for unit_system. This adds meaning beyond the schema's basic field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Export a Hi-Fi PDF from an existing CRSProf artifact.' It uses a specific verb+resource (Export PDF), names the required input (CRSProf artifact), and distinguishes the tool from siblings like create_race_plan or get_artifact by focusing on PDF export from an existing artifact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: it requires an existing CRSProf artifact, implying it is not for creating or modifying plans. It also gives a specific parameter guideline ('Omit unit_system unless the user explicitly asks for metric or imperial.') and explains that options are presentation-only overrides. It does not explicitly name alternative tools, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_course_segmentsGenerate course segmentsAInspect

Generate analytical course segments from an enriched CRSProf artifact after waypoint enrichment, or from a catalog CRSProf that already contains official waypoints/resources/cutoffs; then use the resulting artifact in create_race_plan for race planning, or call submit_course if and only if the user asked to submit a course for catalog review. A generated CRSProf artifact is not a catalog submission.

ParametersJSON Schema
NameRequiredDescriptionDefault
optionsNo
crsprof_artifact_idYesEnriched CRSProf artifact ID returned by enrich_course_waypoints.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It states prerequisites (enriched or catalog CRSProf with official waypoints/resources/cutoffs) and clarifies that the generated artifact is not a catalog submission, which is a key behavioral caveat. However, it does not mention whether the input artifact is modified, what side effects occur, or error conditions, so it is not fully transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then adds essential usage context in two well-structured sentences. Every clause provides useful information without redundancy. The semicolon-separated flow makes the prerequisites and fallback behaviors easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the options object and the absence of annotations, the description covers key contextual ground: when to use, what input is valid, how the output is used downstream, and a critical distinction from catalog submission. It does not explain the segmentation options themselves, but the output schema and schema field descriptions partially mitigate that. Overall, it is reasonably complete for a tool with many siblings and conditional usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 50% coverage, and the description does not compensate for the gap. It does not explain what options like algorithm, flat_grade, or include_routes mean, nor does it elaborate on the crsprof_artifact_id beyond what the schema already states. The description adds minimal parameter-level meaning, leaving the many options underdocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: generating analytical course segments from an enriched CRSProf or a catalog CRSProf with official waypoints/resources/cutoffs. It distinguishes itself from downstream tools like create_race_plan and submit_course by explicitly positioning this as a prerequisite step. The verb 'generate' and the resource 'course segments' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use it after waypoint enrichment or with a catalog CRSProf that already contains official waypoints/resources/cutoffs. It also clearly states when to use alternatives, saying to call submit_course only if the user asked to submit for catalog review, and to use the result in create_race_plan for race planning. This is strong differentiation and practical usage direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_runner_profileGenerate runner profileAInspect

Generate a segment-evidence USRProf runner profile artifact from uploaded runner evidence or an existing .usrprof source. Before using this tool, ask what profile the user wants: target race/course, target distance/elevation range, general trail profile, or insights-only profile. Do not silently use every local file or arbitrary folders; if many evidence files are available, summarize candidates and ask the user to approve a selection strategy. A USRProf is not just average pace: CourseProfiler uses segment evidence to estimate climbs, descents, runnable grades, fatigue/durability, terrain fit, uphill running limits, and pacing confidence. Evidence choice affects race-plan times and standalone athlete insights. Use this when the user does not already have an already-converted usrprof_artifact_id. Accepted evidence includes GPX/FIT/CRSProf activity files, ZIP/TAR/TAR.GZ/TGZ/TAR.XZ/TXZ archives containing those files, and .usrprof files passed as source_file artifacts from POST /api/artifact-uploads, raw_file inline content/base64, or fetchable HTTPS URLs. Archives must use purpose runner_evidence, are expanded server-side, and report skipped nested archives, duplicate contents, unsupported entries, and parse failures by filename/path. For Strava, ask the user to authenticate in the CourseProfiler browser app, use its activity filters (date, distance, elevation gain, and elapsed time) to fetch relevant Run/TrailRun activities, select activities matching the profile intent, and export/download the .usrprof; do not ask for Strava credentials in MCP. Once the browser Strava flow has produced a downloaded .usrprof, the profile is already created: do not call generate_runner_profile merely to recreate/repackage it. If the user only asked to create/download a profile, stop there. If the user wants to use that .usrprof for a race plan through MCP, upload/pass it as runner input. After this tool succeeds, pass the returned usrprof artifact ID to create_race_plan as runner.usrprof_artifact_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourcesYesRunner evidence/profile sources. Use uploaded source_file artifact IDs from POST /api/artifact-uploads with purpose runner_evidence for GPX/FIT/CRSProf activities or ZIP/TAR/TAR.GZ/TGZ/TAR.XZ/TXZ archives containing evidence files; use usrprof_source for .usrprof. Archives are expanded server-side, nested archives are skipped with warnings, exact duplicate contents are skipped, and unsupported/corrupt entries are reported per filename/path. Or use raw_file/url when the MCP client can proxy bytes. Local paths and file:// URLs are not accepted. Choose evidence according to profile_intent; do not blindly include all available files without user approval.
import_optionsNo
profile_intentNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and delivers rich behavioral context: it explicitly says to ask the user before selecting evidence, not to silently use local files, describes server-side archive expansion with skipped nested archives, duplicate contents, unsupported entries, and parse failures, and details the Strava browser authentication flow including not asking for credentials. This exceeds what annotations would typically provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long, but every sentence earns its place given the tool's complexity. It is front-loaded with the core purpose, then logically progresses through pre-conditions, evidence types, Strava flow, and post-success handoff to create_race_plan. Slightly verbose but not redundant; the length is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no annotations and low schema coverage, the description covers prerequisites, evidence selection strategy, archive behaviors, Strava handling, and the exact follow-up action (pass artifact ID to create_race_plan). An output schema exists, so return value documentation is unnecessary. The description is complete for an agent to correctly select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, but the description compensates thoroughly. It explains accepted source types (GPX/FIT/CRSProf, archives, .usrprof), archive handling nuances, and the profile_intent concept (target race, target distance, general trail, insights-only). It also clarifies that import_options only supports segment_evidence. This adds substantial meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Generate a segment-evidence USRProf runner profile artifact from uploaded runner evidence or an existing .usrprof source.' This clearly distinguishes it from sibling tools like create_race_plan and generate_course_segments, and it explicitly states when NOT to use it (when an already-converted usrprof_artifact_id exists).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'Use this when the user does not already have an already-converted usrprof_artifact_id.' It also names alternatives and boundary conditions, such as not calling the tool merely to recreate a Strava-exported .usrprof, and instructs passing the resulting artifact ID to create_race_plan for race plans. This is far beyond minimal guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_artifactGet artifactAInspect

Fetch artifact metadata and a private short-lived download URL by artifact_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifact_idYesCourseProfiler artifact ID, e.g. art_...

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYesArtifact type, e.g. crsprof, usrprof, pdf, json, or source_file.
metadataNo
warningsNo
file_nameNoSuggested file name.
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 artifact expiration timestamp.
size_bytesNoArtifact size in bytes.
artifact_idYesCourseProfiler artifact ID.
content_typeNoMIME content type.
download_urlNoPrivate short-lived download URL. Share only with the user.
download_url_expires_atNoISO-8601 download URL expiration timestamp.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It adds key behavioral info beyond the schema: the URL is 'private' and 'short-lived', which signals expiration and access restrictions. It does not detail error behavior or auth requirements, but the core fetch semantics are well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise, information-dense sentence. It front-loads the main action (Fetch) and includes the key qualifiers (private, short-lived) without any wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter fetch tool with an output schema present, the description covers the essential purpose and key behavior. It does not need to explain return values since the output schema will provide that, and the low complexity means no additional context is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter artifact_id is fully described in the schema with an example format (art_...), achieving 100% schema coverage. The description merely repeats 'by artifact_id' and adds no additional semantic detail, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a specific verb (Fetch) and resource (artifact metadata and private short-lived download URL), clearly scoped by artifact_id. It distinguishes itself from sibling tools like get_artifact_upload_requirements, which target upload requirements, not fetching an artifact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you have an artifact_id and need its metadata or download URL. It does not explicitly exclude alternatives or name siblings, but the context is clear enough for an agent to select it over get_artifact_upload_requirements or get_job.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_artifact_upload_requirementsGet artifact upload requirementsAInspect

Use this when an assistant needs instructions for CourseProfiler's REST artifact upload flow or needs to explain why hosted MCP cannot upload bare local paths. This is an instruction helper, not a raw-byte MCP upload tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
purposesYes
warningsYes
workflowYes
upload_flowYes
usage_after_uploadYes
local_file_guidanceYesGuidance for local file paths and hosted MCP clients.
accepted_mcp_file_formsYes
Behavior4/5

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 this is an 'instruction helper' and specifically not a raw-byte upload tool, and explains a limitation of hosted MCP. It does not explicitly state that it has no side effects, but the 'instruction helper' phrasing strongly implies a read-only, non-mutating behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the use case, and every word earns its place. It is compact without sacrificing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter instruction tool with an output schema, this description is complete. It explains when to use it, what it provides, and what it does not do. The output schema covers return-value details, so the description need not elaborate further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty, so the baseline is 4. The description adds no parameter-specific meaning, but none is needed since the tool takes no inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as providing instructions for CourseProfiler's REST artifact upload flow, using a specific verb ('get') and resource ('artifact upload requirements'). It explicitly distinguishes itself from a raw-byte MCP upload tool, differentiating it from siblings like get_artifact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description opens with 'Use this when' and provides two concrete scenarios: needing instructions for the upload flow or explaining why hosted MCP cannot upload bare local paths. It also includes a when-not by stating it is 'not a raw-byte MCP upload tool,' giving the agent clear boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_course_submission_requirementsGet course submission requirementsAInspect

Use this before submit_course when the user gives only a race name or incomplete inputs. Returns the catalog-first course submission workflow, accepted route sources, metadata, waypoint enrichment, and upload requirements.

ParametersJSON Schema
NameRequiredDescriptionDefault
race_nameNoOptional race/course name the user wants to submit, e.g. Quebec Mega Trail 30K.
known_course_urlNoOptional candidate official direct GPX/FIT/CRSProf/ZIP URL if already found.
has_waypoint_dataNoWhether official waypoint/resource/cutoff data is already available.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
workflowYesAlways course_submission_requirements.
race_nameNoRace name supplied by the user, if any.
next_stepsNo
catalog_matchesNo
required_inputsNo
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full transparency burden. It uses 'Returns' which implies a read-only operation, but does not disclose any potential side effects, rate limits, or behavior when the course is not found. The description adds some context about the workflow but omits deeper behavioral details, making it minimally adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the primary usage directive ('Use this before submit_course') and then concisely enumerates the return contents. No fluff or repetition; every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 3 optional parameters and the presence of an output schema, the description covers the tool's purpose, when to use it, and outlines the return payload categories. It does not need to detail return values since the output schema exists. It could mention error scenarios or prerequisites, but for a requirements-gathering tool, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all three parameters well-described. The description adds marginal value by framing the tool for 'incomplete inputs', but this is already inferable from the optional params (required: []). It does not provide additional meaning beyond the schema, so it stays at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns a 'catalog-first course submission workflow' and enumerates the specific content areas (accepted route sources, metadata, waypoint enrichment, upload requirements). It explicitly positions this as a pre-submission step, distinguishing it from submit_course and other requirement-gathering siblings like get_race_plan_requirements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage context: 'Use this before submit_course when the user gives only a race name or incomplete inputs.' This makes the trigger condition clear, but it does not explicitly state when not to use it or name alternative tools for other scenarios, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_jobGet jobBInspect

Poll a CourseProfiler async job by job_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesCourseProfiler job ID, e.g. job_...

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior2/5

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 only says 'Poll' but does not explain whether this returns the current status immediately, whether it blocks until completion, or how job states and errors are conveyed. This is a minimal disclosure for a polling tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded. Every word contributes to the core purpose, and there is no redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one parameter, output schema present), the description is minimally viable but lacks usage context and behavioral details. It does not explain how to interpret polling results or when polling is necessary, leaving some gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage for job_id with a clear description and example ('CourseProfiler job ID, e.g. job_...'). The description's mention of 'by job_id' adds no additional semantic meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Poll') and the resource ('a CourseProfiler async job by job_id'), which distinguishes it from sibling tools like get_artifact or get_*_requirements. It is specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, nor does it mention prerequisites like having previously initiated an async job. The phrase 'Poll' implies usage after job creation, but this is not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_race_plan_requirementsGet race plan requirementsAInspect

Use this before create_race_plan when the user gives only a race name or incomplete inputs. Returns the required course and runner inputs and the next steps an assistant should take, including catalog matches when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
race_nameNoOptional race name the user mentioned, e.g. Val d'Aran PDA.
known_course_urlNoOptional candidate direct GPX/FIT/CRSProf URL if already found.
has_runner_profileNoWhether the user already provided a USRProf runner profile or runner evidence.

Output Schema

ParametersJSON Schema
NameRequiredDescription
workflowYesAlways race_plan_requirements.
race_nameNoRace name supplied by the user, if any.
next_stepsNo
catalog_matchesNo
required_inputsNo
course_acquisition_fallbackNo
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the transparency burden. It discloses that the tool returns required inputs and next steps, and conditionally includes catalog matches when available. It does not explicitly state it's read-only, but the 'get' prefix and context imply a non-destructive query, and the returned data is well described.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences that immediately front-load the usage context, then state exactly what the tool returns. No filler, every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature (3 optional params) and that an output schema exists, the description is sufficiently complete. It explains when to use, what it returns, and the relationship to create_race_plan, so the agent can select and invoke it correctly without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three optional parameters documented in the schema. The tool description adds overall usage context but does not provide additional semantics for individual parameters beyond what the schema already offers, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb 'Returns' and resource 'required course and runner inputs' plus 'next steps'. It distinguishes itself from siblings by explicitly referencing create_race_plan and mentioning catalog matches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'Use this before create_race_plan when the user gives only a race name or incomplete inputs.' This clearly frames the tool as a prerequisite/helper, differentiating it from the create_race_plan sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_runner_profile_requirementsGet runner profile requirementsAInspect

Use this when runner input is missing or unclear. Explains how to obtain or generate runner input, what USRProf/evidence files should contain, whether GPX/FIT activities are enough, and how hosted MCP clients should upload artifacts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsYes
workflowYes
recommendedNo
upload_flowYes
accepted_inputsYes
profile_purposeNo
required_fieldsNo
evidence_guidanceYes
how_to_get_usrprofYes
ask_before_generatingNo
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full behavioral disclosure. It goes beyond a vague 'explains requirements' by listing specific content areas (file contents, activity types, upload processes). It does not explicitly state whether the tool is read-only, but for an informational requirements tool this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no wasted words. The first sentence gives the when-to-use trigger; the second packs the tool's coverage into a compact, readable list. Front-loaded and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core user scenarios and an output schema exists to document return values. It could improve by linking to sibling tools like generate_runner_profile or validate_runner_profile, but it is complete enough for an informational tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters, so there is nothing for the description to add beyond the schema. The baseline for 0-parameter tools is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific trigger ('when runner input is missing or unclear') and enumerates the exact topics covered (USRProf/evidence files, GPX/FIT sufficiency, hosted MCP uploads). This clearly distinguishes it from sibling 'requirements' tools like get_race_plan_requirements or get_course_submission_requirements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The first sentence explicitly states when to use the tool. However, it does not mention alternatives or explicitly exclude cases; it could name what the user should do instead when runner input is not the issue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_courseImport courseAInspect

Import a fetchable official GPX/FIT/CRSProf URL, official ZIP containing exactly one GPX, uploaded source_file artifact, raw JSON payload, or inline/proxied course_file into a CRSProf artifact. Third-party route hosts such as Wikiloc may return 403 to server fetches; when a URL is blocked, ask the user to download/upload the file through POST /api/artifact-uploads outside MCP and pass the returned source_file artifact ID as source.kind=artifact. Use this on catalog misses before waypoint enrichment.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo
optionsNo
course_fileNoInline/proxied GPX, FIT, CRSProf, or ZIP-with-one-GPX file object to import into CRSProf. Use content for text GPX/XML/JSON/CRSProf, base64 for FIT/ZIP/binary, or url only when the URL is fetchable by CourseProfiler. Bare local filesystem paths and file:// URLs are rejected; hosted clients that cannot proxy file bytes must use the REST POST /api/artifact-uploads flow outside MCP first, then pass the returned source_file artifact via source.kind=artifact.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, but the description discloses server fetch limitations (403 from Wikiloc/route hosts), the workaround (artifact-uploads flow), and the restriction to official sources and ZIP with exactly one GPX. It does not mention return format or permissions, but the output schema exists and mutation is implied by 'import'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero fluff; the list of accepted formats is necessary and the workaround is essential. Front-loads with the verb 'Import' and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with multiple source formats, nested objects, and an output schema, the description covers accepted inputs, the 403 edge case, and the correct sequence relative to other tools. Options remain unspecified, but it's an optional additionalProperties object and the key cases are covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%, but the description enumerates the accepted source.kind variants (url, artifact, raw_json, raw_file), explains when to use artifact (blocked URL) and clarifies the ZIP constraint, adding meaning beyond the schema's property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies exact accepted input formats (GPX/FIT/CRSProf URL, ZIP with one GPX, artifact, raw JSON, inline course_file) and states the destination ('into a CRSProf artifact'), clearly distinguishing from siblings like enrich_course_waypoints via the 'before waypoint enrichment' cue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states usage timing ('Use this on catalog misses before waypoint enrichment') and gives a clear when-to-alternative: if URL blocked, use POST /api/artifact-uploads and pass artifact id. This tells the agent when to invoke and what to do instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_race_catalogSearch race catalogAInspect

Search CourseProfiler's race catalog by race/course name and return direct CRSProf URLs that can be used as course sources.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum matches to return, default 5.
queryYesRace or course name to search, e.g. Val d'Aran PDA.

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYesSearch query.
matchesYes
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must disclose behavior itself. It clearly states the search action and the return of direct URLs, which implies a read-only operation. It goes beyond a tautology by explaining the result's utility. While it doesn't mention potential limits or rate limits, the core behavior is transparent enough for a search tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently captures the purpose, resource, and output. Every part contributes meaning, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple search tool with a small input schema, a clear output schema, and no complex side effects. The description covers the essential purpose and the downstream use of the returned URLs. The presence of an output schema means the return structure is already documented, so the description does not need to elaborate further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage of both parameters: 'query' (the search term) and 'limit' (maximum matches). The description adds no further parameter details beyond what the schema already explains, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Search' plus the resource 'CourseProfiler's race catalog', and specifies the output ('direct CRSProf URLs') and its purpose ('used as course sources'). This distinguishes it from all sibling tools, which are creation, validation, or import tools rather than search tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you need to look up a race/course by name and obtain its CRSProf URL for use as a course source. It gives clear context but does not explicitly state when not to use it or mention alternatives, though no direct alternative search tool exists among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_courseSubmit courseAInspect

Submit an official/trusted course for CourseProfiler catalog review. This is the only MCP tool that creates a catalog-review submission; import_course, enrich_course_waypoints, and generate_course_segments only create temporary artifacts. A final CRSProf artifact is not a submission. If there is no submission_id in the submit_course result, the course has not been submitted. Use this only when the user asked to submit/add/update a course in the catalog. Do not call submit_course for normal race-plan creation; create_race_plan does not require catalog submission. Before calling submit_course, collect and pass event metadata from official sources whenever available: main event/race name, specific course name, year/date, start time, location/city/region and country, distance, elevation gain, organizer, applicable tags/types, competitions/series, official race page, route source URL, aid-chart/regulation URLs, and other source URLs. Use metadata.event.name for the main event and metadata.event.course for the specific course (example: name='Speedgoat Mountain Races', course='50K'); do not put distance/elevation stats in the course name (bad: 'Skyrace — 32 km, +2400 m'); location must not include country because metadata.event.country is separate. Add metadata.event.types tags where they apply, and metadata.event.competitions for circuits/series/championships such as Golden Trail World Series (GTWS). Put the race start time in metadata.event.time when known. Put catalog UI event links in metadata.event.links, not just metadata.source_urls; supported types include info, registration, rules, schedule, course, cutoff, parking, bib_pickup, wardrobe, results, and contact. Include official General Information (type=info), Registration (registration), Rules/Regulations (rules), Schedule/Program (schedule), Course (course), Cut-off times (cutoff), Parking (parking), Bib pick-up (bib_pickup), Wardrobe/drop bag (wardrobe), Results (results), and Contact (contact) links when available. This metadata is important for catalog review and discoverability. Do not invent unknown values; omit unconfirmed fields rather than guessing. Use this after discovering the official route source externally, importing a real GPX/FIT/CRSProf/ZIP-with-one-GPX source, enriching waypoints/resources/cutoffs when official data is available, applying metadata, and generating segments. Do not submit reconstructed/synthetic course geometry from roadbooks, checkpoint tables, elevation profiles, aid-station lists, screenshots, or regulations; those are enrichment/context only. If route links are blocked, stop and ask the user to upload the official GPX/FIT/CRSProf/ZIP through REST artifact upload or pass inline/proxied file content. Search the CourseProfiler catalog first to avoid duplicates or to identify updates. If official waypoint/aid documents conflict or are incomplete, ask the user to confirm and include only confirmed aid stations; do not invent locations. Returns a job whose progress includes submission_id and final_crsprof_artifact_id, and whose artifacts include the final CRSProf submitted for review. Report both IDs to the user.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseYes
metadataNo
race_nameNoRace/course name to submit. Assistants should search the catalog and official web sources before calling submit_course, then populate metadata.event from official sources, including metadata.event.time and metadata.event.links when available.
submitterNo
course_fileNoInline/proxied GPX, FIT, CRSProf, or ZIP-with-one-GPX file object to import. Use content for text GPX/XML/JSON/CRSProf or base64 for FIT/ZIP/binary. Bare local filesystem paths and file:// URLs are rejected.
original_file_nameNoOptional original route/profile file name for review metadata.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorsNo
job_idYesCourseProfiler job ID to poll with get_job.
statusYesJob status, e.g. queued, running, succeeded, or failed.
progressNo
warningsNo
created_atNoISO-8601 creation timestamp.
expires_atNoISO-8601 expiration timestamp.
started_atNoISO-8601 start timestamp, when available.
status_urlNoRelative API URL for polling this job.
completed_atNoISO-8601 completion timestamp, when available.
result_artifactsNoArtifacts produced by the job, including role metadata.
Behavior5/5

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 and does so excellently. It reveals that a final CRSProf artifact is not a submission, that absence of submission_id indicates no submission, that blocked route links should trigger a user upload request, that conflicting waypoints require user confirmation, and that unconfirmed fields must be omitted rather than guessed. It also discloses return value semantics (job with submission_id and final_crsprof_artifact_id). These are critical behaviors beyond a simple schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Despite its length, the description is well-structured and front-loaded. The first sentence states the core purpose, followed by sibling differentiation, usage rules, metadata instructions, and exclusions. Each section addresses a distinct need, and the verbose metadata guidance is justified by the tool's complexity. No sentence is wasted; the length is appropriate for the number of edge cases covered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is remarkably complete given the tool's complexity. It covers prerequisites (searching the catalog, official sources), the full pipeline, accepted source formats, blocked-link fallback, conflict resolution, return value semantics, and explicit don'ts. With a rich output schema presumably present, the description still adds necessary context about job progress and artifacts, ensuring the agent understands the entire submission workflow.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, but the description compensates extensively. It provides concrete examples for metadata.event.name vs course ('name='Speedgoat Mountain Races', course='50K''), explicitly warns against putting distance/elevation in the course name, clarifies that location must not include country, and enumerates required event link types. It adds practical field-level guidance that is absent from the schema, greatly enhancing parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear statement: 'Submit an official/trusted course for CourseProfiler catalog review.' It immediately distinguishes itself as 'the only MCP tool that creates a catalog-review submission' and names sibling tools (import_course, enrich_course_waypoints, generate_course_segments, create_race_plan) that do not fulfill this purpose. The verb 'submit' and resource 'course for catalog review' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: 'Use this only when the user asked to submit/add/update a course in the catalog.' It also provides a strong exclusion: 'Do not call submit_course for normal race-plan creation; create_race_plan does not require catalog submission.' It further details a pipeline order ('Use this after discovering the official route source externally, importing... enriching... applying metadata, and generating segments') and warns against submitting synthetic geometry, making the usage scope very clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_course_profileValidate course profileAInspect

Validate a CRSProf artifact or inline CRSProf JSON before race planning or catalog submission. This does not mutate artifacts or submit courses.

ParametersJSON Schema
NameRequiredDescriptionDefault
crsprofNo
crsprof_artifact_idNoExisting CRSProf artifact ID to validate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
validYesTrue when the supplied profile validates.
errorsNo
artifactNo
warningsNo
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of disclosing behavior. It clearly states the tool is non-mutating and does not submit courses, which are key behavioral traits. It does not mention specific validation checks or error reporting, but the existence of an output schema helps cover return values. Overall, the transparency is good for a validation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and context, followed by a concise clarification of non-mutation. There is no wasted phrasing, and it fully earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the tool's purpose, input modes, and non-mutating nature. Given that an output schema exists, it does not need to explain return values. The main gap is the lack of explicit statement about parameter exclusivity and what validation actually checks, but for a tool of this complexity, the description is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 50% description coverage (crsprof_artifact_id has a description, crsprof does not). The description compensates by clarifying 'inline CRSProf JSON' for the crsprof parameter and 'artifact ID' for the crsprof_artifact_id parameter, and by indicating these are alternate inputs ('or'). This goes beyond the schema, though it stops short of explicitly stating whether both can be provided simultaneously or are mutually exclusive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'validate', the resource 'CRSProf artifact or inline CRSProf JSON', and the context 'before race planning or catalog submission'. It also distinguishes from sibling tools by explicitly noting it does not mutate artifacts or submit courses, making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit timing guidance ('before race planning or catalog submission') and clarifies what it does not do ('does not mutate artifacts or submit courses'), which implies when not to use it. However, it does not explicitly name alternative tools (e.g., submit_course) or mention that only one of the two input modes should be provided, which would strengthen the guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_runner_profileValidate runner profileAInspect

Validate a USRProf artifact or inline USRProf JSON before creating personalized race plans. This does not mutate artifacts or generate a new profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
usrprofNo
usrprof_artifact_idNoExisting USRProf artifact ID to validate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
validYesTrue when the supplied profile validates.
errorsNo
artifactNo
warningsNo
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It explicitly discloses that the tool does not mutate artifacts or generate a new profile, which is the key behavioral trait for a validation tool. However, it does not mention what happens on invalid input or whether there are other side effects, leaving some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose and followed by a concise behavioral disclaimer. Every piece of text adds value with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no annotations, the description covers purpose, usage timing, and side-effect boundaries. The output schema covers return values, and the two parameters are effectively explained. For a validation tool with this simplicity, the description is complete enough to guide correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description maps 'USRProf artifact or inline USRProf JSON' to the two parameters: usrprof_artifact_id and usrprof. This compensates for the schema's missing description on usrprof and clarifies the 'or' relationship. Still, it does not explicitly state whether exactly one must be provided or both are allowed, which could be ambiguous given the schema has no required fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Validate' and the resource 'USRProf artifact or inline USRProf JSON', and includes the context 'before creating personalized race plans'. This distinguishes it from sibling tools like validate_course_profile and generate_runner_profile.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context on when to use ('before creating personalized race plans') and states a when-not boundary ('This does not mutate artifacts or generate a new profile'). However, it does not explicitly name alternative tools for mutation or generation, stopping short of full alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources