Context MCP
Context is the shared workspace for your goals and how agents execute them across every host you use. The Shared Space works the moment you sign in with Google; pairing your iPhone in the Context app unlocks Private Spaces and the Personal domains — memories, logs, people, health, calendar and skills — that live only on your phone.
https://mcp.onecontext.me/mcpConnect
claude-ai
Settings → Connectors → Add custom connector → name Context, URL https://mcp.onecontext.me/mcp → Connect
chatgpt
Settings → Connectors → Add → URL https://mcp.onecontext.me/mcp
claude-code
claude mcp add --transport http context https://mcp.onecontext.me/mcpcursor
Add an HTTP MCP server with URL https://mcp.onecontext.me/mcp
Skills that wrap this server
- context base The interface — how you talk to Context: primitives, vocabulary, and when to call which tool.
- rules harness Execution discipline — how a work unit runs end to end, from plan through verification to handoff.
- setup-context harness Chart a map — turns a goal into an Epic, its Issues and a spec before any work starts.
- daily-brief harness Daily heartbeat — a recurring digest of what changed and what needs the user's attention.
- wayfinder third-party Planning method (third-party) — structures how a hard decision or plan gets explored.
- grill-me third-party Planning method (third-party) — stress-tests a plan or idea by grilling it round by round.
Tools 52
Start 1 · shared
start_context read-only Use this when you need to orient yourself in Context before doing anything else — at the top of a session, whenever you are unsure which tool fits, or when the user greets Nomi or says "Nomi, get me started".
Start a Context session
Use this when you need to orient yourself in Context before doing anything else — at the top of a session, whenever you are unsure which tool fits, or when the user greets Nomi or says "Nomi, get me started". Read-only: it reports the signed-in account, whether an iPhone is paired, which Spaces and modules you can reach, the guide and `context` skill Resources (with version and sha256), an install plan for this host, and a `nextAction` (`continue | pair_phone | install_skill | update_skill | human_upload`). It never installs anything itself and never asks you to hand-edit your repository's agent config. Its `spaces` tell you what a Space argument may name next; `pair_phone` means the private half is unavailable until the user pairs.
scopes: context:shared
Parameters
- host · enum
- The host you are running in. Decides whether the install plan is `agent_install` (a local agent that can write files) or `human_upload` (a hosted chat surface). Omit to be treated as a hosted chat surface.one of:
claude-code|codex|cursor|claude-ai|chatgpt|generic+1 more
chat - environment · string
- Optional free-form environment hint (for example `macos`, `linux`, `web`).
- install_scope · enum
- Where a local install would land: the user's own skills directory or this repository.one of:
user|project - installed_skill_version · integer
- Version of the `context` skill you already have installed, if any. Drives `update_skill` vs `install_skill`.
- installed_skill_sha256 · string
- SHA-256 of the installed SKILL.md, if any. A mismatch with the published digest yields `update_skill`.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- account · object
- pairing · enum ● required
- one of:
paired|required - spaces · object[] ● required
- modules · string[]
- nextAction · enum ● required
- one of:
continue|pair_phone|install_skill|update_skill|human_upload - guide · object
- skill · object
- install · object
- contract · object ● required
Show 2 fields
- version · string ● required
- limits · object ● required
- endpoint · string
Discovery 1 · shared
search_context read-only Use this when you need to find something by words rather than by id — an Epic, Issue, Artifact or memory whose id you do not have.
Search across Context
Use this when you need to find something by words rather than by id — an Epic, Issue, Artifact or memory whose id you do not have. Read-only and bounded: every response reports coverage and truncation, so it never implies exhaustive recall. Scope with `space` (omit to search every Space you hold; private Spaces need a paired iPhone) and narrow with `kinds`. Feed the returned ids into `get_epic`, `get_issue`, `get_artifact` or `get_memory`.
scopes: context:shared
Parameters
- query · string ● required
- Search text (2–256 characters).
- space · string
- Space id or name. `shared` = the Shared Space (server-readable, available with Google sign-in alone); `personal`/`work` = the private built-ins on the paired iPhone; any other named private Space resolves by id or name. Omit to read across every Space you hold.
- kinds · enum[]
- Restrict to these primitive kinds. Omit for every kind you can read.
- limit · integer
- Maximum rows to return. Server-capped.default:
20 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- results · object[] ● required
- next_cursor · string | null
- space · object | null
Space 1 · shared
list_spaces read-only Use this when you need to know which Spaces exist before naming one in a `space` argument.
List the account's Spaces
Use this when you need to know which Spaces exist before naming one in a `space` argument. Read-only. Always returns the Shared Space; private Spaces (`personal`, `work`, named) appear only once an iPhone is paired. Each row carries `{id, name, privacy}` — the exact shape every other result echoes back as `space`.
scopes: context:shared
Parameters
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- spaces · object[] ● required
- next_cursor · string | null
- space · object | null
Epic 5 · shared
list_epics read-only Use this when you need to survey the goals in flight rather than open one specific Epic.
List Epics
Use this when you need to survey the goals in flight rather than open one specific Epic. Read-only, most recently updated first. Pass `space` to scope (omit to union every Space you hold; private Spaces need a paired iPhone). Returns summary rows with derived status — call `get_epic` for one hydrated Epic, or `list_issues {parent_id}` for its children.
scopes: context:shared
Parameters
- space · string
- Space id or name. `shared` = the Shared Space (server-readable, available with Google sign-in alone); `personal`/`work` = the private built-ins on the paired iPhone; any other named private Space resolves by id or name. Omit to read across every Space you hold.
- labels · string[]
- Labels to set (replaces the existing set).
- include_closed · boolean
- Include Epics whose Issues are all done.default:
false - updated_after · string
- Only Epics updated at or after this ISO 8601 instant.
- limit · integer
- Maximum rows to return. Server-capped.default:
50 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- epics · object[] ● required
- next_cursor · string | null
- space · object | null
get_epic read-only Use this when you need to see one goal in full — its blueprint, derived status, child Issues, Artifacts and recent activity in a single read.
Get one Epic
Use this when you need to see one goal in full — its blueprint, derived status, child Issues, Artifacts and recent activity in a single read. Read-only. The Epic's Space governs access; a private Epic needs a paired iPhone. Use its `issues[]` to pick work up with `claim_issue`, or its `artifacts[]` with `get_artifact`.
scopes: context:shared
Parameters
- epic_id · string ● required
- Epic id.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
create_epic Use this when you need to open a new goal in a Space, optionally seeding its first Issues in the same call.
Create an Epic
Use this when you need to open a new goal in a Space, optionally seeding its first Issues in the same call. Writes: it creates one Epic (and any `issues[]` under it) and is visible to the user immediately. `space` is required — `shared` is the only destination until an iPhone is paired. Returns the new `epic_id` for `create_issues`, `attach_artifact` and `request_review`.
scopes: context:shared
Parameters
- space · string ● required
- Required. Destination Space: `shared` (Shared Space, the only destination until an iPhone is paired), `personal`/`work` (private built-ins), or a named private Space's id/name.
- title · string ● required
- goal · string
- What done looks like for this Epic — the blueprint the Issues serve.
- labels · string[]
- Labels to set (replaces the existing set).
- issues · object[]
- Optional first Issues, created under the new Epic in the same call.
Item fields (7)
- title · string ● required
- description · string
- acceptance_criteria · object[]
- Replaces the whole criteria set ([] clears, omit to leave unchanged). Mark `passed: true` only for criteria you actually verified — `verify_issue` scores these.
Item fields (2)
- text · string ● required
- passed · boolean
- default:
false
- labels · string[]
- Labels to set (replaces the existing set).
- assignee · string
- Owner: `me` (the user), an agent name (use your reported caller label when picking work up yourself), or an empty string to clear.
- priority · integer
- 0 none … 4 urgent.
- due_at · string
- Deadline as an ISO 8601 datetime (include the user's offset when known) or date (YYYY-MM-DD).
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
update_epic Use this when you need to change one Epic's title, goal, labels or Space — never its status, which is derived from its Issues.
Update an Epic
Use this when you need to change one Epic's title, goal, labels or Space — never its status, which is derived from its Issues. Writes in place. The Epic's current Space governs access; moving it to a private Space needs a paired iPhone. Use `update_issues` for anything about the work itself.
scopes: context:shared
Parameters
- epic_id · string ● required
- title · string
- goal · string
- labels · string[]
- Labels to set (replaces the existing set).
- space · string
- Move the Epic to this Space. Omit to leave it where it is.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
delete_epic destructive idempotentUse this when you need to remove an Epic that should not exist at all — this is also how you retire work that would otherwise be `canceled`, which v3 does not expose as a state.
Delete an Epic
Use this when you need to remove an Epic that should not exist at all — this is also how you retire work that would otherwise be `canceled`, which v3 does not expose as a state. Destructive and irreversible: it cascades to the Epic's Issues, and the response reports the cascade counts. Requires delete permission on this key; confirm with the user first. Prefer `update_epic` or `complete_issues` whenever the work merely ended.
scopes: context:shared
Parameters
- epic_id · string ● required
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Issue 6 · shared
list_issues read-only Use this when you need to see the queue rather than one Issue — what is open, what is yours, what sits under an Epic.
List Issues
Use this when you need to see the queue rather than one Issue — what is open, what is yours, what sits under an Epic. Read-only, most recently updated first; closed Issues are excluded unless `include_closed`. Filter by `parent_id` (Epic or parent Issue), `state`, `assignee`, `labels` or `space`; private Spaces need a paired iPhone. Feed ids into `get_issue`, `claim_issue` or `update_issues`.
scopes: context:shared
Parameters
- space · string
- Space id or name. `shared` = the Shared Space (server-readable, available with Google sign-in alone); `personal`/`work` = the private built-ins on the paired iPhone; any other named private Space resolves by id or name. Omit to read across every Space you hold.
- parent_id · string
- Only Issues directly under this Epic or parent Issue. Decomposition is child Issues — there are no checklists.
- state · enum
- Issue lifecycle state. `blocked` is derived from `blocked_by` edges, not a state.one of:
open|in_progress|in_review|done - assignee · string
- `me`, an agent name, or `none` for unassigned. Use this to find your own queue.
- labels · string[]
- Labels to set (replaces the existing set).
- include_closed · boolean
- default:
false - updated_after · string
- Only Issues updated at or after this ISO 8601 instant.
- limit · integer
- Maximum rows to return. Server-capped.default:
50 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- issues · object[] ● required
- next_cursor · string | null
- space · object | null
get_issue read-only Use this when you need to read one Issue in full before acting on it — acceptance criteria, state, `blocked_by` edges, child Issues, Artifacts, comments and delivery/claim state in a single read.
Get one Issue
Use this when you need to read one Issue in full before acting on it — acceptance criteria, state, `blocked_by` edges, child Issues, Artifacts, comments and delivery/claim state in a single read. Read-only. Its Space governs access. Read `delivery.version` here before `claim_issue` or `verify_issue`, and its criteria before `update_issues`.
scopes: context:shared
Parameters
- issue_id · string ● required
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
create_issues Use this when you need to add one or more units of work under an Epic or under another Issue — decomposition in v3 is always child Issues, never a checklist.
Create Issues
Use this when you need to add one or more units of work under an Epic or under another Issue — decomposition in v3 is always child Issues, never a checklist. Writes 1–25 Issues in one call under `parent_id`; each lands in the parent's Space, so a private parent needs a paired iPhone. Returns the new issue ids for `update_issues`, `claim_issue` and `attach_artifact`.
scopes: context:shared
Parameters
- parent_id · string ● required
- The Epic or Issue these Issues belong to. Their Space follows the parent.
- issues · object[] ● required
Item fields (8)
- title · string ● required
- description · string
- acceptance_criteria · object[]
- Replaces the whole criteria set ([] clears, omit to leave unchanged). Mark `passed: true` only for criteria you actually verified — `verify_issue` scores these.
Item fields (2)
- text · string ● required
- passed · boolean
- default:
false
- labels · string[]
- Labels to set (replaces the existing set).
- blocked_by · string[]
- Issue ids this Issue is blocked by — replaces the whole set ([] clears). `blocked` status is derived from these edges.
- assignee · string
- Owner: `me` (the user), an agent name (use your reported caller label when picking work up yourself), or an empty string to clear.
- priority · integer
- 0 none … 4 urgent.
- due_at · string
- Deadline as an ISO 8601 datetime (include the user's offset when known) or date (YYYY-MM-DD).
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
update_issues Use this when you need to edit, re-state, re-parent or re-block existing Issues — including moving one to `in_progress` or `in_review`.
Update Issues
Use this when you need to edit, re-state, re-parent or re-block existing Issues — including moving one to `in_progress` or `in_review`. Writes 1–25 Issues in one call; each item names its own `issue_id`, so a batch may touch several Epics. `done` is a human-accepted outcome: prefer `claim_issue` plus `complete_issues` over writing `state: "done"` directly. Pass `expected_version` (from `get_issue`) to fail loudly on a stale edit.
scopes: context:shared
Parameters
- issues · object[] ● required
Item fields (12)
- issue_id · string ● required
- title · string
- description · string
- state · enum
- Issue lifecycle state. `blocked` is derived from `blocked_by` edges, not a state.one of:
open|in_progress|in_review|done - parent_id · string
- Move this Issue under another Epic or Issue. Empty string un-nests it.
- blocked_by · string[]
- Issue ids this Issue is blocked by — replaces the whole set ([] clears). `blocked` status is derived from these edges.
- acceptance_criteria · object[]
- Replaces the whole criteria set ([] clears, omit to leave unchanged). Mark `passed: true` only for criteria you actually verified — `verify_issue` scores these.
Item fields (2)
- text · string ● required
- passed · boolean
- default:
false
- labels · string[]
- Labels to set (replaces the existing set).
- assignee · string
- Owner: `me` (the user), an agent name (use your reported caller label when picking work up yourself), or an empty string to clear.
- priority · integer
- 0 none … 4 urgent.
- due_at · string
- Deadline as an ISO 8601 datetime (include the user's offset when known) or date (YYYY-MM-DD).
- expected_version · integer
- Optimistic concurrency — the `version` you read from `get_issue`. A stale value is rejected, not merged.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
complete_issues Use this when you need to move Issues to `done` because the work is finished and accepted.
Complete Issues
Use this when you need to move Issues to `done` because the work is finished and accepted. Writes 1–20 Issues at once; Epic status stays derived, so there is no Epic equivalent. Report truthful `work_stats` — the server rejects the batch when a tracked Issue is missing one, and an agent self-verification alone never satisfies the human acceptance gate. When acceptance is still pending, use `claim_issue` and `request_review` instead.
scopes: context:shared
Parameters
- issue_ids · string[] ● required
- work_stats · object
- Version 2 agent trace for this work unit. Exactly one primary contributor; subagents require labels. Report truthfully — never invent usage.
- schemaVersion · = 2 ● required
- unitId · string ● required
- wallDurationSec · number ● required
- contributors · object[] ● required
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
delete_issues destructive idempotentUse this when you need to remove Issues that should not exist at all — including work that would otherwise be `canceled`, which v3 does not expose.
Delete Issues
Use this when you need to remove Issues that should not exist at all — including work that would otherwise be `canceled`, which v3 does not expose. Destructive and irreversible: it cascades to child Issues and the response reports the cascade counts. Requires delete permission on this key; confirm with the user first. Use `complete_issues` for work that actually finished.
scopes: context:shared
Parameters
- issue_ids · string[] ● required
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Conversation 1 · shared
post_comment Use this when you need to say something on the record — progress narration, an answer to the user's review comment, or a note anchored to a passage of an Artifact.
Comment on an Epic, Issue or Artifact
Use this when you need to say something on the record — progress narration, an answer to the user's review comment, or a note anchored to a passage of an Artifact. Writes a visible comment and notifies the user; it changes no state and opens no gate (use `request_review` for that). The target's Space governs access. Pass `anchor` only for Artifacts, quoting the passage verbatim so the app can highlight it.
scopes: context:shared
Parameters
- target · object ● required
- What this acts on: an Epic, an Issue, or an Artifact, by primitive kind and id.
- kind · enum ● required
- one of:
epic|issue|artifact - id · string ● required
- body · string ● required
- anchor · object
- Artifact targets only — anchors this comment to a passage. Omit for a whole-document or Epic/Issue comment.
- quote · string ● required
- The exact passage, copied verbatim from the Artifact content.
- prefix · string
- The ~32 characters immediately before `quote`. Strongly recommended for short or repeated quotes.
- suffix · string
- The ~32 characters immediately after `quote`.
- parent_id · string
- Comment id you are replying to. Threads are one level deep.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Review 3 · shared
request_review Use this when you need to get a person to decide something before work continues — an Epic's plan, an Issue's outcome, or an Artifact's content.
Request a human review
Use this when you need to get a person to decide something before work continues — an Epic's plan, an Issue's outcome, or an Artifact's content. Writes: it opens a human gate in the user's "Needs You" tray. Never mark a gate satisfied yourself and never assume approval; poll `get_changes` for the decision. Set `blocking: true` when downstream work must wait.
scopes: context:shared
Parameters
- target · object ● required
- What this acts on: an Epic, an Issue, or an Artifact, by primitive kind and id.
- kind · enum ● required
- one of:
epic|issue|artifact - id · string ● required
- reason · string ● required
- Why a human decision is needed here.
- blocking · boolean
- True when downstream work must wait for the decision.default:
false - dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
claim_issue Use this when you need to put on the record, with evidence, that an Issue's acceptance criteria are met (ADR-0008).
Claim Issue completion
Use this when you need to put on the record, with evidence, that an Issue's acceptance criteria are met (ADR-0008). Writes a claim; it does NOT mark the Issue done — a human accepts it. Read `get_issue`'s delivery `version` first and pass it as `expected_version`; a stale value is rejected. Retry with the same `request_id` to replay rather than duplicate. Follow with `verify_issue` and `request_review`.
scopes: context:shared
Parameters
- issue_id · string ● required
- request_id · string ● required
- Idempotency key — retried with the same value replays the original result.
- expected_version · integer ● required
- summary · string ● required
- evidence · object[] ● required
Item fields (5)
- kind · enum ● required
- one of:
test|observation|artifact|source|attestation - reference · string ● required
- summary · string ● required
- documentId · string
- revision · integer
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
verify_issue Use this when you need to record how you actually checked a claim — the method, the per-criterion results and the evidence.
Record Issue verification
Use this when you need to record how you actually checked a claim — the method, the per-criterion results and the evidence. Writes a verification against one claim. An agent self-check never implies independent acceptance — a human must still accept, so set `independence` truthfully. Read the claim id and delivery `version` from `get_issue` first.
scopes: context:shared
Parameters
- issue_id · string ● required
- request_id · string ● required
- expected_version · integer ● required
- claim_id · string ● required
- The claim being verified (from `get_issue`).
- method · string ● required
- outcome · enum ● required
- one of:
passed|failed|inconclusive - independence · enum ● required
- one of:
independent|self - results · object[] ● required
Item fields (3)
- criterion_id · string ● required
- outcome · enum ● required
- one of:
passed|failed|inconclusive - note · string ● required
- evidence · object[] ● required
Item fields (5)
- kind · enum ● required
- one of:
test|observation|artifact|source|attestation - reference · string ● required
- summary · string ● required
- documentId · string
- revision · integer
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Artifact 7 · shared
list_artifacts read-only Use this when you need to find the reviewable documents attached to a Space or to one Epic or Issue.
List Artifacts
Use this when you need to find the reviewable documents attached to a Space or to one Epic or Issue. Read-only, metadata only — no bodies, so it stays cheap. Scope with `space` or `target`; private Spaces need a paired iPhone. Feed ids into `get_artifact` for content or a resource link.
scopes: context:shared
Parameters
- space · string
- Space id or name. `shared` = the Shared Space (server-readable, available with Google sign-in alone); `personal`/`work` = the private built-ins on the paired iPhone; any other named private Space resolves by id or name. Omit to read across every Space you hold.
- target · object
- Only Artifacts attached to this Epic or Issue. `kind: "artifact"` is not a valid filter here.
- kind · enum ● required
- one of:
epic|issue|artifact - id · string ● required
- limit · integer
- Maximum rows to return. Server-capped.default:
50 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- artifacts · object[] ● required
- next_cursor · string | null
- space · object | null
get_artifact read-only Use this when you need to read one Artifact — its metadata, its content or a resource link to it, its revision list and its comment threads.
Get one Artifact
Use this when you need to read one Artifact — its metadata, its content or a resource link to it, its revision list and its comment threads. Read-only. Its Space governs access. Pass `revision_id` to read a specific immutable revision instead of the head — it never silently substitutes the head. Set `include_content: false` to keep a large document out of your context and take the resource link instead; answer the comments you read here with `post_comment`.
scopes: context:shared
Parameters
- artifact_id · string ● required
- revision_id · string
- Read this immutable revision instead of the current head.
- include_content · boolean
- False returns metadata plus a resource link only — use it for large or binary Artifacts.default:
true - caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
attach_artifact Use this when you need to attach a reviewable document to a piece of work — a spec, a decision record, a report, a file.
Attach an Artifact
Use this when you need to attach a reviewable document to a piece of work — a spec, a decision record, a report, a file. Writes: for text you authored, pass `content` and it is stored inline in one call; for binary or large files, pass `filename`/`size`/`sha256` and it returns an upload plan (`upload_url`, `complete_url`, chunk size, limits) for you to follow. The target's Space governs access; `shared` is the only destination until an iPhone is paired. The new `artifact_id` is what `get_artifact`, `revise_artifact` and `post_comment` take next.
scopes: context:shared
Parameters
- target · object ● required
- What this acts on: an Epic, an Issue, or an Artifact, by primitive kind and id.
- kind · enum ● required
- one of:
epic|issue|artifact - id · string ● required
- title · string
- content · string
- Inline text you authored (markdown or HTML). Use this path whenever the Artifact is text — it avoids a lossy, token-expensive encoding step.
- mime · string
- Content type of `content` or of the file being uploaded, for example `text/markdown` or `application/pdf`.
- base64 · string
- Small binary payload, base64-encoded. For anything large prefer the upload plan (`filename`+`size`+`sha256`).
- filename · string
- Original filename. With `size` and `sha256` this selects the upload-plan path.
- size · integer
- Exact byte size of the file being uploaded.
- sha256 · string
- SHA-256 of the file being uploaded.
- space · string
- Destination Space when the target does not already fix one. Defaults to the target's Space.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
revise_artifact Use this when you need to change an Artifact's content — v3 appends an immutable revision and advances the head rather than overwriting, so the old text stays citable.
Revise an Artifact
Use this when you need to change an Artifact's content — v3 appends an immutable revision and advances the head rather than overwriting, so the old text stays citable. Writes. `expected_revision_id` is mandatory optimistic concurrency: a stale head is rejected with the actual head and nothing is written. Use `update_artifact` for metadata only, and `post_comment` to answer review threads.
scopes: context:shared
Parameters
- artifact_id · string ● required
- expected_revision_id · string ● required
- The head revision id you read from `get_artifact`. Stale values are rejected.
- content · string
- New UTF-8 text content. Use this or `base64`.
- base64 · string
- New file bytes, base64-encoded. Use this or `content`.
- mime · string
- change_summary · string
- revision_id · string
- Stable id for this revision — reuse it when retrying an ambiguous call.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
update_artifact Use this when you need to change only an Artifact's title, labels, kind or Space, leaving its content exactly as it is.
Update Artifact metadata
Use this when you need to change only an Artifact's title, labels, kind or Space, leaving its content exactly as it is. Writes metadata in place — no new revision, so nothing citable moves. Use `revise_artifact` for content.
scopes: context:shared
Parameters
- artifact_id · string ● required
- title · string
- labels · string[]
- kind · string
- What this Artifact IS: `adr`, `rfc`, `spec`, `prd`, `postmortem`, `runbook`, `note`, `review`, or anything else. Case-insensitive.
- space · string
- Move the Artifact to this Space.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
delete_artifacts destructive idempotentUse this when you need to remove Artifacts from the account entirely.
Delete Artifacts
Use this when you need to remove Artifacts from the account entirely. Destructive and irreversible — revisions and comment threads go with them, and the response reports the cascade counts. Requires delete permission on this key; confirm with the user first. Prefer `update_artifact` or a new revision when the document merely became obsolete.
scopes: context:shared
Parameters
- artifact_ids · string[] ● required
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
get_artifact_transfer read-only Use this when you need to check whether an `attach_artifact` upload plan you followed actually completed.
Inspect an Artifact upload
Use this when you need to check whether an `attach_artifact` upload plan you followed actually completed. Read-only; it reports status, size, digest and expiry for an opaque handle you own, and never exposes storage keys. When it reports completion the Artifact is readable with `get_artifact`.
scopes: context:shared
Parameters
- transfer_id · string ● required
- The transfer handle returned by `attach_artifact`.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Changes 2 · shared
get_changes read-only Use this when you need to know what happened while you were working — review decisions, comments, and operations the user's phone applied.
Read what changed
Use this when you need to know what happened while you were working — review decisions, comments, and operations the user's phone applied. Read-only, cursor-based with a bounded wait: `wait_ms` blocks until something arrives (25 s ceiling) instead of you polling in a loop. Persist `next_cursor` only after processing the page; replay from the previous cursor after a crash. This is how you wait for a `request_review` decision — never assume approval.
scopes: context:shared
Parameters
- cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- wait_ms · integer
- Bounded wait in milliseconds (25 s ceiling). 0 returns immediately.default:
0 - limit · integer
- Maximum rows to return. Server-capped.default:
50 - caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- changes · object[] ● required
- next_cursor · string ● required
- waited_ms · integer
list_mutation_receipts read-only Use this when you need to know whether a queued write actually reached the user's device, instead of assuming that acceptance meant application.
List mutation receipts
Use this when you need to know whether a queued write actually reached the user's device, instead of assuming that acceptance meant application. Read-only. Pass `ids` for specific receipts, or `updated_after`/`states` to sweep what changed. Anything still `accepted`/`delivered` has not been applied yet — reconcile before telling the user it landed.
scopes: context:shared
Parameters
- ids · string[]
- Specific receipt ids (returned by mutation tools). Omit to sweep by watermark.
- updated_after · string
- Only receipts changed at or after this ISO 8601 instant. Persist the last one you processed.
- states · enum[]
- limit · integer
- Maximum rows to return. Server-capped.default:
50 - caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- receipts · object[] ● required
- next_cursor · string | null
- space · object | null
Space 2 · paired
create_space Use this when you need to give work its own container because it genuinely does not belong in `shared`, `personal` or `work`.
Create a private Space
Use this when you need to give work its own container because it genuinely does not belong in `shared`, `personal` or `work`. Writes a new private Space on the paired iPhone, so it requires pairing — there is exactly one Shared Space and it is never created this way. Its id/name is what every other tool's `space` argument takes next.
scopes: context:private
Parameters
- name · string ● required
- key · string
- Optional short prefix (1–10 alphanumerics, starting with a letter). Derived on the phone when omitted.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
delete_space destructive idempotentUse this when you need to remove an empty private Space.
Delete a private Space
Use this when you need to remove an empty private Space. Destructive: refused for the built-in `personal`/`work` Spaces and for any Space that still holds Epics, Issues or Artifacts — move or delete those first. Requires pairing and delete permission; the Shared Space can never be deleted.
scopes: context:private
Parameters
- space · string ● required
- Private Space id or name to delete.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Memories 4 · paired
list_memories read-only Use this when you need to read what the user captured on their phone, most recent first — the raw material behind briefings and coaching.
List memories
Use this when you need to read what the user captured on their phone, most recent first — the raw material behind briefings and coaching. Read-only and requires a paired iPhone. Metadata only unless you ask for full text; scope with `space` and narrow by time. Call `get_memory` for one memory's full text and extractions.
scopes: context:private
Parameters
- space · string
- Space id or name. `shared` = the Shared Space (server-readable, available with Google sign-in alone); `personal`/`work` = the private built-ins on the paired iPhone; any other named private Space resolves by id or name. Omit to read across every Space you hold.
- query · string
- Optional substring filter. For real search across everything, use `search_context`.
- include_text · boolean
- Decrypt and inline each memory's text. Costly — leave false for discovery.default:
false - from · string
- Only memories at or after this ISO 8601 instant.
- to · string
- Only memories before this ISO 8601 instant.
- limit · integer
- Maximum rows to return. Server-capped.default:
50 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- memories · object[] ● required
- next_cursor · string | null
- space · object | null
get_memory read-only Use this when you need to read one memory in full — raw text, the AI-enhanced version, extracted logs and people links, and a deep link that opens it on the phone.
Get one memory
Use this when you need to read one memory in full — raw text, the AI-enhanced version, extracted logs and people links, and a deep link that opens it on the phone. Read-only and requires a paired iPhone. Find ids with `list_memories` or `search_context`.
scopes: context:private
Parameters
- memory_id · string ● required
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
save_memories Use this when you need to persist something the user told you beyond this session — a memory entry, or an atomic durable fact (a preference, a decision, biographical detail).
Save memories and facts
Use this when you need to persist something the user told you beyond this session — a memory entry, or an atomic durable fact (a preference, a decision, biographical detail). Writes 1–20 private notes and/or facts into the user's own Context app: it never messages anyone, publishes anything, or deletes data, and the user can undo every one. Requires a paired iPhone and a `space`. Only save what you actually heard.
scopes: context:private
Parameters
- memories · object[]
Item fields (4)
- text · string ● required
- title · string
- space · string ● required
- Required. Destination Space: `shared` (Shared Space, the only destination until an iPhone is paired), `personal`/`work` (private built-ins), or a named private Space's id/name.
- created_at · string
- ISO 8601 timestamp. Defaults to now.
- facts · object[]
Item fields (4)
- text · string ● required
- One atomic durable fact, one sentence.
- space · string ● required
- Required. Destination Space: `shared` (Shared Space, the only destination until an iPhone is paired), `personal`/`work` (private built-ins), or a named private Space's id/name.
- confidence · enum
- Your certainty this is durable. Use `low`/`medium` for anything you inferred rather than heard.one of:
low|medium|high - source_memory_ids · string[]
- Memory ids this fact was distilled from. Unknown ids are skipped.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
delete_memories destructive idempotentUse this when you need to remove whole memories from the user's phone — their extracted logs and todos go with them.
Delete memories
Use this when you need to remove whole memories from the user's phone — their extracted logs and todos go with them. Destructive and irreversible on the device; requires pairing and delete permission, so confirm with the user first. Deleting is not the way to correct a fact: use `save_memories` for that.
scopes: context:private
Parameters
- memory_ids · string[] ● required
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Logs 4 · paired
list_logs read-only Use this when you need to read the user's atomic logged events — meals, workouts, expenses, or health readings (blood pressure, body metrics, HealthKit-mirrored items) — one row per event.
List logged items
Use this when you need to read the user's atomic logged events — meals, workouts, expenses, or health readings (blood pressure, body metrics, HealthKit-mirrored items) — one row per event. Read-only, requires a paired iPhone. `kind: "health"` covers the voice-logged and HealthKit-mirrored fitness items; for the raw HealthKit firehose use `query_health_samples`. No roll-ups: you compute the totals. Row ids feed `delete_logs`.
scopes: context:private
Parameters
- kind · enum
- `meal` (calories), `workout`, `expense`, `health` (blood pressure, body metrics and HealthKit-mirrored fitness items), or `all`.one of:
meal|workout|expense|health|alldefault:"all" - space · string
- Space id or name. `shared` = the Shared Space (server-readable, available with Google sign-in alone); `personal`/`work` = the private built-ins on the paired iPhone; any other named private Space resolves by id or name. Omit to read across every Space you hold.
- from · string
- Only logs at or after this ISO 8601 instant.
- to · string
- Only logs before this ISO 8601 instant.
- limit · integer
- Maximum rows to return. Server-capped.default:
100 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- logs · object[] ● required
- next_cursor · string | null
- space · object | null
log_meal Use this when you need to give the user a meal to eat — meal prep, a restaurant order, a macro-targeted suggestion.
Send a meal plan
Use this when you need to give the user a meal to eat — meal prep, a restaurant order, a macro-targeted suggestion. Writes one planned meal to the paired iPhone and push-notifies it; completing it auto-logs the items to the calorie tracker and Apple Health, so per-item `kcal` must be your best estimate and macros matter. Requires pairing. Read it back later with `list_logs {kind: "meal"}`.
scopes: context:private
Parameters
- title · string ● required
- items · object[] ● required
Item fields (7)
- name · string ● required
- quantity · string
- kcal · number ● required
- protein_g · number
- carbs_g · number
- fat_g · number
- sugar_g · number
- due_at · string
- Deadline as an ISO 8601 datetime (include the user's offset when known) or date (YYYY-MM-DD).
- notes · string
- space · string
- Destination Space. Meal data is inherently personal, so omitting this files it under Personal.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
log_workout Use this when you need to give the user exercise to do.
Send a workout plan
Use this when you need to give the user exercise to do. Writes one workout plan to the paired iPhone and push-notifies it; it renders as a guided session and finishing it logs the completed exercises to the fitness tracker. Requires pairing. Give every exercise as much structure as you know — sets, reps, weight, kcal, a form cue, a specific tutorial link. Read it back with `list_logs {kind: "workout"}`.
scopes: context:private
Parameters
- title · string ● required
- exercises · object[] ● required
Item fields (10)
- name · string ● required
- sets · integer
- reps · integer
- weight · number
- weight_unit · enum
- one of:
kg|lb - duration_minutes · integer
- muscle_groups · string[]
- estimated_kcal_burn · number
- note · string
- instructions_url · string
- due_at · string
- Deadline as an ISO 8601 datetime (include the user's offset when known) or date (YYYY-MM-DD).
- notes · string
- space · string
- Destination Space. Health data is inherently personal, so omitting this files it under Personal.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
delete_logs destructive idempotentUse this when you need to remove logged rows that are wrong — a mis-transcribed meal, a duplicated expense.
Delete logged items
Use this when you need to remove logged rows that are wrong — a mis-transcribed meal, a duplicated expense. Destructive: requires pairing and delete permission. Address rows exactly as `list_logs` returned them; omit `item_id` to delete a whole log group. Deleting a group's last item removes the group.
scopes: context:private
Parameters
- logs · object[] ● required
Item fields (3)
- memory_id · string ● required
- The memory that owns this log (from `list_logs`).
- log_id · string ● required
- item_id · string
- One row inside the log group. Omit to delete the whole group.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
People 6 · paired
list_people read-only Use this when you need to read the roster the user opted to share — names, aliases, organizations.
List people
Use this when you need to read the roster the user opted to share — names, aliases, organizations. Read-only, requires a paired iPhone. Address books get large: pass `fields` for whole-roster scans (duplicate hunting) so full profiles do not flood your context, and page with `limit`/`cursor`. Call `get_person` for one full profile.
scopes: context:private
Parameters
- query · string
- Name, alias, or organization substring.
- fields · string[]
- Projection — return only these fields per person (`id` is always included). Use it for whole-roster scans.
- limit · integer
- Maximum rows to return. Server-capped.default:
50 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- people · object[] ● required
- next_cursor · string | null
- space · object | null
get_person read-only Use this when you need to read everything Context knows about one person — the profile the user synced, and optionally the memories linked to them.
Get one person
Use this when you need to read everything Context knows about one person — the profile the user synced, and optionally the memories linked to them. Read-only, requires a paired iPhone; suggested-but-unconfirmed links are excluded. Set `include_memories: true` for the relationship history behind a briefing.
scopes: context:private
Parameters
- person_id · string ● required
- include_memories · boolean
- Also return the confirmed memories linked to this person.default:
false - memories_limit · integer
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
create_people Use this when you need to create a profile for someone the user talks about who has none.
Create person profiles
Use this when you need to create a profile for someone the user talks about who has none. Writes 1–20 app-created profiles to the paired iPhone (not linked to system Contacts), so it requires pairing. Check `list_people` first — creating a profile that duplicates a contact is worse than none; `merge_people` is the fix when it happens.
scopes: context:private
Parameters
- people · object[] ● required
Item fields (9)
- display_name · string ● required
- given_name · string
- family_name · string
- nickname · string
- organization_name · string
- job_title · string
- department_name · string
- phone_numbers · string[]
- email_addresses · string[]
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
update_people Use this when you need to record something you learned about people the user already has profiles for — contact-card fields, or `remembered_facts` for what the user TOLD you.
Update people
Use this when you need to record something you learned about people the user already has profiles for — contact-card fields, or `remembered_facts` for what the user TOLD you. Writes 1–20 profiles on the paired iPhone; requires pairing. Your writes are stamped with your caller identity and capped at externally-asserted confidence: they can fill a gap but never overwrite what the user stated themselves. Only save what you actually heard.
scopes: context:private
Parameters
- people · object[] ● required
Item fields (11)
- person_id · string ● required
- display_name · string
- given_name · string
- family_name · string
- nickname · string
- organization_name · string
- job_title · string
- department_name · string
- phone_numbers · string[]
- email_addresses · string[]
- remembered_facts · string[]
- Durable free-text facts the user told you — 'has two kids', 'met at the Bangalore off-site'. One sentence each.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
delete_people destructive idempotentUse this when you need to remove app-created or junk profiles that should not exist at all — and ONLY those.
Delete person profiles
Use this when you need to remove app-created or junk profiles that should not exist at all — and ONLY those. Destructive: requires pairing and delete permission, and it is usually the WRONG tool for duplicates — a profile backed by an iOS contact is re-created on the next import, so deletion does not stick. Use `merge_people` for duplicates. The user's own "Me" profile can never be deleted.
scopes: context:private
Parameters
- person_ids · string[] ● required
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
merge_people Use this when you need to fold several profiles of the same real person into one — this is the durable fix for duplicate contacts, unlike deletion.
Merge duplicate people
Use this when you need to fold several profiles of the same real person into one — this is the durable fix for duplicate contacts, unlike deletion. Writes: phone numbers, emails, facts and links are unioned into the survivor you pick, and the user can undo it in the app. Requires pairing and write (not delete) permission. Find the clusters yourself from `list_people`, and confirm anything you are unsure about with the user first.
scopes: context:private
Parameters
- merges · object[] ● required
Item fields (2)
- keep_person_id · string ● required
- The profile that survives and absorbs the others — prefer the richest, most correct one.
- merge_person_ids · string[] ● required
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Health 2 · paired
query_health_samples read-only Use this when you need to read raw HealthKit rows the user opted into agent collection — steps, heart rate, sleep, HRV, glucose.
Query HealthKit samples
Use this when you need to read raw HealthKit rows the user opted into agent collection — steps, heart rate, sleep, HRV, glucose. Read-only, requires a paired iPhone. Omit `type` and it returns the available types with their sample counts, so this is also the discovery call; then pass one `type` plus a range of at most 31 days. For totals and averages use `summarize_health` instead of pulling every row.
scopes: context:private
Parameters
- type · string
- HealthKit type identifier, for example `heartRate`, `stepCount`, `sleepAnalysis`. Omit to discover which types have data.
- from · string
- Inclusive range start, ISO 8601.
- to · string
- Exclusive range end, ISO 8601. At most 31 days.
- source · string
- Filter by source app or device name (substring).
- unit_policy · enum
- Convert to the canonical HealthKit unit, or preserve the uploaded unit.one of:
canonical|sourcedefault:"canonical" - limit · integer
- Maximum rows to return. Server-capped.default:
100 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- samples · object[]
- types · object[]
- next_cursor · string | null
- partial · boolean
- coverage · object
summarize_health read-only Use this when you need to answer a question about a trend or a total rather than individual readings — daily steps, weekly sleep, monthly weight.
Summarize health samples
Use this when you need to answer a question about a trend or a total rather than individual readings — daily steps, weekly sleep, monthly weight. Read-only, requires a paired iPhone. Aggregates one type into timezone-aware buckets with units, counts, coverage and partial markers; hourly ranges cap at 31 days, others at 366. Raw rows stay available through `query_health_samples` for verification.
scopes: context:private
Parameters
- type · string ● required
- from · string ● required
- Inclusive range start, ISO 8601.
- to · string ● required
- Exclusive range end, ISO 8601.
- bucket · enum ● required
- one of:
hour|day|week|month - timezone · string ● required
- IANA timezone for bucket boundaries, for example `Asia/Singapore`. Weeks start Monday.
- statistic · enum
- Validated per type — an unsupported combination is rejected rather than guessed. Defaults per the HealthKit type registry.one of:
sum|average|min|max|latest|count+1 more
duration - source · string
- Case-insensitive source app or device substring.
- limit · integer
- Maximum rows to return. Server-capped.default:
100 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- buckets · object[]
- next_cursor · string | null
- partial · boolean
- coverage · object
- statistic · string
- unit · string | null
Calendar 2 · paired
list_calendar_events read-only Use this when you need to read the user's schedule — what a day held, who was in a meeting, what is coming up.
List calendar events
Use this when you need to read the user's schedule — what a day held, who was in a meeting, what is coming up. Read-only, requires a paired iPhone; covers the synced window (roughly the past 60 days and next 30), Apple and Google de-duplicated. Cheap, like `list_issues`: call it liberally. Each row links the memories, Artifacts, Issues and people attached to that event.
scopes: context:private
Parameters
- from · string
- Window start, ISO 8601. An event counts when it overlaps the window.
- to · string
- Window end, ISO 8601, exclusive.
- attendee · string
- Attendee or organizer email (exact, case-insensitive) or a name substring.
- person_id · string
- Only events this person attended.
- query · string
- Case-insensitive substring over title, location and description.
- include_cancelled · boolean
- default:
false - limit · integer
- Maximum rows to return. Server-capped.default:
50 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- events · object[] ● required
- next_cursor · string | null
- space · object | null
get_calendar_event read-only Use this when you need to read one meeting in full — attendees and which resolve to people, organizer, location, join link, and the memories, Artifacts and Issues attached to it.
Get one calendar event
Use this when you need to read one meeting in full — attendees and which resolve to people, organizer, location, join link, and the memories, Artifacts and Issues attached to it. Read-only, requires a paired iPhone. Find ids with `list_calendar_events`.
scopes: context:private
Parameters
- event_id · string ● required
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Skills 3 · paired
list_skills read-only Use this when you need to find the playbooks the user or an agent stored on the phone — how THIS user wants a recurring job done.
List the user's stored skills
Use this when you need to find the playbooks the user or an agent stored on the phone — how THIS user wants a recurring job done. Read-only, requires a paired iPhone. These are the user's own skill documents, not the published Context skill that `start_context` reports. Call `get_skill` for the full markdown.
scopes: context:private
Parameters
- space · string
- Space id or name. `shared` = the Shared Space (server-readable, available with Google sign-in alone); `personal`/`work` = the private built-ins on the paired iPhone; any other named private Space resolves by id or name. Omit to read across every Space you hold.
- limit · integer
- Maximum rows to return. Server-capped.default:
50 - cursor · string
- Opaque continuation from the previous call's `next_cursor`. Never parse it.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Output
- skills · object[] ● required
- next_cursor · string | null
- space · object | null
get_skill read-only Use this when you need to read the full markdown of a stored skill that covers the job you are about to do.
Get one stored skill
Use this when you need to read the full markdown of a stored skill that covers the job you are about to do. Read-only, requires a paired iPhone; content is inlined up to 256 KB. Follow it as instructions from the user, and record any improvement back with `save_skill`.
scopes: context:private
Parameters
- skill_id · string ● required
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
save_skill Use this when you need to keep a playbook for next time — omit `skill_id` to add a new skill, pass it to overwrite an existing one.
Save a stored skill
Use this when you need to keep a playbook for next time — omit `skill_id` to add a new skill, pass it to overwrite an existing one. Writes to the paired iPhone, so it requires pairing; there is no version history, the content you send becomes the skill. `space` is required when adding. Read it back with `get_skill`.
scopes: context:private
Parameters
- skill_id · string
- Omit to add a new skill; pass an id from `list_skills` to overwrite that one.
- title · string
- markdown · string
- The skill's full markdown content (≤256 KB).
- description · string
- One-line description, used for frontmatter when the markdown has none.
- space · string
- Required when adding a new skill.
- dedupe_key · string
- Optional idempotency key for retries. Per-account and GLOBAL across every tool — it dedupes the WHOLE call. Use a distinct value per call, or omit unless you are actually retrying.
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
Content 2 · paired
request_content Use this when you need to fetch device-held content that routine sync deliberately does not carry — a document body, a contact field, a health sample.
Request private content from the phone
Use this when you need to fetch device-held content that routine sync deliberately does not carry — a document body, a contact field, a health sample. Writes a durable, metadata-addressed request; the phone fulfils it only for an already-authorized collection, and an offline phone leaves it pending rather than failing. Requires pairing. Poll `get_content_request` for the download URL.
scopes: context:private
Parameters
- resource_kind · enum ● required
- one of:
artifact|memory|log|person - resource_id · string ● required
- selector · object
- Optional narrowing selector for the resource.
- content_version · string
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.
get_content_request read-only Use this when you need to know whether the phone has answered a `request_content` you are waiting on.
Inspect a content request
Use this when you need to know whether the phone has answered a `request_content` you are waiting on. Read-only, requires a paired iPhone. Reports queued, delivered, ready, failed or expired; ready content is available through an authorized URL for fifteen minutes. `queued` means the phone has not been reachable yet — do not tell the user it failed.
scopes: context:private
Parameters
- request_id · string ● required
- caller · object ● required
- Required self-reported provenance for this call. It identifies the agent host and model for activity/audit display only; it never grants permission. Use the exact model id when exposed by the host, otherwise the literal `unknown`.
- agent · string ● required
- Calling agent or host product, for example ChatGPT, Codex, Claude Code, or Cursor.
- model · string ● required
- Exact model identifier when known; use `unknown` when the host does not expose it. Never guess.