# Using the Adulting MCP server

Adulting (https://adultingtheapp.com) is the calm operating system for adult
life: Today plans, To-Dos, recurring life maintenance ("Adulting"), Goals with
the Perfect Day exercise, and Quarterly Reviews. It is **agent-native** — this
document is the stable, supported surface for AI agents.

## Connect

- **Endpoint:** `POST https://app.adultingtheapp.com/api/mcp`
- **Transport:** MCP Streamable HTTP, stateless (one JSON-RPC message per
  POST, one JSON response; no SSE stream, no sessions)
- **Auth:** `Authorization: Bearer adlt_sk_…`
- Keys are created by the user in the app: **Settings → API access**
  (included in the Paid plan). Keys are hashed at rest, shown once, and
  revocable instantly.

Claude Code:

```
claude mcp add adulting --transport http https://app.adultingtheapp.com/api/mcp \
  --header "Authorization: Bearer YOUR_KEY"
```

## Permission scopes

| Scope   | Allows |
|---------|--------|
| `read`  | Read everything, change nothing |
| `todos` | Read everything + create to-dos + add items to the Today plan |
| `full`  | Read + create + update across every module |

**No scope can hard-delete anything.** Deletes are human-only in the app UI,
so nothing an agent does is unrecoverable.

Writes land in the database immediately; the user's app picks them up on its
next load.

## Tools

Read (all scopes):

- `get_overview` — workspace snapshot: counts per module, the Today plan,
  to-dos due within 14 days. Call this first.
- `list_todos` — to-dos with status filter (`open` default / `completed` /
  `all`): size, priority, due date, project, Today flag, source.
- `list_adulting` — categories → items → recurring reminders (title, cadence,
  next due, priority).
- `list_adulting_suggestions` — the built-in catalog of ~150 curated
  suggestions (optional `categorySlug` filter: home, car, health, money,
  documents, digital, family, pets, seasonal, misc). Cross-reference with
  `list_adulting` to find gaps.
- `list_goals` — goals (horizon 1y–10y, status, target date, notes),
  projects, and the Perfect Day journal text.
- `list_reviews` — quarterly reviews: reflection (worked / didn't), goal
  check-ins, next-quarter focus areas + intentions.

Write (`todos` and `full`):

- `create_todo` — `{ title, size?, priority?, dueDate?, notes?, onToday? }`
  (onToday requires size: big | medium | small).
- `add_todo_to_today` — `{ todoId, size }`.

Write (`full` only):

- `update_todo` — patch title / size / priority / dueDate / notes /
  completed / onTodayPlan.
- `create_adulting_item` — `{ categoryId | categorySlug, title, notes?,
  reminders?: [{ title, nextDue, priority?, recurrence?: { interval, unit } }] }`.
  Reminders become recurring to-dos automatically.
- `update_adulting_reminder` — patch title / nextDue / priority / recurrence;
  the linked to-do stays in sync.
- `create_goal` — `{ title, horizon?, targetDate?, notes? }`.
- `update_goal` — patch title / horizon / status (active | paused | achieved) /
  targetDate / notes.
- `update_perfect_day` — replace the Perfect Day journal text (full text,
  overwrites).
- `update_review` — patch a **draft** review's reflection and/or nextQuarter
  lists. Finalizing stays in the app.

Dates are `YYYY-MM-DD`. Sizes: `big | medium | small`. Priorities:
`high | med | low`. Recurrence units: `day | week | month | year`.

## Example workflows

- **Plan the day:** `get_overview` → discuss → `add_todo_to_today` /
  `create_todo` with `onToday: true`.
- **Stock life admin from calendar/email:** read those via your own
  connectors → `create_adulting_item` per recurring obligation (with a
  sensible reminder cadence), confirming with the user as appropriate.
- **Fill Adulting gaps:** `list_adulting` + `list_adulting_suggestions` →
  propose missing items → `create_adulting_item`.
- **Goal coaching:** interview the user (Perfect Day method) →
  `update_perfect_day` → `create_goal` with horizons.
- **Quarterly review prep:** `list_todos` (completed) + `list_goals` +
  `list_reviews` → draft reflections → `update_review`.

## Errors

- `401` — missing/invalid/revoked key. Ask the user to create one in
  Settings → API access.
- `403` — the account isn't on a Paid plan.
- Tool-level failures return MCP results with `isError: true` and a
  human-readable message — read it and adjust.

## More

- Human-formatted docs: https://adultingtheapp.com/agents
- The app: https://app.adultingtheapp.com
