Health Coach MCP

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.

Category
Visit Server

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 example https://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_TOKEN and PERSONAL_CONNECTOR_USER_ID: private single-user connector URL fallback for clients that cannot send bearer headers or complete OAuth.
  • DEV_AUTH_TOKEN and DEV_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 /health
  • GET /ready
  • POST /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

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured