Daily · for agents
The Daily MCP
Daily speaks the Model Context Protocol. Approve it once from a client that runs OAuth, or mint a key inside the app and hand it to Claude Code, Codex, Claude Desktop or anything else that speaks MCP, and your agent can read today, plan it with you, tick things off as you finish them, and run an honest weekly review off your real numbers. The key decides whose day it is — an agent can only ever reach the one account that minted it — and every call is written to an audit trail you can read in the app.
1Get connected
Approve it, or mint a key
If your client can run OAuth — claude.ai connectors, Claude Desktop — paste the endpoint and press connect. Daily asks you to sign in and approve reading or writing, and no key ever leaves the browser. If your client wants a header instead, open Daily, tap your avatar, then Agent access → new key. The key is shown once. Tick read-only if the agent should look and never touch.
Point your client at the endpoint
The endpoint is https://getdaily.day/api/mcp — Streamable HTTP, bearer auth. It advertises its own authorization server, so a connector discovers the OAuth flow without being told. Pick your client below.
Ask for your day
Say "what's on today?" and watch it come back. Then try "plan my day", "close that out", "run my weekly review". The server ships its own instructions, so a good client already knows Daily's rules — including that the day rolls at 04:00, not midnight.
2The tools
Read tools work with any key. Write tools need a key with write access — a read-only key is refused, with a message saying so, and nothing is written.
-
whoamiread
Which account this key belongs to, its timezone, and what today's date is for them.
-
get_todayread
The whole day in one call: tasks, rituals with their streaks, notes, progress.
date · timezone -
get_statsread
How the last N days actually went — completion, ritual consistency, best day, streaks, per-day breakdown.
days · timezone -
searchread
Find a task or a note by its words, anywhere in your history.
query · kind · limit -
agent_activityread
The audit trail — every tool call any agent has made on this account, newest first.
limit
-
list_tasksread
Tasks over a day or a range, filtered by status.
date · from · to · status · limit · timezone -
add_taskwrite
One task on one day.
text · date · position · timezone -
plan_daywrite
A whole day's list in one call. append adds; replace clears the day's unfinished tasks first and never touches anything already done.
tasks[] · date · mode · timezone -
set_task_donewrite
Tick a task, or put it back.
id · done -
update_taskwrite
Change a task's text, its day, or its place in the list.
id · text · date · position -
delete_taskwrite
Remove a task for good.
id -
carry_overwrite
Move everything unfinished from one day to another. dry_run shows what would move without moving it.
from · to · dry_run · timezone
-
list_ritualsread
Active rituals, whether each is done for the day, and how long its streak is.
date · timezone -
add_ritualwrite
Create a daily non-negotiable. Twelve active is the ceiling.
label -
check_ritualwrite
Mark a ritual done for a day, or clear it. This is what moves the streak.
id · done · date · timezone -
archive_ritualwrite
Retire a ritual. History and past checks stay; it stops appearing on the day.
id
-
list_notesread
Timestamped thought-captures over a day or a range.
date · from · to · limit · timezone -
add_notewrite
File a thought against a day.
text · date · timezone -
delete_notewrite
Remove a note for good.
id
3Prompts and resources
The server ships three prompts, so a client with a prompt picker gets the good version of each ritual without you writing it out: plan-my-day, evening-review, weekly-review. It also exposes three resources a client can pull as context — daily://today, daily://rituals and daily://stats/7d.
4How it is kept safe
5Connecting over OAuth
For clients that will not take a pasted header. Nothing here is required reading to use Daily — it is here so you can see exactly what your client and Daily say to each other.
- Discovery. An unauthenticated call gets a 401 with a WWW-Authenticate header pointing at /.well-known/oauth-protected-resource (RFC 9728). That names Daily as its own authorization server, whose metadata sits at /.well-known/oauth-authorization-server (RFC 8414).
- Registration. Clients register themselves at /api/oauth/register (RFC 7591). Public clients only — no secret is issued, because none is needed.
- Consent. You land on a Daily page that names the client and spells out what it will be able to do. Approving is a deliberate act; nothing is granted by arriving.
- PKCE, and only S256. Plain challenges are refused. Codes live sixty seconds and are single use — spending one twice burns every token that came from it, on the theory that a replay means the code leaked.
- Audience bound. Tokens are issued for https://getdaily.day/api/mcp and refused anywhere else (RFC 8707), so a token handed to a hostile server is inert. Every redirect carries iss (RFC 9207).
- Rotation. Access tokens last an hour, refresh tokens sixty days and rotate on every use. Reusing a rotated one is treated as a leak and drops that connection.
- Same as a key, downstream. An issued token is an ordinary key with an expiry, so scopes, rate limits and the audit trail apply unchanged — and it appears in Agent access where you can revoke it like anything else. Revoking there kills the whole connection, not just the current hour.
6Protocol notes
- Transport. Streamable HTTP, stateless, one endpoint, POST only. GET and DELETE return 405; there are no sessions to manage and nothing to keep alive.
- Versions. The endpoint speaks 2026-07-28 — including the mirrored Mcp-Method and Mcp-Name headers and the mismatch rejection the spec requires — and every earlier revision back to 2024-11-05, handshake and all. A request with no version header is read as 2025-03-26.
- Discovery is open. initialize, tools/list, prompts/list and resources/list answer without a key, so a client can look before it authenticates. Anything that touches your data does not.
- Errors are honest. A tool that cannot do what you asked returns a result marked isError with a plain-English reason, so your agent can fix its own mistake instead of guessing. Protocol failures come back as proper JSON-RPC errors with the right HTTP status.
- Origin checked. Requests carrying a browser origin are checked against an allowlist, so a random web page cannot drive your day through your browser.
7Limits worth knowing
- 500 characters per task, note or ritual label. 50 items in one plan_day. 366 days in one range query. Ten live keys per account. Twelve active rituals.
- Dates are YYYY-MM-DD and the day rolls at 04:00 local. One in the morning still belongs to yesterday — the app works that way, so the MCP does too.
- Timezone is taken from your account. Pass timezone on any tool to override it for that call.