Initial: Mesh-Skills, Configs, Scripts

This commit is contained in:
root
2026-09-02 23:49:07 +02:00
commit 26c7980750
783 changed files with 145393 additions and 0 deletions
@@ -0,0 +1,51 @@
# 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/<region>/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 <PUBKEY> -o /root/.coros-token.json.age <token.json>`.
- 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":"<string>"}],"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.)