fitness-mcp
Click on "Install 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., "@fitness-mcpshow my last 3 Garmin activities"
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.
fitness-mcp
A personal, remote MCP server for fitness data:
Garmin Connect activity data via
garminconnectHevy workout data via the Hevy API
Designed to run on a Raspberry Pi behind nginx at something like:
https://mcp.home.owenrumney.co.uk/mcpTools
Garmin
list_garmin_activitieslist_garmin_activities_by_dateget_garmin_last_activityget_garmin_activityget_garmin_activity_detailsget_garmin_activity_splitsget_garmin_activity_weatherget_garmin_activity_types
Hevy
list_hevy_workoutsget_hevy_workoutlist_hevy_routineslist_hevy_routine_folderslist_hevy_exercise_templates
Related MCP server: Hevy MCP
Local setup
Requires Python 3.12+.
uv sync
cp .env.example .envEdit .env, then run the Garmin login helper once if your Garmin account needs MFA:
set -a
source .env
set +a
uv run fitness-mcp-garmin-loginRun the server locally over Streamable HTTP:
uv run fitness-mcp --transport streamable-http --host 0.0.0.0 --port 8000Health check:
curl http://127.0.0.1:8000/healthMCP endpoint:
http://127.0.0.1:8000/mcpIf MCP_AUTH_TOKEN is set, callers must send:
Authorization: Bearer <MCP_AUTH_TOKEN>Docker on Raspberry Pi
cp .env.example .env
mkdir -p data
# edit .env
docker compose build
docker compose run --rm fitness-mcp uv run fitness-mcp-garmin-login
docker compose up -dThe compose file publishes only to localhost:
127.0.0.1:8000 -> container:8000Put nginx in front of it and proxy:
https://mcp.home.owenrumney.co.uk/mcp -> http://127.0.0.1:8000/mcpSee deploy/nginx.conf for an example site config.
Environment
MCP_AUTH_TOKEN=replace-with-a-long-random-value
GARMIN_EMAIL=you@example.com
GARMIN_PASSWORD=replace-me
GARMIN_TOKEN_STORE=/data/garmin
HEVY_API_KEY=replace-me
HEVY_BASE_URL=https://api.hevyapp.com/v1Notes
Garmin Connect uses unofficial/private APIs through
garminconnect, so MFA friction, rate limits, or upstream breakage are possible.The server currently exposes read-only tools only.
If ChatGPT's MCP connector requires OAuth rather than bearer auth, this server will need an OAuth wrapper in front of the same
/mcpbackend.
Maintenance
Related MCP Servers
- AlicenseAqualityFmaintenanceAn MCP server that provides access to Garmin Connect fitness, health, and training data through 61 specialized tools. It enables users to query activities, sleep metrics, and performance stats directly within AI clients like Claude or Cursor.Last updated97164163MIT
- Alicense-qualityCmaintenanceMCP server to interact with Garmin Connect, enabling retrieval of health, activity, and device data through natural language.Last updated63MIT
- Flicense-qualityDmaintenanceMCP server that connects AI assistants to Garmin Connect health and fitness data, enabling natural language queries about workouts, sleep, heart rate, and more.Last updated
Related MCP Connectors
MCP server for Withings health data — sleep, activity, heart, and body metrics.
Create Hevy routines and analyze your training from chat. Unofficial; BYO Hevy PRO API key.
Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/owenrumney/health-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server