A hosted nutrition tracker that replaces apps like MyFitnessPal with a conversational interface. It exposes 20+ tools for logging meals and water, tracking macros against daily goals, viewing summaries by date range, and analyzing trends like seven-day averages, streaks, and meal patterns. Built on Supabase for persistence with OAuth authentication, so your data survives across sessions. You can self-host with the included Dockerfile or use the public instance at nutrition-mcp.com. Reach for this if you want macro tracking without switching contexts or if you're building diet coaching workflows that need structured nutrition data inside Claude.
A remote MCP server for personal nutrition tracking — log meals, track macros, log water and body weight, and review nutrition history through conversation.
Help me pay for the servers on Patreon
Already hosted and ready to use — just connect it to your MCP client:
https://nutrition-mcp.com/mcp
On Claude.ai: Customize → Connectors → + → Add custom connector → paste the URL → Connect
On first connect you'll be asked to register with an email and password. Your data persists across reconnections.
Switching from another tracker? See the nutrition-app alternatives — how it compares to MyFitnessPal, Cronometer, Lose It!, MacroFactor, Yazio, and Lifesum.
Read the story behind it: How I Replaced MyFitnessPal and Other Apps with a Single MCP Server
| Tool | Description |
|---|---|
log_meal | Log a meal with description, type, calories, macros, notes — from text or a photo of your plate |
lookup_barcode | Look up a packaged product's verified macros by barcode via Open Food Facts (read from a photo or typed) |
get_meals_today | Get all meals logged today |
get_meals_by_date | Get meals for a specific date (YYYY-MM-DD) |
get_meals_by_date_range | Get meals between two dates (inclusive) |
search_meals | Search past meals by keyword, grouped into recurring variations (counts, last logged, typical macros) |
get_nutrition_summary | Daily nutrition totals + goal progress for a date range |
update_meal | Update any fields of an existing meal |
delete_meal | Delete a meal by ID |
set_nutrition_goals | Set daily calorie, macro, and water targets, plus an optional target weight |
get_nutrition_goals | Get the current daily targets |
get_goal_progress | Get intake vs. targets for a given day (default: today), plus latest weight vs. target |
log_water | Log a hydration entry in milliliters |
get_water_today | Get today's water intake total and entries |
get_water_by_date | Get water intake for a specific date |
delete_water | Delete a water log entry by ID |
log_weight | Log a body-weight measurement in kg or lb (converted and stored server-side) |
get_weight_today | Get today's weight entries |
get_weight_by_date | Get weight entries for a specific date |
get_weight_by_date_range | Get weight entries between two dates (inclusive), grouped by day |
get_weight_trends | Weight trend: latest, overall change, 7/14/30-day moving averages, min/max, and goal progress |
update_weight | Update an existing weight entry |
delete_weight | Delete a weight entry by ID |
set_weight_unit | Set the preferred weight unit (kg or lb; null to clear) |
get_weight_unit | Get the preferred weight unit |
get_trends | 7/14/30-day averages, std dev, streaks, day-of-week, best/worst day |
get_meal_patterns | Pre-aggregated behavioural patterns (breakfast effect, late dinner, weekend vs weekday, outliers) |
export_meals | Export all meals as a CSV and return a 60-minute download link |
set_timezone | Set the user's IANA timezone (e.g. America/Los_Angeles) |
get_timezone | Get the user's configured timezone |
set_widget_display | Enable or disable the in-chat visual widgets (dashboards, rings, charts); enabled by default |
get_widget_display | Get whether the in-chat visual widgets are enabled |
delete_account | Permanently delete account and all associated data |
| URI | Description |
|---|---|
nutrition://weekly-summary | Rolling 7-day digest (averages vs targets, best/roughest day) for proactive pulls |
Create a Supabase project.
Enable Email Auth (Authentication → Providers → Email) and disable email confirmation.
Apply the schema. The full schema lives in supabase/migrations/. With the Supabase CLI:
supabase link --project-ref <your-project-ref>
supabase db push
This creates every table, index, RLS policy, and foreign key the app needs. No local Postgres is involved — migrations run against your hosted project.
Copy the service role key from Project Settings → API and use it as SUPABASE_SECRET_KEY.
| Variable | Description |
|---|---|
SUPABASE_URL | Your Supabase project URL |
SUPABASE_SECRET_KEY | Supabase service role key (bypasses RLS) |
OAUTH_CLIENT_ID | Random string for OAuth client identification |
OAUTH_CLIENT_SECRET | Random string for OAuth client authentication |
GOOGLE_CLIENT_ID | (optional) Google OAuth client ID for "Sign in with Google" |
GOOGLE_CLIENT_SECRET | (optional) Google OAuth client secret |
OFF_USER_AGENT | Open Food Facts User-Agent for barcode lookups, in the form AppName (email) |
PORT | Server port (default: 8080) |
Making it yours: The public site includes the maintainer's personal bits — Google Analytics, Patreon/GitHub/contact links, and the
nutrition-mcp.comdomain. Runbun run depersonalizeto strip them all in one pass (analytics + CSP, the Support/Contact sections, social links, and the domain → ayour-domain.complaceholder). Usebun run depersonalize --dryto preview without writing. Afterwards, swap in your ownpublic/og.png,favicon.ico, andapple-touch-icon.png, and replace the domain placeholder with your real domain.
Generate OAuth credentials:
openssl rand -hex 16 # use as OAUTH_CLIENT_ID
openssl rand -hex 32 # use as OAUTH_CLIENT_SECRET
Email/password works out of the box. To also offer "Continue with Google",
follow docs/google-auth-setup.md to create a
Google OAuth client, enable the Google provider in Supabase, and set
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET.
bun install
cp .env.example .env # fill in your credentials
bun run dev # starts with hot reload on http://localhost:8080
https://nutrition-mcp.com/mcp| Endpoint | Description |
|---|---|
GET /health | Health check |
GET /.well-known/oauth-authorization-server | OAuth metadata discovery |
POST /register | Dynamic client registration |
GET /authorize | OAuth authorization (shows login page) |
POST /approve | Login/register handler |
POST /token | Token exchange |
GET /favicon.ico | Server icon |
ALL /mcp | MCP endpoint (authenticated) |
The project includes a Dockerfile for container-based deployment.
8080io.github.infoinlet-marketplace/mcp-observability
betterdb-inc/monitor
com.mcparmory/datadog
thotischner/observability-mcp
io.github.tantiope/datadog-mcp
io.github.us-all/datadog