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
Latest Blog Posts
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