NestJS-based MCP server for accessing Runalyze fitness tracking and activity data via the Runalyze API
The server defines 5 tools with consistent naming and basic descriptions. All tools follow a verb_noun pattern (get_runalyze_*) which is good for LLM parsing. However, definitions are incomplete: input schemas are minimal (most only have a 'page' parameter with basic type info), output schemas are entirely undocumented, descriptions are generic and lack usage guidance, and there is no visible error handling strategy. The integration test file reveals the tool exists and accepts parameters, but the actual tool implementation files are not provided, so schema validation is limited to what can be inferred. Parameter descriptions are present but sparse; no return type documentation is visible. This places the server in the 'fair to good' range with noticeable gaps.
Retrieve activities data from the Runalyze API. Returns a collection of activities with detailed information including sport type, performance metrics, weather data, equipment, and more.
Retrieve detailed information for a specific activity by ID from the Runalyze API
Retrieve Heart Rate Rest data from the Runalyze API. Returns resting heart rate measurements over time.
Retrieve HRV (Heart Rate Variability) data from the Runalyze API. Returns heart rate variability measurements over time.
Retrieve Sleep data from the Runalyze API. Returns sleep duration and quality measurements over time.
Output schemas completely undocumented. No visible definition of what fields are returned from any tool call. LLMs cannot plan downstream actions or extract required data without knowing the response structure.
Descriptions are generic and lack context for tool selection. Phrases like 'Retrieve ... data from the Runalyze API' do not explain WHEN to use the tool, what distinguishes it from similar tools, or what problem it solves for the user. LLM selection decisions degrade without usage guidance.
Input parameter 'id' in get-runalyze-activity-detail has no description. The schema declares it as a number but provides no guidance on format, range, or what represents a valid activity ID.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 48 | - | v1 |
Pagination parameters lack guidance on result limits. Tools accept 'page' but do not document how many results per page are returned, maximum page number, or total count. Without this info, LLMs cannot reason about pagination or avoid context window overflow.
No error handling documentation or recovery guidance visible. Tools do not describe what errors are possible, what the LLM should do on failure, or how to distinguish retryable from permanent failures.
Tool implementation files (src/tools/runalyze-*.tool.ts) are not provided in source code excerpt. Actual input/output schemas cannot be verified; assessment is based on limited metadata only. This prevents full validation of schema correctness and completeness.