MFP Logger
README.md
# MFP Logger
Chat to log food into MyFitnessPal — from your **phone** (Claude / ChatGPT) via an always-on Railway server, or from your Mac terminal.
Say:
> log 2 eggs and a banana for breakfast
…and it lands in your diary (meal + quantity + date).
MyFitnessPal diaries are **meal-based** (Breakfast / Lunch / Dinner / Snacks), not clock timestamps.
---
## Phone setup (Railway — recommended)
Your Mac does **not** need to stay on. Claude’s cloud calls your Railway URL.
### 1. Get an MFP session cookie
On any browser logged into [myfitnesspal.com](https://www.myfitnesspal.com):
1. DevTools → Application → Cookies → `www.myfitnesspal.com`
2. Copy `__Secure-next-auth.session-token` (or the full Cookie header)
### 2. Create a Railway project
1. Push this repo to GitHub (or deploy from the Railway CLI).
2. [railway.app](https://railway.app) → New Project → Deploy from GitHub (Dockerfile is detected).
3. **Variables** (Settings → Variables):
| Variable | Value |
|----------|--------|
| `MCP_AUTH_TOKEN` | long random secret (`python3 -c "import secrets; print(secrets.token_urlsafe(32))"`) |
| `MFP_COOKIE` | the session cookie from step 1 |
| `MFP_USERNAME` | optional MFP username if needed |
4. Service → **Settings** → **Networking** → **Public Networking** → **Generate Domain**
5. Wait until deploy is healthy (`/healthz` should return `{"ok":true,...}`).
### 3. Connect Claude (once on web)
Claude’s custom connector UI often only shows OAuth fields (no Bearer header). Use the **secret path URL** instead:
```text
https://YOUR-APP.up.railway.app/t/YOUR_MCP_AUTH_TOKEN/mcp
```
1. Open [claude.ai/customize/connectors](https://claude.ai/customize/connectors) (same account as iOS).
2. **Add custom connector**
3. Paste that full URL (token is in the path)
4. Leave **OAuth Client ID** and **Client Secret** empty
5. Add / Connect
### 4. Use Claude on iPhone
1. Open Claude iOS → chat → **+** → Connectors → enable this connector
2. Message: `log 2 eggs and a banana for breakfast`
### ChatGPT mobile
Same path URL works. If ChatGPT asks for an API key, you can still paste `MCP_AUTH_TOKEN`, but the path URL alone is enough.
### When the MFP cookie expires
Session cookies die every few weeks. On your phone:
1. Open `https://YOUR-APP.up.railway.app/admin`
2. Enter `MCP_AUTH_TOKEN` + a fresh cookie → Save
3. Also paste the same cookie into Railway **Variables** → `MFP_COOKIE` (so restarts keep it)
---
## Local Mac (optional)
```bash
uv sync
uv run mfp-logger auth # save cookie locally
uv run mfp-logger chat # needs OPENAI_API_KEY — terminal agent
uv run mfp-logger mcp # local MCP for testing only
```
---
## MCP tools
| Tool | Purpose |
|------|---------|
| `search_food` | Search MFP database |
| `log_food` | Log food + quantity + meal + date |
| `quick_add` | Quick-add calories/macros |
| `get_diary` | Read diary for a day |
| `get_goals` | Daily goals |
| `delete_food` | Remove a mistaken entry |
---
## Security
- Treat `MCP_AUTH_TOKEN` like a password. Anyone with
`https://…/t/<token>/mcp` can write to your diary.
- Prefer not sharing that URL; rotate the token in Railway if it leaks.
- Never commit `.env` (contains `MFP_COOKIE`).
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues