Manage Garmin Connect workouts, including strength workouts with mapped exercises.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"io-github-pranciskus-garmin-workouts-mcp": {
"command": "<see-readme>",
"args": []
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
garmin-workouts-mcp is a standalone MCP server for Garmin Connect workouts.
No automated test available for this server. Check the GitHub README for setup instructions.
Five weighted categories — click any category to see the underlying evidence.
No known CVEs.
No package registry to scan.
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in health
MCP server providing seamless access to FHIR APIs for AI tools and healthcare applications
MCP server for the ClinicalTrials.gov v2 API. Search trials, retrieve study details and results, and match patients to eligible trials.
Manage your Hevy workouts, routines, folders, and exercise templates. Create and update sessions faster, organize plans, and search exercises to build workouts quickly. Stay synced with changes so your training log is always up to date.
FHIR MCP Server – helping you expose any FHIR Server or API as a MCP Server.
MCP Security Weekly
Get CVE alerts and security updates for io.github.pranciskus/garmin-workouts-mcp and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
garmin-workouts-mcp is a standalone MCP server for Garmin Connect workouts.
It is intended as a focused extension for workflows that need a bit more structure around Garmin workout payloads, especially strength training.
This project is packaged as a stdio MCP server and can be published as an OCI image for MCP registries and Glama deployment. It is not a standalone public HTTP MCP endpoint.
reps end conditions.preview_workout_payload so payloads can be inspected before upload.validate_workout for early schema and mapping errors.resolve_supported_strength_exercise for quick mapping checks.get_workout_input_schema for machine-readable client integration.walking as a supported sport type, which is also reflected in the prompt/schema.Garmin-backed tools authenticate lazily when they are called:
GARMIN_EMAIL and GARMIN_PASSWORDThe server can start without credentials. Tools that do not talk to Garmin, such as payload preview and schema inspection, still work without secrets.
The upload and preview tools accept a JSON object shaped like this:
{
"name": "Upper Day",
"type": "strength",
"steps": [
{
"stepType": "warmup",
"endConditionType": "lap.button",
"stepDescription": "General warm-up"
},
{
"stepType": "interval",
"exercise": "incline db press",
"endConditionType": "reps",
"stepReps": 8,
"stepDescription": "8-10 reps"
},
{
"stepType": "rest",
"endConditionType": "time",
"stepDuration": 120
}
]
}
For strength exercises, either pass a friendly alias:
{ "exercise": "t bar row" }
or explicit Garmin enums:
{
"exercise": {
"category": "ROW",
"exerciseName": "T_BAR_ROW"
}
}
You can also inspect the accepted structure programmatically through get_workout_input_schema, or resolve likely Garmin strength mappings with resolve_supported_strength_exercise.
Run tests in Docker Compose:
docker compose run --rm tests
Build the runtime image:
docker build -t garmin-workouts-mcp:local .
Smoke test the stdio server startup without Garmin credentials:
python - <<'PY'
import subprocess
proc = subprocess.Popen(
["bash", "-lc", "tail -f /dev/null | docker run --rm -i garmin-workouts-mcp:local"]
)
try:
proc.wait(timeout=5)
print(f"container exited early with code {proc.returncode}")
finally:
if proc.poll() is None:
proc.terminate()
proc.wait()
print("container stayed up for 5 seconds")
PY
The intended OCI image location is:
ghcr.io/pranciskus/garmin-workouts-mcp
Registry metadata lives in server.json. The OCI image carries the required label:
io.modelcontextprotocol.server.name=io.github.pranciskus/garmin-workouts-mcp
Glama ownership metadata lives in glama.json. It declares the GitHub maintainer account that can claim and manage the Glama listing.