This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass chatGPX lets you chat with your own Komoot hiking, running, and cycling history. You log in with your Komoot account, the app downloads your tours as GPX files, and an LLM with tool access answers questions about them. The numbers come from the raw GPS tracks rather than from description text: distance (haversine), elevation gain and loss, elapsed time, and pace, with a monthly breakdown across your whole history. Where Komoot reports its own figures, they are shown alongside as a cross-check.
It is meant to send people outdoors. Questions like "which month did I climb the most?" or "what was my longest hike this year?" turn past outings into a record you can learn from and plan the next one against. It is aimed at hikers, runners, and cyclists who already log activities and want more than a dashboard. It is also a small, reusable example of exposing personal outdoor data to any MCP client.
Chat with your own Komoot hiking/running/cycling activities, and get real statistics computed from the raw GPS data — not just descriptions.
You log in with your Komoot email and password, the app pulls your tours as GPX files, and you can then chat with an LLM (over OpenRouter) that has tool access to that data via an MCP server — including tools that compute real distance, elevation and pace figures from the GPS track itself, not just whatever a description string happens to say.
server.py — an MCP server exposing tools over your downloaded GPX
activities (list_activities, read_activity, get_activity_stats
get_stats_summary, summarize, generate_activity_video) plus a
docs://traces resource.gpx_sync.py — logs in to Komoot and downloads all tours as GPX files
(download_all_gpx(email, password, output_dir=...) -> list[Path])
compatible with what chat_backend.py — connects to OPENAI_BASE_URL and OPENAI_MODEL. app.py):/api/login and /api/chat endpoints..claude and .serena are in the repo].
Statistics are computed in code, not by the model. The LLM decides which tool to call and explains the result, which keeps the figures reproducible.