How the connector works
What it does
The connector lets your assistant (Claude, ChatGPT, Grok or another MCP client) look at and update your own Planner for People planner: projects, tasks, day plans, check-ins, the inbox, meals and groceries. It can only do what the tiers you switch on allow.
What you need
- The Planner for People app on your iPhone or Mac.
- An Apple ID.
- The “Claude connector” switch turned on in the app’s Settings.
Connecting
The connector’s address is:
https://pfp-connector-151446722284.us-west1.run.app/mcp
- Claude: go to Customize → Connectors, then add the connector from the directory, or add a custom connector with the address above.
- ChatGPT: use the plugin listing, or add a custom connector with the same address.
- Grok: go to grok.com/connectors → New Connector → Custom, and enter the same address.
Linking your planner
When you connect, the connector shows a code. Then:
- Open Planner for People on your iPhone or Mac.
- Go to Settings, then Claude connector.
- Enter this code and press Link.
- Come back here and press “I entered the code”.
The code works for 10 minutes and only once.
You use one account on all your devices, through Sign in with Apple.
Tiers
Tools come in tiers that you switch on in the app’s Connector settings. Read, Propose and Write are on by default.
- Read: look at everything in your planner.
- Propose: offer day-plan options that you pick from.
- Write: change projects, tasks, plans, check-ins and the inbox.
- Calendar: see busy time and write plan blocks to the app’s calendar.
Calendar tools are not offered through this connector.
Tools
This list is generated from the connector itself, so it is always current.
| Tool | Tier | What it does |
|---|---|---|
list_projectsList projects | Read | List projects (optionally under a parent), with open-task counts, depth, goal and derived progress (fraction, milestones done of total, days since moved, what each still needs). |
get_projectGet a project | Read | One project with its child projects and tasks. |
create_projectCreate a project | Write | Create a project or sub-project (optionally with its goal and payoff). |
update_projectUpdate a project | Write | Change a project's title, note, goal, payoff, dates, status, work order or tags. |
move_projectMove a project | Write | Move a project under another parent (or to the root) and/or reorder it. |
list_tasksList tasks | Read | List tasks with filters (project subtree, status, due before, flagged, available). |
get_taskGet a task | Read | One task with its project, subtasks and dependencies. |
create_taskCreate a task | Write | Create a task (estimate, energy, urgency, dates, dependencies, recurrence; a top-level task of a project can be a milestone). |
update_taskUpdate a task | Write | Change a task's fields. |
move_taskMove a task | Write | Move a task to another project/parent and/or reorder it. |
complete_taskComplete a task | Write | Mark a task done (logs the check-off and spawns the next repeat). For a task in a project, `progress` says what it did for the project: fraction before and after, a milestone reached, or the project finished. |
get_today_contextGet today's context | Read | Everything about today: mode, plan, protected blocks, busy times, check-ins, evidence so far, consistency, candidate tasks. If `nope` is present the person cleared the day on purpose; rebuild gently from what was planned, including the tasks, meals and calendar it lists under `cleared` (tasks it dropped come back with the day), and never scold. If glance.lateStart is present, nothing today has started yet; offer reflow_day with startingNow. `progress` lists the active projects (season picks first) with their derived fraction, current milestone and next step; `needsDeepDive` lists projects that still need a goal, payoff, ladder or review; if `deepDive` is present the person opened you from a project: do that deep dive instead of planning the day. Statuses are 'carried', never 'missed'. |
get_checkin_historyGet check-in history | Read | Recent check-ins (energy, mood, free text). |
get_week_ledgerGet the week ledger | Read | Per-day outcomes and the rolling consistency score. Statuses are 'carried', never 'missed'. |
propose_day_planPropose day plans | Propose | Offer 1–3 day-plan options for the person to pick from (does not change the plan). If `nope` is present the person cleared the day on purpose; rebuild gently from what was planned, including the tasks, meals and calendar it lists under `cleared` (tasks it dropped come back with the day), and never scold. Answers today's open handoff. A rules plan during an open request is a small start; propose options that keep its done blocks. |
commit_day_planCommit a day plan | Write | Write today's (or a day's) plan as committed blocks. Answers today's open handoff. A rules plan during an open request is a small start; propose options that keep its done blocks. |
log_checkinLog a check-in | Write | Record a check-in on the person's behalf. A rules plan during an open request is a small start; propose options that keep its done blocks. |
list_inboxList inbox items | Read | Items the person sent from the phone to the desktop. |
mark_inboxMark an inbox item | Write | Mark an inbox item seen or handled, with a note. |
get_settingsGet settings | Read | Planner, notification and evidence settings (no secrets). |
list_recipesList recipes | Read | Recipes (active by default) with servings, calories per serving and ingredient lines. Calories are information the person asked to keep; never comment on them unless asked. |
create_recipeCreate a recipe | Write | Create a recipe (title, servings, calories per serving + source, ingredients one per line, notes). Calories are information the person asked to keep; never comment on them unless asked. |
update_recipeUpdate a recipe | Write | Change a recipe's fields or archive/restore it. Calories are information the person asked to keep; never comment on them unless asked. |
list_meal_plansList planned meals | Read | Planned meals in a day range, each with its resolved calories and recipe title. Calories are information the person asked to keep; never comment on them unless asked. |
plan_mealPlan a meal | Write | Plan a meal (create or update): day, slot, recipe, servings, explicit calories, notes, status. Calories are information the person asked to keep; never comment on them unless asked. |
consume_meal_planRecord a planned meal as eaten | Write | Record a planned meal as eaten: creates the food entry with frozen calories and completes the plan. Calories are information the person asked to keep; never comment on them unless asked. |
record_foodRecord food eaten | Write | Record food eaten (not from a plan): day, slot, recipe or free text, servings, calories. Calories are information the person asked to keep; never comment on them unless asked. |
get_nutrition_historyGet nutrition history | Read | Per-day consumed and planned kcal for the 7 days ending on a day, with unknown/estimated counts and the target. Calories are information the person asked to keep; never comment on them unless asked. |
list_grocery_listsList grocery lists | Read | Grocery lists (active by default) with their items sorted by category. |
create_grocery_listCreate a grocery list | Write | Create a grocery list with up to 40 items. |
update_grocery_itemsUpdate grocery items | Write | Check, uncheck, archive or add items on a grocery list; archive or rename the list. |
generate_grocery_listGenerate a grocery list | Write | Build a grocery list from the planned meals in a day range (one item per distinct ingredient line). |
update_meal_settingsUpdate meal settings | Write | Change meal times, meal block length, kcal target, eating pattern, allergies, prep days, shopping reminder. Calories are information the person asked to keep; never comment on them unless asked. |
set_block_statusSet a block's status | Write | Mark one of today's blocks done, partly, not today or in progress — only a block the person named in this conversation. Done also checks the block's task off when it is that task's last open block today (taskCompleted, next); changing a Done back reopens a task that Done checked off (taskReopened). Statuses are 'carried', never 'missed'. |
reflow_dayRe-plan the rest of today | Write | Re-plan the rest of today from now, keeping what is done and what the person started; optionally leave some tasks out. startingNow: the person is starting the day now (glance.lateStart): work of earlier blocks nobody answered is carried, in order, ahead of the rest. from: start at a later time today. leftOut lists work that stays on the list for another day. A rules plan during an open request is a small start; propose options that keep its done blocks. |
get_project_progressGet a project's progress | Read | One project's goal, payoff and milestone ladder with derived progress (computed from the tasks, never set), the next step, effort minutes, recent evidence and what it still needs. Start every deep dive here. |
set_ladderSet a project's milestone ladder | Write | Write a project's milestone ladder in one step: 1 to 9 milestones in order, each with what becomes true when it lands and the tasks under it. Matches existing milestones by id or exact title; tasks are always added; replace un-flags milestones left out (nothing is deleted). |
Things to try
- What does my day look like, and what would you plan for the afternoon?
- Add a task to call the dentist, due Friday, low energy, about 15 minutes.
- Plan dinners for this week from my recipes and make the grocery list.
- I’m done with the first block; re-plan the rest of today from now.
- How did this week go?
If something doesn’t work
- “The code expired”: a code works for 10 minutes and only once. Start again from your assistant to get a new one.
- “Not linked yet”: enter the code in the app and press Link, then press the button on the page again.
- Switching the connector off and on: switching it off ends your assistant’s access at once. Switch it back on in the app’s Settings; if your assistant still can’t reach your planner, connect again from the assistant.
- The app must have synced at least once: the connector only sees what the app has sent it. Open the app with the switch on and let it sync before you connect.