Skip to main content
Glama

CourseProfiler

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.2/5 across 12 of 12 tools scored. Lowest: 3.3/5.

Server CoherenceA
Disambiguation5/5

Each tool has a clearly distinct purpose, covering different stages of course and race plan creation: searching, importing, enriching, segmenting, plan creation, submission, and retrieval. The instruction helpers are separated by domain (artifact upload, course submission, race plan, runner profile). No two tools are ambiguous.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (e.g., create_race_plan, get_artifact, search_race_catalog). The pattern is uniform across the set, making it easy to infer tool function from name.

Tool Count4/5

12 tools is reasonable for the domain, covering the full pipeline from catalog search to creating a race plan and optional catalog submission. Slightly more than minimal, but each tool serves a specific need without bloat.

Completeness4/5

The tool set covers the entire workflow: course discovery, import, enrichment, segmentation, race plan creation, and catalog submission. Missing are update/delete operations for artifacts or plans, which are not core to the primary use case.

Available Tools

12 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. 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'}]. 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 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; 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?

No annotations are provided, so the description carries the full burden. It thoroughly discloses behaviors: the tool creates a plan/PDF, does not submit to the catalog, requires course and runner input, and details what to do if data is missing. It warns about third-party host blocks and cautions against inventing data, providing complete transparency.

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 very long and covers many edge cases. While the first sentence front-loads the purpose, the extensive detail makes it less concise. It could be structured more clearly with bullet points or sections to improve readability 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 (7 parameters, nested objects, many sibling tools), the description is exceptionally complete. It covers prerequisites, workflow sequencing, error handling (e.g., blocked URLs), and references to other tools. The output schema exists, and the description notes it returns a top-level job with artifact role metadata, which is sufficient.

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 low (43%), so the description must compensate. While the description does not repeat parameter descriptions, it adds substantial context for fields like course.source and runner.sources, explaining when to use artifact_id vs. source, and how to handle file uploads. This adds meaning beyond the schema, though it could be more concise.

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 it is the primary tool for creating a personalized race plan and optional PDF. It distinguishes from siblings by specifying prerequisites (course and runner input) and clarifying it does not submit to the catalog. The verb 'create' and resource 'race plan' 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 provides extensive guidance on when to use this tool versus alternatives. It explicitly states to use after obtaining course and runner input, and specifies when to call sibling tools like search_race_catalog, import_course, enrich_course_waypoints, generate_course_segments, and submit_course. It also gives clear exclusions, such as not creating a plan without a real route file and not inventing missing data.

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.
Behavior5/5

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

No annotations provided, so description carries full burden. Discloses important behaviors: unsupported resources are ignored with warnings, preference for structured mode, and merging strategy. 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.

Conciseness4/5

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

Description is well-structured and front-loaded with main action. Each sentence adds value, though slightly verbose with implementation details. Still efficient for the complexity.

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?

Tool has nested objects and output schema; description covers purpose, usage, and behavior adequately. No gaps given the context signals.

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 50%, but description adds value by reinforcing mode preference and caution about table_url. It provides guidance beyond schema, though some parameter details are left to 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?

Description clearly states the tool adds structured waypoints to a CRSProf artifact, distinguishing it from sibling tools like import_course which creates artifacts. It also specifies handling of existing waypoints.

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 guidance: inspect for existing waypoints to avoid duplicates, prefer merging/updating, and label route-only plans as incomplete unless official waypoints are present. This helps the agent decide when and how to use.

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.
Behavior2/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 only mentions the tool's input sources and output destination but does not disclose side effects, required permissions, idempotency, rate limits, or error behavior. Essential behavioral traits are missing.

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 with no wasted words. The first sentence states the core purpose and conditions, the second clarifies a critical distinction. Information is front-loaded and every sentence adds value.

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 (2 parameters, nested object, output schema exists), the description covers the tool's role in a pipeline, prerequisites (enriched CRSProf or catalog CRSProf), and post-processing steps. It lacks explicit mention of error cases or validation requirements but is largely complete for an experienced agent.

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 adds context beyond the schema by explaining the crsprof_artifact_id parameter can come from two sources (enriched CRSProf or catalog CRSProf). The schema itself describes most sub-properties of options, but the description adds meaning about the parameter's origin and downstream use.

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 generates analytical course segments from two specific sources (enriched CRSProf after waypoint enrichment or catalog CRSProf with official data). It uses specific verb 'generate' and resource 'course segments', and distinguishes from siblings by mentioning downstream usage with create_race_plan and submit_course.

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 explicitly provides when to use this tool (after waypoint enrichment or from catalog CRSProf) and what to do with the result (use in create_race_plan or submit_course if user asked). It also states a clear exclusion: 'A generated CRSProf artifact is not a catalog submission.'

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

get_artifactGet artifactBInspect

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.
Behavior3/5

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

No annotations are present, so the description carries the full burden. It reveals that the download URL is 'short-lived', which is a behavioral trait beyond the schema. However, it does not mention other important traits like read-only behavior, authentication needs, or rate limits. The description is adequate but not comprehensive.

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, front-loaded with the verb and resource. Every word is necessary; no waste. Excellent conciseness.

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 presence of an output schema and a single, fully described parameter, the description is adequate for a simple fetch operation. However, it lacks usage context, behavioral details (no annotations), and does not mention prerequisites or limitations. Completeness is moderate.

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 schema covers 100% of the parameter (artifact_id), so the description adds minimal meaning beyond the schema. It simply states 'by artifact_id', which restates the schema's purpose. Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the action ('Fetch') and the resource ('artifact metadata and a private short-lived download URL') with the condition 'by artifact_id'. It is specific and distinct from sibling tools like 'get_artifact_upload_requirements' through the name, but the description does not explicitly compare to alternatives.

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?

There is no guidance on when to use this tool versus its siblings, such as when to use 'get_artifact' vs 'get_artifact_upload_requirements'. The description only states what it does, not the context or prerequisites.

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, description carries full burden. It discloses it is an instruction helper and not a raw-byte tool, but does not detail what the instructions entail or if there are side effects. Adequate but not exhaustive.

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, front-loaded with purpose and usage, no extraneous content.

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 zero parameters and an output schema, the description sufficiently covers the tool's role as an instruction helper; return values are explained by schema.

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?

Input schema has 0 parameters, so baseline is 4. Description does not need to add parameter info; schema coverage is 100%.

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 provides instructions for CourseProfiler's REST artifact upload flow and explains limitations of hosted MCP, distinguishing it from a raw-byte upload tool.

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 says 'Use this when an assistant needs instructions... or needs to explain why...' and clarifies it is an instruction helper, providing clear context for when and when not to use.

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?

No annotations are provided, so the description carries the full burden. It discloses what the tool returns (workflow, route sources, etc.), which implies a read-only operation. However, it does not explicitly state behavioral traits like side effects, auth requirements, or error handling. The description is adequate but lacks full transparency.

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 long. The first sentence states when to use the tool, and the second lists what it returns. No unnecessary words, highly 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?

Given the tool has 3 optional parameters, an output schema, and no required fields, the description is sufficiently complete. It covers when to use and what to expect. Only minor gaps in behavioral details prevent a perfect score.

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 has 100% description coverage, so the baseline is 3. The description adds minimal extra meaning beyond the schema, only hinting at the context for 'race_name' by tying it to 'incomplete inputs.' No additional detail is provided for 'known_course_url' or 'has_waypoint_data.'

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 what the tool does: 'Returns the catalog-first course submission workflow, accepted route sources, metadata, waypoint enrichment, and upload requirements.' It also differentiates itself from siblings by explicitly mentioning 'Use this before submit_course' and 'when the user gives only a race name or incomplete inputs.'

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 explicitly tells when to use the tool: 'Use this before submit_course when the user gives only a race name or incomplete inputs.' It provides clear context for usage, though it does not explicitly state when not to use it or mention alternatives.

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 must fully disclose behavior. It states 'poll' implying a safe, read-only action, but does not explicitly confirm no side effects, mention authentication requirements, rate limits, or error handling (e.g., what if job_id is invalid). The minimal description leaves behavioral aspects ambiguous.

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, well-formed sentence that conveys the essential purpose without unnecessary words. It is front-loaded with the action and resource, making it easy to parse quickly.

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 simplicity (one parameter, no nested objects, output schema exists), the description is largely adequate. It covers the basic operation. However, it could be improved by noting common usage patterns, such as that polling returns a status that may indicate completion or failure, but the output schema likely handles that. Still, minor gap.

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 has 100% coverage, describing job_id as 'CourseProfiler job ID, e.g. job_...'. The description adds no new semantic information beyond restating the parameter's role in polling. Since schema coverage is high, a score 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 purpose: to poll a CourseProfiler async job by job_id. The verb 'poll' indicates checking status, and the resource is a specific job. It distinguishes from siblings like get_artifact and get_race_plan_requirements which target different resources.

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?

No guidance is provided on when to use this tool versus alternatives. For instance, it does not explain when polling is appropriate, what distinguishes it from waiting for job completion, or mention any prerequisites or conditions. The description lacks context on usage.

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
Behavior3/5

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

No annotations provided. The description explains it returns required inputs and next steps, but does not disclose behavioral traits like idempotency, side effects, or auth needs. It is not contradictory, but could be more informative.

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, no redundancy, front-loaded with key usage instruction. Every sentence adds value.

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 presence of an output schema and the tool's simplicity (3 optional params), the description is sufficiently complete. It explains the return value and eligibility for use. Minor improvement would be specifying the output structure explicitly.

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%, so the parameters are fully described. The description adds context about use case but does not provide additional meaning for individual parameters beyond 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?

The description clearly states the tool's purpose: 'Use this before create_race_plan' and specifies the use case (incomplete inputs). It distinguishes from sibling tools by naming create_race_plan.

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?

Explicitly says when to use ('before create_race_plan', 'when user gives only a race name or incomplete inputs'), but does not explicitly state when not to use it. Alternatives are implied but not named.

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
required_fieldsNo
evidence_guidanceYes
how_to_get_usrprofYes
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It describes what the tool does (provides explanatory guidance on runner input) without hiding any major traits. It does not mention side effects or safety, but as a read-only informational tool, that is acceptable. The description adds value beyond the name by specifying the content of the explanation.

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 exceptionally concise, consisting of two sentences that front-load the use case. Every word serves a purpose, with no fluff or repetition. It efficiently conveys the tool's role and the scope of information it provides.

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 simplicity (zero parameters) and the presence of an output schema, the description is largely complete. It covers the key aspects of what the tool explains. However, it could be slightly improved by explicitly stating that the return value is a structured set of requirements, though the output schema likely covers that.

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, so the baseline score is 4 per the calibration rules. The schema coverage is 100% (no parameters to document), and the description does not need to add parameter information. It appropriately focuses on the tool's output and usage.

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 purpose: it explains how to obtain or generate runner input, what files should contain, and how to upload artifacts. The trigger condition 'Use this when runner input is missing or unclear' provides a specific use case, and it distinguishes from sibling tools like get_race_plan_requirements by focusing on runner profiles.

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 explicitly says when to use the tool (when runner input is missing or unclear), providing clear context. It does not explicitly state when not to use it or mention alternatives, but the condition alone is sufficient for most agents. The sibling tool names imply differentiation.

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 provided, so description carries full burden. It discloses important behaviors: third-party hosts may return 403, ZIP accepted only with exactly one GPX, and advises against synthesizing geometry from roadbooks. Could mention success/failure outcomes but still strong.

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?

Description is somewhat verbose but structured with key information front-loaded. Could be more concise without losing essential details. Still effective.

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 (3 parameters with nested objects) and presence of output schema, the description covers main use cases and edge cases (403, ZIP constraints). Room for minor improvements like expected output, but largely 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 description coverage is low (33%). The description explains source types (url, artifact, raw_json, raw_file) and course_file object, but does not detail all properties like options or some source fields. Provides enough context for typical use but leaves some gaps.

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 that the tool imports various course file formats (GPX, FIT, CRSProf, ZIP) into a CRSProf artifact. It distinguishes itself from siblings by specifying its use case: 'Use this on catalog misses before waypoint enrichment.'

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?

Explicit guidance on when to use ('on catalog misses before waypoint enrichment') and when not to (third-party hosts blocking, e.g., Wikiloc). Provides alternative workflow: ask user to upload via POST /api/artifact-uploads.

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
Behavior3/5

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

With no annotations, the description must fully disclose behavior. It states the return type (URLs) and search function, but does not mention if results are limited, paginated, or if the tool is read-only. It does not contradict annotations (none present).

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 sentence that immediately conveys the tool's purpose. No redundant information, front-loaded with the key action and resource.

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 simplicity (2 parameters), the description covers the main functionality and return value. The presence of an output schema likely provides additional details, making this sufficient. Could mention the list nature of results.

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 adds context beyond the schema by explaining that the query is a race/course name and that the result is a list of URLs usable as course sources. This helps the agent understand the output's purpose.

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 (Search), the resource (CourseProfiler's race catalog), and the output (direct CRSProf URLs). It effectively distinguishes this tool from siblings like create_race_plan or import_course, which have different purposes.

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

Usage Guidelines3/5

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

The description implies usage for finding course URLs by name, but provides no explicit guidance on when to prefer this tool over alternatives (e.g., when search is needed vs. importing a course). It lacks when-not-to-use instructions.

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 fully carries the behavioral disclosure burden. It explains the return value (a job with submission_id and final_crsprof_artifact_id), reports failure condition (no submission_id means not submitted), and details constraints like blocking on blocked URLs and requirement for official sources.

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 comprehensive and well-structured, starting with core purpose and differentiation, then usage guidelines, then parameter details. It is thorough but moderately lengthy; however, every sentence adds necessary context, so conciseness is appropriate for the complexity.

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 fully complete given the tool's complexity (6 parameters, nested objects). It covers prerequisites, usage conditions, behavioral details, parameter semantics, return values, error handling (e.g., blocked URLs), and references an output schema. No gaps remain.

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?

Given only 50% schema description coverage, the description adds substantial semantic value beyond the schema. It provides detailed guidance on populating metadata fields (e.g., metadata.event.name vs. course, linking types, competition examples) and clarifies source options, compensating for schema gaps.

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 purpose: submit an official/trusted course for catalog review. It explicitly distinguishes from sibling tools (import_course, enrich_course_waypoints, generate_course_segments) by noting they only create temporary artifacts, making the unique role 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?

Provides explicit when-to-use and when-not-to-use guidance, e.g., 'Use this only when the user asked to submit/add/update a course' and 'Do not call submit_course for normal race-plan creation'. Also instructs to search catalog first to avoid duplicates and specifies not to submit synthetic geometry.

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!

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources