All My Ducks
Join the waitlist

The MCP server.

Let your AI assistant work with your promises without leaving the conversation: add one mid-conversation, see what's written down, mark things done.

MCP: bring your assistant

Paste one URL (https://allmyducks.app/mcp, the same for everyone) into Claude, ChatGPT, Vibe, Gemini Enterprise or Grok, authorise with OAuth, and your assistant gets 59 tools: add and complete todos, make and answer asks, renegotiate dates, leave notes, manage teams. It acts as you, with your permissions and nobody else’s.

What it is

MCP (Model Context Protocol) is the open standard AI assistants use to talk to tools. All My Ducks ships a streamable-HTTP MCP server at https://allmyducks.app/mcp. It acts as you, with your permissions and your visibility, the same rules as the app, including the private ones: signals only you see in the app stay only yours. A todo somebody has chosen to show everyone in their workspace, or to you by name or through a team you’re in, is listed and readable, and can be noted on; changing it answers with whose it is.

Where a client supports MCP apps, answers show up as cards you can act on: your list, one commitment, something just added, a new date, your calendar, things that repeat, one series, a series just started or changed, and search results.

Connecting with OAuth (recommended)

In your assistant's settings (claude.ai, ChatGPT, Vibe, Gemini Enterprise or Grok), add a custom connector and give it this URL:

shell
https://allmyducks.app/mcp

Your browser opens to approve the connection: no key to paste. Clients register themselves automatically and sign in with OAuth 2.1 (authorization code + PKCE). Command-line clients work the same way; Claude Code, for example:

shell
claude mcp add --transport http all-my-ducks https://allmyducks.app/mcp

You approve exactly what the consent screen says: the client acts as you, nothing more, and you can cut it off any time from Security.

Connecting with an API key

Clients that let you set a header (CLI tools, libraries, your own code) can send an API key from the API and webhooks page in the app instead of OAuth. A personal key follows your workspace switcher; a workspace key pins the connection to that one workspace:

shell
Authorization: Bearer <your key>

What your assistant can do with it

Everything you can do through the API, with your permissions. The commitment lifecycle:

ToolWhat it does
list-commitments · search · get-commitment · fetch Find and read what involves you: list-commitments takes scope (current by default, or all for every workspace you belong to), closed (recent for what has closed in the last two weeks, or all for everything that ever has; leave it out for open items only) and, with scope set to all, workspaces to name some of them by name or id (list-schedules and list-calendar take it too), and search takes an optional workspace to narrow what is already a search across all of them. get-commitment says who can see a task for yourself and whether it is something to know. Something to know that lasts several days reads in words, as the app’s list says it (“Mon 17 to Fri 21 Jun”, “until Friday”, “ends today”): in what get-commitment and fetch say, and as days on each list-commitments row, beside end_date
add-commitment Add a todo (optionally one everyone in the workspace can see, or one only the people and teams you name can see, and optionally something to know, with nothing to tick off, which can last several days: due_date is its first day and end_date its last), promise someone something, or ask them for one. due_time (HH:MM, needs due_date) makes the date a deadline to the minute; without it, the deadline is the end of that day. For chosen people, visibility is chosen and seen_by lists their first names or the teams’ names, each matching exactly one; add-schedule, change-schedule and reword-commitment take the same two. party is the person or team this involves: a first name, a team’s name, or an id from a previous answer. Omit for a private todo. A name that fits a person and a team asks which, and adds nothing until you say
accept-request · counter-request · decline-request Answer an ask: yes, a new date, or a clear no. counter-request takes due_time too: a time to set, null to drop it, left out to keep the one it has
withdraw-request Take back an ask you made
add-note Leave a note on the timeline: every party sees it
reword-commitment Change the wording (the promiser, or whoever asked while it is still an ask), or who can see a task for yourself, or whether it is something to know, or any of them at once
add-step · tick-step · reword-step · remove-step Add a step to something you are doing, tick or untick it, reword it or remove it: only the person doing it, only while it is open. add-step, reword-step and remove-step take a schedule_id instead for a series’ steps for every time.
add-commitment · reword-commitment · add-schedule · change-schedule Each takes details, a description in Markdown: bold, italic, a heading, lists and links. On reword-commitment and change-schedule, null or an empty string removes it, and nobody is sent anything. change-schedule with only details is open to whoever the series’ rule names, so the person who said yes to a series of asks can change it through your assistant. Writing or changing one comes with Plus, and a refusal says so. get-commitment and fetch give it under “Description:”, as stored.
delete-todo · restore-todo Delete a task for yourself, or bring a deleted one back within thirty days: shared promises are wrapped up, never erased
move-todo · move-schedule Move a todo or a series to another of your workspaces: only one with just you in it moves
mark-done · reopen Mark a promise you kept as done, or open a done one again if it turned out not to be
renegotiate Pick a new date, with a note: changing the plan is normal here. due_time sets a time, null drops it, and leaving it out keeps the one it has. For something to know, end_date sets its last day, null makes it one day, and leaving it out keeps the last day it has
ask-release · release · keep-promise · pick-up Ask off the hook, let someone off, keep it as agreed, or pick a released promise back up
add-schedule · list-schedules · get-schedule · change-schedule · end-schedule · restart-schedule · delete-schedule · skip-occurrence · check-schedule-source Things that repeat: start a series (from a plate, domain or company number where a date can be looked up, and optionally one everyone can see, or one that is something to know), see them (list-schedules takes scope: current by default, or all for every workspace you belong to), read one (both say when a series is of things to know), change what it is called, what it repeats as, how far ahead the next one appears, who can see it or whether it is something to know, end one, start it again, delete one that is only yours, skip this one, or ask the source now. for is who it is for, a person’s first name or a team’s name here, or an id from a previous answer; it makes it a promise unless kind says request
list-calendar The dates things that repeat will land on between two days, for one workspace, every one you belong to, or some of them
add-commitment · add-schedule · add-step · invite-member Some limits depend on the plan; a refusal says which.

Workspaces, people and teams, with the same rules as the app:

ToolWhat it does
whoami Who your assistant is acting as: your name, the email this workspace knows you by, your time zone, which country’s templates and calendars apply, where you are and what the add box does with a title it writes
set-preferences Your own settings: how the add box handles a title it writes, which country’s templates and calendars apply, and how you hear about things
list-workspaces · switch-workspace See where you are and move between workspaces
create-workspace · rename-workspace Start one (a home or a team), or rename one you admin and change the colour it wears
list-members · invite-member Who’s here; invite by email (admins)
change-member-role · remove-member Roles and departures (admins, last admin stays). If you are the only person in a shared workspace, removing yourself deletes that workspace
leave-workspace Leave one. If you are the only one left in it, it goes with you
list-teams · create-team Groups you can promise things to or ask, in a work workspace. A home is one group, so create-team is refused there, as it is in Personal
add-team-member · remove-team-member Put a workspace member on a team: a team owner or a workspace admin. Take someone off a team: a team owner or a workspace admin takes anyone off; members may step off themselves. The last owner stays.
rename-team Rename a team (an admin or one of its owners)
delete-team Remove a team: open asks to it end, promises taken on stay with the person
list-projects The projects in the workspace you are in, each with whether everything in it you can see is done and what comes next
get-project One project, by its name or id, with everything in it you can see: dated things first, by date, then those with no date yet
add-project Start a project, with a description if it helps. Anyone in the workspace can see it and change it
change-project Rename a project or change its description
delete-project Delete a project: everything in it stays, with no project
set-project Put something in a project, or take it out with none: anyone on either side of it can, and something that repeats goes in with the rest of its series. add-commitment and add-schedule take project too, and list-commitments takes it to list only what is in one

Nothing more than you could do yourself: the same permissions, the same billing rules, and nobody sees anything you haven't said yes to. API keys stay manageable only in the app, signed in.

Works with the directories

The server speaks streamable HTTP with OAuth 2.1 discovery and dynamic client registration (what Anthropic's connector directory expects) and implements OpenAI's search/fetch connector contract, so ChatGPT connectors can look things up with the same party-only visibility as everything else.

Good to know

Revoke the connection, or the key, and access stops immediately. The server is versionless from your side: tools may be added over time, and existing ones keep their names and shapes. If you build your own client, the underlying REST API is the same thing with more surface.