Context MCP

52 toolscontract 3.0.0catalog source 2a5d1c0e

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/mcp
tools.jsonraw catalogauth: oauth2 · Googlesay: Nomi, get me started

Connect

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/mcp

cursor

Add an HTTP MCP server with URL https://mcp.onecontext.me/mcp

Skills that wrap this server

Tools 52

tap a group or a tool to fold it

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 morechat
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

#start_context

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

#search_context

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

#list_spaces

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

#list_epics

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.

#get_epic

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.

#create_epic

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.

#update_epic

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.

#delete_epic

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

#list_issues

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.

#get_issue

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.

#create_issues

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.

#update_issues

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.

#complete_issues

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.

#delete_issues

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.

#post_comment

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.

#request_review

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.

#claim_issue

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.

#verify_issue

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

#list_artifacts

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.

#get_artifact

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.

#attach_artifact

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.

#revise_artifact

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.

#update_artifact

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.

#delete_artifacts

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.

#get_artifact_transfer

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

#get_changes

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

#list_mutation_receipts

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.

#create_space

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.

#delete_space

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

#list_memories

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.

#get_memory

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.

#save_memories

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.

#delete_memories

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 | all
default: "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

#list_logs

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_meal

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.

#log_workout

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.

#delete_logs

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

#list_people

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.

#get_person

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.

#create_people

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.

#update_people

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.

#delete_people

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.

#merge_people

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 | source
default: "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

#query_health_samples

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 moreduration
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

#summarize_health

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

#list_calendar_events

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.

#get_calendar_event

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

#list_skills

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.

#get_skill

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.

#save_skill

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.

#request_content

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.

#get_content_request