W pierwszej części artykułu opisałem podejście oparte na eksporcie danych ze Stravy i ich przetwarzaniu do własnego formatu. Był to działający prototyp, ale w codziennym użyciu wymagał zbyt wielu ręcznych kroków i szybko stawał się nieaktualny. Chciałem uprościć ten proces przez MCP Stravy, jednak oficjalny dostęp wymaga aktywnej subskrypcji. Dlatego wybrałem COROS, który pozwala Hermesowi pobierać bieżące dane bezpośrednio przez MCP. W moim przypadku nie wymaga to żadnych dodatkowych kosztów, co ma znaczenie, ponieważ projekt nadal pozostaje przede wszystkim zabawą i eksperymentem z lokalnymi agentami AI.
Od eksportu danych do MCP
Poprzedni przepływ wyglądał mniej więcej tak:
Strava
→ eksport ZIP
→ importer
→ JSON/MD
→ model AI
Każda aktualizacja wymagała pobrania nowego archiwum i ponownego przetworzenia danych. Do analiz historycznych było to przydatne, ale nie pasowało do asystenta, który ma znać aktualną sytuację treningową.
MCP, czyli Model Context Protocol, pozwala agentowi korzystać bezpośrednio z zewnętrznych źródeł danych. W nowej wersji projektu przepływ wygląda znacznie prościej:
COROS
→ MCP
→ Hermes
→ lokalny model Gemma 4
→ WhatsApp
Hermes pobiera potrzebne informacje dopiero w chwili zadawania pytania. Nie muszę już przygotowywać kolejnych plików ani ręcznie aktualizować danych.
Dlaczego COROS?
Strava udostępnia oficjalny konektor MCP, ale wymaga on płatnej subskrypcji. Ponieważ od początku 2026 roku korzystam z zegarka COROS, naturalnym wyborem stał się oficjalny serwer MCP tej platformy.
COROS udostępnia między innymi:
- historię aktywności,
- VO₂max i tempo progowe,
- obciążenie treningowe,
- regenerację,
- HRV i tętno spoczynkowe,
- dane o śnie,
- kalendarz treningowy.
Konfiguracja Hermesa
Model działa u mnie lokalnie przez Ollamę w środowisku WSL2. Hermes odpowiada za obsługę narzędzi, pamięci, połączeń MCP i komunikacji przez WhatsApp.
Konfiguracja COROS w pliku ~/.hermes/config.yaml wygląda następująco:
mcp_servers:
coros:
url: "https://mcp.coros.com/mcp"
auth: oauth
enabled: true
connect_timeout: 60
timeout: 300
sampling:
enabled: false
elicitation:
enabled: false
Następnie wystarczy uruchomić:
hermes mcp login coros
i przetestować połączenie:
hermes mcp test coros
W moim przypadku konieczne było wyłączenie sampling oraz elicitation. Bez tego pojawiały się błędy zgodności dotyczące pól sampling.tools i elicitation.form. Po tej zmianie połączenie zaczęło działać poprawnie.

WhatsApp zamiast terminala
Hermes działa u mnie w trybie self-chat, dzięki czemu mogę pisać do niego bezpośrednio z telefonu.
Przykładowe pytania:
Jak wygląda moja aktualna forma?
Pokaż moje ostatnie treningi biegowe.
Jak wygląda moje obciążenie i regeneracja?
Hermes odbiera wiadomość, korzysta z COROS MCP, przekazuje dane do lokalnego modelu Gemma 4 i odsyła odpowiedź na WhatsApp.

Efekt końcowy
Najlepszym testem było pytanie:
Hej, Hermes. Napisz mi, jak wygląda aktualny stan mojej formy.
Za tym jednym zdaniem uruchomił się cały mechanizm:
WhatsApp
→ Hermes
→ COROS MCP
→ Gemma 4
→ WhatsApp
Hermes pobrał między innymi:
- VO₂max: 56,
- poziom biegowy: 91/100,
- tempo progowe: około 4:05 min/km,
- regenerację: 100%,
- status:
Heavy training allowed.
Technicznie wszystko zadziałało. Agent sam wybrał właściwe narzędzia, pobrał aktualne dane i przygotował odpowiedź.
Dane to nie to samo co dobra interpretacja
Pierwsza analiza była jednak zbyt pewna siebie. Hermes potraktował regenerację 100% jako niemal automatyczną zgodę na ciężki trening. To pokazało, że prawidłowo pobrane dane nie gwarantują jeszcze prawidłowych wniosków.
Lepsze rezultaty daje bardziej precyzyjne polecenie:
Pobierz aktualne dane z COROS.
Najpierw pokaż konkretne wartości, a potem ostrożne wnioski.
Nie traktuj statusu „Heavy training allowed” jako automatycznej
zgody na mocny trening. Jeżeli brakuje danych, zaznacz to.
Najbardziej rozsądne podsumowanie brzmiało:
Aktualne dane COROS wskazują na dobrą wydolność i pełną regenerację według algorytmu urządzenia. Nie wystarczają jednak samodzielnie do oceny gotowości do wielogodzinnego wysiłku. Wnioski powinny uwzględniać również samopoczucie, ostatnie treningi, cel startu i aktualny stan zdrowia.
To najważniejsza lekcja z całego testu: MCP rozwiązuje problem dostępu do danych, ale nie eliminuje ryzyka nadinterpretacji przez model.
Podsumowanie
Pierwsza wersja projektu nauczyła mnie eksportować i porządkować dane treningowe. Nowa pozwala korzystać z nich na bieżąco.
Zamiast ręcznego procesu:
Strava → eksport → importer → JSON/MD → AI
mam teraz:
COROS → MCP → Hermes → Gemma 4 → WhatsApp
W praktyce mogę zadać pytanie z telefonu i po chwili otrzymać analizę opartą na aktualnych danych z COROS.
Nie jest to jeszcze trener, któremu można bezkrytycznie powierzyć decyzje treningowe. To jednak działający, spersonalizowany asystent, który sam dociera do potrzebnych informacji i nie wymaga ręcznego eksportowania kolejnych plików.