thitiph0n/calorie-tracker-mcp-server
If you are the rightful owner of calorie-tracker-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Calorie Tracker MCP Server is designed to help users track their daily calorie intake and manage their dietary goals with precise BMR/TDEE calculations.
Calorie Tracker MCP Server
MCP server for tracking daily calorie intake with accurate BMR/TDEE calculations. Built on Cloudflare Workers with D1 database.
Features
- Food Tracking: Add, update, delete food entries with macros
- Profile Management: BMR/TDEE calculations using Mifflin-St Jeor equation
- Historical Data: Track weight, body composition over time
- Secure: OAuth 2.1 authentication with PKCE support
Quick Setup
pnpm install
# Create resources and update wrangler.jsonc with IDs
npx wrangler d1 create calorie-tracker
npx wrangler kv:namespace create OAUTH_KV
# Run migrations and start dev server
npx wrangler d1 migrations apply calorie-tracker --local
pnpm run dev
OAuth Client Registration
Set an admin API key:
# Development: Update wrangler.jsonc vars.ADMIN_API_KEY
# Production: Use secrets
npx wrangler secret put ADMIN_API_KEY
Register an OAuth client to obtain credentials:
curl -X POST http://localhost:8787/oauth/register \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_ADMIN_API_KEY" \
-d '{
"client_name": "Claude Desktop",
"redirect_uris": ["http://127.0.0.1/callback", "http://localhost/callback"],
"user_id": "admin"
}'
Note: Claude Desktop will specify its callback URL during the OAuth flow. If you get a redirect URI mismatch error, check Claude Desktop's OAuth logs for the actual callback URL it expects.
Response:
{
"client_id": "uuid-client-id",
"client_secret": "generated-secret",
"client_name": "Claude Desktop"
}
Claude Configuration
Option 1: Bearer Token (Personal/Pro/Max)
Simple authentication using client secret as bearer token:
-
Register OAuth client:
curl -X POST http://localhost:8787/oauth/register \ -H "Content-Type: application/json" \ -H "X-API-Key: YOUR_ADMIN_API_KEY" \ -d '{ "client_name": "Claude Desktop", "redirect_uris": ["https://claude.ai/api/mcp/auth_callback"], "user_id": "admin" }'
Save the
client_secret
from response. -
Claude Desktop config (
claude_desktop_config.json
):{ "mcpServers": { "calorie-tracker": { "command": "npx", "args": ["mcp-remote", "http://localhost:8787/sse"], "env": { "BEARER_TOKEN": "<client_secret from registration>" } } } }
Option 2: OAuth with Client Credentials (Team/Enterprise Only)
Private connector with Client ID/Secret:
-
Register OAuth client with callback URL
https://claude.ai/api/mcp/auth_callback
-
Add custom connector in Claude:
- Name: Calorie Tracker
- Remote MCP server URL:
https://YOUR-WORKER.workers.dev/sse
- OAuth Client ID:
<client_id from registration>
- OAuth Client Secret:
<client_secret from registration>
Production Deployment
Deploy to Cloudflare Workers for mobile/web access:
pnpm run deploy
pnpm run migrate
npx wrangler secret put ADMIN_API_KEY
Tools
Food Tracking:
list_entries
- List food entries with paginationadd_entry
- Add food entry with macrosupdate_entry
- Update existing entrydelete_entry
- Delete entry
Profile Management:
get_profile
- Get profile with BMR/TDEE calculationsupdate_profile
- Update profile data (height, weight, activity level)get_profile_history
- Historical tracking data
Admin:
register_user
- Register new userrevoke_user
- Revoke user access
BMR/TDEE Calculations
Uses Mifflin-St Jeor equation (gold standard):
Male: BMR = (10 × weight) + (6.25 × height) - (5 × age) + 5
Female: BMR = (10 × weight) + (6.25 × height) - (5 × age) - 161
TDEE: BMR × Activity Multiplier
(1.2 - 1.9)
Development
pnpm test # Run tests
pnpm run type-check # TypeScript validation
pnpm run deploy # Deploy to production
pnpm run migrate # Run migrations on remote
Tech Stack
- Runtime: Cloudflare Workers
- Database: D1 (SQLite)
- Language: TypeScript
- Validation: Zod
- Testing: Vitest