About CourseProfiler
Race course profiling, catalog search, course submission, and personalized race plans
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://courseprofiler.com/mcpclaude mcp add --transport http com-courseprofiler-courseprofiler https://courseprofiler.com/mcp{"mcpServers":{"com-courseprofiler-courseprofiler":{"type":"http","url":"https://courseprofiler.com/mcp"}}}Open in Cursor{"servers":{"com-courseprofiler-courseprofiler":{"type":"http","url":"https://courseprofiler.com/mcp"}}}Open in VS Code{"mcpServers":{"com-courseprofiler-courseprofiler":{"type":"http","url":"https://courseprofiler.com/mcp"}}}{"mcpServers":{"com-courseprofiler-courseprofiler":{"serverUrl":"https://courseprofiler.com/mcp"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
Tools
26| Parameter | Type | Required | Description |
|---|---|---|---|
| object | No | ||
| pdf.enabled | boolean | No | |
| pdf.options | object | No | |
| course | object | No | |
| course.source | object | No | |
| course.source.url | string | No | Fetchable public URL to a GPX, FIT, CRSProf, USRProf, or evidence file. For course inputs, prefer official direct GPX/FIT/CRSProf URLs over generic race homepages, but stop and ask the user to download/upload when the host blocks server fetches (for example 403 from Wikiloc or other route hosts). Do not synthesize course geometry from roadbooks, checkpoint tables, or elevation profiles. |
| course.source.kind | enum | Yes | url | artifact | raw_json | raw_file |
| course.source.base64 | string | No | Base64-encoded file bytes for raw_file inputs, suitable for FIT or other binary files. |
| course.source.content | string | No | Inline text file content for raw_file inputs, suitable for GPX/XML/JSON/USRProf. |
| course.source.payload | object | No | Inline raw JSON payload for CRSProf/USRProf-compatible inputs. |
| course.source.file_name | string | No | File name for inline raw_file content, e.g. course.gpx or runner.usrprof. |
| course.source.artifact_id | string | No | Existing CourseProfiler artifact ID, e.g. art_... |
| course.source.content_type | string | No | MIME type for inline raw_file content. |
| course.segments | object | No | |
| course.segments.mode | enum | No | generate | skip |
| course.segments.options | object | No | |
| course.segments.options.algorithm | string | No | Segment partitioning algorithm, e.g. SLOPE_BASED. |
| course.segments.options.flat_grade | number | No | Flat grade threshold percent. |
| course.segments.options.instant_mode | boolean | No | Use instant segmentation mode. |
| course.segments.options.flat_max_delta | number | No | Maximum elevation delta for flat segments, meters. |
| course.segments.options.include_routes | boolean | No | Include route geometry in generated CRSProf. |
| course.segments.options.minimum_distance | number | No | Minimum segment distance, meters. |
| course.segments.options.slope_change_threshold | number | No | Slope-change threshold percent. |
| course.segments.options.flexible_flat_max_delta | boolean | No | Allow flexible flat max-delta behavior. |
| course.segments.options.flexible_minimum_distance | boolean | No | Allow flexible minimum-distance behavior. |
| course.import_options | object | No | |
| course.import_options.include_routes | boolean | No | Include routes when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning. |
| course.import_options.include_segments | boolean | No | Generate segments when analysing GPX/FIT. Existing CRSProf is preserved with analysis_options_not_applied warning. |
| course.crsprof_artifact_id | string | No | Existing converted CRSProf artifact ID. For uploaded local GPX/FIT/CRSProf source_file artifacts, prefer course.source.kind=artifact so CourseProfiler can import/convert it. |
| runner | object | No | |
| runner.sources | array | No | Runner evidence/profile sources. Use this for uploaded source_file artifact IDs returned by /api/artifact-uploads, including local .usrprof files, GPX/FIT/CRSProf evidence, or public URLs. Personalized plans require runner input; do not fabricate a runner profile. |
| runner.import_options | object | No | |
| runner.usrprof_artifact_id | string | No | Existing already-converted USRProf artifact ID. Do not use this for uploaded source_file artifacts from /api/artifact-uploads; pass those as runner.sources[{kind:'artifact', artifact_id:'art_...'}]. |
| estimate | object | No | |
| estimate.output | object | No | |
| estimate.options | object | No | |
| estimate.options.strategy | enum | No | Only segment_evidence is accepted for runner-profile race plans.segment_evidence |
| estimate.options.flat_grade | number | No | Flat grade threshold percent used by GAP calculation. |
| estimate.options.gap_algorithm | string | No | Grade-adjusted pace algorithm name. |
| race_name | string | No | Race/course name to resolve through the CourseProfiler catalog when no course source is provided, e.g. Val d'Aran PDA. |
| course_file | object | No | Use 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. |
| course_file.url | string | No | Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file. |
| course_file.name | string | No | Original file name, e.g. course.gpx or runner.usrprof. |
| course_file.base64 | string | No | Base64-encoded file bytes for FIT or other binary files. |
| course_file.content | string | No | Inline text file content for GPX/XML/JSON/USRProf. |
| course_file.file_name | string | No | Original file name, e.g. course.gpx or runner.usrprof. |
| course_file.content_type | string | No | MIME type for the file. |
| runner_profile_file | object | No | Use 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. |
| runner_profile_file.url | string | No | Fetchable HTTPS URL to file bytes. Do not use file:// or bare local paths. ZIP is accepted only when it contains exactly one GPX file. |
| runner_profile_file.name | string | No | Original file name, e.g. course.gpx or runner.usrprof. |
| runner_profile_file.base64 | string | No | Base64-encoded file bytes for FIT or other binary files. |
| runner_profile_file.content | string | No | Inline text file content for GPX/XML/JSON/USRProf. |
| runner_profile_file.file_name | string | No | Original file name, e.g. course.gpx or runner.usrprof. |
| runner_profile_file.content_type | string | No | MIME type for the file. |
Details
The maintainer has not added details yet. Check the README in the repository.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.