# COROS-MCP — verifizierte Tool-Calls + Daten-Shapes (2026-08-15) Proof-of-Concept mit echtem Login, alle Werte real. Endpoint Europa `mcpeu.coros.com`, Token-Cache `/root/.coros-mcp-skill-gateway-ts//token.json`. ## Zugriffshinweis (Token-Sicherheit, Team-Auflage) - Token-Datei root-only (`chmod 600`), Cache `chmod 700`. - Zusaetzlich age-verschluesseltes Backup: `age-keygen -o /root/.coros-age-key.txt; age -r -o /root/.coros-token.json.age `. - WICHTIG: **NICHT die Klartext-`token.json` verschluesseln/ersetzen** — die `coros-mcp`-CLI LIESST sie selbst (Klartext nötig fuer den Betrieb). Verschluesselung nur als SEPARATE Sicherungskopie ablegen. ## Korrekte Aufruf-Syntax (verifiziert) ```bash # Achtung: Flags! Nicht positional. KEIN --args/--name/--tool-positional. coros-mcp list-tools coros-mcp describe-tool --tool queryDailyHealthData coros-mcp call-tool --tool queryDailyHealthData --arguments-json '{}' ``` ## Echte Ergebnis-Shapes (Anhaltspunkt fuer Parser) ### queryDailyHealthData ({} args) — Text, 7 Tage ``` "Daily Health Data — Last 7 days | Resting HR: 52 bpm | HRV Baseline: 42 ms --- 20260815 --- Steps: 981 | Calories: 47 kcal | Exercise: 0 min Stress: Avg 22 Sleep Summary: Total: 7h 46min | Deep: 1h 57min | Light: 4h 17min | REM: 1h 23min | Awake: 9 min ``` Antwort-Container: `{"content":[{"type":"text","text":""}],"isError":false}` — **Daten sind EIN String**, mit `\n`-Zeilen, pro Tag Abschnitt `--- JJJJMMTT ---`. Parser: nach Datums-Marker + Label splitten. ### querySportRecords ({}) — 1+ Records ``` "Sport Records — DATE to DATE (N records) 1. Indoor Cycling — 2026-08-11 Location: Indoor Rad Time Window: startTimestamp=1786472136 | endTimestamp=1786475750 Duration: 1:00:14 | Avg HR: 114 bpm | Calories: 629 kcal LabelId: 479635354870120452 | SportType: 201" ``` Sauber parsebar via Regex auf `LabelId:` + `SportType:` (fuer Activity-Details noetig). ### querySleepHrv ({}), queryRecoveryStatus ({}), queryFitnessAssessmentOverview ({}) - HRV: pro Tag `HRV Avg: 55 ms — Normal`, `Baseline: 61 ms` - Recovery: `Recovery: 100%`, `Level: Heavy training allowed` - Fitness: `Threshold Pace: 4:45 /km` ### queryUserInfo ({}) `Height: 173.0 cm | Weight: 100.6 kg | Birthday: 1972-02-21 (Age: 54) | Gender: Male | Nickname: Thorsten` ## PersoEnt-Write-Hinweis (strukturierte Gesundheitsdaten) COROS liefert KEIN Datums-Feld in der Antwort — das Datum steckt im `--- JJJJMMTT ---`-Marker. PersoEnt `health_records`-Collection hat KEIN `datum`-Feld; Datum geht verloren, wenn man es nicht als String in einem Text-Feld oder via Record-`created` abbildet. (siehe pocketbase-deployment: leere createRule → Superuser-Token noetig.)