pushinglimits-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@pushinglimits-mcp What are my CTL, ATL, and TSB for this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
pushinglimits-mcp
Lokaler MCP-Server (stdio) für Trainingsdaten aus Pushing Limits Club. Liefert Plan, Ist, TSS und CTL/ATL/TSB ohne Browser, damit Claude Desktop jeden Morgen das Trainings-Cockpit befüllen kann, so wie mit dem Garmin-MCP.
Spezifikation und Login-Analyse: SPEC.md.
Privates Hobbyprojekt ohne Verbindung zu Pushing Limits Club. Der Server liest ausschließlich die Daten des eigenen Accounts über die interne API der Web-App, die sich jederzeit ändern kann. Nutzung auf eigene Verantwortung.
Wie der Login funktioniert
Zugangsdaten liegen ausschließlich im macOS-Schlüsselbund (Service
pushinglimits-mcp). Der Server liest E-Mail und Passwort zur Laufzeit mitsecurity find-generic-password.Login:
POST /api/user/login_sessionmit{email, password}. Die Antwort setzt ein HttpOnly-Session-Cookie. Alle weiteren Aufrufe laufen nur mit diesem Cookie.Das Cookie wird unter
~/Library/Application Support/pushinglimits-mcp/session.json(Rechte 600) gespeichert. Cloudflare-Cookies (__cf_bm) werden nicht gespeichert.Ablauf pro Request: Session laden, Request, bei 401/403 genau ein Re-Login, Request wiederholen. Schlägt das fehl, kommt
{"error": "login_failed", "reason": ...}zurück. Es gibt keinen Retry-Loop; Timeout 20 s.
Related MCP server: TrainingPeaks MCP Server
Einrichtung
Passwort einmalig in den Schlüsselbund legen (ohne spitze Klammern, Passwort wird abgefragt):
security add-generic-password -s pushinglimits-mcp -a deine@mail.de -wRepo klonen und Abhängigkeiten installieren:
git clone https://github.com/davidpetras92-sys/pushing-limits-mcp.git ~/mcp/pushinglimits-mcp cd ~/mcp/pushinglimits-mcp && uv syncIn
~/Library/Application Support/Claude/claude_desktop_config.jsonuntermcpServerseintragen. Claude Desktop braucht absolute Pfade,~also durch den eigenen Home-Ordner ersetzen (Pfad zuuvmitwhich uvprüfen):"pushinglimits": { "command": "/Users/DEIN-NAME/.local/bin/uv", "args": ["--directory", "/Users/DEIN-NAME/mcp/pushinglimits-mcp", "run", "pushinglimits-mcp"] }Claude Desktop neu starten. Beim ersten Zugriff fragt macOS einmal nach Erlaubnis für den Schlüsselbund. Dort „Immer erlauben" wählen, sonst hängt der Server im Hintergrund.
Tools
Datumsparameter immer YYYY-MM-DD, Tagesgrenzen in Europe/Berlin.
pl_status()
{"logged_in": true, "user_name": "deine@mail.de", "checked_at": "2026-09-25T13:17:03+02:00"}pl_get_pmc(start_date, end_date)
Eine Zeile pro Tag, eine Nachkommastelle. tss ist die Tageslast (load der API).
[{"date": "2026-09-24", "ctl": 100.1, "atl": 133.6, "tsb": -33.6, "tss": 98.0},
{"date": "2026-09-25", "ctl": 98.4, "atl": 116.1, "tsb": -17.7, "tss": 0.0}]pl_get_workouts(start_date, end_date)
Kompakte Liste ohne description. Dauer in Minuten, Distanz in km (wie von der API geliefert),
tss_is = pss, tss_plan = loadEstimate, planned = belongsToActivatedPlan.
[{"date": "2026-09-22", "order": 1, "name": "Aktivierungslauf", "sport": "Laufen", "planned": true,
"duration_min_is": 37.7, "duration_min_plan": 40.0, "distance_is": 5.6, "distance_plan": 0,
"tss_is": 28.0, "tss_plan": 29.0, "hr_avg_is": 145, "hr_avg_plan": 0, "power_avg_is": 345}]pl_get_week(date)
Montag bis Sonntag der Woche, mit Summen und Status je Einheit:
erledigt (Ist-Dauer vorhanden), ausgelassen (Tag vorbei, keine Ist-Dauer), sonst offen.
Einheiten des heutigen Tages bleiben bis Mitternacht offen.
{"week_start": "2026-09-21", "week_end": "2026-09-27", "tss_is_sum": 418.0, "tss_plan_sum": 584.0,
"workouts": [{"date": "2026-09-23", "order": 3, "name": "30min Mobility/Blackroll", "sport": "Kraft",
"planned": true, "duration_min_is": 0.0, "duration_min_plan": 30.0, "tss_is": 0.0,
"tss_plan": 23.0, "status": "ausgelassen"}]}pl_get_thresholds()
{"ftp": 271, "threshold_run": 311, "threshold_swim": 110, "weight": 93.2,
"max_hr": 198, "resting_hr": 55, "updated_at": "2026-09-24T18:31:40.683Z"}Fehlerbehebung
Antwort | Bedeutung | Abhilfe |
| Kein Eintrag | Befehl aus Schritt 1 ausführen; beim macOS-Dialog „Immer erlauben" wählen |
| Server lehnt E-Mail/Passwort ab | Eintrag löschen ( |
| Pushing Limits verlangt ein Cloudflare-Captcha (HTTP 428) | Später erneut versuchen oder einmal im Browser einloggen; tritt das dauerhaft auf, Browser-Login-Skript ergänzen |
| Direkt nach erfolgreichem Login weiterhin 401/403 | Session-Datei löschen und erneut versuchen; sonst API-Änderung prüfen |
| Timeout (20 s) oder keine Verbindung | Netz prüfen, erneut versuchen |
| Unerwarteter Status oder kein JSON | Endpoint in SPEC.md gegen die Web-App prüfen (JS-Bundle |
Abgelaufene Session | Wird automatisch erkannt (401) und einmal erneuert | Nichts zu tun; notfalls |
Session-Datei zurücksetzen:
rm ~/Library/Application\ Support/pushinglimits-mcp/session.jsonEntwicklung
uv sync
uv run pytestDie Tests nutzen gemockte HTTP-Antworten und keine echten Zugangsdaten.
Lizenz
MIT, siehe LICENSE.
Available Tools
5 toolspl_get_pmcA
Performance management chart (CTL/ATL/TSB/TSS per day). Dates YYYY-MM-DD, Europe/Berlin.
Inputs: end_date (required), start_date (required). Returns: result
pl_get_thresholdsB
Current thresholds: ftp, threshold_run, threshold_swim, weight, max_hr, resting_hr, updated_at.
Inputs: no named parameters.
pl_get_weekB
Monday-Sunday week containing the date: TSS sums plus workouts with status erledigt/offen/ausgelassen.
Inputs: date (required).
pl_get_workoutsA
Planned and completed workouts between two dates (YYYY-MM-DD, inclusive, Europe/Berlin).
Inputs: end_date (required), start_date (required). Returns: result
pl_statusA
Login check against Pushing Limits Club. Returns logged_in, user_name, checked_at.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
pl_get_workouts and pl_get_week both expose workout data, with pl_get_week adding TSS aggregation, so an agent may need to read descriptions carefully. The other three tools are clearly distinct.
All tools share the pl_ prefix and most use pl_get_<resource>; pl_status breaks the pattern slightly but is still predictable.
Five tools is well-scoped for a read-only training-data server; each endpoint covers a distinct data area without bloat.
Core athlete data is covered: auth status, performance management chart, workouts, weekly summaries, and thresholds. Missing write operations or single-workout detail are not significant if the server is intentionally read-only, but the overlap between workouts and week leaves a small gap for more granular queries.
Maintenance
Related MCP Connectors
Connect Claude to your Intervals.icu watch data for fitness, workout review, and plan writing.
Apple Health training load, recovery, HRV and workout detail for Claude, ChatGPT and any MCP client.
tri-train is a training platform for triathletes that syncs activities from Strava and Garmin and exposes them to Claude through a remote MCP server. Ask Claude how your last block went, why your run pace dropped, or whether you are fresh enough for Sunday's race, and it answers from your real data: activities with laps and grade-adjusted pace, weekly load and the performance management chart (CTL/ATL/TSB), sleep, HRV and resting heart rate, and your race calendar with predictions. Claude can also act: create and adjust planned workouts with structured intervals, push them to your Garmin watch, add races and write notes. Every change is journaled and can be undone. Read and write access are separate OAuth scopes, and the server enforces them on every call. Built and hosted in Switzerland by a triathlete; data stays on our own servers (Swiss revDSG / GDPR).
Garmin data in Claude: 135 tools — activities, sleep, HRV, training, workouts. Free, open source.
Related MCP Servers
- AlicenseAqualityBmaintenanceProvides Claude Code and Claude Desktop with safe, read-only access to your local Garmin training data, readiness decisions, run details, and trends so you can get coaching advice in natural language.15164 PyPI9MIT
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants like Claude to query and manage endurance-training data through natural language, including workouts, structured intervals, calendars, events, workout libraries, strength sessions, health metrics, equipment, and coach tools. Provides fitness trend analysis (CTL/ATL/TSB), power and running PRs, FTP and zone updates, and annual training plan targets without requiring API approval, using keyring-stored cookie authentication.-
- FlicenseNot gradedqualityBmaintenanceConnects TrainingPeaks accounts to Claude and other AI assistants through natural-language access to workouts, structured interval building, calendar and event management, health metrics, equipment, and coaching tools. Uses secure cookie authentication stored in the system keyring, so no official API approval is required for any account.-
- AlicenseNot gradedqualityAmaintenanceEnables read-only access to WHOOP recovery, sleep, HRV, strain, and workout data so users can ask natural-language questions about their personal health history, trends, and baselines inside Claude, Codex, or GitHub Copilot. It also provides HYROX and triathlon session analysis, race readiness checks, and a local performance dashboard.17 npmMIT