Garmin running performance analysis MCP server with DuckDB backend
This MCP server exposes 13 tools organized into three functional groups (diagnostics, JSON operations, Markdown operations). Tool definitions are present with schemas and descriptions, but quality is uneven. Most tools have basic, brief descriptions (20-80 chars) that lack LLM-optimized context about WHEN to use them or WHAT they return. Parameter descriptions are often missing entirely. No tool declares output schemas. Error handling is not documented. The server mixes low-level file I/O tools (json_read, markdown_read) with higher-level operations (json_update, markdown_update_section), violating single-responsibility, agents must manually compose sequences that could be atomic. Security is a major gap: no path traversal protection is documented, and file operations accept arbitrary file_path parameters without validation hints. Overall, definitions are skeletal, sufficient to invoke tools, but insufficient to guide LLM reasoning, error recovery, or secure composition.
Get diagnostic info about the running MCP server (shim started_at plus worker DB diagnostics). Use to verify readiness.
Get nested value using dot notation
Read JSON file with encoding auto-detection
Update JSON file (shallow or deep merge)
Validate JSON file integrity
Write JSON file atomically (temp → rename)
Append content to file
No output schemas documented for any tool. LLMs cannot plan downstream tool calls or extract structured data from responses.
Parameter descriptions missing for many parameters (encoding, updates, merge_mode, content, include_subsections, etc.). LLMs cannot infer parameter meaning from names alone.
No error handling guidance in any tool description. Agents do not know if failures are retryable, user-fixable, or fatal. E.g., 'File not found', 'Permission denied', 'Invalid JSON', all possible but undocumented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 54 | <=2025-11-25 | v2 |
| 2026-03-09 | D | 53 | - | v1 |
Extract specific section by heading
List all headings with levels and line numbers
Read Markdown file with encoding auto-detection
Update specific section by heading
Write Markdown file atomically
Restart the execution worker to pick up code changes. The MCP shim process stays alive (the session is preserved) and a tools/list_changed notification is sent. Signature-compatible changes apply with no reconnect; schema changes (added/removed tools or changed args) need one /mcp reconnect.
File path parameters (file_path) accept arbitrary paths with no documented validation or path traversal protection. Agents could be tricked into reading/writing files outside intended scope.
Tool descriptions are too brief (20 - 80 characters typical) and lack context on WHEN to use a tool vs similar ones. E.g., 'Read JSON file' does not explain when to use json_read vs json_get, or what format json_read returns.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) declared. Agents cannot determine if tools are safe to retry or if side effects are irreversible.
Low-level file I/O tools (json_read, markdown_read) mixed with high-level operations (json_update, markdown_update_section), violating single-responsibility. Agents must manually compose multi-step sequences.