Health Coach MCP
A personal health and fitness MCP server that provides tools for managing profile data, goals, body measurements, nutrition, workouts, sleep, check-ins, life events, analytics, and coach memories via Supabase Postgres.
README
Health Coach MCP
A personal health and fitness MCP server backed by Supabase Postgres. It exposes tools for profile data, goals, body measurements, nutrition, workouts, sleep, check-ins, contextual life events, analytics, and coach memories over MCP Streamable HTTP.
The server is built for private, user-scoped use: every tool call resolves the authenticated user from the request token, not from tool input.
Architecture
flowchart LR
claude["Claude / MCP client"] -->|Streamable HTTP| hono["Hono app"]
subgraph app["Health Coach MCP server"]
hono --> auth["Auth middleware"]
hono --> mcp["MCP transport"]
hono --> oauth["OAuth consent UI"]
mcp --> tools["MCP tools"]
tools --> services["Domain services"]
services --> repos["Repositories"]
end
auth -->|JWKS validation| supabaseAuth["Supabase Auth"]
oauth -->|OAuth 2.1 / PKCE| supabaseAuth
repos -->|Drizzle ORM| postgres["Supabase Postgres"]
services --> domains["Profiles, goals, measurements, nutrition, workouts, sleep, check-ins, events, analytics, memories"]
Stack
- Node.js 24
- TypeScript
- Hono
- MCP TypeScript SDK
- Drizzle ORM
- Supabase Postgres
- Vitest
Configuration
Copy the sample environment and fill in the values for your Supabase project:
cp .env.example .env
Required for production:
DATABASE_URL: Supabase pooled Postgres URL. Use the transaction-mode pooler on Railway.PUBLIC_BASE_URL: public HTTPS origin for the deployed server, for examplehttps://health-coach-mcp-production.up.railway.app.SUPABASE_URL: your Supabase project URL.SUPABASE_PUBLISHABLE_KEY: public browser key used by the OAuth consent page.
Optional:
SUPABASE_OAUTH_ISSUER: explicit Supabase OAuth issuer. Defaults to${SUPABASE_URL}/auth/v1.SUPABASE_JWKS_URL: explicit JWKS URL. Defaults to${SUPABASE_URL}/auth/v1/.well-known/jwks.json.PERSONAL_CONNECTOR_TOKENandPERSONAL_CONNECTOR_USER_ID: private single-user connector URL fallback for clients that cannot send bearer headers or complete OAuth.DEV_AUTH_TOKENandDEV_AUTH_USER_ID: local development only.
Do not commit .env.
Commands
pnpm install
pnpm format
pnpm lint
pnpm typecheck
pnpm test
pnpm test:integration
pnpm test:e2e
pnpm build
Local Development
pnpm install
pnpm dev
The service exposes:
GET /healthGET /readyPOST /mcp
/mcp expects Authorization: Bearer <Supabase access token>. For local development only, DEV_AUTH_TOKEN can be used instead.
Database
Migrations live in supabase/migrations.
For local Supabase:
pnpm db:start
pnpm db:reset
For hosted Supabase, apply migrations with the Supabase CLI:
supabase db push --db-url "$DATABASE_URL"
Claude Connector
For the real multi-user flow, enable Supabase Auth's OAuth 2.1 Server and Dynamic Client Registration in the Supabase dashboard. Then add the deployed MCP endpoint in Claude:
Use the deployed MCP endpoint:
https://YOUR_PUBLIC_HOSTNAME/mcp
Leave OAuth client ID and secret blank when Dynamic Client Registration is enabled.
For private development only, if Claude cannot complete OAuth for your custom connector, use the connector-token fallback:
https://YOUR_PUBLIC_HOSTNAME/mcp?connector_token=YOUR_RANDOM_CONNECTOR_TOKEN
Treat that URL as a secret. It maps every request to the configured PERSONAL_CONNECTOR_USER_ID.
Deployment
Railway is the recommended first deployment target. Set production variables in Railway, deploy the Node service, then confirm:
curl https://YOUR_PUBLIC_HOSTNAME/health
curl https://YOUR_PUBLIC_HOSTNAME/ready
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.