Skip to main content
Glama
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`).