# CourseProfiler (com.courseprofiler/courseprofiler): tool descriptions scored

- tools/list taken: 2026-11-02 (UTC)
- From: [Official MCP Registry](https://registry.modelcontextprotocol.io/v0/servers/com.courseprofiler%2Fcourseprofiler/versions/latest)
- Connected to: https://courseprofiler.com/mcp
- Homepage: https://courseprofiler.com/mcp.html
- Scoring rules: v2
- Tools: 26
- Average: 70.8 / 100 (Clear)
- Near-identical pairs: 1

This page shows how CourseProfiler (com.courseprofiler/courseprofiler)'s tool descriptions scored, the issues found and the names of its tools and parameters. The descriptions are the server's own: read them where the copy came from.

Forecall asked the URL this server lists in the official MCP Registry for its tools/list once, on the date above, without calling any tool. The server may have changed since.

## Across the server

- Minor: 26 tools. Above 25, models start to tell tools apart less well.
- Minor: The server has no instructions. Say there, once, what the server is for and when to use it: Claude Code and Gemini CLI read the instructions before the tool descriptions.

## Tools

- `validate_course_profile`: 45 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: crsprof.
- `validate_runner_profile`: 45 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: usrprof.
- `get_job`: 46 / 100
  - Major: The description only restates the name (7 words).
  - Major: The description is too short (7 words).
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Required identifiers whose description does not say where the value comes from: job_id. Name the tool or the place that returns it, or models look it up first.
- `get_storage_readiness`: 53 / 100
  - Major: Arguments without a description: check_bucket.
  - Minor: The meaning of the boolean argument check_bucket is unclear.
- `export_race_plan_pdf`: 60 / 100
  - Major: Says nothing about when to use it, or when not to.
  - Minor: Arguments without a description: options.
  - Minor: Required identifiers whose description does not say where the value comes from: crsprof_artifact_id. Name the tool or the place that returns it, or models look it up first.
- `search_race_catalog`: 64 / 100
  - Major: Says nothing about when to use it, or when not to.
- `get_activity_submission`: 68 / 100
  - Minor: Arguments without a description: idempotency.
- `generate_course_segments`: 69 / 100
  - Minor: Arguments without a description: options.
  - Minor: The description mentions none of its 3 or more arguments.
- `get_artifact_upload_requirements`: 70 / 100
- `enrich_course_waypoints`: 71 / 100
  - Minor: Arguments without a description: waypoints, waypoints.distance_unit, waypoints.items, waypoints.items[].distance_unit, waypoints.items[].cutoff_kind, waypoints.items[].kind.
- `inspect_analysis`: 71 / 100
  - Minor: Arguments without a description: sort, limit, query, offset.
- `compare_execution`: 72 / 100
- `get_course_submission_requirements`: 72 / 100
  - Minor: The description mentions none of its 3 or more arguments.
- `get_artifact`: 73 / 100
- `assess_finish_time_goal`: 74 / 100
- `compare_pacing_strategies`: 74 / 100
  - Minor: Arguments without a description: split_percent.
- `generate_runner_profile`: 75 / 100
  - Minor: Arguments without a description: sources[].kind, import_options.
- `get_runner_profile_requirements`: 75 / 100
- `get_race_plan_requirements`: 77 / 100
  - Minor: The description mentions none of its 3 or more arguments.
- `inspect_runner_profile`: 79 / 100
  - Minor: Arguments without a description: query.
- `analyze_activity`: 81 / 100
  - Minor: Arguments without a description: idempotency, options, options.include_routes, source, source.kind.
  - Minor: The meaning of the boolean argument options.include_routes is unclear.
- `build_runner_profile_from_strava`: 81 / 100
  - Minor: Arguments without a description: decision, filters, filters.max_elevation_gain_m, filters.max_distance_m, filters.activity_types, filters.min_distance_m, filters.min_elevation_gain_m, filters.max_elapsed_s, filters.min_elapsed_s, course, course.source, course.source.kind.
- `import_profile_attachment`: 82 / 100
  - Minor: Arguments without a description: profile_type, file.
- `import_course`: 86 / 100
  - Minor: Arguments without a description: options, source, source.kind.
- `create_race_plan`: 89 / 100
  - Minor: The description is long (570 words). It helps selection but costs steps and tokens.
  - Minor: Arguments without a description: runner, runner.sources[].kind, runner.import_options, course, course.segments, course.segments.mode, course.segments.options, course.import_options, course.source, course.source.kind, pdf, pdf.options, pdf.enabled, estimate, estimate.options, estimate.output.
  - Minor: The meaning of the boolean argument pdf.enabled is unclear.
- `submit_course`: 90 / 100
  - Minor: The description is long (441 words). It helps selection but costs steps and tokens.
  - Minor: Arguments without a description: submitter, metadata, metadata.event.distance_unit, metadata.event.elevation_gain_unit, course, course.segments, course.segments.mode, course.segments.options, course.source, course.source.kind, course.waypoints, course.waypoints.distance_unit, course.waypoints.items, course.waypoints.items[].distance_unit, course.waypoints.items[].cutoff_kind, course.waypoints.items[].kind, course.import_options.
  - Minor: String arguments with no constraint or example: submitter.email, submitter.name, metadata.event.country.

Is your server listed here and you would rather it were not? Email support@forecall.dev, and we will take it off within 7 days.

[All scored servers](https://forecall.dev/en/servers)
