Skip to main content
Glama

Apple Productivity MCP

License: MIT macOS npm version

An on-demand, local Model Context Protocol (MCP) server that gives Claude Code and Codex controlled access to Apple Mail, Calendar, and Reminders on macOS.

It uses Apple's built-in automation interface through /usr/bin/osascript. The MCP transport is stdio: your MCP client starts the process when it connects and stops it when the session releases it. There is no listening port, background service, or cloud-hosted MCP server.

Features

App

Read and discover

Actions

Mail

List accounts and mailboxes, list message metadata, read a message

Send, mark read/unread, flag/unflag, move, delete

Calendar

List calendars, list events in a time range

Create, update, delete

Reminders

List reminder lists, list reminders

Create, update, complete, delete

The server publishes MCP tool annotations for read-only, idempotent, destructive, and open-world behavior. These annotations help compatible clients apply appropriate approval policies; they are not a substitute for reviewing a write action before approving it.

Related MCP server: Apple EventKit MCP Server

Requirements

  • macOS with Mail, Calendar, and Reminders

  • Node.js 20 or newer

  • Claude Code, Codex CLI/app/IDE extension, or another stdio-capable MCP client

  • Permission for the client that launches the server to automate the relevant Apple apps

Install from npm

This is the recommended installation method. No repository clone or global package installation is required. npx downloads and caches the published package, and the MCP client launches it as a local stdio child process when a session connects.

Confirm that Node.js and npx are available:

node --version
npx --version

The examples use @latest so new sessions resolve the newest published release. Replace it with an explicit version such as @2.1.1 when you want a reproducible, pinned installation.

Claude Code

Add the server to your user configuration so it is available in every project:

claude mcp add --transport stdio --scope user apple-productivity-local -- \
  npx -y @gambadio/apple-productivity-mcp@latest

Verify the registration:

claude mcp get apple-productivity-local
claude mcp list

Start a new Claude Code session after adding the server. If the name is already registered, remove it with claude mcp remove apple-productivity-local --scope user and run the add command again.

Codex app, CLI, and IDE extension

Add the server to Codex's user configuration:

codex mcp add apple-productivity-local -- \
  npx -y @gambadio/apple-productivity-mcp@latest

Verify the registration:

codex mcp get apple-productivity-local
codex mcp list

The Codex app, CLI, and IDE extension share this MCP configuration on the same Mac. Start a new session after installation; restart an already-open app or IDE extension so it reloads the configuration. In the Codex CLI, /mcp shows the active servers.

If the name is already registered, run codex mcp remove apple-productivity-local and add it again.

Other local MCP clients

Use these values in any client that can launch a local stdio MCP server:

Setting

Value

Name

apple-productivity-local

Transport

stdio

Command

npx

Arguments

-y, @gambadio/apple-productivity-mcp@latest

Environment variables

None

Working directory

None required

Clients that accept the common JSON configuration shape can use:

{
  "mcpServers": {
    "apple-productivity-local": {
      "command": "npx",
      "args": [
        "-y",
        "@gambadio/apple-productivity-mcp@latest"
      ]
    }
  }
}

The outer configuration key and file location vary by client. In a graphical setup screen, select STDIO and enter the command and arguments from the table. This pattern applies to local MCP clients such as Claude Desktop, Cursor, Windsurf, Cline, and compatible editors; consult the client's documentation for where it stores MCP configuration.

If a desktop client cannot find npx, run this in Terminal:

command -v npx

Then replace "command": "npx" with the returned absolute path, for example "command": "/usr/local/bin/npx".

Restart the client or open a new session after changing its MCP configuration. Clients that support only remote HTTP servers cannot run this MCP directly because Apple Productivity MCP intentionally uses local stdio and macOS automation.

You do not need to run npm start, install the package globally, keep a terminal open, configure an API key, or expose a network port.

Install from source

Use a source checkout when developing the server or when you want to run a specific Git commit.

Clone the repository and install its locked dependencies:

git clone https://github.com/gambadio/apple-productivity-mcp.git
cd apple-productivity-mcp
npm ci

Capture the absolute paths that the MCP clients should store:

APPLE_MCP_NODE="$(command -v node)"
APPLE_MCP_SERVER="$(pwd)/src/index.js"

Paths containing spaces are supported. Keep the quotes in the commands below.

Claude Code with a source checkout

Install the server for your user account:

claude mcp add --transport stdio --scope user apple-productivity-local -- \
  "$APPLE_MCP_NODE" "$APPLE_MCP_SERVER"

Verify the registration:

claude mcp get apple-productivity-local
claude mcp list

Codex with a source checkout

Install the same local stdio server in Codex:

codex mcp add apple-productivity-local -- \
  "$APPLE_MCP_NODE" "$APPLE_MCP_SERVER"

Verify the registration:

codex mcp get apple-productivity-local
codex mcp list

Codex stores this in its user configuration, shared by the Codex app, CLI, and IDE extension on the same host. Start a new session after installation. If a desktop app or IDE extension was already open, restart it so it reloads the MCP configuration.

You do not need to run npm start or keep a terminal open. The MCP client launches the source checkout as a child process when it establishes the MCP connection.

Grant macOS permission

The first real tool call for each Apple app may trigger a macOS Automation prompt. Approve access for the application that launched the MCP server, such as Terminal, iTerm, Claude Code, Codex, or your IDE.

If you denied a prompt or no prompt appears:

  1. Open System Settings → Privacy & Security → Automation.

  2. Find the application that launches your MCP client.

  3. Enable Mail, Calendar, and Reminders as needed.

  4. Restart the MCP client and try again.

Try it

Start with the discovery tools so the client learns the exact local names configured on your Mac:

  • “List my Apple Mail accounts and mailboxes.”

  • “List my writable Apple calendars.”

  • “List my Apple Reminders lists.”

  • “Show events from all calendars tomorrow.”

  • “Show my incomplete reminders.”

Mail defaults to the account name iCloud and mailbox INBOX when a caller does not provide names. Use apple_mail_list_accounts first if your setup uses different names.

Tool reference

Mail

  • apple_mail_list_accounts — list account names, sender addresses, and mailboxes

  • apple_mail_list — list message metadata without reading bodies

  • apple_mail_get — read one message, including its body

  • apple_mail_send — send a message immediately

  • apple_mail_update_status — mark read/unread or flag/unflag

  • apple_mail_move — move a message to another mailbox in the same account

  • apple_mail_delete — delete a message using Mail.app behavior

Calendar

  • apple_calendar_list_calendars — list calendar names and writable status

  • apple_calendar_list_events — list overlapping events in an ISO 8601 time range

  • apple_calendar_create_event — create an event

  • apple_calendar_update_event — update an event by UID

  • apple_calendar_delete_event — delete an event by UID

Reminders

  • apple_reminders_list_lists — list reminder-list names and IDs

  • apple_reminders_list — list reminders, optionally including completed items

  • apple_reminders_create — create a reminder

  • apple_reminders_update — update a reminder by ID

  • apple_reminders_complete — mark a reminder complete

  • apple_reminders_delete — delete a reminder by ID

Privacy and safety

  • The MCP server itself has no network listener and stores no credentials or Apple data.

  • Inputs are passed to osascript as JSON arguments rather than interpolated into executable JXA source.

  • Mail, Calendar, and Reminders changes can sync through iCloud, CalDAV, Exchange, or another configured provider.

  • “Local MCP” describes where the server runs. Content returned to Claude Code or Codex becomes part of that active model session and may be processed according to that product's data controls.

  • Sending, moving, updating, completing, and deleting are real actions. Review write-tool requests before approving them.

Update

Registrations using the npm command with @latest resolve the latest published version when a new MCP process starts. Start a new Claude Code or Codex session after a release. Pin an explicit version if automatic upgrades are not desirable.

For a source checkout, update in place so the stored absolute path remains valid:

cd /absolute/path/to/apple-productivity-mcp
git pull --ff-only
npm ci
npm test

Remove

claude mcp remove apple-productivity-local --scope user
codex mcp remove apple-productivity-local

Removing the registration does not clear npm's cache, delete a cloned repository, or change Apple data.

Development and verification

Install dependencies and run the isolated test suite:

npm ci
npm test
npm audit --omit=dev

Run the read-only live integration tests after granting Automation permission:

npm run test:integration

The default test run skips live integration tests because they access the user's installed Apple applications.

Troubleshooting

Apple automation unavailable or an authorization error

Review System Settings → Privacy & Security → Automation, enable the affected Apple app for the process that launches your MCP client, then restart the client.

Mail account not found, Calendar not found, or Reminder list not found

Run the corresponding discovery tool and use the exact returned name. Names are local to your macOS setup and may differ by language or provider.

spawn ... ENOENT

For an npm installation, run command -v npx and use the returned absolute path as the configured command. For a source checkout, remove and re-add the MCP registration using fresh values from command -v node and pwd.

npm package cannot be downloaded

Confirm that the public package is reachable and that the client has internet access for the first installation:

npm view @gambadio/apple-productivity-mcp version

After the package has been downloaded, npm can reuse its local cache for that version.

Server is registered but tools do not appear

Run the client's mcp get/mcp list commands, then start a new session. Restart an already-open desktop app or IDE extension after changing MCP configuration.

License

MIT

Available Tools

18 tools
apple_calendar_create_eventB

Create a new local Calendar.app event.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
notesNo
startYes
titleYes
allDayNo
calendarYesCalendar name.
locationNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations indicate a non-read-only, non-idempotent write operation. The description adds context by specifying 'new' (create vs. update) and 'local' (calendar scope), which goes beyond the annotations. However, it does not disclose permissions, side effects, or duplicate behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no fluff, front-loaded with the verb and object. It is appropriately sized for the purpose clarity it provides.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, low schema coverage, and no output schema, the description is insufficient. It doesn't explain parameter values, behavior on local calendars, or how to use the tool in context. It's a minimal one-liner.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is very low (only 'calendar' has a description). The tool description adds no parameter information, leaving date format, allDay semantics, and required parameters unexplained. This is a significant gap for a tool with 7 parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and the object ('a new local Calendar.app event'), distinguishing it from sibling tools like apple_calendar_update_event and apple_calendar_delete_event. The 'local' qualifier adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives like apple_calendar_update_event, nor does it mention prerequisites such as available calendars or required date formats. It only implies usage by its name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_calendar_delete_eventA
Destructive

Delete an existing local Calendar.app event. This is destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault
uidYes
calendarYesCalendar name.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds 'existing' and 'local' context beyond the annotations, which already declare destructiveHint. It explicitly states 'This is destructive,' which reinforces the annotation but does not add significant new behavioral details such as permissions or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, delivering the essential purpose and destructive nature without any unnecessary wording. It is well-structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool, the description is adequate but lacks specifics about behavior when the event is not found, return values, or prerequisites. The annotations and schema cover some aspects, but the description could provide more context for complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, with only 'calendar' having a description. The tool description does not explain 'uid' at all, leaving it ambiguous. Since there are only two parameters, the description should have clarified that uid is the event identifier, but it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool deletes an existing local Calendar.app event, using a specific verb and resource. It distinguishes itself from sibling tools like create_event or list_events by focusing on deletion and specifying 'local Calendar.app'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this tool when you need to delete an existing local Calendar.app event. However, it does not explicitly mention when not to use it or provide alternative tool recommendations, leaving the guidance mostly implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_calendar_list_calendarsA
Read-onlyIdempotent

Read-only: list local Calendar.app calendar names and whether each calendar is writable. Use this before creating or modifying events when the exact calendar name is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly labels the tool as 'Read-only,' matching the annotations (readOnlyHint=true, destructiveHint=false, idempotentHint=true). It adds valuable context by specifying the output includes calendar names and writable status, which goes beyond what the annotations convey. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence. It front-loads the 'Read-only' behavior, states the resource and output, and gives a usage directive. Every word earns its place with zero redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description fully covers its purpose, output, and context. The usage note about creating/modifying events provides the needed situational context, making the tool complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema fully covers any inputs (none). The description adds no parameter details, but none are needed. The baseline for 0 params is 4, and the description's mention of listing names and writable status already implies what is returned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('list local Calendar.app calendar names') and the output detail ('whether each calendar is writable'). It also connects to sibling tools by indicating it is a precursor to creating or modifying events when the calendar name is unknown, distinguishing it from event-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides an explicit usage condition: 'Use this before creating or modifying events when the exact calendar name is unknown.' This clearly tells the agent when to invoke this tool and implicitly when not (when the calendar name is known). It gives actionable context without naming alternatives, which is sufficient for the simple use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_calendar_list_eventsA
Read-onlyIdempotent

Read-only: list local Calendar.app events in a time range.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYesInclusive ISO 8601 end date/time; must be after start.
limitNo
startYesInclusive ISO 8601 start date/time.
calendarsNoOptional calendar-name allowlist. Empty means all calendars.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the 'local' context and time-range scoping, but does not disclose pagination, return format, or default filtering behaviors beyond what annotations/schema provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-structured sentence that front-loads the read-only nature, then states the action and scope. Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with four parameters, strong annotations, and no output schema, the description plus schema provide sufficient context for an agent to invoke it correctly. It clearly indicates read-only behavior, the resource, and the time-range requirement.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 75% of parameters with descriptions (start, end, calendars). The description does not add parameter-level detail beyond the schema, so it holds at the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('list'), resource ('local Calendar.app events'), and scope ('in a time range'), clearly distinguishing it from sibling tools like apple_calendar_list_calendars (which lists calendars) and mutation tools like create/update/delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for read-only retrieval of calendar events within a time range, but it does not explicitly state when to use this tool over alternatives or mention exclusions. No alternatives are named, so guidance is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_calendar_update_eventA
DestructiveIdempotent

Modify an existing local Calendar.app event. Obtain the uid from apple_calendar_list_events.

ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
uidYes
notesNo
startNo
titleNo
allDayNo
calendarYesCalendar name.
locationNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating operation. The description adds little beyond that, but clarifies the scope ('existing local Calendar.app event'). It doesn't contradict annotations, and the existing annotations carry the primary safety information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the main purpose. The second sentence adds actionable guidance. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 8 parameters and no output schema, this description is sparse. It lacks essential context such as whether all fields are required or only provided fields are updated, what happens on success/failure, and how to handle time zone or allDay interactions. The prerequisite note helps, but overall completeness is low.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 13% (only 'calendar' has a description). The description compensates minimally by explaining that uid comes from apple_calendar_list_events, but it does not add semantics for start, end, title, allDay, location, or notes. It also doesn't clarify whether the update is partial or full replacement, which is critical for correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb and resource: 'Modify an existing local Calendar.app event.' This distinguishes it from sibling tools like create and delete, and specifies the domain (Calendar.app). The additional instruction to obtain the uid from apple_calendar_list_events reinforces the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite: 'Obtain the uid from apple_calendar_list_events.' This implies the appropriate workflow and when to use this tool (for existing events). It doesn't explicitly mention alternatives like create/delete, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_mail_deleteA
Destructive

Delete a local Apple Mail message. This is destructive and moves the message according to Mail.app deletion behavior.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailIdYesLocal Mail message id returned by apple_mail_list.
accountNoApple Mail account name.iCloud
mailboxNoMailbox name, normally INBOX.INBOX

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds useful context that deletion follows Mail.app's behavior (e.g., moving to Trash), and specifies it applies to local messages. This goes beyond the annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences deliver the essential action, destructive warning, and behavioral nuance. No filler or redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a delete operation with three parameters and no output schema, the description covers the core behavior, destructive nature, and Mail.app-specific handling. It could mention prerequisites (e.g., mailId from apple_mail_list) but the schema already documents that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter meanings are fully documented in the schema. The description itself doesn't add parameter-specific detail, but doesn't need to given the schema's completeness.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete a local Apple Mail message') and the resource (Apple Mail message). It distinguishes from sibling tools like apple_mail_move and apple_mail_update_status by specifying deletion behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates when to use this tool—for deleting a local Apple Mail message—and notes the destructive nature. It doesn't explicitly name alternatives or when-not conditions, but the purpose is clear and context is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_mail_getA
Read-onlyIdempotent

Read-only: read one local Apple Mail message, including its body. Use apple_mail_list first to obtain the local mail id.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailIdYesLocal Mail message id returned by apple_mail_list.
accountNoApple Mail account name.iCloud
mailboxNoMailbox name, normally INBOX.INBOX

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the behavioral detail that the body is included and that the id is local, but does not describe return format or error behavior. This is acceptable given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no redundant content. It front-loads the core purpose and then provides the key usage step, making it efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite lacking an output schema, the description clearly states the message body is included, which is the most important return detail. It also gives the prerequisite workflow. A minor gap is the lack of detail on other returned message fields, but the description remains sufficient for a simple read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with clear parameter descriptions for mailId, account, and mailbox. The description does not add extra parameter-specific meaning beyond referring to the local id, so it relies on the schema as expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the action (read), the resource (one local Apple Mail message), and the scope (including its body). It differentiates from sibling tools by being read-only and focusing on a single message, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context by instructing to call apple_mail_list first to obtain the local mail id. It implies the appropriate workflow but does not explicitly exclude alternative tools such as send or delete, so it stops short of full when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_mail_listA
Read-onlyIdempotent

Read-only: list local Apple Mail metadata. Returns message ID, sender, subject, received time, and read/flag status. It does not read message bodies.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum messages to return.
accountNoApple Mail account name.iCloud
mailboxNoMailbox name, normally INBOX.INBOX

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond these: it lists exact metadata fields returned, clarifies that message bodies are not accessed, and scopes to 'local Apple Mail metadata'. This transparency helps an agent understand side effects (none) and output granularity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, with the primary action and scope front-loaded ('Read-only: list local Apple Mail metadata'). The second sentence adds return fields and an explicit exclusion (no bodies). Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing the returned fields and clarifying body exclusion. It also covers the local scope. Minor gaps exist (e.g., no mention of ordering, pagination, or default mailbox) but the schema provides defaults for account and mailbox, and the simplicity of the tool reduces the need for more detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, as each parameter (limit, account, mailbox) has a clear description. The tool description adds no additional parameter-specific detail beyond the schema, so a baseline score of 3 is appropriate; the schema carries the semantic load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('list'), names the resource ('local Apple Mail metadata'), and enumerates return fields (message ID, sender, subject, received time, read/flag status). It clearly distinguishes from siblings like apple_mail_get (which reads bodies) and apple_mail_send/delete/move (which mutate mail).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear context: it is a read-only listing operation and explicitly states it does not read message bodies, which implies use apple_mail_get when bodies are needed. It does not explicitly name alternatives or provide when-not-to-use instructions, but the context is sufficiently clear for safe selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_mail_list_accountsA
Read-onlyIdempotent

Read-only: list local Apple Mail account names, sender addresses, and mailbox names. Use this before other Mail tools when the exact names are unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context by specifying exactly what data is returned (account names, sender addresses, mailbox names), which helps the agent anticipate the output. No destructive behavior is implied, consistent with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first declares the read-only function, the second provides usage guidance. Every word earns its place, and it front-loads the key information. No redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only discovery tool with no output schema, the description is complete: it states the function and usage context, and lists the returned data. An agent can confidently invoke this tool before other Mail tools without needing more details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is 100% (empty properties). With no parameters to document, the baseline is 4 per the rubric. The description adds value by implying the tool takes no input and lists all local accounts, which is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'list local Apple Mail account names, sender addresses, and mailbox names.' It clearly distinguishes itself from sibling tools like apple_mail_list (which likely lists emails) by focusing on account-level metadata and is labeled 'read-only.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit timing: 'Use this before other Mail tools when the exact names are unknown.' This gives clear context for when to use the tool, though it does not mention when not to use it or alternative tools. This is strong guidance but lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_mail_moveA
Destructive

Move a local Apple Mail message to another mailbox in the same account.

ParametersJSON Schema
NameRequiredDescriptionDefault
mailIdYesLocal Mail message id returned by apple_mail_list.
accountNoApple Mail account name.iCloud
mailboxNoMailbox name, normally INBOX.INBOX
targetMailboxYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive (destructiveHint=true) and non-read-only. The description adds the constraint that the operation works only within the same account and that it concerns local messages, which is useful. It does not elaborate on side effects or error conditions, but the annotation covers the primary behavioral concern.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no extraneous words. The verb appears first, followed by the object and constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and the description covers the essential action and scope, but it leaves ambiguity about the mailbox parameter's relationship to the source mailbox and does not mention return values. Given the lack of an output schema, a bit more detail about expected behavior would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides descriptions for three of four parameters; targetMailbox is left undocumented. The description does not clarify the role of the source mailbox parameter (mailbox) or the format for targetMailbox, relying mostly on parameter names. It adds the 'same account' context but little else beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (move), the resource (a local Apple Mail message), and the destination (another mailbox in the same account). This distinguishes it from sibling tools like delete, send, or update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose makes it evident when to use: to relocate a message within the same account. However, it does not offer explicit guidance on when not to use it or mention alternatives such as apple_mail_delete or apple_mail_update_status for related operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_mail_sendA

Send an Apple Mail message from the selected local account. This immediately sends email to the specified recipients.

ParametersJSON Schema
NameRequiredDescriptionDefault
ccNo
toYesPrimary recipients.
bccNo
bodyNo
accountNoApple Mail account name.iCloud
subjectYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds behavioral context beyond annotations by stating that sending is immediate ('immediately sends email') and that it comes from a selected local account. This is useful because annotations only indicate it's a write operation (readOnlyHint=false) without specifying timing or source selection. However, it does not disclose irreversibility or potential error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core action, and every sentence adds value. It is two sentences long with no redundant content, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 6 parameters and no output schema, the description is too brief. It states the immediate send behavior but does not explain return values, error scenarios, or how the account parameter relates to available accounts. Sibling tools could provide some context, but the tool itself leaves gaps for an agent relying solely on the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 33% schema description coverage, the description needed to compensate but barely does. It mentions 'specified recipients' which covers the 'to' parameter, but does not explain subject, body, cc, bcc, or account beyond a vague reference to 'selected local account'. This leaves users guessing about required fields and defaults.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action with a specific verb ('Send'), the resource ('Apple Mail message'), and the source context ('from the selected local account'). It distinguishes itself from sibling tools like apple_mail_list and apple_mail_get by focusing on sending rather than reading or managing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides some context ('from the selected local account') but does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites like listing accounts or needing a subject. The usage is implied by the verb 'send' but without concrete guidance or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_mail_update_statusA
DestructiveIdempotent

Modify a local Apple Mail message read/unread and/or flagged status.

ParametersJSON Schema
NameRequiredDescriptionDefault
isReadNo
mailIdYesLocal Mail message id returned by apple_mail_list.
accountNoApple Mail account name.iCloud
mailboxNoMailbox name, normally INBOX.INBOX
isFlaggedNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds useful context by specifying the message is 'local' and by naming the exact status fields that can be modified. However, it does not disclose additional behavioral traits such as side effects, return values, or how partial updates behave. The annotations already provide destructiveHint and idempotentHint, so the description adds limited transparency beyond those.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence of 14 words. It contains no filler and directly states the tool's purpose. Every word contributes to understanding the function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 5 parameters, annotations, and no output schema. The description is sufficient to grasp the basic operation, but it lacks usage context, alternative guidance, and any indication of what the tool returns (e.g., updated message or success status). Given the mutation nature and absence of an output schema, the description is adequate but has clear gaps, making it minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema describes 3 of 5 parameters (mailId, account, mailbox) but leaves isRead and isFlagged without descriptions. The tool description partially compensates by mentioning 'read/unread and/or flagged status', but it does not clarify boolean semantics (e.g., true means read) or that omitted fields leave status unchanged. It adds some meaning but not enough to fully cover the gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Modify' and identifies the resource ('local Apple Mail message') along with the affected attributes ('read/unread and/or flagged status'). This clearly differentiates it from sibling tools like apple_mail_list, apple_mail_get, apple_mail_send, apple_mail_move, and apple_mail_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for updating a message's status but provides no explicit when-to-use guidance, alternatives, or exclusions. It does not mention prerequisites like listing messages first to obtain a valid mailId, which the schema hints at but the description omits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_reminders_completeB
DestructiveIdempotent

Mark an existing local Apple Reminder as completed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesReminder id returned by apple_reminders_list.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=true, and the description's 'Mark as completed' is consistent with those. The description adds the qualifiers 'local' and 'existing', which are useful, but it does not disclose side effects or error behavior beyond the annotations. With annotations present, the bar is lower, and this meets it minimally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, unambiguous sentence with no filler or redundant wording. It conveys the action clearly in the fewest possible words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter tool with annotations and no output schema, the description is adequate but incomplete. It lacks explicit usage distinction from apple_reminders_update and does not mention idempotency or error behavior if the reminder is already completed. Adding a note about idempotence or a pointer to the update tool would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers 100% of the parameter semantics, stating that 'id' is the 'Reminder id returned by apple_reminders_list'. The description adds no additional parameter details, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Mark' and the resource 'Apple Reminder' with the specific outcome 'as completed'. It is distinguishable from create/delete/list, though it does not explicitly contrast with the sibling apple_reminders_update, which could also modify a reminder.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives like apple_reminders_update. The description only states the action without prerequisites, context, or exclusions, leaving the agent to infer the intended use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_reminders_createC

Create a local Apple Reminder.

ParametersJSON Schema
NameRequiredDescriptionDefault
listYes
dueAtNo
notesNo
titleYes
priorityNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The word 'local' adds a minor behavioral trait indicating the reminder is stored locally rather than synced. Annotations already indicate a write operation (readOnlyHint=false), so the description contributes little beyond this. No side effects, permissions, or return behavior are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that wastes no words. However, it is so minimal that it borders on under-specification, though conciseness itself is strong.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has five parameters, no output schema, and no parameter descriptions, a one-sentence description is severely inadequate. It does not explain required fields, valid inputs, or expected behavior, leaving critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description provides no semantics for any of the five parameters (list, title, dueAt, notes, priority). The agent only has type/constraint information from the schema, which is insufficient for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Create') and resource ('Apple Reminder'), and the qualifier 'local' distinguishes it from other reminder operations like complete/delete/update. It effectively communicates the tool's primary purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., apple_reminders_update, apple_reminders_complete). There are no prerequisites mentioned, such as needing an existing list or proper permissions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_reminders_deleteA
Destructive

Delete an existing local Apple Reminder. This is destructive.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesReminder id returned by apple_reminders_list.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's 'This is destructive' is redundant. It adds only the 'local' scope detail, which provides minimal extra context. No further consequences or side effects are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no fluff. Every word earns its place, making it highly concise and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple delete tool with one parameter, full schema coverage, and annotations covering destructive behavior, the description is nearly complete. It lacks explicit irreversibility wording, but annotations already signal destructive intent, so the overall context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'id' already described as 'Reminder id returned by apple_reminders_list'. The description adds no additional parameter semantics beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Delete' and resource 'existing local Apple Reminder', clearly distinguishing it from sibling operations like complete or update. It leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (deleting a reminder) but does not provide explicit when-to-use or exclusions, such as 'use complete instead if you want to mark as done' or 'cannot be undone'. While the purpose is clear, alternatives and prerequisites are not addressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_reminders_listC
Read-onlyIdempotent

Read-only: list local Apple Reminders.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
listsNoOptional reminder-list allowlist. Empty means all lists.
includeCompletedNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description repeats the readOnlyHint annotation (read-only) and adds 'local' as minor context. It does not disclose behaviors like default limits, filtering options, inclusion of completed items, or any return format. With annotations already covering safety, this adds minimal value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with 'Read-only', using a single sentence without waste. However, it is borderline under-specified, though not as extreme as a pure tautology; it provides at least the core action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 3 parameters and no output schema, the description lacks essential context such as how filtering by lists works, the meaning of includeCompleted, default behavior, or what the output looks like. It is too sparse to fully handle the tool's complexity, leaving significant gaps for the agent to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (33% – only 'lists' has a description), and the description does not mention any parameters. The parameter names (limit, includeCompleted, lists) are somewhat self-explanatory, but the description fails to clarify their semantics or relationships, leaving the agent to infer from names alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('list') and resource ('local Apple Reminders'), which distinguishes it from sibling tools like apple_reminders_list_lists (which lists lists, not reminders). However, it does not explicitly mention this distinction, relying on the tool name and the word 'Reminders' to infer the resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or specific use cases beyond the bare 'list local Apple Reminders.' The agent has no help in deciding between this, list_lists, or other reminder tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_reminders_list_listsA
Read-onlyIdempotent

Read-only: list local Apple Reminders list names and IDs. Use this before creating reminders when the exact list name is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint, idempotentHint, and destructiveHint, so the description's 'Read-only' prefix is redundant. It adds the 'local' scope and a practical use case, but does not reveal further behavioral traits such as return format specifics or potential limitations. The description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, front-loaded with the key read-only nature, and conveys the exact purpose and usage context without any fluff. Every word contributes to understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, parameterless tool with no output schema, the description fully covers the tool's role: it lists list names and IDs, is read-only, and provides a clear use case. The sibling list shows this is a distinct operation, and nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters, the schema coverage is effectively 100% and there is no parameter information to clarify. The description does not need to add parameter semantics, and the baseline of 4 for no-parameter tools is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists 'local Apple Reminders list names and IDs' with the specific verb 'list' and a defined resource. It distinguishes itself from sibling tools like apple_reminders_list (which lists reminders) and the create/update/delete tools by focusing on list names and IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly advises using this tool 'before creating reminders when the exact list name is unknown,' providing clear context for when to use it. It does not explicitly mention when not to use it or name an alternative, but the guidance is direct and useful for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apple_reminders_updateC
DestructiveIdempotent

Modify an existing local Apple Reminder.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesReminder id returned by apple_reminders_list.
dueAtNo
notesNo
titleNo
priorityNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate write/destructive/idempotent behavior, but the description adds no extra context—not even that it performs a partial update, returns the updated reminder, or that it requires an existing id. 'Modify' adds little beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. It gets straight to the point, which is concise and easy to parse. It doesn't include unnecessary details, though a bit more context might add value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 5 parameters, no output schema, and sparse annotations, the description is far too minimal to fully inform an agent. It doesn't explain the full effect of the update, return values, error cases, or partial-update semantics, leaving significant gaps for a non-trivial mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20% (only the 'id' field has a description), and the tool description does not compensate by explaining any of the other parameters (title, notes, dueAt, priority). It doesn't mention that dueAt can be null to clear a date, or that priority must be 0-9, leaving the agent to rely on bare schema types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Modify') and the resource ('existing local Apple Reminder'). It distinguishes itself from sibling tools like create, delete, and complete, though it doesn't explicitly name alternatives. The word 'local' adds useful scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is used to change an existing reminder, but it does not specify when to prefer it over complete or delete, nor does it mention prerequisites like obtaining an id from list. No exclusions or alternative tool references are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.9/5.0
Disambiguation5/5

Each tool is prefixed by domain (mail, calendar, reminders) and targets a distinct resource/action. Similar-sounding tools like apple_mail_list and apple_mail_list_accounts are clearly differentiated by descriptions.

Naming Consistency5/5

All tools follow a consistent `apple_<domain>_<verb>_<noun>` snake_case pattern. Minor exceptions like apple_mail_send and apple_mail_move omit an explicit noun but still fit the overall convention.

Tool Count5/5

18 tools is well-scoped for covering three applications (Mail, Calendar, Reminders) with the common operations for each. Each domain has a sensible number of tools without redundancy.

Completeness5/5

Mail covers listing, reading, sending, updating status, moving, and deleting. Calendar covers listing, creating, updating, and deleting events. Reminders covers listing, creating, updating, completing, and deleting. The surface is complete for typical productivity workflows.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides Claude with full access to Apple Calendar on macOS for event management, smart scheduling, and schedule analytics. It enables natural language event creation, conflict detection, and template-based scheduling through AppleScript integration.
    26
    1
    MIT
  • F
    license
    Not graded
    quality
    F
    maintenance
    Provides Claude Desktop with access to Apple Calendar and Reminders on macOS for managing schedules and tasks through natural language. It supports comprehensive operations like creating, editing, and searching events and reminders, along with a custom hashtag-based tagging system.
    3
  • A
    license
    B
    quality
    A
    maintenance
    Enables Claude to interact with Apple apps on macOS including Mail, Calendar, Contacts, Reminders, Notes, and iCloud Drive for personal productivity tasks like triaging email, managing calendar, and cross-app context.
    76
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/gambadio/apple-productivity-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server