apple-productivity-mcp
Local macOS MCP server that automates Apple productivity apps, files, media, and allowlisted Shortcuts from stdio MCP clients (v3.0.0: 133 tools across 17 groups).
Mail: list accounts/mailboxes/messages, read bodies, send email, update read/flag status, move, delete.
Calendar: list calendars/events, create/update/delete events.
Reminders: list lists/reminders, create/update reminders, complete, delete.
Notes/Contacts: list/search/create/update/delete notes, folders, groups, and contacts.
iWork/TextEdit: open/list/read/write/save/export/close Pages, Numbers, Keynote, and TextEdit documents.
Safari/Music/Photos: manage tabs/Reading List, playlists/tracks/playback, and albums/items/import/export/metadata.
Messages/Files/Finder: send messages; bounded file/folder operations; Finder selection, reveal, and Trash.
Shortcuts/System: list and run explicitly allowlisted Shortcuts; discover apps/configuration and launch known Apple apps.
Configuration: enable app groups, read-only mode, restrict file roots, and allowlist Shortcuts.
Safeguards: local stdio only, no hosted service; path checks, overwrite/empty-folder rules, read-only mode, and tool annotations.
Provides tools for interacting with Apple Mail, Calendar, and Reminders on macOS, enabling listing, reading, sending, and managing emails, calendar events, and reminders.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@apple-productivity-mcplist my events for tomorrow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Apple Productivity MCP
A local macOS MCP server for working with Apple's productivity apps, documents, files, and media from Codex, Claude Code, Claude Desktop, and other stdio MCP clients.
Version 3.0.0: 133 tools across 17 groups, plus optional execution of explicitly allowlisted Shortcuts. Runs on your Mac through Apple's automation interfaces. No hosted service, listening port, subscription, or Apple API key is required.
Tool reference · Machine-readable schemas · Verification · Source documentation · Changelog · Publishing · Directory status
What it can do
App / group | Tools | Coverage |
12 | Accounts and mailboxes; message metadata/body; sender/subject search; visible drafts; send; read/flag status; move/trash; mailbox creation; attachments. | |
Calendar | 12 | Calendars and events; create/update/delete events; event notes, attendees and recurrence; calendar creation/rename/deletion; display alarms and event URLs. |
Reminders | 15 | Accounts/lists; reminders and title search; notes, priorities and due dates; create/update/delete; list management; complete/reopen; flags and notification dates. |
Notes | 9 | Accounts/folders; list/search/read notes; create folders and HTML notes; update and delete unlocked notes. |
Contacts | 9 | Search and contact details; groups and members; create contacts/groups; update fields; add/remove group membership. |
Pages | 8 | List/open/create documents; read/replace/append body text; save; export PDF/DOCX; close with unsaved-change protection. |
Numbers | 11 | Documents, sheets, tables; create tables; read/write bounded cell ranges; save; export PDF/XLSX; close. |
Keynote | 9 | Documents and slides; create presentations; add/update title, body and presenter notes; save; export PDF/PPTX; close. |
TextEdit | 7 | Documents; create/open/read/replace/append text; save RTF; close. |
Safari | 6 | Tabs and page text; open/navigate/close tabs with URL checks; Reading List. |
Music | 9 | Playlists, tracks and search; metadata; create playlists and add tracks; playback and volume. |
Photos | 9 | Albums/items/search; metadata; create albums; add items; import/export; update metadata. |
Messages | 3 | Accounts/chats; send text to an explicit recipient through an explicit account. |
Files | 8 | Bounded folder listing; metadata/text; create text files/folders; copy; Spotlight filename search; Finder Trash. |
Finder | 2 | Selected item metadata; reveal an allowed path. |
Shortcuts | 2 + 1 opt-in | List shortcuts/folders; run only names in the configured allowlist. |
System | 2 | Discover installed apps/configuration; launch a known Apple app. |
The original 18 tool names remain supported. Version 3 expands the default catalog; select only the app groups you want below.
Coverage has boundaries. Apple does not expose every app feature through scripting. Messages history, Contacts deletion, Pages layout text boxes, full document styling, Calendar invitations, Reminders subtasks/tags/recurrence, arbitrary Safari JavaScript, and private Apple databases are not implemented. There are no dedicated Home, Health, Wallet, Find My, or Freeform editing tools. A user-created, allowlisted Shortcut can bridge supported actions in other apps. The complete input schemas describe exactly what each tool accepts.
Related MCP server: reminders-mcp
Requirements
macOS and Node.js 20 or newer.
The Apple app you want to control must be installed and configured. Pages, Numbers, and Keynote are separate App Store installations.
A client supporting local stdio MCP servers.
macOS Automation permission for the launching client/process to control each app. Some file locations also require Files & Folders access.
The server starts when the MCP client connects. Each automation call uses a fixed script and JSON arguments with a timeout. iCloud, Exchange, or other account sync continues to follow the app's own settings.
Install
Codex
codex mcp add apple-productivity-local -- \
npx -y @gambadio/apple-productivity-mcp@latest
codex mcp get apple-productivity-localClaude Code
claude mcp add --transport stdio --scope user apple-productivity-local -- \
npx -y @gambadio/apple-productivity-mcp@latest
claude mcp get apple-productivity-localClaude Desktop and other JSON-configured clients
Add this to the client's MCP configuration, then restart it:
{
"mcpServers": {
"apple-productivity-local": {
"command": "npx",
"args": ["-y", "@gambadio/apple-productivity-mcp@latest"]
}
}
}For a reproducible install, replace @latest with @3.0.0. A tested local .mcpb bundle and checksum are available in the GitHub release. See the packaging instructions to build one yourself. This package requires execution on the user's Mac and cannot access their apps from a Linux container or remote hosting service.
Configuration
All settings are optional. Put them in your MCP client's server environment and start a new MCP process.
Variable | Default | Behavior |
| All groups | Comma-separated group names from the table above, lowercase: e.g. |
|
|
|
|
| JSON array of existing absolute directories for Files tools, Finder reveal, Mail attachment saving, and Shortcut file input. Required when using those operations. Paths resolving outside these roots are rejected. |
|
| JSON array of shortcut names/identifiers permitted to run. An empty list omits |
Example with Notes, reminders, files, and one permitted Shortcut:
{
"mcpServers": {
"apple-productivity-local": {
"command": "npx",
"args": ["-y", "@gambadio/apple-productivity-mcp@3.0.0"],
"env": {
"APPLE_MCP_ENABLED_GROUPS": "system,notes,reminders,files,finder,shortcuts",
"APPLE_MCP_FILE_ROOTS": "[\"/Users/YOUR_NAME/Documents\"]",
"APPLE_MCP_SHORTCUTS": "[\"Prepare daily note\"]"
}
}
}
}Replace YOUR_NAME and the shortcut name with values that exist on your Mac. An iCloud Drive directory can be included using its real local absolute path.
File roots constrain the generic file tools listed above; they are not a sandbox for Apple apps. iWork/TextEdit open/save/export and Photos import/export use explicit paths under the macOS permissions of those apps. Shortcuts may perform any action already contained in the allowed shortcut, including sending messages or changing data elsewhere. Inspect a shortcut before allowlisting it. App-group filtering and read-only mode control the exposed tool surface; MCP annotations are hints for clients, not an authorization system.
Example requests
“Find reminders with ‘invoice’ in the title, then show their notes and due dates.”
“Create a Notes folder in this account and put my meeting summary in it.”
“Read this Pages document and export a PDF beside it.”
“List the sheets and tables in my Numbers workbook, then fill cells B2:D6 with these values.”
“Add a Keynote slide with this title, body, and presenter notes.”
“Find Mail messages from this sender and save the selected attachment in my allowed Documents folder.”
“List my Photos albums and export these selected items into an empty folder.”
“Run my allowlisted ‘Prepare daily note’ shortcut.”
Start with discovery tools. Use returned IDs/names and inspect the tool schema for exact fields. apple_system_capabilities identifies installed apps but does not pre-authorize them or prove permissions. Write requests act on real data, so name the intended target and changes explicitly.
Data handling and safeguards
No server-side account, telemetry service, network listener, or credential storage.
Fixed JXA programs receive user values as JSON arguments, without interpolation into executable source. There is no arbitrary code or shell execution tool.
New file copies refuse replacement. Text writes and document save/export require an explicit overwrite option to replace a path. Photos exports require an empty folder.
Generic file operations require explicit roots and check resolved paths. File deletion goes through Finder Trash; there is no empty-Trash tool.
Collection reads and text/cell ranges have limits. Locked Notes are not read or modified. Safari tab mutations compare the expected URL to guard against shifted indices.
Read-only mode hides mutations. Every tool declares read-only, destructive, idempotent, and open-world annotations.
Email, Messages, document changes, reminders, contacts, and media edits may sync or reach other people. A send result means submission to the app, not independently verified delivery.
Timeouts or multi-step errors can leave partial changes. Inspect the target before retrying a write.
Data returned to an MCP client becomes part of that client's active model session and is governed by its data controls. Local execution does not mean content stays outside the model session. JSON inputs are visible to local processes with sufficient OS privileges.
Development and verification
npm ci
npm test
npm run docs:tools
npm audit --omit=dev
npm pack --dry-runTests execute the static automation programs against application fixtures, exercise filesystem boundaries in temporary folders, and initialize the actual stdio MCP server. They do not send messages or edit personal app data.
For the existing read-only Mail/Calendar/Reminders integration suite, after granting Automation permission:
npm run test:integrationLive verification is app-specific. Pages, Numbers, and Keynote were not installed on the release development Mac; their tools have fixture coverage but no live iWork verification. See verification results and limitations and implementation sources. Do not interpret the tool count as a claim that every operation has been exercised against every app/macOS version.
Troubleshooting
Automation unavailable / not authorized / timeout: open System Settings → Privacy & Security → Automation and permit the relevant Apple app for the launching client. A timeout can also reflect a busy app or slow iCloud data; do not blindly retry writes. Restart the client after permission/configuration changes.
Application cannot be found: install the app, launch it once, and verify apple_system_capabilities. OS process sandboxing can also restrict LaunchServices. Run a local client with the appropriate macOS access.
File roots required / path outside allowed roots: configure APPLE_MCP_FILE_ROOTS as a JSON array of existing absolute directories. A symlink cannot be used to escape that list. Create missing parent folders first.
Object not found / ambiguous name: rediscover the app's current account, list, document, or object ID. Names differ by language/provider. Close or rename duplicate documents before editing by name.
Contacts has unsaved changes: save or discard your pending edits in Contacts before using a mutation, because Contacts' scripting save affects all pending changes.
Tools missing: check app-group/read-only settings, start a new session, and verify mcp get/mcp list in your client. Shortcut execution appears only with a nonempty allowlist. Apps need not be installed for their tools to be advertised.
spawn ... ENOENT: ensure Node and npx are accessible to the desktop client's PATH; use the full path returned by command -v npx if needed.
Update or remove
@latest is resolved when a new MCP process starts; restart the client after publishing a release. An existing process continues running its loaded version. To retain the original app scope on v3, set APPLE_MCP_ENABLED_GROUPS=mail,calendar,reminders.
codex mcp remove apple-productivity-local
claude mcp remove apple-productivity-local --scope userRemoving registration does not delete Apple data or clear npm's cache.
Distribution
Canonical source: GitHub. Package: npm. Registry identity: io.github.gambadio/apple-productivity-mcp.
Directory status distinguishes live listings, submissions awaiting review, login requirements, and incompatible or paused destinations. Third-party listing text may lag the source release. Inclusion and recommendation are controlled by those maintainers.
License
MIT. Independent project; not affiliated with or endorsed by Apple.
Available Tools
133 toolsapple_calendar_add_alarmB
Add a display alarm to an event. Negative minutes means before the event.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| minutes | Yes | ||
| calendar | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation is a mutation (readOnlyHint=false, destructiveHint=false, non-idempotent, open-world), so the safety profile is covered. The description adds one genuinely useful behavioral detail, that it is a *display* alarm, but says nothing about whether existing alarms are replaced or appended, permission requirements, or error behavior on an unknown uid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the core action comes first and the critical sign convention for minutes follows immediately. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent mutation with no output schema and 0% parameter coverage, the description is too sparse: it omits how the target event is identified, whether the alarm replaces or adds to existing alarms, and what happens on failure. The minutes clarification is the only real content beyond the tool name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it only clarifies one of three parameters (minutes: negative means before the event). The required uid and calendar parameters are left entirely undocumented in both schema and description, so an agent cannot tell whether uid is an event id or something else, or how calendar scopes the lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (add a display alarm to an event), which is clearly distinct from siblings like apple_calendar_set_recurrence, apple_calendar_set_url, and apple_calendar_update_event. It does not explicitly name those siblings, but the resource is specific enough for an agent to select correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: you add an alarm to an existing event identified by uid/calendar. There is no explicit when-to-use vs. when-not, no mention of prerequisites (the event must already exist), and no pointer to alternatives such as updating the event itself. Adequate but thin.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_create_calendarB
Create a Calendar.app calendar using the app default account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a write, non-destructive, non-idempotent, open-world operation. The description adds genuinely useful context beyond that - the calendar is placed in the 'app default account' rather than a caller-specified one, which matters since no account parameter exists. It still omits duplicate-name handling and permission requirements, so it does not exceed a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. Appropriate length for a simple two-parameter create tool, though it is terse enough that it could have used its remaining room to cover parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool with annotations covering the safety profile, the description is minimally adequate but leaves parameter semantics and the account/return behavior largely unstated, with no output schema to fill the gap. It is sufficient to invoke, not to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions the 'name' or 'description' parameters. The intuitive field names partially rescue it, but the description fails to compensate for the documented gap, and the 10000-char description default is left unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Create) and resource (Calendar.app calendar) plus the target account context, which distinguishes it from siblings like create_event, delete_calendar, or rename_calendar. It does not explicitly name a sibling to differentiate from, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites, and no comparison to alternatives such as list_calendars or rename_calendar. Usage is only implied by the verb 'Create'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_create_eventC
Create a new local Calendar.app event.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | ||
| notes | No | ||
| start | Yes | ||
| title | Yes | ||
| allDay | No | ||
| calendar | Yes | Calendar name. | |
| location | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the write profile is largely covered structurally. The description adds only the qualifier 'local' (implying a local Calendar.app store rather than a synced/remote calendar) but says nothing about duplicate-prevention behavior despite idempotentHint=false, nor about required permissions or what a repeated call produces.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words, which satisfies conciseness in size. But the brevity here reflects under-specification rather than disciplined conciseness, since key invocation-relevant detail is simply absent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 7 mostly-undocumented parameters, no output schema, and no parameter descriptions, the description does far too little. It does not explain the required date-time inputs, default handling for optional fields, or the resulting event identity, leaving an agent unable to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14% (just 'calendar'), and 7 parameters with 4 required are otherwise undocumented. The description contributes zero parameter information — nothing about the required start/end date-time format, the meaning of allDay, or how title/location/notes are handled — so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource combination ('Create a new ... event') that is unambiguous in isolation and distinct from sibling resources like create_calendar or update_event. However, it does not explicitly differentiate itself from the other calendar-event mutators (update_event, add_alarm, set_recurrence), leaving that routing to inference from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use context, no prerequisites (e.g., that the target calendar must already exist), and no mention of alternatives such as apple_calendar_update_event or apple_calendar_create_calendar. The agent must infer everything from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_delete_calendarBDestructive
Delete a uniquely named writable calendar and all its events. Destructive.
| Name | Required | Description | Default |
|---|---|---|---|
| calendar | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered by structured data rather than the description. The description does add genuinely new behavioral context beyond annotations: the deletion cascades to all events in the calendar. It says nothing about irreversibility or confirmation, so this is a modest add on top of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler; the scope of destruction is stated first and the 'Destructive.' flag is front-loaded as a warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter delete tool whose annotations already cover the safety profile, the description is nearly sufficient, but it omits how to identify the target calendar and whether the deletion is reversible, which matters for an irreversible cascade delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the single 'calendar' parameter. The word 'uniquely named' hints that the parameter is a calendar name that must be unique, which is real added meaning, but it does not clarify whether a name or identifier is expected or how to obtain it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Delete) and resource (a uniquely named writable calendar), and the phrase 'and all its events' makes clear this is not the single-event delete sibling apple_calendar_delete_event. It does not name that sibling explicitly, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives such as apple_calendar_delete_event for removing individual events, nor any prerequisite like locating the calendar first via apple_calendar_list_calendars. The single word 'Destructive.' is a warning, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_delete_eventADestructive
Delete an existing local Calendar.app event. This is destructive.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| calendar | Yes | Calendar name. |
TDQS
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.
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.
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.
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.
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.
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_get_eventBRead-onlyIdempotent
Read-only: get event notes, recurrence, URL, attendees, and display alarms.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| calendar | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so 'Read-only:' adds nothing new. What does add value is the enumeration of returned fields (notes, recurrence, URL, attendees, alarms) — meaningful disclosure given there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no padding, and the returned-field list is compact. The 'Read-only:' prefix is a small redundancy against annotations that already state this.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does carry the return-value burden and partially meets it by naming the fields returned. However, it omits any explanation of the two required inputs or failure behavior when an event/calendar is not found, leaving real gaps for a lookup tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Two required parameters (uid, calendar) with 0% schema description coverage, and the description says nothing about them. It does not clarify whether calendar is a name, ID, or path, nor what form a uid takes, so the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (get) and resource (event) and enumerates the payload it returns (notes, recurrence, URL, attendees, alarms). This distinguishes it from apple_calendar_list_events and the mutation siblings like create/update/delete_event, though it never explicitly names those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'get' suggests fetching a single event's details in contrast to list_events. There is no explicit when-to-use statement, no prerequisites, and no instruction on when to prefer this over reading an event via list_events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_list_calendarsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_eventsBRead-onlyIdempotent
Read-only: list local Calendar.app events in a time range.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | Inclusive ISO 8601 end date/time; must be after start. | |
| limit | No | ||
| start | Yes | Inclusive ISO 8601 start date/time. | |
| calendars | No | Optional calendar-name allowlist. Empty means all calendars. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the leading 'Read-only' prefix is largely redundant. The description adds only that scope is 'local Calendar.app', which doesn't clarify pagination, ordering, recurring events, or the limit default beyond what annotations and 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short, front-loaded sentence with the key verb and resource at the start. It wastes minimal space, though the 'Read-only:' prefix duplicates annotation data rather than earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries more burden, yet it omits return shape, ordering, pagination via limit, and whether recurring events are expanded. It is minimally adequate for a read-only list tool but leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75%, close to the high-coverage baseline where the schema does the heavy lifting. The description adds no parameter detail at all and notably says nothing about the undocumented limit parameter (default 50, max 100) or how calendars filtering interacts with the time range.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list), resource (Calendar.app events), and scope (a time range), which cleanly separates it from apple_calendar_get_event. However, it does not name any sibling tool or explicitly contrast with them, so it falls short of the 5 bar for sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no exclusions, and no mention of alternatives like apple_calendar_get_event or apple_calendar_list_calendars. The only contextual hint ('in a time range') is already implied by the required start/end parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_rename_calendarBDestructive
Rename a uniquely named writable calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| calendar | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and non-idempotent, so the safety profile is covered externally. The description adds the useful constraint that the target must be uniquely named and writable, hinting at an ambiguity failure mode, but says nothing about error behavior or what happens on non-unique matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource. No waste, nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the single sentence plus annotations covers the safety basics, but omits matching behavior, failure modes, and confirmation of what the rename affects. Adequate but thin for a destructive operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither parameter is documented in the schema. The description implies 'calendar' is a unique name and that a new name is required, but does not clarify matching semantics (exact name vs id) or name constraints, leaving real ambiguity for the caller.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (rename) and resource (calendar), and adds a scope qualifier ('uniquely named writable'). It is clearly distinguishable from create_calendar and delete_calendar siblings, though the qualifier is terse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no reference to alternatives such as apple_calendar_create_calendar or apple_calendar_delete_calendar. The agent must infer that this is the mutating rename path from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_set_recurrenceADestructiveIdempotent
Set an event recurrence rule (for example FREQ=WEEKLY;COUNT=5); empty string clears recurrence. Calendar validates the rule.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| calendar | Yes | ||
| recurrence | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds genuine behavioral context beyond them: that the calendar validates the rule (so it can fail) and that an empty string is the clearing sentinel rather than an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence whose clauses (example format, clear sentinel, validation note) each add distinct information, with the primary action front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a setter with no output schema, the description covers the semantically tricky parts (rule format, clearing, validation). It is nearly complete; only the semantics of uid/calendar selection are absent, which the bare schema also omits.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 3 required params, so the description must carry the load. It documents the 'recurrence' format and its empty-string edge case well, but 'uid' and 'calendar' receive no explanation at all, leaving the coverage gap half-filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: 'Set an event recurrence rule', with a concrete RFC-5545 style example. The recurrence focus makes it reasonably distinguishable from siblings like apple_calendar_update_event or apple_calendar_add_alarm, though it doesn't explicitly name what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'empty string clears recurrence' hints at when you would call it in the clear case, but there is no explicit guidance on when to use this tool versus apple_calendar_update_event, nor any prerequisites (e.g. event must already exist).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_set_urlBDestructiveIdempotent
Set or clear an event HTTP/HTTPS URL.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| url | Yes | ||
| calendar | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive, idempotent, and open-world behavior, so the safety burden is largely covered. The description adds the useful fact that the operation can clear (not just set) a URL, but it does not explain that an existing URL is overwritten, what error occurs for a bad UID, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and no filler. Nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with zero parameter documentation and no output schema, the description is too thin. An agent cannot tell how the event is identified (calendar + uid), whether the change is reversible, or what a clear operation returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It hints that url is an HTTP/HTTPS value and that empty clears it, partially explaining the anyOf empty-string branch, but it says nothing about the calendar or uid identifiers that are required to locate the event.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair (set/clear) and a specific resource (an event's HTTP/HTTPS URL), which is distinct from calendar siblings like set_recurrence or add_alarm. It does not, however, explicitly differentiate itself from apple_calendar_update_event, which plausibly could also touch a URL.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus update_event or the other calendar mutation tools, no prerequisites, and no indication of what happens on failure. Usage must be inferred entirely from the name and event-URL semantics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_calendar_update_eventBDestructiveIdempotent
Modify an existing local Calendar.app event. Obtain the uid from apple_calendar_list_events.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | ||
| uid | Yes | ||
| notes | No | ||
| start | No | ||
| title | No | ||
| allDay | No | ||
| calendar | Yes | Calendar name. | |
| location | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, so the safety profile is covered and the description's 'Modify' is consistent with it. The description adds the uid-sourcing workflow but says nothing about whether omitted fields are preserved, whether this is a partial or full replacement, or what the destructive aspect actually destroys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and immediately followed by the one prerequisite the agent needs. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, 8-parameter mutation with no output schema, the description is far too thin: it does not explain partial-update semantics, field replacement behavior, or what the destructive hint applies to. An agent has almost no guidance beyond the tool name.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 13% (only 'calendar' is documented) across 8 parameters, so the description carries the compensation burden and does not meet it. It clarifies where uid comes from but adds no meaning for start/end, title, notes, location, or allDay, nor whether they are optional partial updates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Modify) and resource (an existing local Calendar.app event), and 'existing' implicitly distinguishes it from apple_calendar_create_event and apple_calendar_delete_event. It does not, however, distinguish it from the other calendar mutators (set_recurrence, add_alarm, set_url).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete prerequisite – obtain the uid from apple_calendar_list_events – which is a real workflow pointer. It never says when to use this tool versus the narrower siblings that mutate a single aspect of an event (add_alarm, set_recurrence, set_url), so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_add_to_groupBIdempotent
Add an existing contact to a group and save Contacts changes.
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | Yes | ||
| contactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-readonly, idempotent, non-destructive, open-world mutation, so the safety profile is covered. The description adds 'and save Contacts changes', clarifying that the change is persisted immediately with no separate save step. It does not cover failure modes such as a missing contact or group.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence that front-loads the action and adds the persistence detail without any wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with annotations covering safety and no output schema, the description is adequate but leaves gaps: no mention of what happens on an invalid contactId or groupId, no idempotency restatement beyond annotations, and no parameter format detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the two required parameters (contactId, groupId) have no structured documentation. The description only obliquely implies the parameters refer to a contact and a group, without specifying identifier format, whether names are accepted, or whether the group must pre-exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource pair ('add an existing contact to a group'), which is unambiguous and clearly distinct from the sibling apple_contacts_remove_from_group. It does not explicitly name siblings, but the action is self-evident from the name and text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as apple_contacts_update or apple_contacts_remove_from_group, and no stated prerequisites (e.g., that both the contact and group must already exist). The only implicit signal is 'existing contact'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_createB
Create and save a contact, optionally with labeled emails and phone numbers. Refuses to run while Contacts has unsaved edits.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| emails | No | ||
| phones | No | ||
| jobTitle | No | ||
| lastName | No | ||
| firstName | Yes | ||
| organization | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, open-world, so the safety profile is covered. The description adds one genuinely non-obvious behavior — it refuses to run while Contacts has unsaved edits — but omits permissions requirements, duplicate-contact handling, and whether a newly created contact is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core action front-loaded and the exceptional precondition second. Every clause adds information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with no output schema, the description plus annotations cover the essentials (it writes, it is not idempotent/destructive, it may fail on unsaved edits). However, with zero schema description coverage, an agent still lacks guidance on which fields matter and what happens on success or on duplicate creation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It only addresses labeled emails and phones, leaving firstName (the sole required field), lastName, note, jobTitle, and organization unmentioned, even though the schema structure itself (required, formats, defaults) is reasonably self-explanatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create and save a contact') and indicates the optional payload shape (labeled emails and phone numbers). It is distinguishable from apple_contacts_search/get/update by the create verb, but it never names or contrasts with the closest sibling, apple_contacts_update.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use create vs apple_contacts_update or apple_contacts_add_to_group, and no alternatives are named. The only conditional statement is an operational precondition (unsaved edits), not a selection hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_create_groupA
Create and save a Contacts group. Refuses pending unsaved Contacts edits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false), so the safety burden is largely carried. The description adds a genuinely non-obvious behavioral trait: the call will fail if there are pending unsaved Contacts edits, which an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler; the core action is front-loaded and the caveat follows immediately. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter create tool with annotations covering the safety profile and no output schema, the description is minimally adequate. It omits name-related constraints (e.g., uniqueness/duplication behavior) and does not mention what happens on success, leaving gaps an agent might want filled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description would need to compensate for the single 'name' parameter, and it says nothing about it. The parameter is self-evident from its name and the schema enforces minLength/maxLength, so the gap is minor, but the description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Create and save') and resource ('a Contacts group'), which inherently separates it from apple_contacts_create (a person) and apple_contacts_add_to_group (existing group). It stops short of naming any sibling or scope constraints, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as apple_contacts_create or apple_contacts_add_to_group. The only contextual sentence is a precondition ('Refuses pending unsaved Contacts edits'), which is a constraint rather than usage routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_getBRead-onlyIdempotent
Read-only: get one contact with names, organization, emails, phones, and bounded notes.
| Name | Required | Description | Default |
|---|---|---|---|
| maxChars | No | ||
| contactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so 'Read-only:' in the description is largely redundant. The phrase 'bounded notes' adds a small amount of value by hinting that note content may be truncated, but no truncation rule, not-found behavior, or permission requirement is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the returned-field list is the most useful part and comes early. The leading 'Read-only:' clause is the one element that duplicates annotation data rather than adding information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields, which is the right move. However, it omits how contactId is sourced, how maxChars affects output, and what happens when no contact matches, leaving gaps for a two-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, so the description carries the burden and does not meet it. It never explains what contactId is, how to obtain it, or what maxChars controls, beyond the vague 'bounded notes' phrase that loosely gestures at the truncation limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('get one contact') and enumerates the returned fields (names, organization, emails, phones, notes). The singular 'one contact' implicitly distinguishes it from apple_contacts_search and apple_contacts_list_group_members, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: fetching a single contact is contrasted with list/search by the word 'one'. There is no statement of when to prefer this over apple_contacts_search or what prerequisite (a known contactId) is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_list_group_membersBRead-onlyIdempotent
Read-only: list summaries of people in one Contacts group.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| groupId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, and the description's 'Read-only:' prefix largely restates that. The only added behavioral signal is 'summaries,' implying a reduced field set. Pagination behavior, ordering, and what happens when a group is empty or the offset exceeds the member count are not disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the scope front-loaded and no filler; it is easy to scan. It loses a point only because the 'Read-only:' clause duplicates information already carried by the annotations rather than earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description need not explain return values, and the annotations cover the safety profile. However, for a paginated list tool with a default page size of 20 and zero schema documentation, the absence of any pagination or result-size guidance leaves a real gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across three parameters, so the description carries the full burden — yet it only implies groupId via 'one Contacts group' and says nothing about limit or offset. The default limit of 20 means results are silently truncated, and the description gives no hint of that or of how to page through members.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (list) and a precisely scoped resource (summaries of people in one Contacts group), which separates it from siblings like apple_contacts_list_groups and apple_contacts_add_to_group. The word 'summaries' also hints that only lightweight fields are returned. It stops short of naming the alternatives an agent might confuse it with, so it is clear but not sibling-routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the 'one Contacts group' scope tells the agent a groupId is required, but there is no explicit when-to-use versus apple_contacts_search, apple_contacts_get, or apple_contacts_list_groups. No prerequisites, exclusions, or alternative-routing guidance are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_list_groupsCRead-onlyIdempotent
Read-only: list Contacts groups.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 'Read-only:' simply restates structured data and adds no new behavioral context. With annotations covering the safety profile, the description could still add value about pagination or return shape but does not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no waste and the key operation front-loaded. It is efficient, though the brevity tips into under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no output schema, no nested objects, two optional params), so expectations are low, but the undocumented pagination behavior on a list endpoint is a real omission. Without a mention of limit/offset defaults or paging, the description is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (limit, offset) have 0% schema description coverage, and the description never mentions them or their pagination semantics. Since the schema does none of the heavy lifting here, the description was obligated to compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('list Contacts groups'), so an agent knows exactly what the tool returns. It does not, however, differentiate itself from nearby siblings such as apple_contacts_list_group_members or apple_contacts_list_accounts, leaving the agent to infer scope from the name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no stated prerequisites, and no mention of alternatives despite several plausible siblings (list_group_members, search, get). The agent gets no routing help beyond the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_remove_from_groupADestructiveIdempotent
Remove a contact from a group without deleting the contact; saves Contacts changes.
| Name | Required | Description | Default |
|---|---|---|---|
| groupId | Yes | ||
| contactId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the full safety profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true, openWorldHint=true), so the bar is lower. The description adds real context — that changes persist to Contacts ("saves Contacts changes") and that the contact itself is preserved — though it does not touch error handling (e.g., contact not in group) or auth. The mutation/persistence framing sits fine alongside the destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence: verb+resource first, then two tight clarifying clauses separated by a semicolon. No filler, every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter mutation with no output schema and annotations already covering the safety profile, the description covers intent, persistence, and scope (contact preserved). Only edge-case behavior and return-value expectations are unaddressed, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it only weakly does: "a contact" and "a group" map to the two self-explanatory names contactId/groupId but no ID format, source, or constraint detail is added. Self-evident parameter names keep this at a minimum-viable 3 rather than lower.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (remove a contact from a group) and immediately scopes it by clarifying the contact survives ("without deleting the contact"). This lets an agent distinguish it from a destructive contact delete without opening any schema, which is exactly the disambiguation needed against siblings like apple_contacts_add_to_group and any delete-tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the phrasing "without deleting the contact" hints that this is the lighter-weight alternative to contact deletion, but no explicit when-to-use, when-not, or named alternative tool is given. Adequate but leaves routing inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_searchARead-onlyIdempotent
Read-only: find contacts by name or organization substring. Returns summaries, not all contact details.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so 'Read-only' is largely redundant. However, 'Returns summaries, not all contact details' is genuinely valuable behavioral context given there is no output schema, and it warns the agent that full details require another call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no waste, and the safety/scope note is front-loaded ahead of the return-shape caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with rich annotations and no output schema, the description covers scope and return shape adequately. The remaining gap is pagination behavior for limit/offset, which the description does not address.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three parameters. It explains only 'query' (substring match against name/organization); limit and offset are left completely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb ('find'), resource ('contacts'), and the matching semantics ('by name or organization substring'). This clearly distinguishes it from apple_contacts_get (fetch one contact) and apple_contacts_list_groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the substring-matching search phrasing, but there is no explicit statement of when to prefer this over apple_contacts_get or when not to use it. No prerequisites or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_contacts_updateADestructiveIdempotent
Update and save selected name, organization, job title, or note fields. Leaves phone and email collections unchanged. Refuses pending unsaved Contacts edits.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | ||
| jobTitle | No | ||
| lastName | No | ||
| contactId | Yes | ||
| firstName | No | ||
| organization | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true and readOnlyHint=false. The description adds genuinely new context on top: which field collections are preserved (phone/email) and that the call refuses while unsaved Contacts edits are pending. That state-dependent refusal is the kind of behavior annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, no filler, with the scope of the write front-loaded and the constraints (unchanged collections, refusal condition) following immediately. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description is not obliged to describe returns, and the mutation/precondition facts are present. Still missing for a 6-param update tool: where contactId comes from, and confirmation that unmentioned fields beyond phone/email are left untouched. Adequate but with visible gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, and it names four of the five payload fields (name covering firstName/lastName, organization, jobTitle, note). The required contactId is never explained — no hint on format or how to obtain it — and there is no statement of what happens to omitted optional fields. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Update and save selected name, organization, job title, or note fields') and enumerates exactly which fields are in scope, so an agent knows this is a contact-field mutation rather than a general contact write. It never names a sibling tool (e.g. apple_contacts_create or apple_contacts_get) to route against, which keeps it short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Refuses pending unsaved Contacts edits' is a useful precondition, and 'Leaves phone and email collections unchanged' delimits scope. However, there is no explicit when-to-use guidance versus alternatives (apple_contacts_create, apple_contacts_get) and no statement of what to do when the refusal fires. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_files_copyB
Copy one regular file within allowed roots. Never overwrites a destination.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | ||
| destination | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a non-readOnly, non-destructive, non-idempotent, open-world write. The description adds genuinely new behavior: it never overwrites a destination, and copying is constrained to allowed roots. That is meaningful context beyond the annotation set, though it omits what happens on collision (error vs skip).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the operation front-loaded and the key constraint (no overwrite) second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Annotations cover the safety profile and there is no output schema to explain, but with two fully undocumented parameters and no failure semantics, the definition leaves real gaps for a file-mutation tool operating in a sandboxed root set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither 'source' nor 'destination' is described anywhere. The description does not state path format, whether paths are absolute or relative, or whether the destination is a file path versus a directory, leaving both parameters underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (copy) and resource (one regular file) with a scope qualifier ('within allowed roots'), which separates it from siblings like apple_files_write_text or apple_files_trash. It stops short of naming an alternative, but the operation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose copy over other file operations, no prerequisites, and no mention of failure behavior when the destination exists (despite stating it never overwrites). An agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_files_create_folderB
Create one new folder under an existing allowed folder.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description usefully adds that only one folder is created and that it must sit under an already-allowed parent (no parent auto-creation, sandbox concept), but it does not describe failure/error behavior or permission requirements in detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One tight sentence with the resource and its key constraint front-loaded and no filler. Appropriately sized for a single-parameter tool, though it could add a few words of value without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter mutation tool with annotations covering the safety profile, the definition is minimally viable. It omits parameter format and any note on the 'allowed folder' concept or error behavior, leaving gaps an agent would have to guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'path' parameter has 0% schema description coverage, and the description never explains it (full path vs relative, format, whether it includes the folder name). With coverage well below 50%, the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (folder) with a clear constraint that it makes exactly 'one new folder' under 'an existing allowed folder.' An agent can distinguish this from read/list/search siblings, though it doesn't explicitly differentiate from the similarly named apple_notes_create_folder.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'under an existing allowed folder' implies a prerequisite (the parent must already exist and be within the allowed set), giving implicit usage context. However, there is no explicit when-to-use, when-not-to-use, or named alternative, so guidance remains inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_files_infoCRead-onlyIdempotent
Read-only: file/folder metadata within allowed roots.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds the meaningful constraint 'within allowed roots,' but does not disclose error behavior, permission requirements, or output characteristics beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence fragment with no wasted words. It is efficient, though its extreme brevity contributes to gaps captured in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no output schema, the description is too sparse: it does not explain what metadata is returned or how the path parameter behaves. Annotations cover safety, but the description leaves important operational context missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'path' parameter has 0% schema description coverage and the description does not explain its format, whether it must be absolute or relative, or how allowed roots are resolved. 'Within allowed roots' gives a partial constraint but fails to compensate for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific operation ('file/folder metadata') and a scope ('within allowed roots'), making it clear this is a read-only metadata retrieval tool. It does not explicitly differentiate from siblings like apple_files_list or apple_files_read_text, but the resource and read-only framing are clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention conditions, exclusions, or sibling tools such as apple_files_list or apple_files_read_text, leaving usage entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_files_listARead-onlyIdempotent
Read-only: list one allowed folder. Bounded, non-recursive; hidden entries excluded by default.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| includeHidden | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine extra behavior: the listing is non-recursive, spans only one allowed folder, is bounded, and hides dotfiles by default — all traits the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the safety qualifier front-loaded ahead of the scope details; every clause earns its place. Slightly too terse given the 0% schema coverage, but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description covers safety, scope and defaults adequately, but leaves the allowed-folder restriction and the limit/hidden parameters undocumented for an agent to discover. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for all three params. It gestures at each one ('one allowed folder' for path, 'bounded' for limit, 'hidden entries excluded by default' for includeHidden) but never names them, gives no limit range, and does not explain the allowed-folder sandbox constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('list one allowed folder') and adds the distinguishing scope constraint that it is bounded and non-recursive, which separates it from recursive traversal or the sibling apple_files_search substring search. It does not name that sibling explicitly, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (enumerate entries in a single directory) and its non-recursive scope rules out tree walking, but it never states when to prefer this over apple_files_search, apple_files_info, or apple_files_read_text. No explicit when-to-use or 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_files_read_textARead-onlyIdempotent
Read-only: read bounded UTF-8 text from an allowed regular file. Does not parse Pages, PDF, or other binary formats.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| maxBytes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered. The description adds two genuinely useful facts not in annotations: reads are 'bounded' (implying truncation via maxBytes) and only 'allowed regular files' are accepted (implying a path allowlist / non-directory constraint). It does not say what happens on encoding failure, unreadable paths, or oversized files, so it stops short of rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, no filler, with the read-only/bounded contract front-loaded and the format exclusion second. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should clarify what a caller receives; 'read bounded UTF-8 text' implies a string result but omits whether truncation is signaled, how errors surface, and path resolution rules. Adequate for a simple idempotent read, but the parameter and return-shape gaps leave an agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description carries the burden. 'Bounded' loosely gestures at maxBytes but never explains truncation behavior, the default, or the upper bound, and 'allowed regular file' hints at path validation without stating expected path form (absolute, ~ expansion) or the allowed root. Two undocumented parameters with only oblique hints warrants a 2.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('read bounded UTF-8 text') and explicitly carves out what it is not for ('Does not parse Pages, PDF, or other binary formats'), which distinguishes it from siblings like apple_pages_read_text and the TextEdit readers. An agent can classify this as a raw plain-text file reader without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The exclusion of Pages/PDF/binary formats implies when this tool applies versus format-aware readers, but the description never names an alternative tool or states a positive use condition beyond 'allowed regular file'. Usage is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_files_searchARead-onlyIdempotent
Read-only: Spotlight filename search within one allowed folder. Results depend on local Spotlight indexing.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| limit | No | ||
| query | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the bar is lower, yet the description adds a genuinely useful caveat: results depend on local Spotlight indexing, meaning misses are possible. 'Read-only' duplicates the annotation, but the indexing caveat and the single-folder constraint are real added behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the read-only nature and the operation, with the indexing caveat immediately after. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, the description covers the core operation and dispatch-relevant caveat, but omits any mention of the limit parameter or result shape (names vs. full paths, pagination). It is adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 3 parameters. The description clarifies the 'path' parameter (one allowed folder) and the 'query' parameter (filename matching, not content), which is meaningful beyond the schema. However, 'limit' is completely unaddressed and no format guidance for the query string is given, so compensation is only partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Spotlight filename search') plus scope ('within one allowed folder'), which cleanly separates it from siblings like apple_files_list (enumeration) and apple_files_read_text (content read). The keyword 'filename' even clarifies that it matches names rather than file contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'within one allowed folder' scope implies the path must be a permitted directory, which is useful context, but there is no explicit when-to-use vs. when-not guidance and no named alternative (e.g., apple_files_list) for agents that want unfiltered enumeration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_files_trashADestructive
Move an allowed file or folder to Finder Trash. Symbolic links are refused to avoid deleting their targets. May sync deletions through iCloud. Never empties Trash.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/openWorldHint annotations, it discloses genuinely useful behaviors: symbolic links are refused (and why), deletions may propagate through iCloud, and it stops short of emptying Trash. These are safety-relevant facts not derivable from structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and followed by constraints and side effects. No filler; each sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with annotations already declaring reversibility-relevant hints, the description covers behavior and side effects well. The one soft spot is the unexplained "allowed" qualifier, but overall it is sufficient to call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the schema only documents the path string's bounds. The description adds constraints on the target: it may be a file or folder, must be "allowed," and must not be a symlink, which meaningfully enriches the parameter's semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Move") and resource ("file or folder") with the destination ("Finder Trash"), which cleanly separates it from sibling tools like apple_files_copy, apple_files_write_text, and apple_files_read_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and clarified by the boundary "Never empties Trash," but there is no explicit when-to-use condition or named alternative sibling. Since no other sibling performs deletion, routing risk is low, but the guidance is not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_files_write_textADestructive
Create a UTF-8 file in an allowed folder. Existing files require overwrite=true.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| text | Yes | ||
| overwrite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=true, so the safety profile is covered. The description adds a meaningful behavioral detail (existing files need overwrite=true), but omits what happens on failure, what 'allowed folder' means, and any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the core action front-loaded and the overwrite caveat following. Nothing redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive write tool with no output schema and no annotated description, it covers the essentials (create, UTF-8, allowed-folder scope, overwrite gate). It leaves the concept of 'allowed folder', error behavior, and return format unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% with 3 parameters, so the description carries the burden. It explains overwrite's role and behavior, but path and text are left to their names and constraints (maxLength, minLength) are undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a UTF-8 file') plus a scoping constraint ('in an allowed folder'), which clearly separates it from read-only siblings like apple_files_read_text. It stops short of naming alternatives explicitly, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note 'Existing files require overwrite=true' gives a usage rule for the overwrite case, but there is no when-to-use vs alternatives guidance (e.g., versus apple_textedit_create or apple_files_copy). Usage 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_finder_revealC
Reveal an allowed file or folder in Finder.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description's only added behavioral detail is the constraint that only 'allowed' paths can be revealed, which is useful but leaves open what happens on success (Finder window opens? item selected?) and on a disallowed path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the extreme brevity leaves room for one more clause of operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and no parameter documentation, the description should carry more: what 'reveal' does concretely, what the response contains, and what the 'allowed' restriction means. Annotations cover safety but not behavior, so gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'path' parameter, and the description only says it is a 'file or folder' path. It does not clarify whether the path must be absolute, POSIX-style, tilde-expanded, or relative to an allowed root.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('reveal') and resource ('file or folder in Finder'), and the word 'allowed' hints at a permission scope. It is clear enough for an agent, though it does not fully distinguish itself from nearby siblings like apple_finder_selection or apple_files_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives such as apple_files_info (inspect metadata) or opening the file in its app. The agent must infer the use case from the verb alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_finder_selectionARead-onlyIdempotent
Read-only: get selected Finder items (names and URLs). Does not read contents.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower; the description still adds value by disclosing the return shape (names and URLs) and the 'does not read contents' limitation. It omits pagination/limit behavior, which is the only remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the read-only nature and the return payload. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description adequately conveys what is returned and what is not read. The only incompleteness is the undocumented limit parameter and resulting pagination behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'limit' (default 100, max 500) is never mentioned in the description. The description does not compensate for the coverage gap, leaving bounds and paging semantics unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('get') and resource ('selected Finder items') with an explicit scope of what is returned ('names and URLs'). It is clearly distinguishable from siblings like apple_finder_reveal and apple_files_list, though it doesn't name an alternative to route against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Does not read contents' implies a boundary and hints at when to use a different tool (e.g. apple_files_read_text), but no alternative is named and no explicit when-to-use condition is given. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_add_slideB
Append a Keynote slide, optionally using an exact master-slide layout name, and set its default title/body, presenter notes and skipped status. Changes may autosave and sync.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| title | No | ||
| skipped | No | ||
| layoutName | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. | |
| presenterNotes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false, destructive=false and openWorld=true, so the safety profile is covered. The description adds one genuinely new behavioral fact — 'Changes may autosave and sync' — but says nothing about failure modes, invalid layout names, or where the slide lands relative to the required document.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action, with no filler. The second sentence about autosave is short and earns its place by flagging a side effect.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation with no output schema, the definition omits the most consequential detail: what it returns and how the agent identifies the newly appended slide for a later apple_keynote_update_slide call. The documentName prerequisite (document must exist/open) is also left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% (documentName alone), so the description must carry the rest; it names every remaining parameter and adds real meaning — layoutName must be an *exact* master-slide layout name, and title/body are *default* (placeholder) values that can be changed later. It stops short of saying how to discover valid layout names or how 'skipped' behaves in presentation mode.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Append a Keynote slide') plus the fields it can set, so an agent can distinguish it from apple_keynote_update_slide and apple_keynote_create. It does not explicitly name the sibling it differs from, so it falls short of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. must the document already be open, does documentName refer to an open doc?), and no routing against the obvious alternative apple_keynote_update_slide. The only conditional hint is the word 'optionally' attached to layoutName.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_closeADestructive
Close one Keynote document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes.
| Name | Required | Description | Default |
|---|---|---|---|
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. | |
| discardChanges | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say this is a destructive, non-idempotent, non-read-only operation; the description goes further by disclosing the two refusal conditions (unsaved changes, no saved path) and the discardChanges override, which tells the agent exactly what is at risk. This is exactly the 'what gets destroyed' context that annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the constraints following; every clause carries information (verb, refusal conditions, override, alternative). The semicolon-joined second sentence is slightly compressed but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with no output schema, this covers the essential decisions: how to identify the document, what blocks the close, how to force it, and how to preserve changes. It stops short of describing post-close state (e.g., whether the app or window remains open), but nothing critical for invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: documentName is documented in-schema with the list_documents lookup guidance, while discardChanges has no schema description. The description compensates for that gap by explaining discardChanges:true as the override that forces the close past the unsaved-changes refusal, adding meaning beyond the bare boolean default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope ('Close one Keynote document'), and implicitly separates itself from apple_keynote_save by noting that saving must happen separately. It is clear and unambiguous, but it never names the sibling tools that an agent might confuse it with (save, export), so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a real decision rule: if you want to keep changes, call save first rather than closing, and discardChanges:true is the escape hatch for unsaved work. It lacks an explicit 'when not to use' clause or any mention of documents that were never saved to disk from the user's perspective, but the routing to the save path is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_createA
Create an unsaved Keynote document. May show a window. Use the returned name for subsequent operations; save explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| themeName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readonly, non-idempotent, non-destructive, open-world behavior. The description adds genuinely useful context beyond that: the document is unsaved, a window may appear (a UI side effect), and the caller must save explicitly. It does not cover failure modes such as permission prompts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then side effects, then the follow-up requirement. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully notes that a name is returned and must be reused, which is the key piece of missing structured information. It leaves the theme parameter and any permission behavior unexplained, but covers what an agent needs to call and continue the workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter (themeName) with 0% schema description coverage, and the description never mentions themes, defaults, or valid values. Since the schema does none of the work here, the description should have compensated and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create an unsaved Keynote document'), and the qualifier 'unsaved' implicitly separates it from apple_keynote_open, which opens existing files. It is clear but does not explicitly name the sibling it differs from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives workflow guidance ('Use the returned name for subsequent operations; save explicitly'), which tells the agent what to do next, but never says when to prefer create over apple_keynote_open or when not to call it. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_exportADestructive
Export Keynote to PDF or its supported Microsoft Office format. Requires an existing parent directory; existing destinations require overwrite:true. Large exports may exceed the automation timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| format | Yes | ||
| overwrite | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true; the description adds concrete behavioral context beyond them: the overwrite gate for existing destinations and the warning that large exports can exceed the automation timeout. It does not say what happens to a partially written file on timeout, which is the one remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three front-loaded sentences covering output formats, prerequisites, and the failure mode, with no filler. The most actionable constraint (parent directory must exist) comes before the timeout caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent export tool with no output schema and only 25% schema coverage, the description covers formats, destination preconditions, overwrite behavior, and timeout risk. It stops short of stating where the exported artifact lands or any permission requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (documentName alone is described), so the description must compensate and largely does: it explains the parent-directory precondition for path and the semantics of overwrite (needed when the destination already exists). format is only covered indirectly by naming PDF and Microsoft Office output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Export) and resource (Keynote) and enumerates the output formats (PDF or supported Microsoft Office format), which matches the schema's pdf/pptx enum. An agent can immediately distinguish this from apple_keynote_save or apple_keynote_close.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives real prerequisites (parent directory must exist, overwrite:true for existing destinations) but never states when to choose this over siblings like apple_pages_export/apple_numbers_export or over a plain save. Usage is implied by the export purpose rather than routed explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_list_documentsARead-onlyIdempotent
List open Keynote documents. Does not launch a stopped application.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety and idempotency profile is fully covered by structured data. The description adds one genuinely non-obvious lifecycle fact (it will not start a stopped app), but says nothing about pagination, result limits, or behavior when no documents are open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose front-loaded and the behavioral caveat immediately after. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument list tool with rich annotations but no output schema, the definition covers what it does and one important caveat. It is missing pagination guidance (why offset up to 100000 exists), what fields a listed document returns, and how an empty result should be interpreted — real gaps for an agent assembling a workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries no information about 'limit' or 'offset'. Their conventional names and explicit ranges/defaults in the schema make them largely self-explanatory, which justifies the baseline-leaning 3 rather than a lower score, but the description fails to state that these control pagination of the returned document list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List open Keynote documents') and the 'open' qualifier scopes it meaningfully against siblings like apple_keynote_list_slides or apple_pages_list_documents. It does not explicitly name a sibling to contrast with, so an agent must infer the distinction, but the operation itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'Does not launch a stopped application' implicitly tells the agent when this tool will not work and that apple_keynote_open may be needed first, which is useful implied guidance. However, no alternative tool is named and there is no explicit when-to-use / when-not-to-use statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_list_slidesARead-onlyIdempotent
Read slide indexes, default title/body text, presenter notes and skipped status. Does not extract other text boxes, charts, images, or media. Returned text is bounded.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context: the returned text is bounded, and which content types are NOT surfaced. It does not discuss permissions or failure modes, so it is not a full 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with zero filler; the positive capability statement comes first, followed by the scope exclusion and the bounding note. Every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description partially compensates by naming the returned fields (indexes, default title/body text, notes, skipped status). But the pagination parameters and how the bounded text is truncated are unaddressed, leaving gaps for a list-type tool with 3 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33%: only documentName is documented ("Exact name returned by list_documents; ambiguous duplicate names are rejected"). The limit and offset parameters, which control pagination, are undocumented in both the schema and the description, so the agent gets no guidance on paging through slides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Read slide indexes, default title/body text, presenter notes and skipped status" states a specific verb and resource and enumerates exactly what is returned, which an agent can distinguish from write-side siblings like apple_keynote_add_slide or apple_keynote_update_slide. It doesn't explicitly name or contrast an alternative sibling, so it stops short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The negative scope clause ("Does not extract other text boxes, charts, images, or media") tells the agent when this tool is insufficient, which is useful. However, there is no explicit guidance on when to choose this over apple_keynote_open or a generic read tool, so usage is largely implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_openA
Open a local Keynote document. Launches the app and may show its window or import dialogs.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, openWorldHint=true, and idempotentHint=false, but the description adds genuinely new behavioral context beyond them: the app is launched and a window or import dialogs may appear. That side-effect disclosure is exactly what an agent needs to anticipate UI disruption from this non-idempotent operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action and followed by the side-effect warning. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter open tool with no output schema, the definition covers what the tool does and the notable side effects. Only the missing path-format detail and when-to-use context keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
One required parameter with 0% schema description coverage, so the schema alone does not explain 'path'. The description partially compensates by implying it is a path to a local Keynote document, but adds no format, extension, or relative-vs-absolute guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Open a local Keynote document') with a 'local' scope qualifier that separates it from remote/web document operations. It is easily distinguished from sibling mutations like apple_keynote_create or apple_keynote_close, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to open vs. create, save, or export, and no prerequisites or preconditions (e.g., document must exist locally). Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_saveADestructive
Save Keynote to a .key path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| overwrite | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true, idempotentHint=false and openWorldHint=true, so safety is covered; the description adds real behavior beyond that by specifying the overwrite gate for existing paths, the parent-directory requirement, and the absence of implicit format conversion. It does not state what happens to the prior file content on overwrite or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core constraint front-loaded. The trailing 'TextEdit saves RTF; no implicit format conversion' is useful for format routing but is slightly off-topic for a save tool and could read as a sibling note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and annotations that already convey the destructive/idempotency profile, the description covers the key decision points an agent needs (overwrite gate, directory prerequisite, format behavior). Return-value behavior after saving is not addressed, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%), so the description has to carry the load, and it does: it explains that overwrite is mandatory for existing/current paths and that path must point to a .key file under an existing parent. documentName's meaning lives in the schema, so the description's contribution is partial but substantive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save Keynote to a .key path') and pins the format, which distinguishes it from apple_keynote_export and the parallel pages/numbers/textedit save tools. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: an existing parent directory, and overwrite:true for any existing path including the current document path. It implies but never names the alternative for other formats (export), so routing guidance is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_keynote_update_slideADestructive
Update default title/body, presenter notes or skipped status of a Keynote slide using its current 1-based index. List slides immediately before modifying; changes may autosave and sync.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| title | No | ||
| skipped | No | ||
| slideIndex | Yes | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. | |
| presenterNotes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true and idempotentHint=false, so mutation risk is covered structurally. The description adds real value beyond that by disclosing that changes "may autosave and sync" and that the target is addressed by a fragile current 1-based index, both of which are behavioral facts the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the action and scope are front-loaded, and the sequencing caveat follows. Every clause carries information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent mutation tool with no output schema, the description covers purpose, prerequisite, and side effects (autosave/sync). It omits return behavior, out-of-range index handling, and any permission/authorization context, so it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 17% (just documentName), so the description must compensate. It does name the updatable fields (title, body, presenter notes, skipped) and clarifies that slideIndex is 1-based, but it adds no format or constraint detail for the four undocumented parameters, leaving the coverage gap only partially closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Update) plus resource (Keynote slide) and enumerates the mutable fields: default title/body, presenter notes, skipped status. This distinguishes it from apple_keynote_add_slide and apple_keynote_list_slides by name semantics, though it does not explicitly name those siblings as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"List slides immediately before modifying" gives a concrete workflow prerequisite pointing at apple_keynote_list_slides, which is genuinely useful. However, it gives no when-not-to-use conditions and does not explicitly frame the alternative tools, so usage 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_mail_create_draftA
Create a visible outgoing Mail draft. Does not send; Mail controls draft persistence.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | No | ||
| bcc | No | ||
| body | No | ||
| account | No | iCloud | |
| subject | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false. The description goes beyond them usefully by disclosing that the draft becomes *visible* in the Mail UI and that persistence is managed by Mail rather than the agent — meaningful context for a non-idempotent create tool. It stops short of saying where the draft lands or what identifier comes back.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the core action and the most important constraint (it does not send) front-loaded. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no return-value description, so the agent cannot tell whether a draft identifier or location is returned for later use. The key behavioral caveat about persistence is covered, but for a six-parameter create tool with zero schema documentation and no output schema, the definition is only minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Six parameters (to, cc, bcc, body, account, subject) have 0% schema description coverage, so the description carries the full burden — and it contributes nothing about any of them. Notably, the non-obvious "account" parameter defaults to "iCloud" and is never mentioned, nor is the 100-recipient cap or body/subject length limits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a visible outgoing Mail draft") and immediately clarifies the scope boundary with "Does not send," which separates it from the sibling apple_mail_send without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The "Does not send" clause implies the compose-without-sending use case, so an agent can infer when this is appropriate. But there is no explicit when-to-use guidance, no mention of prerequisites (e.g. which account is written to), and no named alternative such as apple_mail_send for the actual send path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_mail_create_mailboxC
Create a mailbox in the selected Mail account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| account | No | iCloud |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, covering the safety profile. The description adds nothing beyond that — no note on behavior when a mailbox name already exists, whether creation requires prompting, or what happens across multiple accounts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is appropriate for a simple create operation. It is efficient but perhaps too terse given the undocumented parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and 0% parameter coverage, the description is far too thin: it omits required-vs-optional parameters, defaults, and error behavior (e.g., duplicate names). The annotations cover safety, but functional context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for two parameters, so the description carries the full burden — yet it does not explain that 'name' is required, that 'account' defaults to 'iCloud', or the 1–1024 character constraints. It only vaguely alludes to an account without connecting it to the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create) and resource (mailbox) scoped to the Mail account, which distinguishes it from siblings like apple_mail_create_draft. However, it says 'the selected Mail account' while the schema exposes an explicit account parameter defaulting to 'iCloud', so the phrasing is slightly imprecise about how the target account is determined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to create a mailbox versus using an existing one, no mention of prerequisites (e.g., checking accounts via apple_mail_list_accounts), and no exclusions or alternative tools named. Usage must be inferred entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_mail_deleteADestructive
Delete a local Apple Mail message. This is destructive and moves the message according to Mail.app deletion behavior.
| Name | Required | Description | Default |
|---|---|---|---|
| mailId | Yes | Local Mail message id returned by apple_mail_list. | |
| account | No | Apple Mail account name. | iCloud |
| mailbox | No | Mailbox name, normally INBOX. | INBOX |
TDQS
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.
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.
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.
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.
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.
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_getARead-onlyIdempotent
Read-only: read one local Apple Mail message, including its body. Use apple_mail_list first to obtain the local mail id.
| Name | Required | Description | Default |
|---|---|---|---|
| mailId | Yes | Local Mail message id returned by apple_mail_list. | |
| account | No | Apple Mail account name. | iCloud |
| mailbox | No | Mailbox name, normally INBOX. | INBOX |
TDQS
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.
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.
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.
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.
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.
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_listARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum messages to return. | |
| account | No | Apple Mail account name. | iCloud |
| mailbox | No | Mailbox name, normally INBOX. | INBOX |
TDQS
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.
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.
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.
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.
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.
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_accountsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_list_attachmentsBRead-onlyIdempotent
Read-only: list attachment metadata for one message.
| Name | Required | Description | Default |
|---|---|---|---|
| mailId | Yes | ||
| account | No | iCloud | |
| mailbox | No | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's 'Read-only' prefix is redundant. The genuinely additive term is 'metadata', which signals the tool returns attachment descriptors rather than downloading files. Beyond that, no auth, pagination, or return-shape context is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though its brevity is partly under-specification rather than pure conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a low-complexity list tool and annotations cover the safety profile, so the description need not do much. However, with no output schema and 0% param coverage, an agent still lacks the attachment fields returned and how account/mailbox scope the lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, but it only implies that a single message is targeted. The 'account' and 'mailbox' parameters with their iCloud/INBOX defaults are left entirely unexplained. This does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (attachment metadata) scoped to one message. The word 'metadata' distinguishes it from apple_mail_save_attachment, which presumably retrieves actual content. It does not name a sibling explicitly, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance, no exclusions, and no named alternative. The phrase 'for one message' implies a mailId is required but does not tell the agent how this relates to apple_mail_get or apple_mail_save_attachment. Only the implicit 'metadata vs content' framing offers any routing signal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_mail_moveADestructive
Move a local Apple Mail message to another mailbox in the same account.
| Name | Required | Description | Default |
|---|---|---|---|
| mailId | Yes | Local Mail message id returned by apple_mail_list. | |
| account | No | Apple Mail account name. | iCloud |
| mailbox | No | Mailbox name, normally INBOX. | INBOX |
| targetMailbox | Yes |
TDQS
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.
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.
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.
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.
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.
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_save_attachmentB
Save one attachment to a new file under APPLE_MCP_FILE_ROOTS. Existing paths are refused.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| index | Yes | ||
| mailId | Yes | ||
| account | No | iCloud | |
| mailbox | No | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-readonly, non-destructive, non-idempotent write. The description adds two traits the annotations cannot express: writes are confined to APPLE_MCP_FILE_ROOTS and existing paths are refused (no overwrite). It does not describe permissions, what happens on partial failure, or the response, so it is useful but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the action front-loaded and the refusal constraint immediately after. Nothing can be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter write operation with 0% schema coverage and no output schema, the description leaves the agent guessing at how mailId/index/account/mailbox combine and what a valid path looks like. It covers the destination root and overwrite policy but not enough to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across five parameters, so the description carries the full burden. It only obliquely maps to 'path' (existing paths refused) and implies 'index' selects the attachment, saying nothing about mailId, account, or mailbox or the expected path format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Save one attachment to a new file') and constrains the destination ('under APPLE_MCP_FILE_ROOTS'), which separates it from apple_mail_list_attachments. It does not explicitly name that sibling as the way to obtain the index, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The rule 'Existing paths are refused' tells the agent when a call will fail, which is genuine usage guidance, but there is no explicit when-to-use vs alternatives, no mention of using list_attachments to find the index, and no prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_mail_searchARead-onlyIdempotent
Read-only: search a mailbox by subject or sender; returns bounded metadata without bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| field | No | subject | |
| limit | No | ||
| query | Yes | ||
| account | No | iCloud | |
| mailbox | No | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower, yet the description adds real context: results are bounded and carry metadata only, no message bodies. That tells the agent what it will and will not receive, which the annotations do not.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that covers scope, method, and return shape with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The lack of an output schema is partly offset by the description stating the return shape (bounded metadata, no bodies). However, for a 5-parameter tool with zero schema descriptions, the missing account/mailbox/limit semantics leave an agent under-informed about how to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters. The description only conveys the `field` semantics (subject/sender) and implies `query`; the `account`, `mailbox`, and `limit` parameters, including their defaults and the limit ceiling, are undocumented in both schema and description, so the compensation is partial at best.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (mailbox) plus the searchable fields (subject or sender), which maps directly to the `field` enum and separates it from list/get siblings. It stops short of naming an alternative tool explicitly, so it is clear but not sibling-differentiating in the strongest sense.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer 'search' rather than 'list' (apple_mail_list) or 'fetch one' (apple_mail_get), but there is no explicit when-to-use, when-not-to-use, or named alternative. Adequate but leaves routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_mail_sendB
Send an Apple Mail message from the selected local account. This immediately sends email to the specified recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | Primary recipients. | |
| bcc | No | ||
| body | No | ||
| account | No | Apple Mail account name. | iCloud |
| subject | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the mutation/irreversibility profile is largely covered. The description adds the useful nuance that dispatch is immediate (i.e. not queued, not undoable), but says nothing about account selection behavior, send failures, or what happens if the account is unavailable. With annotations carrying the safety profile, this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and followed by the most decision-relevant consequence (immediate send). No filler, though the second sentence partially restates the first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A six-parameter mutation tool with 33% schema coverage, no output schema, and no parameter elaboration in the description leaves the agent under-informed about subject/body/cc/bcc and about the account parameter versus the 'selected local account' phrasing. For this complexity level the description should do considerably more.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% – only 'to' and 'account' are documented, and the description adds no field-level meaning for subject, body, cc, or bcc. With low coverage the description is expected to compensate, and it does not; it also introduces a mild ambiguity by saying 'the selected local account' while a separate account parameter exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Send an Apple Mail message') and identifies the originating account, which is enough to distinguish it from read-only siblings like apple_mail_list or apple_mail_get. It does not explicitly name the nearest alternative (apple_mail_create_draft), so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'immediately sends email' implies this is the direct-dispatch path rather than the draft path, giving implied usage guidance. However, it never states when to prefer apple_mail_create_draft over sending, nor any prerequisite conditions, so the guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_mail_update_statusADestructiveIdempotent
Modify a local Apple Mail message read/unread and/or flagged status.
| Name | Required | Description | Default |
|---|---|---|---|
| isRead | No | ||
| mailId | Yes | Local Mail message id returned by apple_mail_list. | |
| account | No | Apple Mail account name. | iCloud |
| mailbox | No | Mailbox name, normally INBOX. | INBOX |
| isFlagged | No |
TDQS
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.
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.
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.
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.
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.
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_messages_list_accountsBRead-onlyIdempotent
Read-only: list Messages accounts (also called services), IDs, service types, and connection states. serviceType is null if macOS does not expose it.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the 'Read-only:' prefix is redundant and earns no credit. The one genuinely additive detail is the edge case that serviceType is null when macOS does not expose it, which tells the agent not to treat null as an error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the operation and its returned fields, with no padding. The only waste is the 'Read-only:' prefix that merely repeats the annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names the returned fields and flags the nullable serviceType, which is good for a list tool. However it omits pagination semantics for the limit/offset pair and gives no hint about typical account counts or ordering, leaving an agent to guess at paging.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description never mentions limit or offset, so neither parameter's meaning (page size, pagination offset) nor the pagination behavior is explained anywhere beyond the raw min/max/default values. With two undocumented params the description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('list Messages accounts') and even enumerates the returned fields (IDs, service types, connection states), so an agent immediately knows what it gets. It never names a sibling or contrasts itself with apple_mail_list_accounts / apple_reminders_list_accounts, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the near-identical account-listing tools for Mail and Reminders. An agent has to infer from the tool name alone that this is Messages-specific and should be called before addressing chats or sending messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_messages_list_chatsARead-onlyIdempotent
Read-only: list Messages chat metadata and participant handles. Apple scripting does not expose message history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| accountId | No |
TDQS
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 real value beyond them by disclosing the hard platform limitation that message bodies/history are unavailable, which prevents an agent from mis-planning a follow-up read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the read-only posture and the returned resource, with no filler. The limitation caveat is placed immediately after the purpose so it is read before the agent commits.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does reasonably well by naming the returned fields, and it covers the key capability limit. It still omits pagination behavior (limit default 20, max 100) and the meaning of accountId, which an agent needs to page or scope correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters, so limit, offset, and accountId are undocumented in both places. The description never mentions pagination or what accountId refers to (presumably an id from apple_messages_list_accounts), leaving the schema gap entirely uncompensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list Messages chats) and enumerates what is returned: chat metadata and participant handles. It also distinguishes itself from apple_messages_send and apple_messages_list_accounts by scoping to chats rather than sending or accounts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The sentence 'Apple scripting does not expose message history' implicitly tells the agent this is the ceiling of what Messages data is reachable, which is useful routing context. However, it never names a sibling alternative or states when to prefer this over apple_messages_list_accounts, so usage 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_messages_sendA
Immediately send text to one explicit phone number or email through a selected connected Messages account. This is a real outgoing message; success means submitted, not delivered.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| accountId | Yes | ||
| recipient | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description usefully adds traits beyond that: 'Immediately' signals no delay/undo, and 'success means submitted, not delivered' clarifies the ambiguous success semantics of a real send. It stops short of stating auth requirements or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler. The core action and scope are front-loaded, and the second sentence adds the highest-value caveat about delivery semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and coverage of the safety profile via annotations, the description smartly supplies the one piece an agent most needs: that submission is not delivery, so it cannot confirm receipt. Missing only accountId acquisition and error/failure behavior, which are minor for a 3-param tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the full burden, and it effectively maps all three params: 'text' to the body, 'phone number or email' to recipient, and 'selected connected Messages account' to accountId. It does not explain the accountId format or where to source one, which is the remaining gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (send) and resource (text) with precise scope: 'one explicit phone number or email through a selected connected Messages account.' An agent can distinguish this from apple_mail_send (different channel) and apple_mail_create_draft (drafts, not send) without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage constraints ('one explicit' recipient, 'selected connected' account) but names no alternative and gives no explicit when/when-not guidance. It does not, for example, route the agent to apple_messages_list_accounts to obtain an accountId or contrast itself with a draft-first workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_add_tracks_to_playlistA
Copy existing library tracks into a regular user playlist. Rejects smart and special playlists. Repeating may add duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| trackIds | Yes | ||
| playlistId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-idempotent, non-destructive, open-world behavior, so the duplicate warning largely restates idempotentHint=false. The description does add genuine context not in annotations: the copy (not move) semantic, and the rejection of smart/special playlists, which explains the real failure mode. It says nothing about partial-failure behavior or the track-count limit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, the core action front-loaded, followed by the constraint and the caution. No filler and nothing misplaced.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-required-parameter append operation with annotations covering safety and no output schema, the essentials are present: what is copied, which playlist types are valid, and retry risk. Missing only the batch-size limit and partial-success semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter meaning. It does add useful semantics — tracks must already exist in the library, and playlistId must reference a regular user playlist — but leaves the 1-20 maxItems cap and ID formats entirely to the schema's structural constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (copy) and resources (library tracks into a regular user playlist), which cleanly separates it from the sibling create_playlist and from track listing tools. It does not name an explicit alternative, but the resource pairing is precise enough to select on.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Rejects smart and special playlists" gives an explicit when-not condition, and "Repeating may add duplicates" warns against naive retries. There is no explicit pointer to an alternative tool for the rejected cases, which keeps it short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_create_playlistC
Create a new user playlist in Music. May sync through the music library.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the mutation profile is known. The description adds only 'May sync through the music library' — a vague side-effect hint with no detail on what syncing means, whether it can create duplicates, or what permissions are needed. This is thin for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the action front-loaded; nothing is padded. The second sentence is the weakest link because 'may sync' is hedged and imprecise, but overall the text is tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no output schema, the description should say something about what is returned (e.g., the new playlist identifier) or whether the playlist is created empty. None of that is present, and the 'may sync' hedge leaves the agent uncertain about the outcome of the call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter 'name', and the description never mentions how the name is used, any length constraint (500 chars), or whether duplicate names are allowed. With one documented-by-name-only param, the description fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a new user playlist in Music'), which is enough to separate it from sibling read tools like apple_music_list_playlists and from apple_music_add_tracks_to_playlist. It stops short of explicitly naming or contrasting those siblings, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives such as apple_music_add_tracks_to_playlist, nor any prerequisites (e.g., Music app running, library access). The only contextual note is 'May sync through the music library,' which is a side-effect remark, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_get_playback_stateARead-onlyIdempotent
Read-only: get Music playback state, volume, position, and current track when playing or paused.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the leading 'Read-only:' label adds nothing new. The description does not say what happens when Music is stopped or not running, nor whether it requires the app to be open, so beyond the safety profile it is largely silent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It leads with the mode of operation and immediately enumerates the returned content, so every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return, and it does list the key fields (state, volume, position, current track). It stops short of describing the response shape or behavior when nothing is playing, which is the remaining gap for a zero-parameter read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the baseline this scores 4. Nothing in the description is needed to call it, and nothing misleads about inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (get ... playback state) plus the exact fields returned (volume, position, current track). It is distinguishable from control-oriented siblings like apple_music_playback or apple_music_set_volume, but it never names them, so the reader must infer the boundary from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'when playing or paused' implies the operating condition, hinting the tool is relevant only to an active session. However, there is no explicit when-to-use vs when-not guidance and no alternative tool is named (e.g., versus apple_music_playback for controlling playback).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_get_trackBRead-onlyIdempotent
Read-only: get one Music library track by persistent ID.
| Name | Required | Description | Default |
|---|---|---|---|
| trackId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the 'Read-only:' prefix merely restates structured data. Nothing is added about failure modes for an unknown ID, library access requirements, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the key operation and scope. The 'Read-only:' prefix is redundant against the annotations and costs a few characters of an otherwise waste-free description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, one-parameter, read-only getter with rich annotations, the description is nearly sufficient. The remaining gap is the absence of any output schema combined with no hint about what a track record contains or how to acquire a valid persistent ID.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single trackId parameter, so the description must compensate. It adds that the value is a 'persistent ID' (a stable identifier, not a name or index), but gives no format, example, or guidance on obtaining one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('get one Music library track') and narrows the scope with 'by persistent ID', which distinguishes it from apple_music_list_tracks and apple_music_search. It stops short of naming those siblings explicitly, so sibling differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by persistent ID' implies this is a direct lookup rather than a discovery call, so usage is inferable. However, there is no statement of when to use this instead of apple_music_search or apple_music_list_tracks, nor any note on where the persistent ID comes from.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_list_playlistsARead-onlyIdempotent
Read-only: list Music playlist persistent IDs, names, and kinds.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'Read-only:' prefix merely restates the readOnlyHint annotation and adds no new behavioral information. However, the disclosure of what the list contains (persistent IDs, names, kinds) is genuinely useful given there is no output schema. It says nothing about pagination behavior despite the limit/offset parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the read-only qualifier and the returned fields both land before any navigation the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument list tool with rich annotations and no output schema, the description supplies the essential missing piece — what each returned playlist record contains. Only pagination semantics are left unstated, which is a minor gap given the parameter names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters (limit, offset) are undocumented, but they are self-explanatory pagination primitives with clear defaults, bounds, and names. Baseline 4 for zero-parameter tools applies reasonably here since the schema's constraints carry the meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (Music playlists), plus the exact fields returned (persistent IDs, names, kinds). This clearly separates it from siblings like apple_music_list_tracks, apple_music_search, and apple_music_create_playlist without needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as apple_music_search for name-based lookups or apple_music_list_tracks for song-level enumeration. The agent must infer that this enumerates playlists rather than tracks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_list_tracksBRead-onlyIdempotent
Read-only: list Music library or playlist track metadata; IDs are persistent hexadecimal IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| playlistId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint, and openWorldHint. The description adds useful behavioral context by stating that track IDs are persistent hexadecimal IDs, which helps an agent reason about follow-up calls. It does not describe pagination or return shape, but the annotations carry the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It communicates the read-only nature and scope immediately, and every element presents useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the schema itself has no parameter descriptions. For a paginated list tool with limit, offset, and playlistId, the description should clarify pagination behavior and return shape. Instead it provides only a high-level scope, leaving significant gaps for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all three parameters. It implies that playlistId exists by mentioning 'library or playlist,' but limit and offset are never explained, nor are defaults, bounds, or pagination semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'list ... track metadata' from the Music library or a playlist. It distinguishes the resource from sibling tools like apple_music_list_playlists and apple_music_get_track, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when track metadata from the library or a playlist is needed, but it gives no explicit when-to-use guidance or comparison to alternatives such as apple_music_search or apple_music_get_track. Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_playbackA
Control Music playback: play/resume, pause, stop, next, or previous. Play optionally targets one track or playlist. Playback can stream audio.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| trackId | No | ||
| playlistId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false), lowering the bar. The description adds two useful behaviors beyond the enum: play also resumes, and playback can stream audio. However it says nothing about required Automation permissions, what happens when nothing is playing, or why non-idempotency matters for repeated calls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the action list front-loaded and zero filler. Each sentence carries distinct information: actions, optional targeting, and streaming behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description would need to carry more behavioral weight for a stateful, open-world mutation tool. It covers the actions and targeting but omits permission requirements, error/no-active-playback behavior, and the implications of non-idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description should compensate; it does so only partially. It explains that play can target a track or playlist (mapping trackId/playlistId), but gives no format for those IDs, no indication of mutual exclusivity, and no statement that pause/stop/next/previous ignore them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Control Music playback') and enumerates the exact actions (play/resume, pause, stop, next, previous), which maps directly to the action enum. It is clearly distinguishable from siblings like apple_music_get_playback_state and apple_music_set_volume, though it does not name those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the enumerated actions, and the note that 'Play optionally targets one track or playlist' hints at when trackId/playlistId apply. There is no guidance on when to choose this tool over get_playback_state or set_volume, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_searchBRead-onlyIdempotent
Read-only: search an explicit Music playlist. Use list_playlists to identify the library playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | all | |
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| playlistId | Yes |
TDQS
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 without the description. The description's added value is limited to 'Read-only' (redundant) and the scoping fact that search is confined to one explicit playlist rather than the whole library. No mention of pagination behavior despite limit/offset parameters existing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the scoping statement and the sibling pointer are both delivered compactly. The 'Read-only:' prefix is slightly redundant against the annotations but costs nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, five undocumented parameters, and a non-obvious enum, the description does too little. It never says what a result contains (tracks? matching names?) or how limit/offset pagination works, leaving the agent to guess how to call and interpret the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for five parameters. It only implicitly covers playlistId ('an explicit Music playlist') and query ('search'); the enum parameter `only` (all/artists/albums/composers/names) and the limit/offset pagination parameters are completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: search within an explicit Music playlist. It partially distinguishes from siblings by naming list_playlists as the way to obtain the playlist, though it never clarifies what is searched (tracks, artists, albums) versus apple_music_list_tracks or apple_music_get_track.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one concrete piece of routing advice: use list_playlists to identify the library playlist, which establishes the prerequisite for playlistId. However, it offers no guidance on when to prefer this over apple_music_list_tracks or apple_music_get_track, and no exclusions or boundary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_music_set_volumeBIdempotent
Set Music playback volume from 0 to 100.
| Name | Required | Description | Default |
|---|---|---|---|
| volume | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, so the safety profile is fully covered. The description adds nothing behavioral beyond restating the 0-100 range, which the schema already enforces, so it contributes little value over structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. The only redundancy is repeating the 0-100 bound already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, non-destructive, idempotent volume setter with annotations covering safety and schema covering valid bounds, the description is sufficient to call the tool correctly. Only the absence of routing guidance to sibling playback tools is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the single parameter's semantics are fully pinned by the schema's minimum/maximum of 0/100. The description restates the same range rather than adding units or edge-case behavior, so it neither compensates nor detracts.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Set) and resource (Music playback volume) plus the accepted range, so an agent can immediately tell it apart from apple_music_playback or apple_music_get_playback_state. It does not explicitly name those siblings or state that it only controls volume rather than transport, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus siblings like apple_music_playback (play/pause/transport) or when not to call it. Usage is only inferable from the tool name and range.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_createA
Create a note in an explicit folder, with an escaped title heading and optional HTML body. May sync to iCloud.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| folderId | Yes | ||
| htmlBody | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnly=false, idempotent=false, destructive=false, openWorld=true), so the bar is lower. The description still adds real value: the title is escaped and rendered as a heading, the body is optional HTML, and the note 'may sync to iCloud', which contextualizes the openWorld hint. It stops short of stating what happens on duplicate titles or sync failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, verb front-loaded, no filler. The iCloud sentence is short, but 'May sync' is a soft hedge that could be stated more decisively.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so return values need not be explained, and annotations cover the safety profile. However, for a create tool with two required params and zero schema descriptions, the definition leaves the agent without guidance on obtaining folderId or on what the sync behavior means operationally.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it does map all three: folderId ('explicit folder'), title (escaped heading), htmlBody (optional HTML). It omits how folderId is sourced and says nothing about the empty-string default for htmlBody besides 'optional', so it is good but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a note'), plus scoping ('in an explicit folder') and content shape (title heading, optional HTML body). It does not distinguish itself from close siblings like apple_notes_update or apple_textedit_create, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in an explicit folder' hints that a valid folderId is a prerequisite, but the description never says when to use this versus apple_notes_update, nor how to obtain a folder id (e.g., apple_notes_list_folders). No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_create_folderA
Create a top-level Notes folder in an explicit account.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, open-world, non-idempotent, non-destructive). The description adds two real constraints beyond them: folders are created top-level only (no nesting), and an account must be explicitly supplied. It does not say what happens on a duplicate name, but for an annotated tool this is solid added context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the resource and scope front-loaded and zero filler. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the annotations cover the safety profile and the description covers scope plus the account requirement. Missing behavioral details (duplicate-name handling, what 'account' resolves to, whether the created folder is returned) leave it adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry parameter meaning. 'Explicit account' maps loosely to accountId and hints it is required, but the 'name' parameter (min 1, max 500) is never addressed, nor is what constitutes a valid account reference. Only marginal compensation for a full coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Create), resource (Notes folder), and scope (top-level, in an explicit account), which distinguishes it from apple_notes_create (a note) and apple_files_create_folder. It stops short of naming a sibling, but the resource is precise enough to route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (create a folder when you need one), and 'in an explicit account' hints at a prerequisite, but there is no explicit when-to-use, when-not-to-use, or named alternative such as apple_notes_create or apple_notes_list_folders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_deleteBDestructive
Delete an unlocked note using Notes deletion behavior. May sync deletion to other devices.
| Name | Required | Description | Default |
|---|---|---|---|
| noteId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and non-idempotent, so the safety profile is covered. The description adds two real behavioral facts beyond that: only unlocked notes can be deleted, and the deletion may propagate to other devices via sync. It does not say whether the deletion is recoverable or goes to a trash, which is the most important missing behavioral detail for a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and constraint, with no padding. 'Using Notes deletion behavior' is close to filler, but the sentence overall still earns its place by carrying the sync caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent, open-world operation with no output schema, the description covers the lock precondition and cross-device propagation but omits the key facts an agent needs before firing it: whether deletion is permanent or recoverable, and how to supply noteId. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter noteId has 0% schema description coverage, and the description never mentions it — not its format, where to obtain it, or that it is required. With low coverage the description is expected to compensate, and it does not, so this sits below the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Delete an ... note'), which is unambiguous and clearly distinct from sibling note tools such as apple_notes_get, apple_notes_create, and apple_notes_update. It also names a precondition ('unlocked'), but does not explicitly contrast itself with any alternative deletion path, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, nor any prerequisite or warning about confirmation. The word 'unlocked' implicitly signals that locked notes cannot be deleted, but this is left for the agent to infer rather than stated as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_getARead-onlyIdempotent
Read-only: get note metadata and bounded plain text or HTML. Locked notes return metadata only.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | text | |
| noteId | Yes | ||
| maxChars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent and non-destructive, so the description's value-add is the edge-case behavior: locked notes return metadata only, and the returned body is 'bounded' rather than full. That is genuine disclosure beyond the structured metadata, though it omits what happens for a missing or unauthorized noteId.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the read-only nature plus the locked-note caveat are front-loaded. Nothing redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly characterizes the return ('metadata and bounded plain text or HTML') and flags the locked-note partial-return case. It is nearly complete for a simple getter, missing only failure/not-found behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter burden. It clarifies that 'format' selects plain text vs HTML and that output is bounded (implying maxChars), but says nothing about noteId format/validity or the maxChars ceiling (200000). Partial compensation for an undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('get') and resource ('note') plus what is returned ('metadata and bounded plain text or HTML'), which cleanly separates a single-note fetch from the list/search siblings. It never names an alternative explicitly, so it stops short of the top mark.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers it should call this when it already has a noteId rather than browsing with apple_notes_list or apple_notes_search. There is no explicit when-to-use/when-not statement or routing to a sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_listBRead-onlyIdempotent
Read-only: list note metadata without reading note bodies, optionally within a folder.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| folderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so the safety profile is covered. The description's one added fact is that only metadata is returned, which is useful, but it says nothing about pagination behavior despite limit/offset parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the read-only nature and the metadata scope stated first, and no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with annotations covering safety, the description is adequate in spirit, but with no output schema, zero param descriptions, and no mention of pagination defaults it leaves the agent guessing how to page through results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden. It only accounts for folderId ('optionally within a folder') and leaves limit and offset — the pagination controls — completely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (note metadata) with an explicit scope qualifier. The phrase 'without reading note bodies' distinguishes it from apple_notes_get, though it does not differentiate itself from apple_notes_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'optionally within a folder' hints at the folder-scoped case, and 'without reading note bodies' hints that reading content requires a different tool. No alternative is named and no when-not condition is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_list_accountsBRead-onlyIdempotent
Read-only: list Notes account IDs and names.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the description's 'Read-only' prefix is largely redundant. It does add value by naming the returned fields (account IDs and names), but says nothing about pagination behavior or ordering, which matters given limit/offset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the safety qualifier first and zero filler. It is efficient, though so terse that it borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-required-param enumeration tool with no output schema, knowing it returns account IDs and names is the core need, and that is covered. The missing piece is pagination guidance for the two convenience parameters, which leaves the definition adequate but incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility for the two parameters, yet it never mentions limit or offset, their defaults, or their maximums. An agent must read the raw schema to learn that results are paginated at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and a specific resource ('Notes account IDs and names'), which distinguishes it from siblings like apple_notes_list (notes) and apple_notes_list_folders (folders). It does not explicitly name those alternatives, but the resource scope alone is enough to separate it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to call this versus apple_notes_list_folders, apple_notes_list, or the parallel account-listing tools in other apps. It also omits any prerequisite context, such as whether account discovery must precede folder or note operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_list_foldersBRead-onlyIdempotent
Read-only: list Notes folder IDs and names, optionally within one account.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| accountId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=false, so 'Read-only:' at the front of the description is largely redundant. The genuine added value is disclosing the return shape (folder IDs and names) and the account-scoping behavior; nothing is said about pagination or result ordering. No contradiction 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words; the safety qualifier and the resource/return fields come first. Appropriate size for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description's mention of folder IDs and names usefully covers the return shape, and annotations handle the safety profile. However, for a paginated list tool it omits limit/offset behavior and how to obtain an accountId, which an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and all three parameters (limit, offset, accountId) are undocumented in the schema, so the description carries the burden. It partially compensates for accountId ('optionally within one account') but says nothing about limit/offset, defaults, or pagination semantics, leaving two of three params opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('list Notes folder IDs and names') and even names the return fields, which cleanly separates it from apple_notes_list (notes) and apple_notes_list_accounts. It stops short of naming any sibling as an alternative, so sibling differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Optionally within one account' hints at when to supply accountId, which is useful routing context, but there is no when-to-use/when-not guidance and no pointer to related tools such as apple_notes_list_accounts for discovering account IDs. Usage 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_notes_searchBRead-onlyIdempotent
Read-only: find Notes by title substring; this does not search note bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| folderId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 'Read-only:' largely restates structured data. The one piece of added behavior is the title-substring-only matching constraint, which is useful; nothing is said about pagination, folder scoping, or result ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the scope constraint lands before anything else. The 'Read-only:' prefix mildly duplicates the annotations, which keeps it from being maximally economical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter search tool with no output schema and no parameter descriptions, the description omits pagination behavior (limit/offset), folder scoping, and any indication of what is returned. The core matching rule is covered, but an agent cannot call this correctly with confidence beyond the required query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 4 parameters, so the description carries the full burden and does not meet it. It adds only a hint about 'query' matching titles; limit, offset, and folderId are entirely undocumented in both schema and description, so pagination and folder scoping semantics are invisible.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('find'), resource ('Notes'), and matching scope ('by title substring'), and the negative clause rules out body search, so an agent knows this is a title-match lookup rather than a full-text search. It does not name the adjacent siblings (apple_notes_list, apple_notes_get) to distinguish list-everything vs. fetch-by-id, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'this does not search note bodies' is genuine when-not guidance, implying the tool should be used for known-title lookups rather than content search. However, it never states when to prefer this over apple_notes_list or apple_notes_get, leaving the sibling choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_notes_updateADestructiveIdempotent
Change a note title and/or replace its entire HTML body. Replacing the body can remove formatting or attachments; locked notes are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| noteId | Yes | ||
| htmlBody | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds genuine value beyond them: replacing the body can strip formatting and attachments, and locked notes are rejected. It does not cover permissions or partial-update semantics, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and followed by the risk and constraint. Nothing redundant; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation tool with no output schema and 0% schema coverage, the description discloses the main data-loss risk and the locked-note failure mode. It could still say what happens to unspecified fields or what a success returns, but the essentials are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden, yet it only names two of the three parameters (title and HTML body) and omits noteId entirely. It adds conceptual meaning ('entire HTML body', replace vs. merge) but leaves the key required parameter unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change a note title and/or replace its entire HTML body') and clearly distinguishes itself from siblings like apple_notes_create, apple_notes_get, and apple_notes_search by scoping to modification of an existing note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verb and the sibling set (edit an existing note rather than create/read one), but the description never states when to prefer this over alternatives such as recreating a note, nor any prerequisites beyond the locked-note rejection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_closeADestructive
Close one Numbers document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes.
| Name | Required | Description | Default |
|---|---|---|---|
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. | |
| discardChanges | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is covered. The description adds genuinely new behavior: the exact refusal conditions and how discardChanges:true overrides them, which tells the agent what would be lost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action followed by the failure conditions and the override flag. No filler and every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter mutation tool with no output schema, the definition covers the action, refusal conditions, the discard flag, and the save-first workflow. It does not say what a successful close returns or whether other open documents are affected, but those are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: documentName is well documented in the schema, while discardChanges has no schema description. The description compensates by explaining that discardChanges:true is what permits closing with unsaved changes, adding the missing semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Close one Numbers document') and scopes it to a single document. It implicitly routes to apple_numbers_save with 'save separately to retain changes', but never names that sibling, so an agent must infer the pairing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition for failure (unsaved changes or no saved path) and names the alternative action (save first). Strong conditional guidance, though the alternative is described functionally rather than by tool name, and there is no guidance on when to keep a document open instead of closing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_createA
Create an unsaved Numbers document. May show a window. Use the returned name for subsequent operations; save explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| templateName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true, idempotent=false, and destructive=false. The description adds meaningful context beyond those: the document is unsaved, it may show a window, and saving must be explicit. It does not address failure modes or permissions, but the added behavioral detail is strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, all front-loaded and useful. The description covers purpose, side effect, and follow-up workflow with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple create tool, the description adequately covers purpose, UI side effect, return-name usage, and explicit save. However, it omits any explanation of the templateName parameter and does not mention return structure beyond the returned name, leaving a clear gap despite the simple surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter, templateName, with 0% schema description coverage, and the description never mentions templates or explains this parameter. Because the schema does not document it, the description needed to compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (create) and resource (unsaved Numbers document). The 'unsaved' qualifier and instruction to 'save explicitly' distinguish it from apple_numbers_open and apple_numbers_save without requiring the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear workflow context: use the returned name for subsequent operations and save explicitly. This tells the agent how the create step fits with later save/close calls. It does not name alternatives or state when not to use it, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_create_tableB
Add a named table without header or footer rows to a Numbers sheet. Rejects duplicate table names.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| columns | Yes | ||
| sheetName | Yes | ||
| tableName | Yes | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/non-destructive/non-idempotent profile, and the description adds two real behavioral facts: the table is created without header or footer rows, and duplicate table names are rejected. The rejection rule is especially useful because it explains the non-idempotent hint in practice.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action first and the error behavior second; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-required-parameter mutation with no output schema and thin parameter documentation, the description leaves the agent guessing about prerequisites (open document? existing sheet?) and about what is returned on success. It covers the write semantics and the duplicate-name failure, but not enough of the call context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 20% (only documentName is documented), so the description should compensate but does not: it never mentions rows, columns, sheetName, or tableName, nor the 1-1000 row and 1-100 column bounds. Only the vague phrase 'named table' hints at tableName.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (add) and resource (named table) scoped to a Numbers sheet, and clarifies the resulting structure has no header or footer rows. It is distinguishable from apple_numbers_create (document) and apple_numbers_list_tables, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisite (e.g. whether the document must be open first via apple_numbers_open), and no alternative named. The purpose implies the usage but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_exportADestructive
Export Numbers to PDF or its supported Microsoft Office format. Requires an existing parent directory; existing destinations require overwrite:true. Large exports may exceed the automation timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| format | Yes | ||
| overwrite | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/non-idempotent behavior, but the description adds real value: the parent-directory requirement, the overwrite:true gate for existing destinations, and the automation-timeout risk on large exports. This discloses behavioral traits beyond what the annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action then the two key gotchas. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description would ideally hint at the result, but for a destructive export tool it covers the critical operational caveats (directory prerequisite, overwrite gate, timeout). An agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (only documentName documented), so the description must compensate. It partially does: it implies path semantics (existing parent directory) and overwrite semantics (overwrite:true for existing destinations) and names the format outputs, but never maps these to the 'path', 'format', or 'overwrite' parameter names directly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Export Numbers') and names the output formats (PDF, Microsoft Office). It is distinguishable from siblings like apple_numbers_save in intent, though it never explicitly names an alternative. Clear but without explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions: an existing parent directory is required and existing destinations need overwrite:true, plus a timeout caveat for large exports. These are actionable usage constraints, though it doesn't contrast with apple_numbers_save for when to save vs export.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_list_documentsBRead-onlyIdempotent
List open Numbers documents. Does not launch a stopped application.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds genuinely useful context beyond them: only currently-open documents are returned, and a stopped application will not be launched to enumerate them, which tells the agent when the result may be empty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste; the core capability is front-loaded and the caveat follows. Nothing is padded or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with no output schema, the description covers what is listed and the app-state constraint, which is roughly adequate. It omits pagination behavior and any indication of return shape, which matters given two paginated parameters with no documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and both parameters (limit, offset) are undocumented anywhere. The description never mentions pagination, defaults, or bounds, so it does not compensate for the schema gap even though the parameters are conventional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List open Numbers documents') and the scope qualifier 'open' usefully separates it from disk-wide listing. It does not explicitly name a sibling, but the combination of app (Numbers) and scope (open) makes it distinguishable from apple_pages_list_documents and apple_numbers_open without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use statement and no named alternative. The caveat 'Does not launch a stopped application' hints at a precondition (the app must already be running), but it is framed as a behavioral fact rather than routing guidance such as 'use apple_numbers_open first if the app is not running'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_list_sheetsBRead-onlyIdempotent
List sheets in an open Numbers spreadsheet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, closed-world, so the safety profile is covered. The description adds only the 'open spreadsheet' precondition; it says nothing about pagination behavior, ordering, or what happens if the document is not open.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description could reasonably signal the return shape (sheet names) and pagination semantics for limit/offset, but it does not. For a simple read-only list tool this is adequate but leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33%: documentName is documented in the schema (exact name, duplicates rejected) but limit and offset have no descriptions. The description adds no parameter meaning at all and fails to compensate for those undocumented pagination parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List sheets') scoped to an open Numbers spreadsheet, which distinguishes it from apple_numbers_list_documents (all documents) and apple_numbers_list_tables (different resource). Sibling differentiation is implicit via the 'sheets' resource rather than spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in an open Numbers spreadsheet' implies the prerequisite that the document must already be open, but the description never names alternatives (e.g. list_documents, open, list_tables) or states when this tool is the right choice. Usage is implied rather than guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_list_tablesCRead-onlyIdempotent
List table names and dimensions in a Numbers sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| sheetName | Yes | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds only the return content ('names and dimensions') and says nothing about pagination despite limit/offset parameters existing, nor about resolution of document/sheet names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb and resource front-loaded and zero filler. It is appropriately sized for a simple list operation, though it is arguably under-specified rather than concise in the positive sense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and only 25% parameter coverage, the description should explain the return shape and pagination, but it does neither. An agent cannot tell whether limit/offset matter or what a returned table entry looks like beyond 'names and dimensions'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% — documentName is documented, but sheetName, limit, and offset carry no semantic explanation in either schema or description. The description does not compensate: it never explains that limit/offset paginate results or how sheetName is obtained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List') and resource ('table names and dimensions in a Numbers sheet'), which is clear enough to distinguish it from the sibling list tools for documents and sheets. It does not explicitly name those siblings, but the scope (tables within a sheet) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus apple_numbers_list_sheets, apple_numbers_list_documents, or apple_numbers_read_range, nor any prerequisites (e.g., that the document/sheet must already be open or that documentName comes from list_documents). The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_openB
Open a local Numbers document. Launches the app and may show its window or import dialogs.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, and idempotentHint=false. The description adds real value beyond that by disclosing side effects the annotations do not capture: the app is launched and UI window or import dialogs may appear, which implies a non-headless, possibly blocking operation. It stops short of saying what happens on a missing or invalid file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero padding, with the core action front-loaded and the side-effect caveat immediately after. Nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter open tool whose annotations already cover the safety profile, the description is mostly adequate and does flag the dialog side effect. It omits what an agent likely needs next: whether opening returns a document handle for use by apple_numbers_read_range/apple_numbers_list_sheets, and behavior on a nonexistent path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required 'path' parameter, which only carries type and length bounds. The description says 'local Numbers document' but never clarifies whether path is an absolute filesystem path, a file URL, or whether the file must already exist. It adds no semantics the schema does not already imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb+resource: 'Open a local Numbers document' states exactly what the tool does, and it is distinguishable from apple_numbers_create, apple_numbers_save, and apple_numbers_close. It does not, however, explicitly contrast itself with the parallel openers (apple_pages_open, apple_keynote_open) or with apple_numbers_list_documents, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given. With siblings like apple_numbers_list_documents (to locate a file) and apple_numbers_create (to make a new one) present, the description never says which situation calls for opening an existing document versus creating or listing. The agent must infer the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_read_rangeARead-onlyIdempotent
Read values, formatted text and formulas from a rectangular Numbers range, using 1-based row and column indexes. Maximum 200 cells; strings are truncated to 500 characters per field.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | ||
| columns | Yes | ||
| startRow | Yes | ||
| sheetName | Yes | ||
| tableName | Yes | ||
| startColumn | Yes | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, idempotent, non-destructive safety profile, so the bar is lower. The description still adds real behavioral context not present in annotations: a 200-cell ceiling on the combined range and 500-character truncation per field, both of which affect how the caller sizes requests and interprets results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with what is read and in what coordinate system, followed by limits. No filler and every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly specifies the returned shape (values, formatted text, formulas) plus size limits, which is the essential return-value information. It omits error/edge behavior (e.g. out-of-range indexes, missing sheets) and any precondition that the target document be open, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 14% (just documentName), so the description must carry parameter meaning. It supplies the crucial 1-based row/column indexing convention absent from the schema and the 200-cell cap, but does not clarify startRow/startColumn/rows/columns individually or their coupling as a rectangle. Partial compensation, so a 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (read) plus the resource (a rectangular Numbers range) and enumerates what is returned: values, formatted text and formulas. Although it does not name a sibling, the read semantics cleanly contrast with apple_numbers_write_range, so an agent can route without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: read data from a range. There is no explicit when-to-use statement, no exclusion (e.g. use apple_numbers_list_tables to discover table names first, or write_range to modify), and no mention that the document must be open. Adequate but with clear gaps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_saveADestructive
Save Numbers to a .numbers path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| overwrite | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive=true and idempotent=false, and the description usefully adds the precondition (parent dir must exist) and the overwrite requirement covering the current document. The 'TextEdit saves RTF' sentence is confusing and appears borrowed from a sibling tool, muddying the behavior story slightly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and the overwrite rule. The final 'TextEdit saves RTF; no implicit format conversion' sentence is off-topic noise for a Numbers tool that does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema, the description covers key preconditions (parent directory, overwrite for existing paths) but omits what happens on success/failure and whether documentName must already exist. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (only documentName is documented), so the description must compensate. It explains the overwrite parameter's semantics and the path precondition, but says nothing about the path format beyond '.numbers', leaving half the parameters thinly covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('Save Numbers to a .numbers path') and distinguishes itself from the TextEdit save path by noting RTF behavior. It is clear what the tool does, though it does not explicitly differentiate itself from sibling apple_numbers_export or apple_numbers_open.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a conditional usage rule: existing paths, including the current document path, require overwrite:true, and the parent directory must already exist. It stops short of naming an alternative (e.g., export for other formats), so it is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_numbers_write_rangeADestructive
Write a rectangular grid to existing Numbers cells using 1-based indexes. null clears a cell. Formula strings require allowFormulas:true. Bounds are checked before writing; an application failure may leave partial changes. May autosave and sync.
| Name | Required | Description | Default |
|---|---|---|---|
| values | Yes | ||
| startRow | Yes | ||
| sheetName | Yes | ||
| tableName | Yes | ||
| startColumn | Yes | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. | |
| allowFormulas | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=false, and openWorld=true, so the safety profile is covered structurally. Beyond that, the description adds real value: bounds are validated before writing, an application failure may leave PARTIAL changes (non-atomic), and the operation may autosave and sync. That is meaningful behavioral context an agent cannot get from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four terse, information-dense sentences front-loaded with the core action, then parameter conventions, then behavioral caveats. No filler, and each sentence carries a distinct fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter, 6-required mutation tool with no output schema, the description covers purpose, index conventions, null handling, formula gating, non-atomic failure, and autosave side effects. It omits how sheetName/tableName are resolved against the document, a minor gap given the otherwise thorough coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 14%, so the description must compensate, and it does: it explains the 1-based index convention for startRow/startColumn, that null in values clears a cell, and that allowFormulas must be true for formula strings. It leaves sheetName and tableName semantics undocumented, so it compensates partially rather than fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (write), resource (Numbers cells), and scope (rectangular grid, existing cells, 1-based indexes). This clearly distinguishes it from sibling apple_numbers_read_range and the document-level apple_numbers_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies prerequisites via 'existing Numbers cells' (the document/table must already exist) and notes formulas require allowFormulas:true, but names no alternative (e.g. read_range) and gives no explicit when-to-use/when-not guidance. Usage is inferable but not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_closeADestructive
Close one Pages document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes.
| Name | Required | Description | Default |
|---|---|---|---|
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. | |
| discardChanges | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is partly covered. The description adds genuinely useful behavior beyond that: the refusal conditions on unsaved changes and unsaved-path documents, and the discardChanges escape hatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences, front-loaded with the core action followed immediately by the critical guard condition. Every clause carries information; nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the description covers what is destroyed (unsaved changes), the preconditions, and the override flag. It is largely complete, missing only minor detail on failure/return behavior which is not essential for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: documentName is documented ('exact name returned by list_documents; ambiguous duplicates rejected'), but discardChanges has no schema description. The description compensates by explaining exactly what discardChanges:true does (permits discarding unsaved changes), adding meaning beyond the bare boolean default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Close one Pages document'), which is unambiguous against siblings like apple_pages_open and apple_pages_save. It hints at differentiation by noting 'save separately to retain changes', though it does not name a sibling outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly conveys the operating condition: it refuses unsaved changes or a document lacking a saved path unless discardChanges:true, and points the agent to save first to preserve work. No explicit 'when not to use' framing, but the context for choosing discardChanges vs. saving is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_createA
Create an unsaved Pages document. May show a window. Use the returned name for subsequent operations; save explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Optional initial body text; omitting preserves the selected template body. | |
| templateName | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/idempotency/safety profile, and the description adds traits they cannot express: the document starts unsaved, it may surface a UI window, and a name is returned for chaining. It still does not say what happens on failure or whether an invalid template errors, but the added context is real.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, purpose front-loaded, no filler; each clause carries a distinct operational fact (unsaved state, possible window, chaining via returned name). Only the terse 'May show a window' leaves the consequence unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with no required parameters and no output schema, the description covers the essentials an agent needs: the object it produces, its transient unsaved state, the chaining handle, and the explicit save requirement. The undocumented templateName parameter is the main remaining hole.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: 'text' is documented in the schema, but 'templateName' has no description anywhere. The description mentions no parameter at all and therefore does not compensate for the coverage gap, leaving the agent to guess accepted template identifiers and default behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an unsaved Pages document') with a distinguishing qualifier ('unsaved') that separates it from apple_pages_open, which works on existing files. It does not explicitly name a sibling, but an agent can still place it correctly among the create/open/save/close family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete workflow guidance: the document is unsaved, the returned name must be used for follow-up operations, and a save must be requested explicitly. There is no explicit when-not condition, but the 'unsaved / save explicitly' framing effectively routes the agent to apple_pages_save.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_exportADestructive
Export Pages to PDF or its supported Microsoft Office format. Requires an existing parent directory; existing destinations require overwrite:true. Large exports may exceed the automation timeout.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| format | Yes | ||
| overwrite | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new context: the overwrite requirement for existing destinations and the warning that large exports may exceed the automation timeout, which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose first, then prerequisites, then the timeout caveat. Every sentence carries information; nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should resolve what the agent gets back (file path? confirmation?) and whether path is a directory or full destination, neither of which is stated. It does cover prerequisites and timeout risk adequately for a mutation tool whose annotations already flag destructiveness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (documentName alone is documented), so the description carries extra burden. It adds meaning for path (must be an existing parent directory) and overwrite (needed for existing destinations), but leaves ambiguity about whether path is a directory or full destination and adds nothing about the format values beyond the enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (export) and resource (Pages) plus the target formats (PDF / Microsoft Office, matching the pdf/docx enum). However it never distinguishes itself from sibling save/export tools such as apple_pages_save or apple_numbers_export, so the agent must infer routing from the app name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides concrete prerequisites (existing parent directory, overwrite:true for existing destinations), which is real usage guidance. But it never names an alternative tool or states when not to use it, leaving the save-vs-export choice implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_list_documentsBRead-onlyIdempotent
List open Pages documents. Does not launch a stopped application.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior. The description adds a meaningful behavioral detail beyond those annotations: it will not launch a stopped application, so the agent knows the app must already be running.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose and then the key operational constraint. No wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool, the description covers purpose and the app-running precondition, and annotations cover safety. But it omits any explanation of pagination behavior or what the list returns, and there is no output schema to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description mentions no parameters at all. With two parameters (limit, offset) and 0% schema description coverage, the description fails to compensate for the missing parameter documentation; it adds no meaning about pagination, defaults, or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'List open Pages documents.' It also scopes the result to open documents, which separates it from tools that open or create documents. However, it does not explicitly differentiate from other document-reading siblings such as apple_pages_read_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The statement 'Does not launch a stopped application' implies a usage constraint: this tool is only for an already-running Pages app. But it does not explicitly name the alternative (e.g., apple_pages_open) or state when to prefer this over read_text or other list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_openA
Open a local Pages document. Launches the app and may show its window or import dialogs.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, openWorld=true, idempotent=false, destructive=false, but the description adds genuinely new behavioral detail: the app is launched and its window or import dialogs may appear. That UI side effect and potential blocking dialog is exactly the kind of context annotations cannot convey. It does not cover failure modes or what a successful open yields, so it is not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, purpose front-loaded, side-effect caveat second. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema and annotations covering the write/open-world profile, the description covers purpose and side effects adequately. Gaps remain around the path argument and what the caller gets back (e.g., whether a handle or confirmation is returned for chaining into set_text/save), which matters in a multi-tool workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required parameter, so the description must compensate and it does not mention 'path' at all. 'Local Pages document' hints that the value is a filesystem location, but there is no guidance on absolute vs. relative paths or whether the extension is required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb and resource: 'Open a local Pages document'. This clearly separates it from apple_pages_read_text, apple_pages_create and apple_pages_list_documents among the siblings. It stops short of naming the adjacent tools or the scope boundary (open vs. read content), so it is clear but not maximally differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'local' implies usage context and a boundary (filesystem documents rather than iCloud/remote), which is a useful selection signal. However there is no explicit when-to-use vs. alternative guidance, no mention that content retrieval requires apple_pages_read_text, and no prerequisites. Usage is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_read_textARead-onlyIdempotent
Read Pages plain text with character pagination. Pages supports word-processing body text only; rich formatting and text boxes are not returned.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| maxChars | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly, idempotent, non-destructive, non-openWorld), so the description's real contribution is the scope caveat: only word-processing body text is returned, with rich formatting and text boxes excluded. That is genuine behavioral information an agent cannot infer from structured fields, though return shape and truncation semantics for large documents remain unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, the capability front-loaded and the limitation immediately after. Nothing is redundant and no sentence fails to earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only text extraction tool with annotations covering safety and no output schema to explain, the description supplies the essential scope limitation and pagination model. The remaining gap is workflow context (open-first requirement, empty-document behavior), which is minor but not trivial for an agent operating a document app.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%: documentName is well documented in the schema, but offset and maxChars have only type/default/bounds and no prose meaning. The phrase 'character pagination' partially compensates by explaining what offset/maxChars are for, but the units relationship and behavior at the 50000-char cap are left to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read Pages plain text) plus the delivery mechanism (character pagination), which clearly separates it from sibling mutators like apple_pages_set_text and apple_pages_export. It stops short of differentiating from the cross-app sibling apple_files_read_text or apple_textedit_read_text, which an agent could plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied — you read text when you need document content — but there is no explicit statement of when to prefer this over apple_pages_export or apple_files_read_text, and no mention of prerequisites such as whether the document must first be opened via apple_pages_open or discovered via apple_pages_list_documents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_saveADestructive
Save Pages to a .pages path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| overwrite | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false and idempotentHint=false, but the description adds the specific destruction condition: which paths trigger overwrite and that the current document path counts as existing. The 'no implicit format conversion' note is also useful behavioral context. The stray 'TextEdit saves RTF' sentence adds confusion rather than transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The overwrite rule is front-loaded and the tool is described in three short sentences. However, the 'TextEdit saves RTF; no implicit format conversion' sentence appears to be template bleed from a sibling tool and does not earn its place in a Pages save description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the definition covers the overwrite guard, path constraints and format behavior, which is what an agent needs to call it safely. Return-value behavior is unspecified, but that is a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only documentName documented), so the description must carry path and overwrite. It does: path must be a .pages path with an existing parent directory, and overwrite:true is required for any pre-existing path. That compensates well for the undocumented parameters, though no syntax examples are given.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+destination ('Save Pages to a .pages path'), which cleanly distinguishes it from apple_pages_export, apple_numbers_save and apple_keynote_save by naming the file type and target. It never names a sibling tool directly, so sibling differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one concrete usage rule — existing paths (including the current document path) require overwrite:true — which is real when-to-use guidance for the overwrite parameter. It offers no guidance on when to save versus use apple_pages_export, and no prerequisites beyond the parent-directory requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_pages_set_textADestructive
Replace or append Pages plain text. This can remove existing rich formatting; changes may autosave and sync. Pages requires a word-processing document.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | replace | |
| text | Yes | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=false and openWorldHint=true, so the description goes beyond them by naming the specific damage ('can remove existing rich formatting') and the side effect channel ('autosave and sync'). It stops short of saying whether the change is reversible or how autosave timing works.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, front-loaded with the action, then the destructive consequence, then the precondition. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent write with no output schema, the description covers the destructive effect, the sync/autosave behavior, and the word-processing-document prerequisite. The remaining gap is the workflow context (requires an open document) and how append interacts with existing content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% – only documentName is documented in-schema. The description's 'plain text' wording clarifies the untagged text parameter (plain text only, formatting is lost) and 'replace or append' maps to the mode enum, but it adds no format, length, or naming guidance beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs (replace/append) and the resource (Pages plain text), which cleanly distinguishes it from the read-only sibling apple_pages_read_text and the analogous apple_textedit_set_text. The scoping is clear, though it never names a sibling or the complementary apple_pages_open step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the verbs and the precondition 'Pages requires a word-processing document' is a useful constraint, but there is no explicit when-to-use vs alternatives guidance and no statement about whether the document must already be open (apple_pages_open) before this call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_add_to_albumB
Add existing Photos media items to an album. Does not import or delete files.
| Name | Required | Description | Default |
|---|---|---|---|
| albumId | Yes | ||
| mediaIds | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is partly covered. The description usefully adds that it does not import or delete files (confirming the non-destructive hint), but it says nothing about the non-idempotent behaviour declared in annotations — whether re-adding the same media duplicates entries — nor about permissions or partial-failure handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, action first, scope exclusion second. Nothing is redundant and the exclusion clause earns its place by preventing confusion with import.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutating tool with no output schema, this covers the core action but omits the practical context an agent needs: where the albumId and mediaIds come from, whether the album must pre-exist, and the per-call media limit. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%: albumId and mediaIds have no descriptions, no format hints, and the 20-item maximum on mediaIds is invisible to the agent from prose. The description only loosely gestures at the two parameters ('media items', 'an album') without adding any semantics, so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (add) plus resource (existing Photos media items into an album), and it explicitly rules out the neighbouring import/delete semantics, which distinguishes it from apple_photos_import. It does not however name the sibling tools that produce the required albumId/mediaIds, so the differentiation is partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer you call this when media already exists and you want it grouped. There is no statement of prerequisites (album must already exist, created via apple_photos_create_album) and no guidance on how to obtain valid IDs from apple_photos_search/list_albums.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_create_albumB
Create a new top-level Photos album.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-destructive, non-idempotent, open-world write, so the safety profile is covered. The word 'top-level' adds real behavioral meaning about placement, but the description says nothing about duplicate-name handling, permission prompts, or what happens on repeated calls — gaps that matter for a create operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the verb and resource, with zero filler. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter create tool with no output schema, the description covers the essentials, but it omits the behavioral details an agent would want (duplicate name behavior, permissions, whether the album is immediately visible). Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the schema documents only minLength/maxLength for 'name'. The description implicitly identifies the single argument as the album's name, which is the minimum needed, but adds no constraints, format, or uniqueness semantics beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb+resource ('Create a new ... Photos album') and adds a meaningful qualifier ('top-level') that distinguishes it from album-mutating siblings like apple_photos_add_to_album and apple_photos_update. It does not explicitly name or contrast with any sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, no mention of prerequisites (e.g. Apple Photos automation permission), and no routing to alternatives such as apple_photos_add_to_album for placing existing photos into an album. The purpose implies the scenario, but nothing is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_exportA
Export selected Photos media into an existing empty local directory. Requires an empty directory to reduce overwrite risk; originals can trigger iCloud downloads. Exports originals or rendered JPEGs.
| Name | Required | Description | Default |
|---|---|---|---|
| mediaIds | Yes | ||
| directory | Yes | ||
| originals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: the empty-directory requirement to reduce overwrite risk and the fact that originals can trigger iCloud downloads. It leaves some gaps (exact overwrite handling, permissions, failure modes), and no annotation contradicting it, so this is solid but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences; the primary action and the key prerequisite are front-loaded, and each sentence adds a distinct constraint or option with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param export tool with no output schema, the description covers the essential behaviors an agent needs (empty-dir requirement, iCloud download risk, format choice). It stops short of explaining result/error behavior or where files land, which would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain the 'originals' trade-off (originals vs rendered JPEGs, and the iCloud-download side effect), but 'mediaIds' and the 'directory' format are undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Export') and resource ('selected Photos media') plus the destination ('existing empty local directory'), which is unambiguous against siblings like apple_photos_import. It does not, however, explicitly differentiate itself from the other *_export tools (pages, numbers, keynote), so the agent must rely on the app-prefixed name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a precondition (directory must be empty) that implies when the tool is usable, but never names an alternative tool or the situation that selects it over import/save siblings. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_getBRead-onlyIdempotent
Read-only: get one Photos media item with metadata, keywords, and bounded description.
| Name | Required | Description | Default |
|---|---|---|---|
| mediaId | Yes | ||
| maxChars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so "Read-only" in the description is largely redundant. The description does add that the returned payload includes metadata, keywords and a bounded description, which hints at truncation, but it never explains how or why the description is bounded or what happens when the cap is hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler: the read-only nature and the unit of retrieval come first, followed by the returned data. Every clause carries information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full annotation coverage and no output schema, the description adequately conveys what comes back. It falls short on the input side, where neither parameter's format or behavior is covered anywhere, which is the main gap an agent would hit in practice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both parameters are undocumented in structured fields. "bounded description" loosely gestures at maxChars and its 20000 default cap, but mediaId's expected format/source and the truncation semantics of maxChars are never explained, leaving the agent to guess how to obtain and pass a valid identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Get one Photos media item" gives a specific verb plus resource, and "one" plus the enumeration of returned data (metadata, keywords, description) distinguishes it from the bulk-retrieval siblings apple_photos_list and apple_photos_search. It never names those siblings explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance: nothing says to pick this over apple_photos_search or apple_photos_list, and no prerequisite (e.g. needing a mediaId from a prior list/search call) is mentioned. The only hint is the word "one", which implies lookup-by-ID but leaves the agent to infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_importA
Import existing local files into Photos, optionally into an album. Duplicate checking remains enabled; imported media may upload to iCloud Photos.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | Yes | ||
| albumId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true), so the bar is lower. The description adds genuinely useful behavior beyond that: duplicate checking stays enabled and imports may sync to iCloud Photos. It does not mention permission requirements or whether source files are copied vs. moved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and immediately followed by the two behavioral caveats. No filler, though 'remains enabled' is slightly indirect phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and annotations cover the safety profile, so the remaining burden is behavioral disclosure. The description covers the two highest-value surprises (duplicate detection, iCloud sync); missing only source-handling semantics (copy vs. move) and permission needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It implies that 'paths' are local filesystem paths (not URLs) and that 'albumId' targets an optional album, but it never names the parameters or notes the 20-item cap or the 4096-character path limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: importing local files into Photos, with an optional album target. This distinguishes it from the direction-opposite apple_photos_export and from apple_photos_add_to_album (which handles items already in the library), though neither sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'existing local files' — the agent can infer this is for filesystem sources rather than library items — but there is no explicit when-to-use vs. apple_photos_add_to_album guidance and no prerequisites or exclusions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_listBRead-onlyIdempotent
Read-only: list Photos library or album media metadata without exporting image data.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| albumId | No |
TDQS
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 usefully adds that only metadata is returned and image data is not exported, which is genuine context beyond the annotations, but it says nothing about pagination, result shape, or the effect of scoping to an album.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that leads with the read-only guarantee, with no redundant text. It is efficient, though the brevity is partly the cause of the missing parameter and usage detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and 0% schema description coverage, the description should carry more of the load. It covers the mutation-safety question well but omits pagination semantics and result format, so it is only marginally adequate for a three-parameter listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does not meet it. The phrase 'library or album' loosely gestures at albumId, but limit and offset — the pagination controls — are never mentioned, leaving two of three parameters unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and resource ('Photos library or album media metadata'), making clear it returns catalog entries rather than binaries. It is reasonably distinguishable from apple_photos_list_albums and apple_photos_get, but does not explicitly name or contrast those siblings, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to choose this tool over apple_photos_search, apple_photos_get, or apple_photos_list_albums. The 'read-only' framing implies a listing use case but leaves the agent to infer routing on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_list_albumsBRead-onlyIdempotent
Read-only: list Photos album IDs and names.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered by structured data. The description adds that the result is album IDs and names, which is genuinely useful return-content context, but says nothing about pagination or what happens at the limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler and the purpose stated first. The 'Read-only:' prefix marginally duplicates the readOnlyHint annotation, but the sentence is otherwise tight and earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with full annotation coverage and no output schema, the description covers the essentials and even names the return fields. However, it omits any pagination behavior (defaults, maximum, whether more albums may exist beyond the limit), which is the main thing an agent still needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Two parameters (limit, offset) with 0% schema description coverage, and the description mentions neither. Pagination is only inferable from the parameter names, so the description fails to compensate for the coverage gap as required when coverage is under 50%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (Photos albums) and even names the returned fields (IDs and names), so an agent can distinguish it from apple_photos_list or apple_photos_search. It stops short of explicitly naming those siblings as alternatives, which is what a 5 would require.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of the obvious alternative (apple_photos_list) or related tools (apple_photos_get, apple_photos_create_album), and no prerequisites. The single word 'Read-only' hints at safety but not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_searchCRead-onlyIdempotent
Read-only: search Photos using its native search command; returns bounded metadata results.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the leading 'Read-only' is largely redundant. The description does add one genuine behavioral fact beyond the annotations: results are 'bounded metadata' (i.e., capped and metadata-only, not full assets), but it omits pagination behavior, defaults, and whether the app must be running.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the read-only qualifier and the return-shape note both sit up front. It is efficient, though arguably too terse for the amount of undocumented surface it covers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, three schema-undocumented parameters, and no annotations on return format, the description should explain what a result contains and how paging works. It does not, leaving an agent unsure how to build a query or iterate results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so all three parameters (query, limit, offset) are undocumented in structured data, and the description compensates only weakly ('bounded' hints at limit). Query syntax, matching semantics, and the offset/limit paging relationship are left entirely unstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (Photos) and clarifies it uses the app's native search command, which distinguishes it from apple_photos_list/get. However it never names those siblings or states what the search matches against, so the differentiation is implied rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance: nothing says to prefer this over apple_photos_list or apple_photos_get, nor what kinds of queries are supported (filenames, dates, people, albums). Usage must be inferred entirely from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_photos_updateBDestructiveIdempotent
Update a Photos media title, description, favorite flag, and/or replace its keyword list. May sync through iCloud Photos.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| mediaId | Yes | ||
| favorite | No | ||
| keywords | No | ||
| description | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is largely covered. The description adds genuine value beyond them by noting the iCloud Photos sync side effect and by saying keywords are 'replaced' rather than merged. It still does not say whether omitted fields are preserved or whether permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler; the field list is front-loaded and the sync caveat is appropriately secondary. Nothing is redundant, though it is terse enough that some needed detail is missing rather than trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, idempotent mutation with no output schema, the description covers the affected fields and one side effect, which is adequate. It stops short of telling the agent whether unspecified fields remain untouched and what the destructive keyword replacement means for existing data, which would complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the burden and maps four of five parameters (name as 'title', description, favorite, keywords) to meaningful actions. It even clarifies that keywords are replaced wholesale. However, it omits the required mediaId and gives no format or constraint details, leaving gaps it could have filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
A clear verb (update) plus resource (Photos media) and an explicit enumeration of the mutable fields (title, description, favorite, keyword list). An agent can immediately tell what the tool changes. It does not differentiate from any sibling, though none of the photos siblings perform updates, so the risk of confusion is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are given. The only usage-adjacent signal is 'and/or', implying fields are optional, which the agent must infer rather than being told. There is no statement of when this tool should be preferred over apple_photos_add_to_album or other mutations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_completeBDestructiveIdempotent
Mark an existing local Apple Reminder as completed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Reminder id returned by apple_reminders_list. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| list | Yes | ||
| dueAt | No | ||
| notes | No | ||
| title | Yes | ||
| priority | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the full safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description still adds essentially nothing beyond 'local' — no note on whether the reminder syncs, what happens on duplicate titles, or which account/list it lands in.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler — genuinely concise. It loses a point only because the terseness borders on under-specification for a 5-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with 5 parameters, no output schema, and zero schema description coverage, the description should explain required inputs and at least basic return behavior. It supplies none of that, leaving an agent unable to construct a valid call without reverse-engineering the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 5 parameters, so the description carries the full burden and provides none. Critical details are absent: 'list' must reference an existing list, dueAt expects an ISO-8601 date-time, and priority is 0-9. None of this is surfaced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Create') and resource ('Apple Reminder'), and 'local' hints at scope, so an agent knows the basic operation. However, it does nothing to distinguish itself from siblings like apple_reminders_create_list, apple_notes_create, or apple_textedit_create, which is what a 5 requires.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. that 'list' must already exist), and no mention of alternatives such as apple_reminders_create_list when the target list does not exist. The agent is left to infer everything.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_create_listC
Create a Reminders list in an exact account ID.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| accountId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, not idempotent, not destructive, open world), so the description only needs to add context. It contributes the account-scoping requirement, but says nothing about duplicate list names, error behavior, or what happens to an existing list with the same name.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the action front-loaded and no filler. The phrasing 'in an exact account ID' is slightly clunky but costs nothing in length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and zero parameter documentation, the description is too thin: it omits name, omits how to obtain a valid accountId, and omits any post-creation behavior or duplicate handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description must compensate. It hints that accountId must be an exact account identifier, but gives no meaning, format, or source for it, and never mentions the required 'name' parameter at all.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create a Reminders list), which cleanly separates it from siblings like apple_reminders_rename_list and apple_reminders_delete_list. The trailing phrase 'in an exact account ID' is awkward but does convey the target scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of where the required accountId comes from (e.g., apple_reminders_list_accounts), and no alternatives or exclusions. The agent must infer the workflow entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_deleteADestructive
Delete an existing local Apple Reminder. This is destructive.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Reminder id returned by apple_reminders_list. |
TDQS
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.
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.
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.
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.
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.
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_delete_listBDestructive
Delete a Reminders list and its reminders. Destructive; may sync to iCloud.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, so the safety profile is covered. The description still adds real value beyond them by disclosing the cascade behavior (all contained reminders are deleted too) and that the change may propagate to iCloud, neither of which is derivable from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the destructive scope front-loaded ahead of the secondary sync caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter delete with no output schema, the description covers what gets removed (the list plus its reminders), that it is destructive, and that it may sync to iCloud. It leaves open how the target list is identified and whether deletion is recoverable, which are minor but non-zero gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required 'id' parameter, and the description says nothing about it — the agent cannot tell whether to pass a list name, a UUID from apple_reminders_list_lists, or another identifier. With low coverage the description is expected to compensate and does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (Delete) and resource (a Reminders list), and explicitly states the cascade scope — 'and its reminders' — which separates it from the sibling apple_reminders_delete that removes a single reminder. It does not, however, explicitly name or contrast against that sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no stated prerequisite (e.g. confirmation, permissions), and no mention of the alternative tools for removing reminders versus removing an entire list. 'Destructive; may sync to iCloud' is a warning, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_getCRead-onlyIdempotent
Read-only: get reminder notes, completion, due time, alarm, priority, and flag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
TDQS
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 description's 'Read-only' prefix merely restates structured data. It adds no behavioral context such as what happens if the id is not found, permission requirements, or how the returned fields behave when unset.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the field list is the payload. It is efficient, though the 'Read-only:' prefix is redundant against the annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, enumerating the returned fields is genuinely useful and partially covers the return-value gap. However, the tool still lacks any id semantics or error behavior, so an agent could not confidently call it from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single parameter 'id' is undocumented in both schema and description. The description never explains what the id is, its expected format, or where to obtain it (e.g., from apple_reminders_list), so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (get) and resource (reminder) and enumerates the fields retrieved (notes, completion, due time, alarm, priority, flag), so the agent knows exactly what it returns. It does not, however, distinguish itself from siblings like apple_reminders_list or apple_reminders_search, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no mention of alternatives such as list, search, or update. The 'Read-only' prefix hints at the safe-fetch role but does not tell the agent when to pick this over apple_reminders_list or apple_reminders_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_listCRead-onlyIdempotent
Read-only: list local Apple Reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| lists | No | Optional reminder-list allowlist. Empty means all lists. | |
| includeCompleted | No |
TDQS
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.
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.
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.
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.
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.
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_accountsARead-onlyIdempotent
Read-only: list Reminders account IDs and names.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description's 'Read-only' prefix largely duplicates structured data. It does add one useful behavioral detail: the return content is account IDs and names, which matters since there is no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that identifies the operation and the returned fields with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a trivial 0-param read with full annotation coverage, the description is sufficient, and it helpfully compensates for the missing output schema by naming the returned fields. Only the lack of routing guidance to sibling listers keeps it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to clarify beyond the schema. The baseline for a 0-param tool is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and resource ('Reminders account IDs and names'), which inherently separates it from siblings like apple_reminders_list_lists (lists) or apple_reminders_list (reminders). It does not explicitly name a sibling to differentiate, but the resource scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when an agent should call this versus apple_reminders_list_lists or the per-app account listers (apple_notes_list_accounts, apple_mail_list_accounts). Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_list_listsARead-onlyIdempotent
Read-only: list local Apple Reminders list names and IDs. Use this before creating reminders when the exact list name is unknown.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_rename_listBDestructiveIdempotent
Rename a Reminders list by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds only the 'by ID' targeting detail and does not disclose what the rename replaces, whether the old name is lost, or any failure behavior for a missing ID.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short clause with zero filler and the action front-loaded. It is arguably too terse for a two-parameter mutation, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with safety covered by annotations and no output schema, the essentials are present. However, the absence of any schema descriptions leaves the parameter contract thin, and the description does not mention whether the renamed list must be uniquely named or what is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both parameters rely on the description for meaning. 'By ID' clarifies the id parameter and 'Rename ... list' implies name is the replacement label, which is partial compensation, but format constraints, uniqueness requirements, and list-reference semantics remain undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Rename a Reminders list') and identifies the targeting key ('by ID'). It is distinguishable from siblings like apple_reminders_create_list or apple_reminders_delete_list by the verb alone, though it does not explicitly contrast with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus apple_reminders_update, apple_reminders_create_list, or apple_calendar_rename_calendar. No prerequisites (existing list, account scope) or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_searchCRead-onlyIdempotent
Read-only: search reminder titles within selected lists.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| lists | No | ||
| query | Yes | ||
| includeCompleted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false. The description adds useful search-scope context by specifying that only reminder titles are searched within selected lists, but it does not describe return behavior, matching semantics, or completion handling beyond what the schema defaults imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no bloat, which is appropriately concise. The 'Read-only:' prefix is somewhat redundant with the readOnlyHint annotation, slightly reducing its structural value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter search tool with no output schema and no schema descriptions, the definition is too thin. It does not explain return values, pagination/limit behavior, completion filtering, or query matching, leaving the agent with insufficient context to invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all four parameters. It only hints at 'selected lists' and 'titles' for the lists and query parameters, leaving limit and includeCompleted completely unexplained, along with query matching syntax.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('search') and narrowed resource ('reminder titles') with scope ('within selected lists'), which distinguishes it from broader list/get reminder tools. However, it does not explicitly name or contrast with sibling tools such as apple_reminders_list, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives only implied usage: search reminder titles in selected lists. It provides no explicit guidance on when to use this instead of apple_reminders_list or apple_reminders_get, and no exclusions or prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_set_alarmCDestructiveIdempotent
Set or clear a reminder notification date.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| remindAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds nothing further: it doesn't explain that null clears the alarm, whether an existing notification is overwritten, or any permission/authorization requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste. It is efficient, though arguably too terse to carry the necessary semantics for a two-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and 0% parameter documentation, the description does not supply enough: the id parameter, the clear-via-null convention, and any overwrite behavior are all missing. Annotations cover safety hints only.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters. The description implies remindAt is a date and that clearing is possible, which is marginal added value, but the required 'id' parameter is entirely unexplained in both the schema and the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (set/clear) and resource (reminder notification date), which is enough to distinguish it from apple_reminders_update and apple_calendar_add_alarm. The naming mismatch between the tool name (set_alarm) and the description (notification date) is minor but slightly muddy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no mention of the alternative apple_reminders_update, and no explicit statement of how to clear the alarm. The word 'clear' hints at it but leaves the agent to infer that remindAt=null is the mechanism.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_set_completedCDestructiveIdempotent
Set a reminder completion state, including reopening a completed reminder.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| completed | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true and destructive=true, so the safety profile is covered. The description adds one genuine behavioral fact beyond them — that the operation is bidirectional and can reopen a completed reminder — but says nothing about required Reminders permissions, behavior on an unknown id, or why a mere state toggle carries destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the core action and free of filler. It is efficient, though the brevity comes at the cost of the sibling differentiation noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema and two fully undocumented parameters, the description leaves real gaps: where the 'id' comes from, how this differs from 'apple_reminders_complete', and confirmation of what state changes when completed=false. Annotations cover reversibility, but not the task-level context an agent needs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, so the description must compensate and largely does not. It only implicitly maps 'completed' to a true/false complete-vs-reopen semantic and hints that 'id' refers to a reminder; the id's format, source, and how to obtain it (list/search/get) are never stated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource ('set a reminder completion state') and adds the bidirectional nuance that it can reopen a completed reminder. However, it does not distinguish itself from the near-identical sibling 'apple_reminders_complete', nor from 'apple_reminders_update', so an agent cannot tell which one to pick from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance and no exclusions. With a sibling named 'apple_reminders_complete' presumably doing the forward direction, the description never says when to use this tool instead of that one, or when to prefer 'apple_reminders_update'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_set_flaggedCDestructiveIdempotent
Set or clear a reminder flag.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| flagged | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds essentially nothing beyond them — no auth requirements, no statement of what is affected, and no reconciliation of why a flag toggle is marked destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no waste, which is appropriate for a two-parameter toggle. It is terse rather than padded, though the brevity contributes to the specification gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, 0% parameter documentation, and a destructiveHint annotation, the description should say what changes, what the id refers to, and any preconditions. It omits all of this, so an agent cannot call it confidently beyond the trivial boolean toggle.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so both required parameters are undocumented in the schema. The description only obliquely explains the boolean via 'set or clear' and says nothing about the 'id' (format, where it comes from, or whether it accepts a list identifier), leaving the coverage gap uncompensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Set or clear') and resource ('reminder flag'), which distinguishes it from close siblings like apple_reminders_set_completed and apple_reminders_set_alarm. It is clear but does not explicitly name those alternatives, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to flag a reminder versus using set_completed or update, nor any prerequisites or note that the reminder must already exist. The agent must infer usage entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_reminders_updateCDestructiveIdempotent
Modify an existing local Apple Reminder.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Reminder id returned by apple_reminders_list. | |
| dueAt | No | ||
| notes | No | ||
| title | No | ||
| priority | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the safety profile is known. The description adds nothing beyond that: it does not explain partial-update semantics (whether omitting a field leaves it unchanged), whether dueAt=null clears the due date, or whether changes are reversible. For a destructive mutation, this gap matters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with no filler, which is structurally clean. It is under-specified rather than bloated, so it neither wastes space nor earns praise for economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a destructive 5-parameter mutation with no output schema and only 20% schema coverage. The description should at minimum cover partial-update behavior and the meaning of the mutable fields; instead it covers none of them, leaving the agent to guess at semantics that the schema does not supply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only 1 of 5 parameters has a schema description (20% coverage); title, notes, priority, and dueAt carry types but no meaning, and priority's 0-9 range is unexplained. The description adds no parameter information at all, so it fails to compensate for the low coverage. The only hint is the schema's id description pointing at apple_reminders_list, which is not in the tool description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the verb (Modify) and resource (existing local Apple Reminder), so the basic action is clear. However, it does not say which fields can be modified or how it differs from siblings that also mutate a reminder, such as apple_reminders_set_completed, apple_reminders_set_flagged, and apple_reminders_set_alarm. An agent cannot tell from this line whether those specialized tools are alternatives or complements.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites (e.g., that the reminder id must come from apple_reminders_list), and no mention of the specialized setter siblings that cover completed/flagged/alarm changes. The agent must infer routing entirely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_safari_add_reading_listA
Add an HTTP(S) URL, optional title, and preview to Safari Reading List; may sync through iCloud.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| title | No | ||
| preview | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description adds value beyond them by disclosing the iCloud sync side effect and constraining input to HTTP(S) URLs, which is real operational context not present in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words; the core action comes first and the side-effect caveat trails after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation with no output schema and safety hints already covered by annotations, the definition is nearly sufficient. The remaining gap is duplicate handling and any prerequisites (e.g. Safari running), which are not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description has to carry the parameter burden. It does flag that title and preview are optional and that the URL must be HTTP(S) (the schema's format:uri alone does not enforce that), but it never explains what 'preview' actually is, leaving one of three parameters semantically opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (add) and resource (Safari Reading List) plus the exact payload (URL, optional title, preview). This is plainly distinct from the other Safari siblings (open_tab, navigate_tab, list_tabs), so an agent can route to it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the wording makes clear this is for saving a page for later, but it never states when to prefer this over apple_safari_open_tab or what happens if the URL is already on the list. No exclusions or alternatives are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_safari_close_tabADestructive
Close a Safari tab; unsaved page input may be lost. Requires its previously observed URL.
| Name | Required | Description | Default |
|---|---|---|---|
| tabIndex | Yes | ||
| windowId | Yes | ||
| expectedUrl | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-idempotent, and the description adds concrete context beyond them: unsaved page input may be lost, and the URL must be a previously observed value (a safety guard against closing the wrong tab). It doesn't say what happens on a URL mismatch, keeping it at 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses with zero waste; the action is front-loaded and the destructive warning follows immediately. Nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema, three-parameter tool, the description covers the safety-critical facts: data loss risk and the URL precondition. Missing is how the other two identifiers are sourced and what failure looks like on a stale URL.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it only explains expectedUrl ('its previously observed URL'). windowId and tabIndex — where they come from and what values are valid — are left entirely to the bare schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Close a Safari tab'), which is unambiguous against Safari siblings like list_tabs, get_tab, open_tab, and navigate_tab. It never explicitly contrasts itself with those siblings, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a real precondition — 'Requires its previously observed URL' — which tells the agent it must have first observed the tab (via list_tabs/get_tab) before closing. It stops short of naming those prerequisite tools or stating when to prefer this over other tab operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_safari_get_tabARead-onlyIdempotent
Read-only: read one Safari tab title and URL, with optional bounded page text using Safari scripting. Does not execute page JavaScript.
| Name | Required | Description | Default |
|---|---|---|---|
| maxChars | No | ||
| tabIndex | Yes | ||
| windowId | Yes | ||
| includeText | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description nonetheless adds two genuine behavioral facts beyond that: text reads are bounded, and the tool will not execute page JavaScript, which is a meaningful security constraint. It does not cover error/failure modes, which keeps it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the read-only qualifier and the return payload front-loaded; every clause carries information and nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly carries the return contract (title, URL, optional bounded text) and notes the scripting mechanism. It is slightly thin on identifying what windowId/tabIndex refer to and on failure behavior, but is otherwise sufficient for a read-only single-record tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across four parameters, so the description must compensate and only partially does: 'optional bounded page text' maps to includeText/maxChars but gives no format or default hints. The two required parameters, windowId and tabIndex, are entirely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('read one Safari tab'), names exactly what is returned (title and URL, optional bounded page text), and scopes it to a single tab, which separates it from apple_safari_list_tabs, apple_safari_close_tab and apple_safari_navigate_tab without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the read path for tab content, and the 'Does not execute page JavaScript' clause marks a boundary. However, no sibling is named and there is no explicit when-to-use / when-not guidance versus apple_safari_list_tabs or apple_pages_read_text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_safari_list_tabsARead-onlyIdempotent
Read-only: list Safari tab titles, URLs, window IDs, and one-based tab indices. Tab indices change when tabs close.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description still adds genuine behavioral context the annotations lack: that indices are one-based and unstable when tabs close. It omits that the default limit of 20 can silently truncate results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, zero waste, with the read-only nature and the returned fields front-loaded before the index caveat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and warns about index instability. The remaining gap is pagination: limit defaults to 20 with no warning that large tab sets get truncated, which matters because the schema is undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and neither of the two parameters (limit, offset) is mentioned in the description, so it does not compensate for the undocumented pagination controls. The 'one-based indices' note describes output, not the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (list) and resource (Safari tabs) plus the exact return fields (titles, URLs, window IDs, one-based indices), which is enough to tell it apart from apple_safari_get_tab, apple_safari_open_tab, and apple_safari_close_tab without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no mention of alternatives such as apple_safari_get_tab for a single tab. Usage is only implied by the verb 'list'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_safari_open_tabB
Open an HTTP(S) URL in a new Safari tab. This loads the URL and can contact a remote website.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| activate | No | ||
| windowId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true and readOnlyHint=false, so the network-touching, non-read-only nature is known from structured data; 'can contact a remote website' largely restates openWorldHint. The description omits genuinely additive behavior such as whether the tab is focused/foregrounded, whether duplicate tabs are created, and what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and scope. The second sentence is largely redundant with the openWorld annotation, but the overall size is appropriate and there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation-ish tool with no output schema and no annotation coverage of return/UI effects, the description should explain activate/windowId behavior and what happens on invocation. As written, an agent cannot call it confidently beyond the required URL.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it only covers the required 'url' (adding the HTTP(S) restriction, which the generic uri format does not convey). The 'activate' and 'windowId' parameters are explained nowhere, leaving two of three params opaque.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Open an HTTP(S) URL in a new Safari tab') and the 'new tab' qualifier separates it from apple_safari_navigate_tab and apple_safari_close_tab. It stops short of naming those siblings explicitly, so an agent still has to infer the split between 'open new' and 'navigate existing'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'In a new Safari tab' implies the usage context versus navigating an existing tab, but there is no explicit when-to-use/when-not statement or reference to the sibling tools. An agent can guess the intent but is given no routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_shortcuts_listBRead-onlyIdempotent
Read-only: list installed Shortcuts, optionally in one folder.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false; the description's 'Read-only' prefix largely restates them. It does add the useful scoping fact that results can be constrained to a folder, but discloses nothing about volume, ordering, or permission needs. With annotation coverage present, a 3 fits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the scope qualifier front-loaded after the verb. Nothing is padded or redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-optional-parameter read tool with annotations covering the safety profile and no output schema, the description is adequate but thin. It leaves the relationship to apple_shortcuts_list_folders and the exact folder-argument behavior unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'folder' parameter, so the description must carry meaning. It does indicate the parameter is optional and filters by folder, but adds no detail on name matching, case sensitivity, or invalid-folder behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('list') and resource ('installed Shortcuts') with scope ('optionally in one folder'), so the core operation is unambiguous. It does not explicitly distinguish itself from the sibling apple_shortcuts_list_folders, which an agent might reasonably confuse when looking for folder data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool, when not to, or which alternative applies. The 'optionally in one folder' clause is parameter scoping rather than usage guidance, so the agent gets no routing help against siblings like apple_shortcuts_list_folders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_shortcuts_list_foldersBRead-onlyIdempotent
Read-only: list Shortcuts folders.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The 'Read-only:' prefix merely restates readOnlyHint=true from the annotations, so it adds no value beyond structured data. Nothing is said about what the folders represent, ordering, or how the results are consumed, and no annotation already covers those points.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the purpose front-loaded and no padding. The only waste is the 'Read-only:' prefix that duplicates the annotation, but the definition stays tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool this covers the essentials, but with no output schema the description could say what folders are returned (names, ids) and whether they feed other Shortcuts tools. That return-shape gap keeps it at minimum-viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline of 4 applies. The description correctly implies no input is required to enumerate folders.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'list Shortcuts folders.' An agent can separate it from the sibling apple_shortcuts_list (which lists shortcuts rather than folders), though the description never names that distinction explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus apple_shortcuts_list or other sibling listing tools, and no preconditions are stated. The usage context is left entirely to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_system_capabilitiesARead-onlyIdempotent
Read-only: discover installed Apple apps, platform, file roots, and allowed Shortcuts. Does not test Automation permission.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds one genuinely new behavioral fact beyond annotations – that Automation permission is not exercised – which prevents a common misuse, but it says nothing about permission requirements for the call itself or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, dense sentences with the safety posture front-loaded in the first word. Every clause carries information; nothing is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must convey what comes back, and it does by enumerating the four discovery categories. It stops short of describing the response structure or how 'allowed Shortcuts' is scoped, which is the only remaining gap for a zero-parameter probe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 per the rubric. Schema coverage is vacuously 100% and there is nothing for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete verb ('discover') and enumerates the specific resources it surfaces: installed Apple apps, platform, file roots, and allowed Shortcuts. This is clearly distinguishable from every sibling (all of which act on a specific app or data type), though it doesn't explicitly name a sibling it replaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It establishes usage context by exclusion: 'Read-only' and, critically, 'Does not test Automation permission' tell the agent this is an environment-inspection call, not a permission probe. There is no explicit 'call this before X' statement, but the scope boundaries are clear enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_system_open_appB
Launch or activate a supported Apple app.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover mutation/safety (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the bar is lower. The description adds the launch-vs-activate nuance, implying an already-running app is brought forward rather than relaunched. It says nothing about behavior for unsupported apps, whether it steals focus, or any error/consent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though its extreme brevity is the source of the gaps elsewhere rather than a sign of disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter launch tool with annotations and an enum, the description is close to sufficient but leaves real gaps: what happens on an unsupported/uninstalled app, whether the call is a no-op when already running, and whether focus is brought forward. Nothing about return values is needed since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden for the single 'app' parameter, yet it only says 'supported Apple app'. The 23-value enum in the schema does the real work; the description never explains accepted values, case sensitivity, or whether app names must match the enum exactly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (launch/activate) and resource (a supported Apple app), which is enough to distinguish it from the document-scoped openers like apple_pages_open or apple_keynote_open. It does not explicitly call out that it opens the application itself rather than a document, but the wording implies it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no routing to alternatives. With many app-specific 'open' siblings in the list, the agent gets no help deciding between this generic launcher and e.g. apple_numbers_open or apple_safari_open_tab.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_textedit_closeADestructive
Close one TextEdit document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes.
| Name | Required | Description | Default |
|---|---|---|---|
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. | |
| discardChanges | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered structurally. The description adds genuine context beyond that: the operation refuses unsaved changes and documents lacking a saved path, telling the agent the specific failure modes it will hit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the action, followed immediately by the constraints and the escape hatch. No filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a close tool with destructive annotations and no output schema, the description covers the key preconditions, the override flag, and the alternative workflow. Return-value behavior is absent but unnecessary since no output schema exists and the operation is terminal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
documentName is documented in the schema, and the description supplies behavior for the undocumented discardChanges param ("unless discardChanges:true"), compensating for the 50% coverage. It could add the default behavior explicitly, but the meaning is clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Close") and resource ("one TextEdit document"), including cardinality. It also implicitly demarcates itself from the save sibling by noting "save separately to retain changes," so an agent can route between close and save without reading schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit conditional guidance: use discardChanges:true to force-close, and save separately if changes must be retained. The when-not case (unsaved changes without the flag) is stated. It stops short of naming the exact sibling tool (apple_textedit_save), which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_textedit_createA
Create an unsaved TextEdit document. May show a window. Use the returned name for subsequent operations; save explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the bar is lower. The description still adds non-obvious context the annotations don't: the document is unsaved, a window may appear as a side effect, a name is returned, and saving must be done explicitly. That is meaningful behavioral disclosure beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, and the core action is front-loaded before the caveats and chaining advice. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 no output schema, the description covers the key things an agent needs: it is unsaved, a window may appear, the returned name is needed downstream, and saving is a separate step. Only the meaning of the 'text' parameter is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'text' parameter has 0% schema description coverage, so the description must carry the burden and it does not — it never mentions that text sets the initial document content or what the default empty value implies. With low coverage and no compensation, this is a real gap for callers deciding whether to pass content at creation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an unsaved TextEdit document'), and the 'unsaved' qualifier distinguishes it from the sibling apple_textedit_open, which presumably opens an existing file. An agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use the returned name for subsequent operations; save explicitly' gives real workflow guidance for chaining and persistence. However, it never states when to choose this over alternatives such as apple_textedit_open or the other app 'create' tools, so usage selection 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_textedit_list_documentsARead-onlyIdempotent
List open TextEdit documents. Does not launch a stopped application.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No |
TDQS
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 a genuinely non-annotation behavioral trait: it will not launch a stopped application, which tells the agent this call cannot bootstrap the app.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core purpose and followed immediately by the key constraint. No filler or repetition of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a paginated list tool with no output schema and zero parameter documentation, the description omits any mention of pagination or return shape. The app-launch caveat is valuable, but the listing mechanics an agent needs are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description says nothing about the two parameters (limit, offset) or their defaults and bounds. It fails to compensate for the coverage gap, leaving pagination entirely undocumented outside the raw schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (TextEdit documents) with a scope qualifier ('open'). It is clearly distinguishable from the sibling document-listing tools for Pages, Numbers, and Keynote, which share the same verb but a different app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence implies a usage condition (the app must already be running for this to return anything), but it never explicitly routes the agent to an alternative such as apple_textedit_open when the app is stopped. The context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_textedit_openB
Open a local TextEdit document. Launches the app and may show its window or import dialogs.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false), but the description adds real behavioral context beyond them: it discloses that the call launches the app and may surface window or import dialogs. This side-effect caveat is genuinely useful since opening is not guaranteed to be silent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core action front-loaded and the caveat second; nothing is padded. It is efficient, though it spends a sentence on side effects rather than the required input.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter open tool with no output schema, the description covers the action and its UI side effects but leaves the required path argument entirely unspecified. An agent can call it, but without confidence about what path values are valid.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single required 'path' parameter, so the description must compensate and largely does not. It only implies the argument names a local document; it gives no format, absolute/relative, or file-extension guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Open a local TextEdit document'), which cleanly separates it from siblings like apple_textedit_create, apple_textedit_save, and apple_textedit_read_text. It does not name any sibling explicitly, so it falls short of the 5 benchmark for routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not guidance, and no mention of alternatives such as opening via another app or the create/read siblings. The word 'local' hints at scope but is not framed as a selection condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_textedit_read_textARead-onlyIdempotent
Read TextEdit plain text with character pagination. Pages supports word-processing body text only; rich formatting and text boxes are not returned.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| maxChars | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive behavior, so the description earns credit for adding real behavioral context: only word-processing body text is returned, and rich formatting and text boxes are excluded. That partial-return limitation is genuinely useful and is not derivable from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler, and the core capability is front-loaded before the content-scope caveat. Minor deduction for the ambiguous 'Pages' wording, which could be misread as referring to the Pages application.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description covers what is returned and explicitly what is not, which is the key gap an agent would otherwise hit. It does not explain how to detect more pages exist or how results are delimited, which is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% – offset and maxChars have no schema descriptions. The description's 'character pagination' phrasing partially compensates by signaling character-based windowing, but it never explains offset units, maxChars limits, or default behavior, so the gap is only partly closed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (read TextEdit plain text) plus the pagination scope, so an agent can distinguish it from apple_pages_read_text and other read siblings. It stops short of naming an alternative explicitly, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use, prerequisites, or alternative-routing guidance. The 'Pages supports word-processing body text only' sentence reads more like a content-scope caveat than usage direction, and 'Pages' is ambiguous against the apple_pages_* siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_textedit_saveADestructive
Save TextEdit to a .rtf path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| overwrite | No | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotency=false, and the description adds meaningful context on top: the overwrite gate for existing paths, the existing-parent precondition, and that RTF is the only format written with no implicit conversion. It omits what happens on failure or that the RTF write is format-lossy for non-RTF content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, zero filler, with the core action and the overwrite constraint front-loaded. Every sentence adds a distinct rule.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent write with no output schema, the description covers the essential operational facts an agent needs before calling. It could say more about failure behavior when the parent directory is absent or the format conversion is lossy, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33% (documentName alone), so the description must carry path and overwrite — and it does, defining the .rtf requirement plus existing parent for path and the overwrite:true rule for existing targets. documentName semantics are already in the schema, so nothing is left ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (save a TextEdit document to a path) and pins the output format to .rtf. It implicitly separates itself from apple_textedit_set_text and apple_files_write_text, but never names an alternative, so it stops short of explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two concrete operating conditions: the parent directory must already exist, and any existing target (including the current document path) requires overwrite:true. That is real when-to-use guidance, though it never says when to prefer this over sibling save/write tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apple_textedit_set_textADestructive
Replace or append TextEdit plain text. This can remove existing rich formatting; changes may autosave and sync. Pages requires a word-processing document.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | replace | |
| text | Yes | ||
| documentName | Yes | Exact name returned by list_documents; ambiguous duplicate names are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations (destructiveHint=true, idempotentHint=false, openWorldHint=true) by naming the specific casualty — existing rich formatting — and disclosing autosave/sync side effects. That is exactly the kind of consequence an agent needs before overwriting user content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the destructive consequence is stated early. The closing Pages sentence is the one item whose relevance to a TextEdit tool is not self-evident, so it costs a little precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, annotations already cover safety and the description adds the formatting-loss and autosave consequences. Remaining gaps (permission prerequisites, whether the document must already be open) are minor but real.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 33%, with just documentName carrying an inline description. The description names the two mode behaviors implicitly ('Replace or append'), which partially compensates, but adds no detail on text length limits or documentName resolution beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (replace/append) and resource (TextEdit plain text), which cleanly separates it from apple_textedit_read_text and apple_pages_set_text. The trailing note about Pages weakens focus slightly since this is a TextEdit tool, but the core action remains unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to choose this tool over siblings, nor when to prefer replace vs append beyond the schema enum. The Pages sentence hints at an applicability boundary but is not framed as a when-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
121 tool updates
v3.0.0- Added
apple_calendar_add_alarm - Added
apple_calendar_create_calendar - Changed
apple_calendar_create_event2 fields changed- changed
Input schema / properties / end / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - changed
Input schema / properties / start / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Added
apple_calendar_delete_calendar - Added
apple_calendar_get_event - Changed
apple_calendar_list_events2 fields changed- changed
Input schema / properties / end / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - changed
Input schema / properties / start / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Added
apple_calendar_rename_calendar - Added
apple_calendar_set_recurrence - Added
apple_calendar_set_url - Changed
apple_calendar_update_event2 fields changed- changed
Input schema / properties / end / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" - changed
Input schema / properties / start / patternPrevious value: -"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"New value: +"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
- Added
apple_contacts_add_to_group - Added
apple_contacts_create - Added
apple_contacts_create_group - Added
apple_contacts_get - Added
apple_contacts_list_group_members - Added
apple_contacts_list_groups - Added
apple_contacts_remove_from_group - Added
apple_contacts_search - Added
apple_contacts_update - Added
apple_files_copy - Added
apple_files_create_folder - Added
apple_files_info - Added
apple_files_list - Added
apple_files_read_text - Added
apple_files_search - Added
apple_files_trash - Added
apple_files_write_text - Added
apple_finder_reveal - Added
apple_finder_selection - Added
apple_keynote_add_slide - Added
apple_keynote_close - Added
apple_keynote_create - Added
apple_keynote_export - Added
apple_keynote_list_documents - Added
apple_keynote_list_slides - Added
apple_keynote_open - Added
apple_keynote_save - Added
apple_keynote_update_slide - Added
apple_mail_create_draft - Added
apple_mail_create_mailbox - Added
apple_mail_list_attachments - Added
apple_mail_save_attachment - Added
apple_mail_search - Changed
apple_mail_send3 fields changed- changed
Input schema / properties / bcc / items / patternPrevious value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" - changed
Input schema / properties / cc / items / patternPrevious value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" - changed
Input schema / properties / to / items / patternPrevious value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
- Added
apple_messages_list_accounts - Added
apple_messages_list_chats - Added
apple_messages_send - Added
apple_music_add_tracks_to_playlist - Added
apple_music_create_playlist - Added
apple_music_get_playback_state - Added
apple_music_get_track - Added
apple_music_list_playlists - Added
apple_music_list_tracks - Added
apple_music_playback - Added
apple_music_search - Added
apple_music_set_volume - Added
apple_notes_create - Added
apple_notes_create_folder - Added
apple_notes_delete - Added
apple_notes_get - Added
apple_notes_list - Added
apple_notes_list_accounts - Added
apple_notes_list_folders - Added
apple_notes_search - Added
apple_notes_update - Added
apple_numbers_close - Added
apple_numbers_create - Added
apple_numbers_create_table - Added
apple_numbers_export - Added
apple_numbers_list_documents - Added
apple_numbers_list_sheets - Added
apple_numbers_list_tables - Added
apple_numbers_open - Added
apple_numbers_read_range - Added
apple_numbers_save - Added
apple_numbers_write_range - Added
apple_pages_close - Added
apple_pages_create - Added
apple_pages_export - Added
apple_pages_list_documents - Added
apple_pages_open - Added
apple_pages_read_text - Added
apple_pages_save - Added
apple_pages_set_text - Added
apple_photos_add_to_album - Added
apple_photos_create_album - Added
apple_photos_export - Added
apple_photos_get - Added
apple_photos_import - Added
apple_photos_list - Added
apple_photos_list_albums - Added
apple_photos_search - Added
apple_photos_update - Changed
apple_reminders_create1 field changed- changed
Input schema / properties / dueAt / anyOfPrevious value: -[ - { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } +]
- Added
apple_reminders_create_list - Added
apple_reminders_delete_list - Added
apple_reminders_get - Added
apple_reminders_list_accounts - Added
apple_reminders_rename_list - Added
apple_reminders_search - Added
apple_reminders_set_alarm - Added
apple_reminders_set_completed - Added
apple_reminders_set_flagged - Changed
apple_reminders_update1 field changed- changed
Input schema / properties / dueAt / anyOfPrevious value: -[ - { - "format": "date-time", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", - "type": "string" - }, - { - "type": "null" - } -]New value: +[ + { + "format": "date-time", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$", + "type": "string" + }, + { + "type": "null" + } +]
- Added
apple_safari_add_reading_list - Added
apple_safari_close_tab - Added
apple_safari_get_tab - Added
apple_safari_list_tabs - Added
apple_safari_navigate_tab - Added
apple_safari_open_tab - Added
apple_shortcuts_list - Added
apple_shortcuts_list_folders - Added
apple_system_capabilities - Added
apple_system_open_app - Added
apple_textedit_close - Added
apple_textedit_create - Added
apple_textedit_list_documents - Added
apple_textedit_open - Added
apple_textedit_read_text - Added
apple_textedit_save - Added
apple_textedit_set_text
18 tool updates
v2.1.1- First observed
apple_calendar_create_event - First observed
apple_calendar_delete_event - First observed
apple_calendar_list_calendars - First observed
apple_calendar_list_events - First observed
apple_calendar_update_event - First observed
apple_mail_delete - First observed
apple_mail_get - First observed
apple_mail_list - First observed
apple_mail_list_accounts - First observed
apple_mail_move - First observed
apple_mail_send - First observed
apple_mail_update_status - First observed
apple_reminders_complete - First observed
apple_reminders_create - First observed
apple_reminders_delete - First observed
apple_reminders_list - First observed
apple_reminders_list_lists - First observed
apple_reminders_update
TDQS
Scored across 133 tools
Each tool targets a specific Apple app and action, with app prefixes (e.g., apple_pages_, apple_mail_) clearly separating similar operations like read_text or list across different apps. However, the sheer number of tools (133) and the presence of multiple list/read/search variants for different resources within the same app could cause an agent to momentarily confuse tools without careful reading of descriptions.
All tool names follow a strict snake_case pattern: apple_<app>_<action>. There is no mixing of camelCase or other conventions, and the app prefix consistently disambiguates the domain.
With 133 tools, the server is far beyond the typical 3–15 range and even beyond the 25+ threshold for 'too many'. This extreme count creates significant cognitive overhead and selection risk for an agent, regardless of how well the tools are organized.
The surface covers many Apple apps extensively, but notable gaps exist, such as no delete operation for Contacts (only create/update and group management) and no file move/rename in Files. These missing CRUD/lifecycle operations are significant for a productivity suite and could force agents to work around the server.
Maintenance
Related MCP Connectors
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Mac & Windows: let ChatGPT, Claude & Cursor use your email, calendar, iMessage, Teams, files.
Connect Apple iCloud and Microsoft 365 mail, calendars, contacts and tasks to AI.
Your Telegram, WhatsApp, Instagram, mail and calendar in Claude or ChatGPT. Never sends messages.
Related MCP Servers
- FlicenseNot gradedqualityFmaintenanceProvides 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-
- AlicenseAqualityCmaintenanceEnables Claude to read and manage macOS Reminders (create, list, update, complete, delete reminders) via AppleScript, running entirely locally.6MIT
- AlicenseBqualityCmaintenanceEnables 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.768MIT
- AlicenseAqualityDmaintenanceEnables Claude to interact with Apple services including Email, Calendar, Contacts, Reminders, Notes, Messages, and Safari via AppleScript (macOS) or iCloud protocols.41757 npm72MIT