local-mcp
Server Details
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- lanchuske/local-mcp-releases
- GitHub Stars
- 46
- Server Listing
- Local MCP
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.3/5 across 225 of 225 tools scored. Lowest: 2.9/5.
Many tools are clearly distinct per app (e.g., chrome_*, safari_*, m365_*), but there is notable overlap between generic file tools like `file_list` and `finder_list`, both listing files; `search_contacts` and `list_contacts` serve similar purposes; `report_friction` and `report_problem` both send feedback to the team. The large number of tools with similar purposes in different domains creates moderate ambiguity for an agent.
The naming convention is very consistent overall: most tools follow a `{app}_action` or `verb_noun` pattern (e.g., `chrome_click`, `create_calendar_event`, `list_reminders`). There are minor deviations like `lmcp_install_upgrade` (two verbs) and `complete_omnifocus_task` vs. `complete_reminder` (inconsistent verb placement). Still, the pattern is predictable and readable across the full set.
With 225 tools, the surface is extremely large and heavy. While it covers many distinct domains (browsers, mail, calendar, files, notes, reminders, video editing, web automation, etc.), the sheer number makes it hard to navigate and likely includes many rarely-used tools. This is far beyond the well-scoped range of 3-15 tools and feels excessive even for a 'local everything' MCP server.
For many app integrations, the tool set provides solid CRUD coverage (e.g., Calendar has create, read, update, delete; Apple Notes has create, read, update, list, search; OmniFocus has create, list, search, complete). However, some areas are incomplete: for example, there is no tool to create a new Mail folder or delete notes. The 'web' tools lack a clear update/delete for saved sessions. The suite is broad but has notable gaps within individual domains.
Available Tools
203 toolscomplete_omnifocus_taskComplete OmniFocus TaskAInspect
Marks an OmniFocus task as complete by task ID or name. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to complete; called without it, returns a preview. | |
| task_id | No | Exact task id from list_omnifocus_tasks (preferred). Provide this OR task_name. | |
| task_name | No | Task title to match when you don't have the id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| completed | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds meaningful behavioral context by emphasizing the confirmation requirement ('Requires confirm=true'), which is a guardrail not captured by annotations. It also discloses the dual identification method. The preview behavior is left to the schema but the confirmation requirement is highlighted.
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 short sentences with no filler. It front-loads the verb and resource ('Marks an OmniFocus task as complete') and immediately follows with the critical confirmation constraint. Every word 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 description covers the essential aspects: purpose, identification method, and the confirmation requirement. An output schema exists, so return values need not be described. It does not explicitly explain the preview behavior, but that is captured in the schema's confirm parameter, and the tool's simplicity makes this 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?
Schema description coverage is 100%, so the baseline is 3. The description repeats the ID/name OR relationship and the confirm requirement without adding new meaning beyond what the schema already provides. It succinctly summarizes but does not improve upon the 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 clearly states the action (marks as complete) and the specific resource (OmniFocus task), distinguishing it from sibling tools like create_omnifocus_task, complete_reminder, and todoist_complete_task. The phrase 'by task ID or name' further specifies the scope of operation.
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 context for when to use the tool (completing an OmniFocus task) and how to identify the target (by ID or name). However, it does not explicitly mention alternatives or situations where another tool should be used, pulling back from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_reminderComplete ReminderAInspect
Marks a reminder complete in Apple Reminders (Reminders.app). Requires confirm=true. For Microsoft To Do use todo_complete_task instead.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to complete | |
| reminder_id | Yes | Reminder ID from list_reminders |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, already conveying mutation without destruction. The description adds a meaningful guardrail by stating that confirm=true is required before the action will execute, which is a behavioral constraint beyond the structured 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 short sentences with the action front-loaded. Every phrase earns its place: the platform, the mandatory confirm flag, and the pointer to the To Do alternative. No redundancy or 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 two-parameter mutation tool with a full output schema and annotations, the description covers the essential context: platform, required confirmation, and a cross-platform alternative. 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 description coverage is 100%, so the baseline is 3. The description's 'Requires confirm=true' reinforces the confirm parameter, and 'Reminder ID from list_reminders' in the schema already documents the ID source. No additional parameter meaning is provided 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 uses a specific verb and resource: 'Marks a reminder complete in Apple Reminders (Reminders.app).' It also distinguishes itself from the sibling tool 'todo_complete_task' by directing Microsoft To Do users there, making the tool's scope 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 explicitly states 'Requires confirm=true' as a usage prerequisite and gives a clear alternative: 'For Microsoft To Do use todo_complete_task instead.' This tells the agent exactly when to use this tool versus a related sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_clientsConfigure ClientsAInspect
Adds Local MCP to the config of installed MCP-capable AI clients on this Mac (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code, Zed) so they can use LMCP's tools — no manual JSON editing. Read-only PREVIEW unless confirm:true. Optionally pass a single client id to configure just that one. Returns which clients it set up, which already had Local MCP, which aren't installed, and the restart step for each. Pair with list_missing_permissions for fully agent-driven setup.
| Name | Required | Description | Default |
|---|---|---|---|
| client | No | Optional: configure only this client — one of claude, claude-code, cursor, windsurf, vscode, zed. Omit to do all installed ones. | |
| confirm | No | Must be true to write the config. Without it, returns a preview of what would change. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: it is a two-phase operation ('Read-only PREVIEW unless confirm:true') and details the return value (which clients were set up, already had config, not installed, and restart step). Annotations declare readOnlyHint=false and destructiveHint=false, consistent with the description; no contradiction exists.
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 three sentences long, front-loading the core action, then covering behavior, return details, and a companion tool. Every sentence provides essential information without redundancy. Perfectly concise.
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 complexity (multi-client installation, preview/confirm, return structure), the description covers the main points. The output schema exists to define return format, so the description need not detail it. Minor omission: what happens if no clients are installed (likely returns empty list), but this is implied.
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%, so the baseline is 3. The description adds minimal extra parameter meaning: it reiterates the optionality of 'client' and the preview/confirm behavior. It mentions the return value but does not elaborate on parameter details beyond the schema. No significant value added over 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 tool's purpose: 'Adds Local MCP to the config of installed MCP-capable AI clients on this Mac ... so they can use LMCP's tools.' It specifies the exact verb (Adds) and resource (config of clients), and names the supported clients. No sibling tool performs this function, so it is well-distinguished.
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 usage context: it automates what would otherwise require 'manual JSON editing,' and recommends pairing with 'list_missing_permissions for fully agent-driven setup.' It also clarifies the preview vs. confirm workflow. However, it does not explicitly state when not to use this tool or describe alternative approaches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_m365_accountConnect Microsoft 365 AccountAInspect
Connect your Microsoft 365 account. Call once to get a login code, then call again after you've authenticated at microsoft.com/devicelogin to confirm the connection.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context about the authentication process (getting a login code and confirming), which goes beyond the minimal annotations. However, it does not disclose potential side effects like overwriting an existing connection or persistency.
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 wasted words, and front-loaded with the core action. Every sentence adds 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?
The description explains the key steps for connecting, and given the presence of an output schema (not shown) and the sibling disconnect tool, the context is sufficient. Minor gap: no mention of error conditions or prerequisites.
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 has no parameters (100% coverage), and the description mentions a 'login code' from the first call, but does not explain how the code is handled in the second call. Given the high schema coverage, baseline 3 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 verb ('Connect') and resource ('Microsoft 365 account'), and distinguishes it from sibling tools like 'disconnect_m365_account'. It also outlines the two-step process.
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 explains the two-step flow for connecting an account, providing clear context on when to call the tool. However, it does not explicitly state when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_todoistConnect TodoistAInspect
Connect Todoist. For security your API token is entered directly in Local MCP's own settings window — never passed through the AI. Call this to get the instructions, or to check whether Todoist is already connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| message | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds important security context: the API token is entered directly in Local MCP's settings and never passed through the AI. It also clarifies the tool's behavior (returns instructions or connection status), going beyond the minimal 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, front-loaded with the tool's purpose, and includes a valuable security note without any fluff. 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 tool with no parameters and an output schema, the description is complete: it states what the tool does, when to call it, and a critical security behavior. No important 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?
The tool has zero parameters, so the schema is trivially 100% covered. The description appropriately describes what the tool does instead of parameter details, meeting the baseline for no-parameter tools.
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's purpose: to get instructions for connecting Todoist or check if it's already connected. This distinguishes it from sibling tools like disconnect_todoist and todoist_* task management 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?
It explicitly says 'Call this to get the instructions, or to check whether Todoist is already connected,' giving clear guidance on when to use it. It does not mention alternatives, but the context makes them obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_calendar_eventCreate Calendar EventAInspect
Creates an event in the Mac's Calendar app (Calendar.app). Requires title, start_date, end_date. Optionally invite attendees by email (CalDAV/Exchange calendars only), or make it a repeating event with recurrence (daily/weekly/monthly/yearly). For Microsoft 365 use m365_create_event instead.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Event notes (optional) | |
| title | Yes | Event title | |
| confirm | No | Must be true to create the event | |
| calendar | No | Calendar name to match (optional, alternative to calendar_id) | |
| end_date | Yes | ISO 8601 date or datetime, same timezone rules as start_date. For an all-day event pass a bare date (end is inclusive: same date as start = a one-day all-day event; a later date spans through that day). | |
| location | No | Location (optional) | |
| attendees | No | List of email addresses to invite (optional, CalDAV/Exchange only) | |
| recurrence | No | Make it a repeating event: 'daily', 'weekly', 'monthly', or 'yearly' (optional; omit for a one-time event). | |
| start_date | Yes | ISO 8601 date or datetime. With a time (2026-06-27T09:00:00) the event is timed; a time with NO timezone is read in the Mac's LOCAL zone, append Z or an offset (2026-06-27T09:00:00Z, or +02:00) to pin it to UTC/another zone. Pass a bare DATE (YYYY-MM-DD) for BOTH start_date and end_date to create an ALL-DAY event. | |
| calendar_id | No | Calendar UUID from list_calendar_names (optional, defaults to default calendar) | |
| recurrence_count | No | Total number of occurrences (optional). Mutually exclusive with recurrence_until; if neither is given the event repeats indefinitely. | |
| recurrence_until | No | ISO 8601 date the repetition stops on (optional; takes precedence over recurrence_count). | |
| recurrence_interval | No | Repeat every N periods (optional, default 1 — e.g. recurrence='weekly' + recurrence_interval=2 = every 2 weeks). |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| end | No | |
| start | No | |
| title | No | |
| created | No | |
| recurrence | No | Present when the event repeats (human-readable summary) |
| attendees_note | No | |
| attendees_requested | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as a write operation (readOnlyHint=false) and non-destructive (destructiveHint=false), so the description doesn't need to restate mutation. It adds useful behavioral context: required fields, attendee constraints, recurrence options, and the M365 alternative. However, it fails to mention the `confirm` parameter's requirement (must be true to actually create the event), which is a notable omission from the description's 'requires' list.
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 three sentences, front-loaded with the primary action, and includes a cross-tool pointer. It is concise, information-dense, and free of 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?
The description covers the main use case and constraints, and with an output schema and full parameter documentation, it doesn't need to describe return values. However, it omits the `confirm` guardrail, which could lead to failed calls if the agent doesn't infer it from the schema. Given the tool's 13 parameters, a bit more context about this effective requirement would make it more 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 100%, so all 13 parameters are already well-documented in the schema. The description merely highlights that title, start_date, and end_date are required and mentions attendees/recurrence as optional, adding no new parameter-level semantics beyond what the schema provides.
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 opens with a specific verb+resource: 'Creates an event in the Mac's Calendar app (Calendar.app).' It also distinguishes itself from the sibling m365_create_event by explicitly redirecting Microsoft 365 users, 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 clearly states when to use the tool (for Mac's Calendar.app) and explicitly says 'For Microsoft 365 use m365_create_event instead,' naming the alternative. It also notes that attendees are only supported on CalDAV/Exchange calendars, providing a scope boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_draftCreate DraftAInspect
Saves an email to the Mail.app Drafts folder for the user to review and send manually — never sends. Composes a new draft (pass to/subject/body), or a reply draft (pass reply_to_message_id plus body). A reply draft's response includes threaded: true means the saved draft was read back and its headers reference the source message (it will appear inside the conversation); false means it saved WITHOUT threading headers (relay the warning to the user); "unconfirmed" means it could not be read back in time (e.g. Exchange sync lag). On a multi-account Mac, pass account (an account name from list_email_accounts) or from (a sender address) to place the draft in that account's Drafts; otherwise it lands in the default account. Attach files by passing attachments (comma-separated absolute file paths, e.g. a PDF quote) — they are attached to the saved draft. Use this for the cautious user who wants AI-composed mail but insists on sending it themselves. Requires confirm=true to actually save it — without it, returns a preview of the resolved recipient/sender, subject, and that the body will be saved, without touching Mail.app.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC address(es), comma-separated. | |
| to | No | Recipient address(es) for a new draft, comma-separated. Omit for a reply draft (uses reply_to_message_id). | |
| bcc | No | BCC address(es), comma-separated. | |
| body | No | Plain-text body of the draft. | |
| from | No | Sender address — on a multi-account Mac, selects which account's Drafts to use. Alternative to `account`. | |
| account | No | Account name (from list_email_accounts) whose Drafts folder receives the draft. Alternative to `from`. | |
| confirm | No | Must be true to actually save the draft. Without it, returns a preview of the recipient/sender, subject, and that the body will be saved. | false |
| subject | No | Subject line for a new draft. Ignored for reply drafts (they inherit the original subject). | |
| html_body | No | HTML body of the draft. Takes precedence over `body` when both are given. | |
| reply_all | No | For a reply draft, include all original recipients (reply-all) instead of just the sender. | false |
| attachments | No | Files to attach, as comma-separated absolute paths (e.g. a PDF). | |
| reply_to_message_id | No | Message id (from list_emails/search_emails) to draft a reply to, instead of a new message. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| from | No | |
| kind | No | |
| account | No | |
| subject | No | |
| attachments | No | |
| saved_draft | No | |
| attachments_failed | No | |
| reply_to_message_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations: it discloses that the tool never actually sends mail, requires confirm=true to save, returns a preview without touching Mail.app when confirm is false, and explains the reply-threading status values (true/false/unconfirmed). This rich behavioral disclosure is exactly what an agent needs for safe invocation, especially since annotations only indicate readOnlyHint=false and destructiveHint=false.
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 long but every clause carries necessary operational information: sending semantics, draft vs reply modes, reply confirmation semantics, account selection, attachments, target user, and the confirm flag. The most important differentiator — 'never sends' — is front-loaded, and the structure moves logically from core behavior to variants to invocation requirements.
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 complexity — 12 parameters, no required parameters, and two distinct modes — the description covers all the decisions an agent must make: which mode to use, which account to target, whether to include attachments, how to handle reply threading results, and the necessity of confirm=true. The presence of an output schema also means return-value details do not need to be fully restated, so nothing essential 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?
Although the schema already documents all 12 parameters (100% coverage), the description adds meaningful compositional guidance: how reply_to_message_id pairs with body, how account/from select the destination Drafts folder, how attachments expect comma-separated absolute paths, and the semantic meaning of the threaded reply response. This adds real value beyond the raw schema descriptions.
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 saves an email to Mail.app's Drafts folder and explicitly notes 'never sends' — a strong verb+resource statement that differentiates it from send_email and reply_email. It also distinguishes two modes (new draft vs reply draft), so an agent can select it without ambiguity.
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 an explicit use case: 'Use this for the cautious user who wants AI-composed mail but insists on sending it themselves.' It also explains the confirm=true requirement and preview behavior. It does not explicitly name send_email as the alternative when automatic sending is desired, so the guidance is clear but not exhaustive about alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_email_folderCreate Email FolderAInspect
Creates a new mailbox folder in Mail.app.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Folder name | |
| account | No | Account name (optional, uses default) | |
| confirm | No | Must be true to create |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| created | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint=false, destructiveHint=false) by indicating a write operation that is not destructive. It adds the context that it targets Mail.app specifically, but it does not disclose that the 'confirm' parameter must be true or mention any side effects beyond folder creation.
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, focused sentence that front-loads the core action and resource. It contains zero filler or 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 simple creation tool with full schema coverage and an output schema, the description provides sufficient context. It could mention the confirm requirement or account behavior, but those are already captured in the schema, and no return-value explanation is needed due to the 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 100%, so the input schema already describes all three parameters clearly. The description adds no additional parameter-level detail, which is acceptable given the high schema coverage, but it does not compensate for any gaps either.
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 ('Creates') with a specific resource ('new mailbox folder') and scopes it to 'Mail.app'. This clearly distinguishes it from sibling tools like list_email_folders and move_email.
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, such as list_email_folders to inspect existing folders or move_email to manage messages. There is no mention of prerequisites, duplicate handling, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_noteCreate NoteAInspect
Creates a new note in Apple Notes. The body accepts Markdown (headings, bold/italic, bullet/numbered lists, links, inline code) — it's converted to Apple Notes' native formatting. Requires confirm=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| name | Yes | ||
| folder | No | ||
| confirm | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| created | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description adds valuable behavioral context: Markdown conversion to native formatting and the requirement of confirm=true to execute. This communicates important execution conditions and output transformation not present in structured metadata.
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: the main purpose is stated first, followed by the most important behavioral detail (Markdown support) and the key execution requirement (confirm=true). Every sentence adds value 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?
The description covers the core action, important parameter semantics (body/confirm), and a key execution condition. With an output schema present, return values don't need description. The folder parameter is not explained, but overall the description is adequate for a creation tool with this complexity.
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 0% schema description coverage, the description compensates partially by explaining the body parameter's Markdown support and the confirm parameter's required value. However, it does not add meaning for the 'name' and 'folder' parameters, leaving gaps in parameter understanding.
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 starts with a specific verb+resource pair ('Creates a new note in Apple Notes'), clearly distinguishing this from sibling tools like update_note, list_notes, and create_reminder. It precisely identifies the target application and the action performed.
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 context for when to use this tool by specifying it creates notes in Apple Notes and supports Markdown formatting. It does not explicitly name alternatives or state when not to use it, but the context is sufficient for an agent to select it over similarly named tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_omnifocus_taskCreate OmniFocus TaskADestructiveInspect
Creates a new task in OmniFocus. Requires confirm=true to execute.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The task title. | |
| note | No | Longer note/body for the task. | |
| confirm | No | Must be true to create; called without it, returns a preview. | |
| flagged | No | Create the task flagged. | false |
| project | No | Project to file the task under (name). Omit for the inbox. | |
| due_date | No | Due date, ISO 8601 (YYYY-MM-DD or full timestamp). | |
| defer_date | No | Defer/start date, ISO 8601 — the task stays hidden until then. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| created | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already indicate destructiveHint=true and readOnlyHint=false, the description adds a valuable behavioral detail: 'Requires confirm=true to execute' and 'called without it, returns a preview.' This discloses the safety mechanism and preview behavior, which is not captured by 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, front-loaded with the primary action and then a critical constraint. No unnecessary words, perfectly concise.
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 complete schema (all params documented) and presence of an output schema, the description covers the essential behavioral aspect (confirm requirement) and is fully sufficient for an AI agent to select and invoke the tool correctly. No critical 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?
The input schema has 100% coverage with descriptions for all 7 parameters, so the baseline is 3. The description adds no extra parameter semantics beyond what is already in the schema; the confirm parameter is fully described in 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 'Creates a new task in OmniFocus' with a specific verb and resource, clearly distinguishing it from sibling tools like complete_omnifocus_task, list_omnifocus_tasks, and search_omnifocus_tasks. It precisely conveys the action and target, leaving no ambiguity.
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 context for use by stating it creates a task, and highlights the confirm=true requirement, which is a critical execution condition. It does not explicitly discuss alternatives, but the self-explanatory name and the presence of dedicated sibling tools make the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_referral_invitesCreate Referral InvitesAInspect
Records referral invites for the colleagues a user chose to invite and returns a unique referral link per person, so the user can later see who installed or activated LMCP. It does not send anything itself — each returned link can be included in an email or message to that person. lang records the language the invite is written in (e.g. "es", "en").
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | ISO language of the invite you're writing (the user's conversation language, e.g. 'es', 'en'). Defaults to the Mac's language. | |
| recipients | Yes | The picked recipients. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | |
| invites | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only operation with no destructive hint, and the description adds valuable behavior context: the tool records invites and returns links but does not actually send anything. This clarifies side effects and what the caller must do next, which is useful beyond the structured annotation.
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 three sentences, each earning its place: purpose/outcome, non-sending caveat, and param clarification. It is front-loaded with the most important information and contains 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 create-and-return tool with a full input schema and output schema, the description is complete. It covers what is recorded, what is returned, how the return value should be used, and one parameter's meaning. This is sufficient for an agent to select and invoke 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 100%, so the description only needs to add supplementary meaning. It clarifies the purpose of 'lang' ('records the language the invite is written in'), which slightly reinforces the schema, but it does not significantly extend parameter understanding beyond what the schema already provides.
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 ('Records') and a clear resource ('referral invites'), and explains the output (unique referral link per person). It clearly distinguishes this create/record tool from siblings like list_referral_candidates by focusing on recording invited colleagues.
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: it is for colleagues the user chose to invite, and it explicitly notes that it does not send anything, so the returned links can be included in emails or messages. It does not name explicit alternatives or when-not-to-use conditions, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminderCreate ReminderBInspect
Creates a reminder in Reminders.app.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | Notes (optional) | |
| title | Yes | Reminder title | |
| confirm | No | Must be true to create | |
| due_date | No | ISO 8601 date (optional) | |
| priority | No | Priority: none | low | medium | high (optional) | |
| list_name | No | Reminder list name (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral context beyond the annotations. Annotations indicate readOnlyHint=false and destructiveHint=false, which already imply a non-read-only write operation. The description merely restates the action without disclosing side effects like the need to set confirm=true or the default list 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?
The description is a single concise sentence with no wasted words. It is front-loaded and immediately communicates the core action.
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 description is extremely minimal for a tool with 6 parameters and a confirm flag. It omits important usage context such as the confirm requirement and how list_name determines which list receives the reminder. The output schema exists, so return values are not required, but behavioral prerequisites and edge cases are 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 100%, so the schema fully documents all parameters. The description itself adds no parameter detail, so the baseline score 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 tool creates a reminder in Reminders.app, using a specific verb and resource. It distinguishes from sibling tools like create_reminder_list, complete_reminder, and delete_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 provided on when to use this tool versus alternatives such as update_reminder or complete_reminder. There is no mention of prerequisites, list selection, or the confirm requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_reminder_listCreate Reminder ListAInspect
Creates a new list in Apple Reminders (Reminders.app). Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new reminder list | |
| confirm | No | Must be true to create |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a non-read-only, non-destructive mutation. The description adds the confirm constraint, which is useful, but lacks details on side effects, permissions, or behavior beyond creation.
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?
Extremely concise, two sentences with no wasted words. The purpose is front-loaded and immediately clear.
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 an output schema and full parameter schema coverage, the description is adequate but does not address prerequisites (e.g., Reminders.app access) or error scenarios. Lacks differentiation from create_reminder.
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%, and the description does not add beyond what the schema provides. The confirm requirement is redundant with the parameter's 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 clearly states the tool creates a new list in Apple Reminders and requires confirm=true. It specifies the target app and distinguishes from sibling tools like delete_reminder_list.
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 mentions the confirm requirement but does not provide guidance on when to use this tool versus alternatives like create_reminder or list management tools. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
daily_briefDaily BriefARead-onlyInspect
Returns a single morning briefing combining today's calendar events, overdue and due-today reminders, unread inbox email count + subjects, and — when a location is provided — today's weather. Perfect for starting each day: one call gives you everything on your plate.
| Name | Required | Description | Default |
|---|---|---|---|
| location | No | Optional city name or 'lat,lon' to include today's weather in the brief (e.g. 'London', 'San Francisco'). Omitted if not provided. | |
| include_emails | No | Include unread email summary from Mail.app (default true, skipped gracefully if Mail is not running) |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | Today's date (YYYY-MM-DD). |
| note | No | Onboarding enrichment shown when nothing is scheduled. |
| emails | Yes | Unread email summary (unread_count + recent_unread), or {skipped} / {error}, or null when not requested. |
| events | Yes | Today's calendar events. |
| weather | No | Today's weather (current conditions + forecast), only present when a location was provided. |
| reminders | Yes | Reminders due today or overdue. |
| incomplete | No | Sections that could NOT be read this time (each step has its own ceiling). An empty/absent list means every section was actually read; a section named here means its data is missing, NOT that it is empty. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds value by disclosing that including weather is conditional on providing a location and that email integration is gracefully skipped if Mail.app is not running. This provides behavioral context beyond 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?
The description is extremely concise with two sentences. The first lists the data sources, and the second gives the usage recommendation. Every word earns its place; there is no fluff or repetition.
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 aggregates multiple sources, has an output schema, and is read-only, the description covers most aspects: what data is included, the optional weather condition, and graceful handling of missing Mail. It is slightly incomplete in not describing behavior when no events/reminders exist, but the output schema likely handles that. Overall very good.
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%, so the baseline is 3. The description does not add any additional parameter meaning beyond what the schema already provides; it merely restates the parameter descriptions when it mentions location for weather. It does not elaborate on the include_emails 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?
The description clearly states the tool returns a 'morning briefing' combining four specific data sources: today's calendar events, overdue and due-today reminders, unread email summary, and optional weather. This distinguishes it from individual data retrieval tools (e.g., list_calendar_events, get_weather) by presenting it as an aggregate, single-call solution for a morning overview.
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 recommends using this tool 'for starting each day' and notes it is 'perfect' for getting everything on your plate in one call. While it doesn't explicitly say when not to use it or name alternative tools for deeper dives, the usage context is clear and well-defined for its aggregate purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_calendar_eventDelete Calendar EventADestructiveInspect
Deletes an event from the Mac's Calendar app (Calendar.app) by ID. Requires confirm=true. For a repeating event, pass span='future' to delete the whole series (this and all following occurrences); the default deletes only the single occurrence. For Microsoft 365 use m365_delete_event instead.
| Name | Required | Description | Default |
|---|---|---|---|
| span | No | For a recurring event: 'this' (default — only this occurrence) or 'future' (this and all following occurrences). Ignored for non-recurring events. | |
| confirm | No | Must be true to delete | |
| event_id | Yes | Event identifier from list_calendar_events |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds critical behavioral details: the confirm requirement, the distinction between deleting a single occurrence vs. the whole series with span='future', and the default behavior. This transparently discloses the destructive scope beyond what 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?
The description is three sentences, each with a distinct purpose: the primary action, the critical confirm requirement, the recurring-series nuance, and the alternative for M365. It is front-loaded and every sentence earns its place without fluff.
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 destructive nature and the complexity of recurring events, the description fully covers the necessary context: the target app, the mandatory confirm flag, the span behavior, and the M365 alternative. With an output schema present and detailed annotations, 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 description coverage is 100%, so the baseline is 3. The description reinforces key parameter behaviors (confirm must be true, span='future' deletes the series) but adds little new beyond what the schema already states. It provides no additional parameter details not already present in the input 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 ('Deletes an event'), the target resource ('Mac's Calendar app (Calendar.app)'), and the method ('by ID'). It also explicitly differentiates from the Microsoft 365 alternative, making the tool's scope 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 explicit usage guidance: confirm=true is required, span='future' is used for recurring series deletion, and it directly names the alternative tool (m365_delete_event) for Microsoft 365. This makes when-to-use and when-not-to-use very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_noteDelete NoteADestructiveInspect
Deletes a note from Apple Notes, by ID or exact title. Like deleting it in the app, the note goes to "Recently Deleted" and Apple purges it after 30 days — the user can still recover it there. Requires confirm=true. The result is VERIFIED: the tool re-reads the note after deleting and reports the deletion as unverified if it is still where it was, so a success here means the note is really gone from list_notes/search_notes/read_note. Find note_id with list_notes or search_notes.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| note_id | No | The note's id, as list_notes/search_notes report it. | |
| note_name | No | Exact title, when you don't have the id. If several notes share it, the first match is deleted — prefer note_id. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| deleted | No | True only when the deletion was VERIFIED by re-reading the note |
| in_trash | No | The note moved to Recently Deleted (Apple purges it after 30 days) rather than vanishing outright |
| verified | No | The note was re-read after deleting and is no longer where it was |
| folder_after | No | Where it ended up (present when it moved instead of vanishing) |
| next_actions | No | |
| folder_before | No | The folder the note was in before deleting |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses the soft-delete behavior (Recently Deleted, 30-day purge, recoverable), the confirmation requirement, and the post-delete verification step that re-reads the note. This gives the agent a strong model of side effects and success semantics.
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 dense sentences, each adding new information: the core action, the recovery behavior, the verification guarantee, and how to obtain the ID. There is no filler or repetition of the title 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?
The description covers the destructive side effect, recovery window, confirmation flag, verification behavior, and lookup method. With an output schema present, the agent has everything needed to invoke delete_note correctly and interpret its result.
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 adds meaningful detail beyond the schema: confirm must be true, note_id is obtainable from list_notes/search_notes, and note_name matches exact titles with first-match behavior and a preference for note_id. It covers both parameters that lack detailed schema descriptions and adds useful context to the one that has 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?
The description states a specific verb ('Deletes') and resource ('a note from Apple Notes'), and clarifies the two modes of identification (ID or exact title). This clearly distinguishes delete_note from siblings like update_note, create_note, read_note, and list_notes.
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 concrete when-to-use guidance: it requires confirm=true, explains how to find the note_id via list_notes or search_notes, and warns to prefer note_id when titles are ambiguous. It does not explicitly list alternatives or when not to use this tool, but the context is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reminderDelete ReminderADestructiveInspect
Permanently deletes a reminder in Apple Reminders (Reminders.app) by ID. Get the reminder_id from list_reminders. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to delete | |
| reminder_id | Yes | Reminder identifier from list_reminders |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the destructiveHint=true annotation with 'Permanently deletes' and adds a mandatory confirmation guard ('Requires confirm=true'). This is valuable behavioral context beyond the annotations, though it does not detail failure modes or 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 concise sentences, each adding distinct value: the action and target, the ID source, and the confirmation requirement. 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 simple destructive operation with a complete schema and output schema present, the description adequately covers the target, ID source, and confirmation gate. It could mention irreversibility more explicitly, but 'permanently deletes' already covers 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?
The schema already covers both parameters fully (reminder_id as identifier from list_reminders, confirm as boolean that must be true), giving 100% schema description coverage. The description mostly restates this information, adding no new parameter-level detail.
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 ('Permanently deletes') and target resource ('a reminder in Apple Reminders by ID'). It also tells the agent where to get the required identifier, distinguishing it from related tools like update_reminder, complete_reminder, and delete_reminder_list.
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 concrete execution guidance: retrieve reminder_id from list_reminders and set confirm=true. It does not explicitly compare with alternatives or list exclusions, but the delete semantics are unambiguous given the sibling tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_reminder_folderDelete Reminder FolderADestructiveInspect
Deletes an Apple Reminders list AND all reminders inside it — cannot be undone. Pass the list name (or list_id from get_reminder_folders). Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | List name to delete (or pass list_id) | |
| confirm | No | Must be true to delete | |
| list_id | No | List identifier from get_reminder_folders (alternative to name) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, but the description adds significant context: it explicitly says 'cannot be undone' and that all reminders inside are deleted, which goes beyond just 'destructive'. It also specifies the confirmation requirement, making the irreversible behavior transparent. No contradiction with annotations exists.
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 that front-load the action and critical warning, then provide usage details. Every clause adds value: what gets deleted, irreversibility, how to identify the target, and the confirmation gate.
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 presence of an output schema, the description doesn't need to explain return values. It covers purpose, scope, irreversibility, identifier options, and confirmation requirement. It lacks only edge-case behavior like conflicting name and list_id, but those are outside typical expectations.
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 already provides 100% coverage for all three parameters. The description reinforces the relationship between name and list_id as alternatives and points to get_reminder_folders as the source for list_id, adding a small sourcing hint. However, it mostly repeats schema information, so it meets but doesn't exceed the baseline for schema-covered params.
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 Apple Reminders list and all reminders within it, using a specific verb and resource. It distinguishes itself from sibling delete_reminder by emphasizing the cascading deletion and irreversibility.
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 context: this deletes an entire list, not just a single reminder, and cannot be undone. It instructs the agent to pass a name or list_id (sourced from get_reminder_folders) and requires confirm=true. While it doesn't explicitly name alternative tools like delete_reminder, the cascade warning implies when this is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_m365_accountDisconnect Microsoft 365 AccountAInspect
Disconnect your Microsoft 365 account and remove stored tokens.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral trait: it disconnects an account and removes tokens. With annotations providing no further behavioral hints (readOnlyHint=false, destructiveHint=false), the description adequately conveys the state change.
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 concise sentence (10 words) that front-loads the purpose. 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?
The description completely covers the tool's purpose and effect for a simple action with no parameters. An output schema exists but is not needed 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?
The tool has zero parameters, so schema coverage is 100%. The description adds no parameter information, but none is needed. Baseline for 0 params 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?
The description clearly states the action ('Disconnect your Microsoft 365 account') and the effect ('remove stored tokens'), distinguishing it from sibling tools like 'connect_m365_account'.
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 (when you want to disconnect) but does not provide explicit guidance on when to use or not use this tool versus alternatives. No exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_todoistDisconnect TodoistAInspect
Disconnect Todoist and remove the stored API token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| message | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, and the description adds valuable behavioral detail by stating that the stored API token will be removed. This goes beyond the annotations to disclose the specific side effect, though it does not elaborate on further consequences.
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 sentence, front-loaded with the action, and contains no filler words. It is maximally concise while conveying the core purpose.
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 tool with a non-destructive, non-read-only annotation and an output schema present, the description sufficiently explains the tool's purpose and effect. No further behavioral detail is necessary.
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 description cannot add parameter-specific meaning. The baseline of 4 for zero-parameter tools applies, and the description provides a clear action statement that compensates for the absence of parameter context.
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 'disconnect' with the resource 'Todoist' and clarifies the action by adding 'remove the stored API token.' This clearly distinguishes it from the sibling connect_todoist.
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 usage guidance or alternatives are provided. The context implies this tool should be used when the user wants to disconnect Todoist and remove its stored token, but there is no explicit when-to-use or 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.
excel_createExcel CreateAInspect
Creates a new Excel spreadsheet (.xlsx file) with headers and optional data rows. Values that are plain numbers are written as numbers, so SUM() and charts work on them; anything else stays text: "007" or "1.50" (whose zeros would be lost), and any run of more than 10 digits without a decimal point, which is an identifier like a CUIT, CBU or phone number rather than a quantity.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Output path for the .xlsx file | |
| rows | No | Array of row arrays with data (optional) | |
| confirm | No | Must be true to create | |
| headers | Yes | Column headers |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Path of the created .xlsx file |
| rows | Yes | Number of data rows written |
| created | Yes | True when the file was created |
| headers | Yes | Column headers written |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only convey readOnly=false, openWorld=false, destructive=false. The description adds a genuinely non-obvious behavioral disclosure: automatic type coercion where plain numbers stay numeric for SUM()/charts, while '007', '1.50', and >10-digit identifiers are preserved as text to avoid data loss. This is exactly the kind of trait that prevents silent data corruption and goes well beyond what annotations or the schema communicate.
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 with the core purpose front-loaded in the first. The second sentence is long but every clause earns its place by explaining the coercion rules with concrete examples; trimming it would sacrifice genuinely decision-relevant 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?
The tool has an output schema, so return values need no description. The description covers the core creation behavior and the trickiest edge cases (type coercion). The one gap is overwrite behavior for existing files at the target path, which is not disclosed; the confirm gate and destructiveHint=false partially mitigate this, but an explicit statement would make it 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 100%, so the baseline is 3. The description earns a 4 by adding real meaning to the 'rows' parameter: it explains how values will be interpreted at write time (numbers vs text, leading zeros, long digit runs), which the schema's terse 'Array of row arrays with data' does not convey. Path, headers, and confirm remain schema-described, which is acceptable.
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 ('Creates a new Excel spreadsheet (.xlsx file)') plus scope ('with headers and optional data rows'). The word 'new' and 'creates' naturally distinguish it from siblings excel_read and excel_write_cell, so an agent can tell them apart without opening 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 context is implied rather than explicit: 'Creates a new' signals this is for initial file creation, not modifying existing files. However, the description never names alternatives like excel_write_cell or states a when-to-use versus when-not-to-use rule, leaving the routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_readExcel ReadARead-onlyInspect
Reads data from an Excel spreadsheet (.xlsx file). Returns the first row as headers and the remaining data rows as rows — mirroring excel_create's headers/rows params, so a read→create round-trip needs no manual row-0 handling.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the .xlsx file | |
| max_rows | No | Max rows to return (default 100) | |
| sheet_name | No | Sheet name to read (optional, reads first sheet) |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | Data rows AFTER the header row (each an array of cell-value strings) — feeds straight into excel_create's `rows` |
| count | Yes | Number of DATA rows returned (excludes the header row) |
| sheet | Yes | Name of the sheet that was read |
| sheets | Yes | All sheet names in the workbook |
| headers | Yes | The first row, as column headers — mirrors excel_create's `headers` param |
| sparse_cells | No | Present only when the sheet has cells far outside the table (beyond column 64): each is {row, col, value} with REAL 1-based indices. Kept out of `rows` so one stray cell can't pad every row — but never dropped. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds meaningful behavioral detail: the exact return structure (first row as headers, remaining as rows) and its compatibility with excel_create's parameter shape. This goes beyond what annotations provide, though it does not discuss edge cases or error 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?
The description is two sentences, front-loaded with the primary action and file type, and each sentence earns its place. It conveys purpose, return format, and a practical integration tip without any fluff. This is a model of 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?
With a rich output schema and full schema coverage for parameters, the description only needs to cover behavior, which it does efficiently. It explains the round-trip relationship with excel_create, which is valuable context. It could mention default sheet behavior, but the schema already states 'reads first sheet', so the description remains 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 description coverage is 100%, with clear descriptions for path, max_rows, and sheet_name. The description adds no new parameter-level semantics beyond what the schema already documents; it only explains the result structure (headers/rows), not parameter details. Thus the baseline 3 is appropriate because the schema carries the burden.
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 opens with a specific verb and resource: 'Reads data from an Excel spreadsheet (.xlsx file).' It clearly distinguishes itself from siblings like excel_create and excel_write_cell by focusing on reading and returning headers/rows. The explicit mirroring of excel_create's params also reinforces its unique role in read→create round-trips.
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 when to use this tool: when you need to read an Excel file, especially to later create one via excel_create. It mentions the round-trip use case, providing context beyond the schema. However, it does not explicitly exclude alternatives like file_read or explain when not to use it, so a small gap remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
excel_write_cellExcel Write CellAInspect
Writes a value to a specific cell in an Excel file. Address the cell either with cell in A1 notation (e.g. "B2") or with row+column as 1-based integers.
| Name | Required | Description | Default |
|---|---|---|---|
| row | No | Row number (1-based) — use with `column`, or use `cell` instead | |
| cell | No | Cell in A1 notation, e.g. "B2" (alternative to row+column) | |
| path | Yes | Path to the .xlsx file | |
| value | Yes | Value to write | |
| column | No | Column number (1-based) — use with `row`, or use `cell` instead | |
| confirm | No | Must be true to modify | |
| sheet_name | No | Sheet name (default: first sheet) |
Output Schema
| Name | Required | Description |
|---|---|---|
| col | Yes | Column that was written (1-based) |
| row | Yes | Row that was written (1-based) |
| value | Yes | Value written to the cell |
| written | Yes | True when the cell was written |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, indicating this is a write operation. The description doesn't add detail about whether the file is created if missing, whether overwriting existing values occurs, or what happens with invalid addresses. The mention of two addressing alternatives is useful but not deep behavioral context. 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?
Two concise sentences that immediately state the action and the key usage flexibility. Every clause earns its place—no filler, no redundancy with 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?
The tool has an output schema and 100% parameter coverage, so the description doesn't need to explain return values. It adequately covers the dual addressing modes and the sheet default. For a mutation tool with a confirm flag, slightly more guidance on the confirm behavior could help, but the description is reasonably complete given the richness of the annotations and 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 coverage is 100%, so all 7 parameters already have descriptions. The description adds value by explaining the dual addressing modes (cell vs row+column) and that sheet_name defaults to the first sheet, complementing the schema. The confirm parameter's requirement is stated in the schema but could benefit from more emphasis in 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?
The description uses a specific verb+resource combination ('Writes a value to a specific cell in an Excel file'), clearly distinguishing this from siblings like excel_create and excel_read. However, it doesn't explicitly differentiate from other mutation tools or note what makes it distinct beyond the basic resource and action.
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 clearly explains the two addressing modes (cell notation vs row+column integers) and when each applies. It also mentions the confirm flag requirement implicitly through the schema. It doesn't explicitly exclude alternatives like excel_read or state when NOT to use it, but the addressing guidance is genuinely useful for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_listFile ListARead-onlyInspect
Lists files and folders in a local directory. Defaults to the user's home directory. Returns name, path, type (file/directory), size, and modification date for each item. Sorted: directories first, then files, both alphabetically.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to the directory. Defaults to the home directory (~) if omitted. | |
| show_hidden | No | Include hidden files (starting with '.'). Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
| dirs | No | |
| path | No | |
| count | No | |
| files | No | |
| items | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive behavior, and the description adds useful behavioral context: default path, inclusion of hidden files option, and deterministic sort order. It doesn't cover edge cases like permission errors, but given annotation coverage, this is adequate.
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 front-load the core purpose, then add return fields, default behavior, and sorting. Every word earns its place with no redundancy or fluff.
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 two optional parameters and an output schema, the description is fully complete. It covers default path, return fields, and ordering, leaving no important gaps for an agent 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 description coverage is 100%, so the schema already documents both parameters and their defaults. The description repeats the default behavior but adds no new parameter meaning beyond what's in the schema, matching the baseline for high schema coverage.
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 'Lists' and the resource 'files and folders in a local directory', with explicit scope (local) that distinguishes it from cloud-based list tools. It also enumerates the return fields and sort order, 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 clearly identifies the tool as listing local directory contents and defaults to the home directory, providing enough context for an agent to choose this tool for local filesystem listing. However, it does not explicitly name alternatives or state when not to use it, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_readFile ReadARead-onlyInspect
Reads a plain text file from the local filesystem by its absolute path — the primary, default tool for reading a local text file (use this unless the file is a PDF, Word, Excel, or PowerPoint document, which have their own readers). The path must be inside an allowed folder — the same allowlist as file_write (the home directory by default; extend via Settings → Advanced → Allowed folders). A path outside the allowlist returns an actionable 'access denied' naming the allowed folders. Supports .txt, .md, .csv, .json, .xml, .log, .yaml, .toml and common code file types; auto-detects UTF-8 with Latin-1/Windows-1252 fallback. For files in OneDrive use onedrive_read_file, in Google Drive gdrive_read_file; for PDFs pdf_read, Word word_read, Excel excel_read.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file | |
| offset | No | Start reading at this byte offset (default 0) | |
| max_bytes | No | Maximum bytes to read (default 1 MB, max 10 MB) |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Resolved absolute path of the file |
| bytes | Yes | Total file size in bytes |
| offset | No | Byte offset the read started at |
| content | Yes | Decoded file text content |
| encoding | No | Encoding used to decode (utf8 | cp1252 | latin1) |
| truncated | No | True if more content remains beyond what was returned |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint/destructiveHint, the description discloses access-control behavior (allowed folder allowlist, actionable 'access denied' message), supported file types, and encoding auto-detection with fallback. This adds significant behavioral context not inferable 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?
Every sentence serves a purpose—purpose, exclusions, path constraints, supported types, encoding, and alternative tool pointers—without redundancy. It is dense but well organized 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?
With a high-quality schema and annotations, the description covers purpose, usage boundaries, access control, file-type limits, encoding nuances, and clear alternatives, making it fully self-sufficient for an agent.
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%, and the description reinforces that path is absolute and inside an allowed folder, but does not add meaning to offset/max_bytes beyond their schema descriptions. Baseline 3 applies because the schema already documents these 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+resource ('Reads a plain text file from the local filesystem by its absolute path') and explicitly distinguishes from sibling readers by noting it is the default for local text files, with alternatives for PDF/Word/Excel and cloud storage.
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?
Explicitly says 'use this unless the file is a PDF, Word, Excel, or PowerPoint document' and names alternatives like onedrive_read_file, gdrive_read_file, pdf_read, word_read, excel_read. Also defines the allowed-folder prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_searchFile SearchARead-onlyInspect
Searches for files and folders by name (case-insensitive, partial match) starting from a root directory. Defaults to the home directory. Returns matching items with path, type, and size.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Root directory to search from. Defaults to home directory (~). | |
| query | Yes | Filename pattern to search for (partial, case-insensitive) | |
| file_type | No | Filter by extension, e.g. 'pdf', 'docx', 'xlsx'. Omit for all types. | |
| max_results | No | Maximum number of results to return. Default 50, max 200. |
Output Schema
| Name | Required | Description |
|---|---|---|
| root | No | |
| count | No | |
| query | No | |
| results | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint false, so the safety profile is known. The description adds valuable behavioral details: case-insensitive partial matching, root default, and returned fields (path, type, size), which go beyond the structured 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 clear sentences front-load the main action and key parameters. No unnecessary words; every clause adds valuable 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?
Given the full schema coverage and the presence of an output schema, the description is complete: it states the search behavior, defaults, and return types. The max_results and file_type filters are documented in the schema, so they need not be repeated 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 100%, so parameters are fully documented. The description repeats some schema info (case-insensitive, partial, home default) but does not add significant extra 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?
Description uses a specific verb ('Searches') with a concrete resource ('files and folders by name') and scope ('starting from a root directory'), while defining case-insensitive partial matching and output fields. This clearly distinguishes it from sibling tools like file_list or cloud-specific search 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 clear context on how to use the tool (search by name, root directory defaults to home) and what results are returned. It does not explicitly name alternative tools or exclusions, but the local-file-context is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
file_writeFile WriteAInspect
Writes text to a local file — create, overwrite, or append. For .txt/.md/.csv/.json/.log and any plain-text or code file. (For Word use word_create, Excel excel_create, PowerPoint ppt_create.) The path must be inside an allowed folder — the same allowlist as file_read (home directory by default; extend via Advanced Settings → Allowed folders). Overwriting an existing file requires confirm=true (the first call returns a preview instead); append=true adds to the end and never needs confirm. Missing parent folders are created.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file to write | |
| append | No | Append to the end instead of overwriting (default false) | |
| confirm | No | Required (true) to OVERWRITE an existing file. Not needed to create a new file or to append. | |
| content | Yes | Text content to write |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the sparse annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=false) by disclosing critical behaviors: overwrite requires confirm=true with a preview-first flow, append never requires confirm, missing parent folders are auto-created, and the path must be in an allowed folder. These are essential safety and execution details that the annotations do not convey. No contradiction with annotations is present.
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 dense but well-organized, front-loading the core function and then systematically covering file types, alternatives, path restrictions, overwrite/append behavior, and folder creation. Every sentence adds necessary information, and the parenthetical for alternatives is efficient. 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?
Given the tool's moderate complexity (4 params, no enums, output schema present), the description covers all essential context: file types, alternatives, safety confirm flow, append semantics, path allowlist, and auto-creation of parent folders. The existence of an output schema means return-value details are not needed. This is a complete, self-contained description.
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?
Input schema already covers all 4 parameters at 100% coverage, so the baseline is 3. The description adds valuable parameter interplay: confirm is only needed for overwrite, append bypasses confirm, and content is treated as plain text. This enriches the schema descriptions, though not exhaustively (e.g., no examples of path format), so a 4 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's purpose: 'Writes text to a local file — create, overwrite, or append.' It identifies the resource (local file), the specific verb (write), and scope (create/overwrite/append). It also distinguishes itself from sibling tools for Word, Excel, and PowerPoint by explicitly naming alternatives, leaving no ambiguity.
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 guidance is explicit and actionable. The description gives the when: for plain-text or code files, and the when-not: for Word, Excel, and PowerPoint, with specific alternative tool names. It also specifies path restrictions (same allowlist as file_read) and how to extend them, leaving no doubt about when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finder_listFinder ListARead-onlyInspect
Lists files and folders in a directory (Spotlight-free). The path must be inside an allowed folder — the same allowlist as file_read/file_write (the home directory by default; extend via Settings → Advanced → Allowed folders). A path outside the allowlist returns an actionable 'access denied' naming the allowed folders.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Absolute path to list (default: ~) | |
| limit | No | Max items (default 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| path | No | |
| count | No | Items returned in this response. |
| items | No | |
| total | No | Total items when the listing was truncated. |
| truncated | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the bar for transparency is lower. The description adds valuable behavioral context: it is Spotlight-free, paths are restricted to an allowlist, and access denied errors name the allowed folders. This goes beyond the annotations without contradicting them.
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, front-loaded with the main purpose, and every clause adds useful information (Spotlight-free, allowlist, error behavior). No redundant or filler 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?
Given the simple nature of the tool, the rich annotations, and the presence of an output schema, the description is largely complete. However, the sibling list includes file_list and finder_search, and the description does not clarify how finder_list differs from these similar tools, leaving some potential for selection ambiguity.
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% and both parameters have clear descriptions with defaults ('path' default ~, 'limit' default 100). The tool description adds no additional parameter semantics beyond the schema, so the baseline score of 3 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 files and folders in a directory with the parenthetical 'Spotlight-free' adding a distinguishing characteristic. It does not explicitly differentiate from the sibling tool file_list, which likely performs a similar filesystem listing, 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 description provides clear operational context: the path must be inside the allowed folder and paths outside it yield an actionable access denied error. However, it does not explicitly state when to use this tool over alternatives like file_list or finder_search, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finder_searchFinder SearchARead-onlyInspect
Searches for files by name within the allowlist (uses mdfind/Spotlight). Scoped to the allowed folders — the home directory by default (extend via Settings → Advanced → Allowed folders); pass path= to search a specific allowed folder. A path outside the allowlist returns an actionable 'access denied'.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Limit search to this directory (optional) | |
| limit | No | Max results (default 50) | |
| query | Yes | Filename or content to search for |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| query | Yes | |
| results | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses the use of Spotlight, the default home directory behavior, the ability to extend allowed folders, and the actionable 'access denied' error for paths outside the allowlist. This provides valuable behavioral context not captured by 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 three sentences long, front-loaded with the primary action, and every sentence adds value: purpose, scoping/default, and error behavior. There is no fluff or repetition of schema 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?
Given the presence of an output schema and annotations, the description covers the essential context: what it searches, how scoping works, and error behavior. It stops short of mentioning whether content search is included (schema says 'content' while description says 'by name'), a minor ambiguity, but overall it is complete for a read-only search 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?
All three parameters have schema descriptions (100% coverage), so the baseline is 3. The description adds meaningful semantics for the path parameter, explaining it restricts the search to a specific allowed folder and how out-of-scope paths are handled. It does not add detail for query or limit, but the schema already covers those adequately.
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 'Searches for files by name within the allowlist' and names the underlying mechanism (mdfind/Spotlight). It specifies the resource (files), the action (search), the scope (allowlist), and an implementation detail, effectively distinguishing it from sibling cloud searches like gdrive_search_files and onedrive_search_files.
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 context: it is scoped to allowed folders, defaults to the home directory, and can be limited to a specific folder via the path parameter. It explains how to extend the allowlist through Settings. It does not explicitly mention alternatives or when not to use it, but the context is sufficient for an agent to understand when it applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdrive_delete_fileGdrive Delete FileADestructiveInspect
Deletes a file or an empty folder from the synced Google Drive folder — Google Drive for Desktop syncs the deletion to the cloud (the item lands in Drive's trash). Deleting a .gdoc/.gsheet/.gslides pointer removes the real Google Doc/Sheet/Slides. Never deletes a folder that still has contents. First call returns a preview of what was actually found at that path; pass confirm=true to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path under a Google Drive mount (use gdrive_root / gdrive_list_files to get one) | |
| confirm | No | Must be true to actually delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| type | Yes | What was deleted: file, folder, or google_doc_pointer |
| deleted | Yes | True only when the folder listing no longer shows the item |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this destructive, but the description adds substantial context: cloud sync to Drive trash, pointer files removing real documents, refusal to delete non-empty folders, and the two-step preview/confirm flow. This goes well beyond the annotations and 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?
Three sentences, each carrying essential information: the core action, notable edge cases, and the confirmation workflow. No filler or redundant restatement of the tool 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?
The description covers the destructive nature, cloud sync implications, folder-content limitation, pointer behavior, and the required confirm step. With an output schema present, this is complete enough for an agent to invoke the tool correctly and safely.
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% and both parameters already have clear descriptions. The description adds meaningful operational detail by explaining that the first call is a preview and confirm=true is the actual deletion trigger, reinforcing the schema's 'Must be true' note.
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 opens with a specific verb and resource: 'Deletes a file or an empty folder from the synced Google Drive folder.' It also clarifies non-obvious behavior (pointer files deleting the real Google Doc) and distinguishes this from generic file deletion by scoping it to the Google Drive mount.
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 clearly states when deletion is allowed (file or empty folder) and when it is not (folders with contents). It does not explicitly name an alternative tool, but the Google Drive scope and the preview/confirm workflow make appropriate usage evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdrive_file_infoGdrive File InfoARead-onlyInspect
Metadata for a file/folder in the synced Google Drive: size, dates, type. Cheaper than listing the whole directory.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file or folder |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| path | No | |
| size | No | |
| type | No | |
| created | No | |
| modified | No | |
| size_human | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds the 'synced' context and a performance note, but does not detail return format or edge cases; output schema covers the return shape. This is minimal extra context, hence 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?
The description is one succinct sentence that front-loads the purpose and includes a useful cost comparison. No redundant words or 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 tool with one parameter, an output schema, and clear annotations, the description is complete. It states what is returned, the target resource, and a key differentiator, which is enough for correct selection and 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 100%: the single required 'path' parameter has a clear description. The description adds only a minor contextual note about the synced Google Drive, not materially expanding on the schema. Baseline 3 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 identifies the tool as returning metadata (size, dates, type) for a file/folder in the synced Google Drive, and it distinguishes itself from sibling tools by noting it is cheaper than listing the whole directory. This gives a specific resource and a differentiator.
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 implies when to use this tool: when you need metadata for a specific file/folder and want a cheaper alternative to listing a directory. However, it doesn't explicitly name sibling alternatives or provide exclusionary guidance, so it stops 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.
gdrive_list_filesGdrive List FilesARead-onlyInspect
Lists files and folders in a Google Drive path (the locally-synced folder). Use gdrive_root first for valid roots — 'My Drive' and 'Shared drives' live inside each mount. Returns up to limit entries (default 1000).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the Google Drive folder | |
| limit | No | Max entries (default 1000, max 5000) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| items | No | |
| total | No | |
| truncated | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description adds valuable context: it specifies the paths refer to the 'locally-synced folder' and that results are truncated to `limit` entries with a default of 1000. This gives the agent a more accurate behavioral model.
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 three sentences long: the first states the core action, the second provides a prerequisite, and the third details the limit bound. Every sentence earns its place, and the text is front-loaded, making it easy for an agent to parse quickly.
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 list tool with an output schema and read-only annotations, the description covers all essential aspects: what it lists, where (locally-synced folder), how to get valid paths, and the result limit. It is sufficiently complete without needing to explain return values since an 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?
The input schema fully describes both parameters (`path` and `limit`) with their types and limits. The description's mention of 'limit entries (default 1000)' simply restates schema information, adding no new semantic meaning. Since schema coverage is 100%, the baseline of 3 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's action ('Lists files and folders') and resource ('in a Google Drive path'). This distinguishes it from sibling tools like gdrive_search_files and gdrive_file_info, which serve different purposes.
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 a clear prerequisite ('Use gdrive_root first for valid roots') and clarifies path structure ('My Drive' and 'Shared drives' are inside each mount). It does not explicitly mention alternatives, but the usage context is clear enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdrive_read_fileGdrive Read FileARead-onlyInspect
Reads a text file from the synced Google Drive folder (.txt, .md, .csv, .json, code files...). Note: native Google Docs/Sheets/Slides sync as .gdoc/.gsheet pointers, not real files — export them from Drive or read Office/PDF copies instead. Auto-detects UTF-8 with Latin-1/CP1252 fallback. For files outside Google Drive, use file_read.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file | |
| offset | No | Start byte offset (default 0) | |
| encoding | No | 'auto' (default), 'utf8', 'latin1', 'cp1252', 'ascii', 'utf16' | |
| max_bytes | No | Max bytes (default 1MB, cap 10MB) |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Absolute path of the file |
| bytes | Yes | Total file size in bytes |
| offset | No | Byte offset the read started at |
| content | Yes | Decoded file text content |
| encoding | No | Encoding used to decode (utf8 | cp1252 | latin1 | ascii | utf16) |
| truncated | No | True if more content remains beyond what was returned |
| bytes_read | No | Number of bytes read in this slice |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds useful behavioral context: it auto-detects UTF-8 with Latin-1/CP1252 fallback, and warns about .gdoc/.gsheet pointer files. It does not contradict any annotation and enhances the agent's understanding of edge cases.
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 sentences, front-loaded with the main action, then important caveats, and closes with an alternative. Every sentence adds value with no waste.
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 presence of an output schema, complete parameter documentation, and read-only annotations, the description covers all essential aspects: file types, encoding behavior, Google Drive specifics, and when to use a different tool. The tool is simple, and the description leaves no major questions.
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 the schema fully documents all four parameters. The description's mention of auto-detected encoding aligns with the encoding parameter but adds no new syntax beyond the schema. This matches the baseline 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?
The description clearly states the tool 'Reads a text file from the synced Google Drive folder' with a specific verb, resource, and scope. It distinguishes itself from the sibling file_read by explicitly noting 'For files outside Google Drive, use file_read'.
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 explicit when-to-use (text files in the synced Google Drive folder) and when-not-to-use (native Google Docs/Sheets/Slides, which sync as .gdoc/.gsheet pointers). It also names an alternative (file_read) for files outside Google Drive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdrive_rootGdrive RootARead-onlyInspect
Lists the Google Drive folders synced on this Mac (My Drive, Shared drives, per-account mounts). Start here to get valid paths for the other gdrive_* tools. Reads the folder Google Drive for Desktop already syncs — no Google API, no OAuth.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| roots | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false; the description adds meaningful behavioral context by explaining it reads the locally synced folder and requires no Google API or OAuth. This clarifies mechanism and side-effect-free nature beyond the annotation flags.
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-load the core purpose, then add usage guidance and technical context. Every sentence contributes new information with no redundancy or 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?
This is a simple zero-parameter listing tool with an output schema and safe-read annotations. The description covers what is listed, the entry-point role, and the local/no-auth mechanism, which fully satisfies the context needed for an agent to select and invoke it.
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 schema (100% coverage) fully defines the input contract. The description appropriately adds no parameter details; the baseline of 4 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 opens with a specific action ('Lists') and a precise resource ('Google Drive folders synced on this Mac'), enumerating My Drive, Shared drives, and per-account mounts. It clearly distinguishes this tool from sibling gdrive_* tools by positioning it as the root/entry point for valid paths.
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 explicit context: 'Start here to get valid paths for the other gdrive_* tools,' and notes it reads the folder already synced by Google Drive for Desktop. It doesn't explicitly state when not to use it or name alternatives, but the intended sequencing is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdrive_search_filesGdrive Search FilesARead-onlyInspect
Searches the synced Google Drive folder for files by name (recursive). Returns up to max_results matches (default 50).
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Restrict to this Drive path (optional - defaults to all mounts) | |
| query | Yes | Filename pattern to search for | |
| max_results | No | Maximum results (default 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds valuable behavioral details beyond the annotations: it is recursive, returns at most max_results (default 50), and searches by name. This provides meaningful context about the tool's behavior without contradicting 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 a single, front-loaded sentence that immediately states the tool's purpose and key constraints. Every phrase earns its place: 'synced Google Drive folder,' 'by name (recursive),' and 'max_results matches (default 50).' There is zero 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?
Given that an output schema exists and annotations are present, the description does not need to explain return values or safety. It covers the essential action, scope, recursion, and result limiting. The only minor gap is that it does not clarify what 'the synced Google Drive folder' refers to (e.g., whether it searches all mounted Google Drives by default), but the root parameter and schema help fill that in.
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%, meaning all three parameters are already documented. The description adds no new parameter-level details beyond what the schema provides—it only reiterates the 'by name' and 'max_results' concepts. Since the schema carries the full load, a baseline score of 3 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 states a specific verb ('Searches'), a specific resource ('the synced Google Drive folder'), and the scope ('by name (recursive)'). This clearly distinguishes it from sibling tools like gdrive_list_files or gdrive_read_file. The purpose is unambiguous and immediately understandable.
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 its usage context: searching for files by name in Google Drive. However, it does not explicitly mention alternatives or exclusions, such as 'use this instead of gdrive_list_files when you need to find a file by name.' The guidance is implied rather than explicit, so it earns a mid-range score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gdrive_write_fileGdrive Write FileAInspect
Writes or overwrites a text file in the synced Google Drive folder — it uploads automatically via the official client. First call returns a preview; pass confirm=true to write.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path under a Google Drive mount | |
| confirm | No | Must be true to actually write | |
| content | Yes | Text content to write |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| bytes | Yes | |
| written | Yes | |
| overwrote | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'overwrites a text file', which is a destructive action, but annotations mark destructiveHint=false. This is a direct contradiction. The preview/confirmation workflow is helpful, but the contradiction with the annotation undermines trust and requires flagging.
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 well-structured sentences. The first sentence states the core purpose, and the second explains the confirmation requirement. No filler or redundant content is present.
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 description sufficiently covers the core usage: writing/overwriting a file, auto-upload, and the confirmation flow. It does not detail edge cases like missing paths or permissions, but given the output schema exists and the description is focused, it is mostly 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 description adds critical meaning to the confirm parameter by explaining the two-step preview-then-confirm workflow. While schema covers all three parameters at 100%, the description goes beyond by clarifying the sequence and purpose of confirm=true, which is not evident from the schema 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 uses a specific verb ('Writes or overwrites') and names the resource ('text file in the synced Google Drive folder'), clearly distinguishing it from read/list/search siblings like gdrive_read_file and gdrive_list_files. The mention of the official client and auto-upload further clarifies the tool's role.
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 clearly explains how to use the tool: first call returns a preview, then pass confirm=true to write. It provides clear context for writing to Google Drive, though it does not explicitly mention alternatives or when-not-to-use, 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.
get_audit_logGet Audit LogARead-onlyInspect
Returns recent LMCP tool call history from the local audit log. Each entry shows timestamp, tool name, call source (local/cloud), success status, and duration. Useful for GDPR Article 30 compliance reporting and debugging.
| Name | Required | Description | Default |
|---|---|---|---|
| ok | No | Filter to successes (true) or failures (false) only (optional) | |
| tool | No | Filter to entries for a specific tool name (optional) | |
| limit | No | Number of recent entries to return (default 50, max 200) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| entries | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive behavior. The description adds scope (recent, local) but no additional behavioral depth 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?
Two sentences with front-loaded purpose and no superfluous words; efficiently conveys what the tool does.
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 presence of an output schema and three optional parameters, the description covers the key aspects. Could mention limit default/max, but generally 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 100%, so parameters are fully documented in schema. Description adds no extra meaning or context about 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?
The description clearly states the tool returns recent LMCP tool call history from the local audit log, listing specific fields. This distinguishes it from siblings as no other tool serves this purpose.
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 context for use (GDPR compliance reporting and debugging) but does not explicitly mention when not to use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configGet ConfigARead-onlyInspect
Returns the current LMCP configuration (api_key masked).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the important detail that the API key is masked, which is beyond the readOnlyHint annotation. It also implies the returned configuration is current. No contradictions 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 a single sentence with no superfluous words. It is front-loaded and efficiently conveys the tool's purpose.
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, has output schema), the description is complete. It specifies the return value and the masking behavior, while the output schema covers the structure.
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 has no parameters and schema coverage is 100%, so baseline is 3. The description does not add parameter-related information, but none is needed.
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 returns the current LMCP configuration with the API key masked. It specifies the verb 'returns' and the resource 'LMCP configuration', distinguishing it from sibling tools like lmcp_state which likely provides a different view.
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. The description does not mention context, prerequisites, or differentiate from tools like lmcp_state or other configuration-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_contactGet ContactARead-onlyInspect
Gets a contact from the Mac's Contacts app (Contacts.app) by name or ID. Pass name to look up directly by name (no need to search_contacts first — if several people match it returns a compact list to choose from), or contact_id for an exact lookup. For Microsoft 365 use m365_get_contact instead.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Full or partial contact name — the one-step path. Provide this OR contact_id. | |
| contact_id | No | Exact identifier from list_contacts/search_contacts. Provide this OR name. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only and non-destructive behavior. The description adds valuable context beyond that by explaining that a name-based lookup may return a compact list if multiple people match, which is exactly the kind of behavioral nuance an agent needs. It 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?
Three sentences with no wasted words. It opens with the primary purpose, then explains parameter usage, and closes with a clear sibling-tool pointer—all front-loaded 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?
For a simple, read-only tool with an output schema and rich annotations, the description is fully sufficient. It covers purpose, usage alternatives, multi-match behavior, and sibling differentiation, leaving no significant 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 100%, but the description enriches the parameters by explaining that name is a one-step path and contact_id is an exact identifier from list_contacts/search_contacts. It also reinforces the either/or relationship between the parameters, adding 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 clearly states it retrieves a contact from the Mac's Contacts.app by name or ID, which is a specific verb+resource. It also distinguishes itself from m365_get_contact and indicates there is no need to call search_contacts first, making its 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?
It explicitly tells when to use this tool (local Mac contacts) and when not to (use m365_get_contact for Microsoft 365). It also explains the two usage modes (name for direct lookup, contact_id for exact lookup) and reassures the agent that prior search is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_datetimeGet DatetimeARead-onlyInspect
Get the current date and time of the machine where LMCP runs — with timezone and UTC offset. Call this whenever you need the real 'now' on the user's computer: before creating calendar events or reminders, resolving relative dates like 'today'/'tomorrow'/'next Friday', or timestamping. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| human | Yes | Human-readable local date/time. |
| iso_utc | Yes | Current time in ISO 8601, UTC. |
| weekday | Yes | |
| timezone | Yes | IANA timezone identifier. |
| iso_local | Yes | Current time in ISO 8601 with the machine's local UTC offset. |
| utc_offset | Yes | UTC offset like +02:00. |
| epoch_seconds | Yes | Unix epoch seconds. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so description adds context about returning timezone and UTC offset. No contradictions, and behavioral traits are well 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 sentences, front-loaded with purpose and usage, no waste. Perfectly concise 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?
Tool is simple, output schema exists (return values covered). Description adds usage scenarios and confirms idempotent behavior. Completely 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?
No parameters, schema coverage 100%. Description confirms 'Takes no arguments', which is consistent. Baseline 4 for zero-param tools.
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?
Description clearly states the tool gets current datetime with timezone and UTC offset, specifying the exact resource (machine where LMCP runs). It distinguishes from any potential time-related 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?
Explicitly states when to use: before creating calendar events, resolving relative dates, timestamping. While not listing alternatives, the context is sufficient given no sibling time tools exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_m365_personGet Microsoft 365 PersonARead-onlyInspect
Get detailed information about a specific person in your Microsoft 365 directory by their user ID or email address. Use 'me' to get the currently authenticated user's profile.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | User ID (GUID), email address (UPN), or 'me' for the authenticated user, e.g. 'sarah@contoso.com', 'a1b2c3d4-...', or 'me' |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| upn | No | |
| name | No | |
| No | ||
| title | No | |
| mobile | No | |
| office | No | |
| phones | No | |
| department | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the tool is clearly safe and read-only. The description reinforces this with 'Get', but adds no extra behavioral context like error handling or what constitutes 'detailed information'. The description does not contradict 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 concise sentences: first defines purpose and input, second provides a usage hint. No wasted words; front-loaded with the verb 'Get'.
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 a single parameter with full schema coverage and an output schema existing, the description sufficiently clarifies the tool's purpose and input variations. It could optionally note that it returns a directory profile, but the output schema likely covers 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?
The schema covers the parameter 'id' with full description (100% coverage). The description adds extra value by explaining the 'me' special value as a way to get the current user's profile, which goes beyond the schema's enumeration.
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 'Get detailed information about a specific person' with resource 'Microsoft 365 directory', and distinguishes from sibling tools like m365_get_contact by specifying 'directory' rather than contacts. It also provides three identification methods: user ID, email, or 'me'.
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 tells when to use the tool (to retrieve a person's details) and gives specific identifier examples, but it does not explicitly compare with alternatives (e.g., search_m365_directory, m365_get_contact) or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reminder_foldersGet Reminder FoldersARead-onlyInspect
Lists the lists (folders) in Apple Reminders (Reminders.app) on this Mac. Every answer carries as_of (when the list snapshot was read) and cache_age_seconds; if cache_age_seconds is above 0 the snapshot is that many seconds old and a list created since then may be missing — call again to force a re-read. For Microsoft To Do use todo_get_folders instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present only when the snapshot is not fresh: says how old it is and what may be missing. |
| as_of | No | ISO 8601 UTC instant when this list snapshot was read from EventKit (not when iCloud last synced). |
| count | No | |
| lists | No | |
| cache_age_seconds | No | Age of the snapshot. 0 means it was read fresh for this call. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds valuable behavioral context on top: the response includes as_of and cache_age_seconds, stale snapshots are possible, and a re-read can be forced. This discloses behavior that annotations alone 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?
Three compact sentences with no filler. The core purpose is front-loaded, the cache nuance earns its place, and the sibling alternative is given in a single final clause. Every sentence adds 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 zero-parameter read-only tool with an output schema, the description covers purpose, expected response fields, staleness behavior, and the correct alternative tool. Nothing an agent needs to invoke this 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?
The tool has zero parameters, so the baseline is 4. The description does not need to add parameter meaning because there is nothing to configure; the empty schema fully documents this.
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 ('Lists') and identifies the exact resource: the lists/folders in Apple Reminders on this Mac. It also explicitly distinguishes itself from a closely related sibling, todo_get_folders, so an agent can pick the correct tool without needing to inspect other definitions.
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 explicit usage context: it clarifies that the snapshot may be stale when cache_age_seconds is above 0, instructs the agent to call again to force a re-read, and names the alternative tool for Microsoft To Do. This is clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_weatherGet WeatherARead-onlyInspect
Gets the current weather and a short daily forecast for a location. Pass a city name ('London', 'San Francisco', 'Tokyo,JP') or 'lat,lon' coordinates. Uses Open-Meteo — no API key required. Location must be provided (there is no device-location access).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of forecast days, 1-7 (default 3) | |
| location | Yes | City name (e.g. 'London', 'Buenos Aires', 'Tokyo,JP') or 'lat,lon' coordinates (e.g. '40.71,-74.01') |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly and non-destructive hints. Description adds valuable context: uses Open-Meteo, requires no API key, and explicitly states the limitation of no device-location access. This goes beyond the structured annotations without contradicting them.
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 concise, front-loaded sentences: first states the core function, second gives input formats, third notes important constraints. Every sentence earns its place with zero waste.
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?
Tool is simple, annotations cover safety, output schema exists, and the description provides the essential caveats (no API key, no device-location). Complete for effective tool selection and 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 100%, with both location and days fully described in the schema. The description repeats the location format examples but adds no extra parameter semantics beyond what the schema provides. Baseline 3 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?
Description clearly states the specific action: 'Gets the current weather and a short daily forecast for a location.' It identifies the resource, the location input, and is the only weather tool among siblings, making it easy to distinguish.
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 clear context on how to use: location must be provided, supports city names or coordinates, and notes there is no device-location access. It lacks explicit alternatives or when-not, but since no sibling weather tools exist, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_accountsList AccountsARead-onlyInspect
Lists Mail.app email accounts WITH each account's email addresses, server_name and type. type is whatever Mail reports — imap | pop | iCloud | smtp | unknown — and Mail's scripting dictionary has NO Exchange value, so Exchange (EWS) accounts always come back as unknown, flagged with type_undetermined: true and a type_note; for those read the mailbox through the m365_* tools (or outlook_diagnose) instead of routing by type. Slower — queries Mail directly. For just the account NAMES (to pass to list_emails(account=...)), prefer list_email_accounts: it's faster (cached, no Mail lock).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when some account's type could not be determined: how many, and what to do. |
| count | Yes | |
| accounts | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses meaningful behavioral traits: the tool is slower because it queries Mail directly (potential Mail lock), the type field's possible values including unknown, and the critical caveat that Exchange accounts always return as unknown with type_undetermined and type_note fields. This is rich, non-obvious context that helps an agent predict 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?
The description is compact, with every sentence serving a distinct purpose: core function, type values and Exchange caveat, performance warning, and pointer to the faster sibling. It front-loads the main function and keeps the caveats organized without 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 read-only, zero-parameter tool with an output schema, the description covers all essential context: what is returned, the type field semantics, the Exchange edge case, the performance trade-off, and the correct alternative for name-only usage. An agent would have complete information to decide when to call this vs. list_email_accounts.
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 there is nothing for the description to explain about input semantics. The baseline for 0-parameter tools is 4, and the description appropriately focuses on return semantics instead, which is helpful.
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 verb and resource ('Lists Mail.app email accounts') and enumerates the specific fields returned (email addresses, server_name, type). It clearly differentiates itself from the sibling tool list_email_accounts by describing what it provides beyond names, 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 gives explicit when-to-use guidance by stating that list_email_accounts is faster and should be preferred for just names, and that Exchange (EWS) accounts should be handled via m365_* tools or outlook_diagnose instead of routing by type. This directly addresses alternatives and conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendar_eventsList Calendar EventsARead-onlyInspect
Lists events from the Mac's Calendar app (Calendar.app, local/iCloud calendars) in a date range, or reads ONE event in full via event_id. List entries preview notes (200 chars, notes_truncated flag) and cap attendees; pass event_id to get the complete notes and full roster. Defaults to today + 7 days. For a Microsoft 365 calendar use m365_list_events instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of events to return (most recent first within the range). Optional; defaults to all in range. | |
| calendar | No | Filter by calendar name — partial, case-insensitive (optional). To pick one of several same-titled calendars, qualify it as "Account/Calendar" (e.g. "Exchange/Calendario") using the source from list_calendar_names, or pass calendar_id. | |
| end_date | No | ISO 8601 date (YYYY-MM-DD). Defaults to start_date + 7 days. | |
| event_id | No | Read exactly ONE event by its id (from a previous list) with FULL notes and the complete attendee roster — required before editing notes of an event whose list entry says notes_truncated. When set, all other filters are ignored. | |
| start_date | No | ISO 8601 date (YYYY-MM-DD). Defaults to today. | |
| calendar_id | No | Filter by a single calendar UUID from list_calendar_names (optional). | |
| calendar_ids | No | Filter by multiple calendar UUIDs (optional). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| events | No | |
| end_date | No | |
| start_date | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by specifying the data source (local/iCloud calendars), preview truncation (200 chars, notes_truncated flag), attendee capping, and the default window of today + 7 days. It also discloses that event_id bypasses filters to fetch full details, which is valuable 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?
Four sentences, with the core action front-loaded, followed by necessary behavioral details and an alternative. Every sentence adds value; no fluff or redundant restating of 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?
Given the 7 optional parameters, rich schema descriptions, and presence of an output schema, the description covers the essential usage patterns, defaults, and the key alternative. It is complete enough for an agent to select and invoke the tool correctly without additional information.
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%, so the baseline is 3. The description adds meaning by explaining the practical reason for event_id (truncated previews) and the default date range, complementing the schema's detailed parameter descriptions.
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 events from the Mac's Calendar app in a date range, and also reads one event in full via event_id. It explicitly distinguishes itself from m365_list_events, making the resource and scope 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 explicitly says 'For a Microsoft 365 calendar use m365_list_events instead,' providing a clear alternative. It also explains when to use event_id (to get complete notes/full roster) and the default date range, giving solid context for selecting this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendar_namesList Calendar NamesARead-onlyInspect
Lists the calendars in the Mac's Calendar app (Calendar.app, local/iCloud). For Microsoft 365 calendars use the m365 calendar tools instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| calendars | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is clear. The description adds useful context about the specific app (Calendar.app) and scope (local/iCloud), which goes beyond the annotations. No additional behavioral details like return format or edge cases are needed for such a simple list 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 sentences, zero fluff. The first sentence states the function; the second provides the alternative. Every word earns its place, and the most important information is 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 zero-parameter, read-only list tool with an output schema and sibling tools, the description is complete. It specifies the source (Mac Calendar app), the scope (local/iCloud), and differentiates from M365 tools. No additional context is needed.
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 0 parameters, and the schema is empty (100% coverage). Baseline is 4, and the description correctly avoids inventing parameter details that don't exist. It would be inappropriate to add parameter semantics where none are needed.
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 calendars in the Mac's Calendar app (Calendar.app, local/iCloud). It uses a specific verb and resource, and explicitly distinguishes itself from Microsoft 365 calendar tools by directing users to the m365 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?
It explicitly states when to use this tool (for local/iCloud calendars) and when not to (for Microsoft 365 calendars, use m365 calendar tools). This provides clear guidance and names the alternative toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_contactsList ContactsARead-onlyInspect
Lists contacts from the macOS Contacts app. Optionally filter by group.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max contacts to return (default 100) | |
| group_name | No | Filter by group name (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| contacts | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, covering safety. The description adds the macOS-specific scope and optional group filter but does not disclose behaviors like default limit, ordering, or pagination. With annotations present, this is adequate but not exceptional.
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 short sentences, front-loaded with the primary action and resource, followed by the optional filter. Every word earns its place; 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 simple list tool with an output schema, both optional parameters documented, and safety annotations present, the description is nearly sufficient. The main gap is lack of usage differentiation from sibling tools, but that is largely covered by the purpose statement and 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?
The input schema fully documents both parameters with descriptions and defaults, so schema coverage is 100%. The description's mention of 'filter by group' adds no new semantic detail beyond what the schema's group_name description already provides.
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 contacts from the macOS Contacts app, with an optional filter by group. It specifies both the resource (macOS Contacts) and the action (list), distinguishing it from siblings like m365_list_contacts and search_contacts.
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 no explicit guidance on when to use this tool versus alternatives such as search_contacts or get_contact. While the 'macOS Contacts app' scoping implies local contacts, there is no direct comparison or exclusionary language.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_displaysList DisplaysARead-onlyInspect
Lists connected displays with bounds (global space, top-left origin, points), backing scale_factor, and which is main. display_id is the CGDirectDisplayID — the SAME value list_windows reports for each window's display_id, so you can map a window to its display. Stable for the session. No permission required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context beyond annotations, including 'Stable for the session', 'No permission required', and the coordinate system details (global space, top-left origin, points). 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?
The description is three sentences with no filler. It front-loads the core action and key result fields, then adds essential details about display_id and permissions. Every sentence contributes meaningful 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 zero-parameter read-only tool with no output schema, the description fully explains what is returned (bounds, scale_factor, main, display_id), the coordinate system, session stability, permission requirements, and how display_id maps to list_windows. No 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 input schema has zero parameters and schema description coverage is 100%, so the description is not required to explain parameters. With no parameters needing elaboration, the baseline of 4 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 uses the specific verb 'Lists' plus the resource 'connected displays' and enumerates exact attributes (bounds, scale_factor, main, display_id). It distinguishes itself from sibling tools like list_windows by focusing on displays rather than windows, and even explicitly relates to list_windows for mapping.
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 clear context by explaining that display_id matches the value list_windows reports, enabling window-to-display mapping. While it does not state when not to use it, there is no competing display-listing tool, and the cross-reference provides strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_email_accountsList Email AccountsARead-onlyInspect
Lists all Mail.app account NAMES (fast — cached, no Mail lock). This is the preferred way to get account names: call it first to discover them, then use list_emails(account=name) to fetch messages from a specific account. If you also need each account's email addresses or type (imap/pop/iCloud), use list_accounts instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tip | No | |
| count | No | Number of accounts. |
| accounts | No | Mail.app accounts, by name. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable context that the operation is fast because it is cached and does not lock Mail, which are behavioral traits beyond the annotations. It does not detail return format or error handling, but the output schema exists to cover 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 three sentences, front-loaded with the core action and performance trait, then gives usage guidance and a clear alternative. Every sentence contributes distinct value with no redundancy or fluff.
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 zero-parameter read-only tool with an output schema, the description is fully complete. It states what is returned (account names), how it behaves (cached, no lock), when to use it (before list_emails), and when to use an alternative (list_accounts). No critical 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?
The tool has zero parameters, so the schema coverage is 100% and the baseline for a 0-param tool is 4. The description doesn't add parameter-level semantics, but none are needed; it does clarify the output is just account names, which indirectly helps the agent understand what to expect.
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 all Mail.app account names, with a specific verb ('Lists') and resource ('Mail.app account NAMES'). It also distinguishes itself from the sibling tool list_accounts by noting that this returns only names, not addresses or 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?
Explicitly says this is the preferred way to get account names and instructs to call it first, then use list_emails(account=name) with the discovered names. It also names an alternative tool (list_accounts) for when email addresses or account type are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_email_foldersList Email FoldersARead-onlyInspect
Lists the full folder (mailbox) tree for Apple Mail (Mail.app) accounts, including nested subfolders. Use this to discover the exact folder names that move_email(target_mailbox=...) and list_emails(mailbox=...) expect. Outlook.com, Exchange, Gmail, iCloud and IMAP accounts added to Mail.app are all included. For a Graph-only Microsoft 365 mailbox not added to Mail.app, use m365_list_emails instead.
Pass account= (from list_email_accounts) to enumerate one account fully; without it, every account is walked which can be slow on macOS 15+. Message counts are off by default (slow on IMAP) — pass include_counts=true to add unread/total per folder.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| include_counts | No | false |
Output Schema
| Name | Required | Description |
|---|---|---|
| accounts | No | |
| truncated | No | |
| folder_count | No | |
| next_actions | No | |
| account_count | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds context: message counts are off by default and slow on IMAP, walking all accounts can be slow on macOS 15+, and which tools use these folder names. 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?
Two paragraphs, front-loaded with main purpose. Every sentence provides useful information without redundancy. Efficient and structured well.
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 complexity (listing folders, optional account, counts) and presence of an output schema, the description covers usage, limitations, and related tools. It is fully sufficient 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?
Schema coverage is 0% for parameter descriptions, but the description fully explains both parameters: account (from list_email_accounts, optional) and include_counts (default false, affects performance). This compensates for the lack of schema descriptions.
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 it lists the full folder tree for Apple Mail accounts, including nested subfolders, and distinguishes from m365_list_emails for Graph-only mailboxes. It uses a specific verb and resource.
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?
Explicitly says when to use (to discover folder names for move_email and list_emails), when not to (for Graph-only mailboxes, use m365_list_emails), and provides performance considerations and optional parameter behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsList EmailsARead-onlyInspect
Use this when the user wants to see or triage their inbox on this Mac (Apple Mail — any account added to Mail.app: iCloud, Gmail, IMAP, Exchange). Lists email headers (subject, sender, date, unread); call read_email(message_id) for the full body. For a Microsoft 365 mailbox NOT added to Mail.app, use m365_list_emails.
IMPORTANT: on machines with 2+ accounts, call with account= (from list_email_accounts). Without it, and when the fast index can't answer, list_emails returns the account list instead of scanning all of them — scanning every account in one call has no time limit and can block Mail for other requests too (#2268). Exactly 1 account is unaffected.
Supports pagination: use offset to page through results (e.g. offset=20 for page 2 with limit=20). The limit parameter is capped at 50 per call (default 20); to read more, page with offset rather than requesting a larger limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 20 | |
| offset | No | 0 | |
| account | No | ||
| mailbox | No | ||
| unread_only | No | false |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| offset | No | |
| messages | No | |
| next_actions | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly hint, it discloses that list_emails may return the account list instead of messages when multiple accounts exist and account is omitted, and that scanning all accounts has no time limit and can block Mail. It also clarifies header-only output, which is exactly the kind of behavioral nuance 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?
The description is substantive yet tight: every paragraph adds a distinct decision or caveat, the important multi-account warning is visually separated, and there is no filler or repetition of schema/annotation 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 read-only list tool with an output schema, the description covers the essential routing, multi-account pitfall, and pagination behavior. It is only slightly incomplete because mailbox and unread_only are not explained, and the 'fast index' condition is 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?
With 0% schema description coverage, the description is the only parameter documentation. It explains account, limit cap/default, and offset pagination with an example, but it leaves mailbox and unread_only undocumented; those rely on name inference. This is helpful but not complete for all five 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?
The description opens with a specific user intent and resource: seeing/triaging the inbox in Apple Mail on this Mac. It enumerates the returned header fields and clearly differentiates from m365_list_emails by account type, so an agent can identify it among the large sibling set.
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 states exactly when to use the tool, names the M365 alternative for mailboxes not in Mail.app, and gives direct account-selection guidance for multi-account machines. Pagination instructions also tell the agent how to page rather than requesting a large limit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_m365_people_insightsList Microsoft 365 People InsightsARead-onlyInspect
List the people most relevant to you in Microsoft 365 — based on your communication patterns, collaboration history, and org chart. Useful for meeting prep and contact enrichment.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of people to return (default 20, max 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| people | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds valuable behavioral context beyond annotations by explaining that results are computed from communication patterns, collaboration history, and org chart, and that they are personalized ('most relevant to you'). This helps the agent understand how the tool behaves.
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 extremely concise: two sentences with no wasted words. The first sentence states the action and derivation criteria, the second adds practical use cases. Front-loaded with purpose.
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 one optional parameter, an output schema exists, and annotations cover safety, the description provides sufficient context for an agent to decide when to invoke it. It could be slightly more explicit about what kind of people are included (e.g., manager, direct reports, etc.), but the stated criteria cover the main sources of relevance.
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 already provides a clear description for the single parameter 'limit' (number of people, default 20, max 50). The description adds no further parameter details. With 100% schema coverage, baseline of 3 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 it lists 'the people most relevant to you in Microsoft 365' and specifies the criteria (communication patterns, collaboration history, org chart). It distinguishes itself from siblings like list_contacts and search_m365_directory by focusing on relevance scoring rather than exhaustive listing or 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?
The description mentions typical use cases ('meeting prep and contact enrichment'), providing implied usage context. However, it does not explicitly state when NOT to use this tool or suggest alternative tools like list_contacts or search_m365_directory when different needs arise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_message_chatsList Message ChatsARead-onlyInspect
Lists recent iMessage / Messages.app conversations (chat id, name, service). Start here for Messages — the chat id it returns is what read_messages / search_messages / send_message need.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max conversations (default 30) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| chats | No | |
| count | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety profile is covered. The description adds value by noting the returned chat id is a prerequisite for other tools, but doesn't disclose behavior like ordering, whether conversations are deduplicated, or whether the limit applies to all services equally.
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 wasted words. States what it does, what it returns, and how to use it downstream. Front-loaded with the core action and immediately useful context.
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 annotations covering the read-only safety profile, the output schema describing the return structure, and a single self-documenting parameter, the main gap is lack of behavioral detail (ordering, service coverage). Overall quite complete for an entry-point list 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 100% for the single 'limit' parameter, which has a default documented in the schema. The description doesn't need to add param detail since the schema already covers it. Minor credit for the default 30 being explicit in 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?
Specific verb+resource: lists recent iMessage/Messages.app conversations. Clear scope (chat id, name, service) and distinguishes from siblings by naming what Fields are returned. Establishes this as the entry point for the Messages tool 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?
Explicitly states 'Start here for Messages' and names the dependent tools (read_messages/search_messages/send_message) that need the chat id. Gives clear when-to-use guidance that differentiates it from signal_list_chats and teams_list_chats siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_missing_permissionsList Missing PermissionsARead-onlyInspect
Returns the macOS privacy (TCC) permissions Local MCP needs that are NOT granted yet, each with a one-click open_url that opens the exact System Settings → Privacy & Security pane. Read-only and passive (never prompts). Use it during setup or before a workflow to tell the user precisely which "Allow" clicks remain (Calendar, Contacts, Reminders, Mail Automation, Full Disk Access, Screen Recording, Accessibility) instead of failing mid-task. all_granted: true means nothing is left to do.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| granted | No | |
| missing | No | |
| summary | No | |
| all_granted | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'Read-only and passive (never prompts)', which aligns with and reinforces the annotations (readOnlyHint: true). It adds valuable behavioral context about not triggering system prompts, going beyond what 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?
The description is extremely concise at three sentences, with the core purpose front-loaded. Every sentence adds essential information without any redundant or extraneous 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?
Given that an output schema exists, the description appropriately focuses on usage context and behavior. It explains the return values (list of permissions with open_url and all_granted flag) without duplicating schema details, making it complete for a status-checking 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?
With zero parameters and 100% schema coverage, the description has no need to explain parameters. The baseline for 0 parameters is 4, and the description meets that without needing to add parameter-specific details.
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 verb 'returns' and the resource 'macOS privacy (TCC) permissions that are NOT granted', making the purpose crystal clear. It distinguishes itself from sibling tools by focusing specifically on permission checking rather than performing actions on other resources.
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 advises using the tool 'during setup or before a workflow' and explains it prevents mid-task failures, providing clear usage context. While it doesn't name specific alternative tools, the advice to run it proactively is sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notesList NotesARead-onlyInspect
Lists notes from Apple Notes app. Optionally filter by folder.
Paginated: limit is capped at 500 per call, so page with offset (offset=500 returns notes 501-1000) instead of asking for a bigger limit. The response carries total (how many notes match in all) and has_more (whether anything is left past this page), so you never have to guess whether you got everything — page until has_more is false, which is exact even when total_is_estimated says the count is only a lower bound. To read a WHOLE library, pass order="id" — see the order parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Notes per page (default 50, capped at 500). To get more, page with offset. | 50 |
| order | No | order: "modified" (default) sorts newest-modified first — what you want to SHOW someone, but NOT safe for paging: modification date changes, so a note edited between two calls jumps to the front and another note is pushed past your cursor and never returned. "id" sorts by the note's immutable store id — stable, never renumbered, new notes append at the end — so use order="id" to walk an entire library page by page: edits and insertions mid-crawl are safe with it. One case it cannot cover, because pages are addressed by offset: if a note is DELETED mid-crawl, every note after the hole shifts one slot back and the note that was on the page boundary is skipped, silently. If completeness matters, re-run the crawl and reconcile against total, or crawl while nothing is deleting notes. | modified |
| folder | No | ||
| offset | No | How many notes to skip (default 0). offset=500 with limit=500 returns notes 501-1000. An offset past the end returns an empty page with has_more=false, not an error. | 0 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Notes in THIS page |
| notes | No | |
| order | No | The ordering actually applied (modified | id) |
| total | No | Notes matching in total, ignoring limit/offset. A LOWER BOUND, not the exact figure, when total_is_estimated is true |
| offset | No | Where this page started |
| has_more | No | True when notes remain past this page — call again with offset = offset + count |
| next_actions | No | |
| total_is_estimated | No | True when the exact count could not be taken (the unbounded COUNT failed, or the JXA fallback answered) — total is then only a lower bound. has_more stays exact either way: page until it is false, never until count reaches total |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark `readOnlyHint: true` and `destructiveHint: false`, so no further disclosure needed on safety. The description adds extensive behavioral context: pagination mechanics (500 limit, offset logic), response fields (`total`, `has_more`, `total_is_estimated`), and ordering stability pitfalls (modified vs. id order, deletion hole problem). This significantly enriches agent understanding beyond the annotations alone.
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 front-loaded with the core purpose in the first sentence. The pagination and ordering detail is structured logically (problem → solution → edge case). Every sentence adds distinct value — no waste. It's concise for the complexity 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?
Given there are 4 parameters (0 required), annotations cover safety, and an output schema exists, the description is complete. It covers pagination semantics, ordering pitfalls, deletion edge case, and response fields without needing to explain return values (output schema handles that). No gaps remain for the agent's practical use.
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%, meaning most parameters have some description, but the description adds deep value on `order` (explains the difference between 'modified' and 'id' with concrete scenarios) and `offset` (documents behavior past end). The `folder` parameter has no description in either schema or description, which prevents a 5. For a 4-param tool, the description compensates well 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 clearly states it 'Lists notes from Apple Notes app' and optionally filters by folder. This is a specific verb+resource+scope that distinguishes it from siblings like 'search_notes' (which implies full-text search) and 'read_note' (which retrieves a single note by ID).
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 explains when to use pagination (page with `offset` instead of asking for a bigger limit), how to walk a whole library safely (use `order="id"`), and when pagination is fragile (deletions mid-crawl shift offsets). No explicit 'when-not-to-use', but the behavioral detail is so rich that it effectively guides selection over siblings like `search_notes` or `read_note`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_omnifocus_foldersList OmniFocus FoldersARead-onlyInspect
Lists folders in OmniFocus. Folders group related projects (e.g. "Work", "Personal"). Use list_omnifocus_projects to see the projects inside them.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max folders to return (default 100). | 100 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| folders | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds domain context (folders group projects) but no additional behavioral details like pagination, sorting, or return format. This is adequate but not exceptional.
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 that front-load the action. The first sentence states exactly what the tool does; the second adds a useful distinction. No filler or redundant 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?
Given the tool's low complexity, single optional parameter, read-only annotations, and existing output schema, the description fully covers what an agent needs. It explains the resource and provides an alternative for related data, making it complete for this simple listing 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?
The only parameter (limit) is fully described in the schema with a default value and explanation, giving 100% schema coverage. The description adds no extra parameter semantics, so the baseline of 3 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?
Description starts with a clear verb and resource: "Lists folders in OmniFocus." It further explains the purpose of folders (group related projects) and distinguishes this tool from the sibling list_omnifocus_projects by directing the user there for project-level detail.
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 says to "Use list_omnifocus_projects to see the projects inside them," giving a direct alternative when to use a sibling tool. This provides clear when-to-use guidance beyond a bare statement of functionality.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_omnifocus_projectsList OmniFocus ProjectsARead-onlyInspect
Lists projects in OmniFocus. Start here for OmniFocus (alongside list_omnifocus_folders) — the project name it returns feeds list_omnifocus_tasks / create_omnifocus_task / search_omnifocus_tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max projects to return (default 100). | 100 |
| include_completed | No | Include completed/dropped projects (default excludes them). | false |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| projects | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context about the returned project name being consumed by downstream tools, but doesn't describe details like whether output is paginated or sorted. For a read/list tool with solid annotations, this is baseline adequate.
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 wasted words. The first sentence states purpose, the second provides navigation guidance. Every phrase 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 2-param list tool with an output schema and full annotation coverage, the description is complete. It tells the agent what it returns (project names) and how to use them downstream. Could mention default behaviors (excludes completed) but the schema covers 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 both parameters (limit, include_completed) are fully documented in the schema itself. The description doesn't repeat or add parameter details, which is fine since the schema does the heavy lifting. Baseline 3 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?
Clear verb+resource: 'Lists projects in OmniFocus'. It distinguishes from siblings by pairing with list_omnifocus_folders and describing the returned project name as a feed into list_omnifocus_tasks/create_omnifocus_task/search_omnifocus_tasks. This makes the purpose unmistakable.
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?
Explicitly says 'Start here for OmniFocus (alongside list_omnifocus_folders)' and names the exact downstream tools that consume its output. This is strong when-to-use guidance and differentiates it from list_omnifocus_folders and list_omnifocus_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_omnifocus_tagsList OmniFocus TagsARead-onlyInspect
Lists all tags defined in OmniFocus.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tags | No | |
| count | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description need not reiterate this. The description adds no additional behavioral traits, but it does not contradict annotations. It is a neutral baseline.
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 sentence with no wasted words. It is front-loaded with the key action and resource, making it efficient 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 listing tool with no parameters and an existing output schema, the description fully captures the tool's function. There are no gaps that would impede an agent's 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?
The tool has no parameters, so there is no need for the description to elaborate on parameter meaning. The input schema is fully covered (100% coverage). A baseline of 4 is appropriate for zero-parameter tools.
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 'Lists all tags defined in OmniFocus,' with a specific verb ('lists') and resource ('tags'). It distinguishes this tool from sibling tools like list_omnifocus_folders and list_omnifocus_projects.
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 no guidance on when to use this tool versus alternatives. It does not mention any prerequisites, exclusions, or recommended contexts, leaving the agent to infer usage solely from the tool's name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_omnifocus_tasksList OmniFocus TasksBRead-onlyInspect
Lists tasks from OmniFocus. Filter by project, tag, inbox, due today, or flagged status.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Only tasks carrying this tag. | |
| inbox | No | Only unfiled inbox tasks. | false |
| limit | No | Max tasks to return (default 50). | 50 |
| flagged | No | Only flagged tasks. | false |
| project | No | Only tasks in this project (name, case-insensitive). | |
| due_today | No | Only tasks due today or overdue. | false |
| include_completed | No | Include completed tasks (default excludes them). | false |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| tasks | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no additional behavioral context such as default exclusion of completed tasks, pagination, or data freshness. It is adequate but not enriching.
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: the first states the purpose, the second lists filters. No filler or redundant information. Every word earns its place, making it highly efficient 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?
Given the full schema with 100% coverage, output schema presence, and annotations, the description is sufficient for an agent to invoke the tool correctly. It lacks usage differentiation from siblings, but this is a minor gap overall.
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 the baseline is 3. The description's mention of filters (project, tag, inbox, due today, flagged) partially overlaps with schema descriptions but adds no new meaning. It omits mention of 'limit' and 'include_completed', which are already documented in 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 tool's function: 'Lists tasks from OmniFocus' and enumerates filter options. It is specific about the resource and action, but does not distinguish itself from the sibling tool 'search_omnifocus_tasks', which may also list tasks with search capabilities.
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 like search_omnifocus_tasks or list_omnifocus_projects. The description only lists available filters, leaving the agent to infer appropriate usage without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_referral_candidatesList Referral CandidatesARead-onlyInspect
Returns the user's emailable contacts plus an invite template, for recommending LMCP to a colleague. A user would invoke this when they want to invite or recommend someone. Returns a list of candidate contacts and a message template; create_referral_invites then generates each chosen person's unique invite link.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max contacts to return (default 60) |
Output Schema
| Name | Required | Description |
|---|---|---|
| lang | No | |
| count | No | |
| notes | No | |
| candidates | No | |
| template_body | No | |
| template_subject | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description complements these by explaining what the tool returns (contacts plus template) and the downstream relationship to create_referral_invites. It doesn't disclose the invite template's content or pagination behavior, but given the annotation coverage this is reasonable.
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 sentences, no filler, front-loaded with the core purpose. Every sentence earns its place: what it returns, when to use it, and how it relates to the sibling tool create_referral_invites. Zero waste.
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 a simple read-oriented listing operation with an output schema and only one optional parameter. The description covers the purpose, return content (contacts + template), and downstream tool coupling. Adequate for this complexity level; slightly lacking detail on the invite template format but the output schema likely covers 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 coverage is 100% — the single 'limit' parameter is fully described as 'Max contacts to return (default 60)', which is complete. The description adds the default context implicitly but doesn't go beyond the schema. Baseline 3 applies when the schema fully documents 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?
The description clearly states what the tool does: 'Returns the user's emailable contacts plus an invite template, for recommending LMCP to a colleague.' It names the specific verb (list/returns), the resource (referral candidates), and the purpose (recommend to colleague). It distinguishes itself from create_referral_invites by explicitly noting the division of labor.
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 explains when a user would invoke this ('when they want to invite or recommend someone') and situates it in a workflow by mentioning create_referral_invites generates invite links afterward. It lacks explicit 'when-not-to-use' or named alternatives, but within this tool set the purpose is clear enough to discriminate use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remindersList RemindersARead-onlyInspect
Lists reminders from Apple Reminders (Reminders.app) on this Mac. Optionally filter by completion status or list name. For Microsoft To Do use todo_list_tasks instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max number of reminders to return (earliest due first). Optional; defaults to all. | |
| completed | No | true=completed, false=incomplete (default), omit=all | |
| list_name | No | Filter by reminder list name (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number returned in this response. |
| total | No | Total matching before the limit. |
| reminders | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds that it operates on Apple Reminders locally, but it does not disclose deeper behavioral details like default return behavior or potential performance considerations. With annotations covering the core traits, a neutral score is appropriate.
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, front-loaded with the primary action and resource, and includes a useful cross-reference to an alternative tool. 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?
For a simple read-only list tool with three optional parameters, a rich output schema, and complete schema descriptions, the description is sufficient. It provides the essential source context (Apple Reminders) and an explicit alternative, leaving no critical 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 100%, so all three parameters (limit, completed, list_name) are already well-documented in the schema. The tool description does not add additional parameter semantics beyond what the schema provides, so it meets the baseline without exceeding 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 clearly states the tool lists reminders from Apple Reminders (Reminders.app) on this Mac, making the resource and scope explicit. It also distinguishes itself from the Microsoft To Do alternative (todo_list_tasks), which is a different sibling 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?
The description explicitly says 'For Microsoft To Do use todo_list_tasks instead,' providing a direct alternative. It also notes optional filters by completion status or list name, which helps the agent decide when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_windowsList WindowsARead-onlyInspect
Lists on-screen windows of any app with window_id, owning app bundle id + name, title, bounds (global space, top-left, points), display_id (the CGDirectDisplayID — matches list_displays, so you can look up which display a window is on), and is_focused. Window TITLES require Screen Recording permission — without it this returns an explicit permission_required error rather than a title-less result. Optional app_bundle_id filter — note that Electron-style apps often own their windows from a HELPER process with a different bundle id, so a filter can come back empty while the app is plainly on screen. on_screen_only DEFAULTS TO TRUE and excludes minimized, hidden and other-Space windows; pass false to see them. When the result is empty this tool returns a note explaining which filter emptied it and what to pass instead — read it instead of concluding the app has no windows. window_id is stable within the session for later targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| app_bundle_id | No | Only return windows owned by this app bundle id. | |
| on_screen_only | No | Only on-screen windows (default true). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only declare the tool is read-only/non-destructive; the description adds significant behavioral context: the Screen Recording permission requirement and its explicit permission_required error, the Electron helper-process gotcha, the on-screen default behavior, and the empty-result note. This goes well beyond the annotation baseline and does not contradict 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?
Each sentence is dense and earns its place: output fields, permission caveat, filter pitfall, default behavior, empty-result handling, and window_id stability. The information is front-loaded with the main purpose and then expands user expectation and parameter nuances without 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?
Because there is no output schema, the description carries the full burden of describing return semantics, and it does so completely: it lists the output fields, explains the condition under which titles are available, mentions cross-reference to list_displays, and closes with a usable stable window_id for subsequent targeting. Nothing essential is missing for correct invocation or result interpretation.
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 already documents both parameters at 100% coverage, but the description enriches them semantically: it explains that a bundle-id filter can return empty for visible Electron apps due to helper processes, and that on_screen_only defaults to true and excludes minimized/hidden/other-Space windows. This is critical interpretive guidance the schema lacks.
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: 'Lists on-screen windows of any app' and enumerates the exact fields returned (window_id, bundle id, title, bounds, display_id, is_focused). This makes it clear and easily distinguishable from siblings like list_displays (displays) and window_focus/window_set_frame (actions on a window).
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 concrete when-to instructions: when to set on_screen_only=false, when a bundle-id filter may mislead (Electron helper processes), and how to interpret an empty result (read the note, don't conclude no windows). It also cross-references the sibling list_displays for looking up the display belonging to a display_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lmcp_install_upgradeLMCP Install UpgradeAInspect
Checks for and installs a newer LMCP version — a self-upgrade of the LMCP app itself (not editing any of your data). Installing downloads the new version and RESTARTS LMCP (the AI client briefly reconnects), so it requires confirm=true. Pass check_only=true to only report whether a newer version is available, with no download or restart.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to actually install (which restarts LMCP). Without it, returns availability + a preview. | |
| check_only | No | If true, only report availability — no download, no install, no restart. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: it restarts LMCP, requires confirm=true, and clarifies that check_only avoids downloads/restarts. It also reassures that it is 'not editing any of your data,' aligning with destructiveHint=false. This is highly transparent.
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, front-loaded with the core purpose, then efficiently explains side effects and parameter usage. 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?
The description is complete for this tool: it covers purpose, side effects, parameter behavior, and safety context. Given that an output schema exists, not describing return values is appropriate. It handles all necessary decision points for the agent.
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 already describes both parameters with 100% coverage, but the description adds meaningful context by linking confirm to a restart and explaining the consequence of check_only. This goes beyond the raw schema descriptions.
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 'Checks for and installs a newer LMCP version' with a specific verb and resource. It distinguishes itself from siblings like lmcp_upgrade_diagnostics and lmcp_state by emphasizing its self-upgrade role.
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 states when to use check_only vs full install, and notes the confirm requirement. It does not explicitly contrast with alternatives like lmcp_upgrade_diagnostics, but the context of upgrading is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lmcp_stateLMCP StateARead-onlyInspect
Returns a structured snapshot of the LMCP environment: server/tray/teams-proxy versions, detected AI client, cloud relay state, TCC permission states (Calendar/Reminders/Contacts), and a compact summary of which services (Mail/Calendar/Contacts/Teams/OneDrive/Reminders/Notes) are reachable. Fast (<500ms), passive — never prompts the user, never opens app windows, never touches the network. Call this when you need to verify the environment is healthy before attempting a tool, or to understand what's installed and accessible. If services.scan_pending is true, the background service scan hasn't finished yet (just after startup) and the per-service running/accounts values are placeholders — do NOT treat them as a real outage; just call the tool you need. Otherwise services.scanned_seconds_ago tells you how many seconds ago that scan ran (cadence ~60s): the per-service values are a snapshot, NOT a live probe. A false/0/not available for a service is advisory only — it can be stale (e.g. the user connected WhatsApp or opened Mail seconds ago) — so never use this tool as a preflight gate to skip or cancel a task; the actual tool call is the source of truth, just attempt it. For reporting failures, use report_problem instead — it captures this same snapshot plus logs and submits to the team.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tcc | No | TCC permission states, e.g. granted | denied | authorized. |
| arch | No | |
| update | No | |
| version | No | Serving (running) server version. |
| built_at | No | UTC build timestamp (F-041). 'unknown' if unstamped. |
| services | No | Per-domain reachability summary (mail, calendar, contacts, teams, onedrive, slack, …); shape varies by domain. May include `scan_pending: true` right after startup, meaning the per-service running/accounts values are placeholders and not yet authoritative. Once scanned, `scanned_seconds_ago` gives the age (seconds) of that background snapshot and `freshness` restates that a false/0/not-available is advisory, not a live check — never gate a task on it. |
| ai_client | No | |
| build_sha | No | Git short SHA of the build (F-041). 'unknown' if unstamped. |
| machine_id | No | |
| os_version | No | |
| tray_version | No | |
| last_activity | No | |
| skill_capture | No | Dark-launch counters for repeated-workflow detection (user-generated skills, PR-1). would_fire_signatures = how many times a save-this-workflow nudge WOULD have fired; ring_size = entries in the recent-calls ring. PRIVACY: the ring is IN-MEMORY ONLY — never written to disk, never transmitted, cleared on restart — and argument values are PII-scrubbed on entry, so it holds the SHAPE of a workflow, not its content. No UI acts on it yet; it exists to tune thresholds. Opt out with the skill_capture_enabled config flag. |
| license_status | No | trial | active | expired |
| cloud_token_set | No | |
| tunnel_connected | No | |
| cloud_data_enabled | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, destructiveHint=false, openWorldHint=false. The description adds crucial behavioral details: 'Fast (<500ms), passive — never prompts the user, never opens app windows, never touches the network.' It also explains the scan_pending placeholder logic and the staleness/advisory nature of service values, which goes far beyond annotation hints. No 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?
The description is longer than typical, but every sentence adds operational significance. It is front-loaded with the main purpose and behavioral guarantees, then progressively covers caveats and alternatives. The length is justified to prevent misuse (e.g., treating snapshot as live, relying on stale values).
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 description fully covers a zero-input environment probe. It explains the semantics of the response fields (`scan_pending`, `scanned_seconds_ago`), warns about staleness, and provides a sibling pointer to `report_problem`. Given an output schema exists and no inputs are required, this is 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 has zero parameters, so schema coverage is 100% by definition. The description appropriately omits parameter details and instead clarifies the meaning of output fields like `services.scan_pending`, which is more valuable here. The baseline for 0 params 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?
The description opens with a specific verb and resource: 'Returns a structured snapshot of the LMCP environment' and enumerates the exact contents (versions, AI client, cloud relay state, TCC permissions, service reachability). It clearly distinguishes itself from diagnostic/reporting siblings by noting 'For reporting failures, use report_problem instead.'
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?
Explicitly states when to use: 'Call this when you need to verify the environment is healthy before attempting a tool, or to understand what's installed and accessible.' It also gives clear exclusions: 'never use this tool as a preflight gate to skip or cancel a task' and points to report_problem for failures.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lmcp_upgrade_diagnosticsLMCP Upgrade DiagnosticsAInspect
Returns LMCP's self-upgrade health (the LMCP app upgrading itself, not editing your data): current version, the last N app-version upgrade attempts with any errors, whether the upgrade cache dir is writable, and any stale LMCP binaries at alternate paths. Call this when the app's auto-upgrade seems stuck, or to explain why a user is on an old version.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max recent attempts to return (default 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
| cache_dir | Yes | |
| running_from | Yes | Real path of the currently running binary. |
| binaries_found | Yes | LMCP binaries found at known alternate paths. |
| cache_writable | Yes | Whether the update cache dir is writable (#1 silent-failure cause). |
| current_version | Yes | |
| last_success_at | Yes | ISO 8601 timestamp of last successful update, empty if none. |
| recent_attempts | Yes | Recent update attempts, newest first. |
| consecutive_failures | Yes | |
| recent_attempts_count | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations are minimal (readOnlyHint=false, destructiveHint=false), the description clearly indicates a read-only diagnostic operation by stating 'Returns' and clarifies scope with 'the LMCP app upgrading itself, not editing your data.' This adds behavioral context beyond the annotations, disclosing what is inspected without claiming modifications.
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, front-loaded with what the tool does, then provides the usage trigger. Every word contributes to clarity, with no redundancy or irrelevant details.
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 diagnostics tool with an output schema and one simple optional parameter, the description covers the purpose, the scope (self-upgrade, not data), the specific checks performed, and the situations in which to call it. No additional information is needed for an agent to use 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?
The single parameter 'limit' is fully described in the schema ('Max recent attempts to return (default 10)'), achieving 100% schema coverage. The description mentions 'the last N app-version upgrade attempts,' which aligns with the parameter but adds no additional semantic detail. Baseline 3 is appropriate given schema coverage.
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 'Returns' with a clear resource ('LMCP's self-upgrade health') and lists the exact data points (version, attempts, errors, cache writability, stale binaries). It also distinguishes itself by clarifying 'not editing your data' and the scope of self-upgrade, which separates it from sibling 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?
Provides explicit triggers for use: 'when the app's auto-upgrade seems stuck, or to explain why a user is on an old version.' This gives clear context for when to invoke the tool, though it does not explicitly mention alternatives or when not to use it, earning a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_create_eventMicrosoft 365 Create EventCInspect
Create a calendar event in your Microsoft 365 / Outlook calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End time in ISO 8601, e.g. '2026-05-20T11:00:00' | |
| body | No | Event description (optional) | |
| start | Yes | Start time in ISO 8601, e.g. '2026-05-20T10:00:00' | |
| subject | Yes | Event title | |
| calendar | No | Calendar name to create the event in — partial, case-insensitive match (optional). Omit to use the primary calendar. | |
| location | No | Location (optional) | |
| timezone | No | IANA timezone, e.g. 'America/New_York' (default: UTC) | |
| attendees | No | Comma-separated email addresses to invite (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| ok | No | |
| message | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, which align with the create behavior. However, the description adds no extra behavioral context such as whether invites are sent, timezone defaults, or account requirements, offering minimal value beyond 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 a single concise sentence with no wasted words, but it essentially paraphrases the tool's title with the added context of 'Microsoft 365 / Outlook calendar'. It is efficient but not especially informative.
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 having an output schema and full param coverage, the description is too sparse for a tool with 8 parameters and several closely related siblings. It lacks usage guidance and behavioral details, leaving the agent without enough context to confidently select or invoke 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 100%, so all parameters are documented in the schema. The description itself adds no parameter-specific insights, which falls in line with the baseline of 3 for full schema coverage.
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 creates a calendar event in the Microsoft 365/Outlook calendar, using a specific verb and resource. However, it does not differentiate from the similarly named sibling 'create_calendar_event', so it lacks sibling distinction.
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 like 'create_calendar_event' or other calendar tools. There are no prerequisites, exclusions, or contextual cues to help the agent decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_delete_eventMicrosoft 365 Delete EventADestructiveInspect
Delete a calendar event from your Microsoft 365 / Outlook calendar by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Event ID from m365_list_events | |
| confirm | Yes | Set to true to confirm deletion (required) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description's 'Delete' action is consistent with these. The description adds only the Microsoft 365/Outlook target context and ID-based scope, but does not disclose irreversibility, required confirmation, or post-deletion effects. With annotations covering the destructive nature, the additional value is minimal but acceptable.
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 sentence with no redundant words. It front-loads the action and target, making it immediately scannable and informative.
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, annotations cover the destructive safety profile, the schema covers both parameters with full descriptions, and an output schema is present. The description sufficiently states the operation and target, so no critical information is missing for selection or 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?
Both parameters have descriptive schema entries: id is 'Event ID from m365_list_events' and confirm is 'Set to true to confirm deletion (required)'. The description itself adds no parameter-specific semantics, but with 100% schema coverage, the schema already carries the semantic burden.
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 clearly identifies the resource ('calendar event from your Microsoft 365 / Outlook calendar by its ID'). It distinguishes itself from read/list/create/update sibling tools by the action and the explicit ID-based targeting.
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 for deleting a specific existing event once its ID is known, and the schema's id parameter explicitly sources the ID from m365_list_events. It does not explicitly state when not to use the tool or name alternatives like update_calendar_event, but the context is clear enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_get_contactMicrosoft 365 Get ContactARead-onlyInspect
Get full details of a specific Microsoft 365 contact by ID. Get the ID from m365_list_contacts or m365_search_contacts.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Contact ID from m365_list_contacts or m365_search_contacts |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| notes | No | |
| title | No | |
| emails | No | |
| mobile | No | |
| phones | No | |
| company | No | |
| surname | No | |
| given_name | No | |
| home_address | No | |
| business_address | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, which covers the safety profile. The description adds that the tool returns 'full details' and points to how to source the ID, but it does not disclose other behavioral traits like pagination, rate limits, or required auth permissions. This is acceptable for a simple get-by-ID tool, but not exceptional.
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 short sentences, front-loaded with the core purpose, and every word earns its place. It avoids repetition of title and schema details, making it highly concise 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?
For a simple read-only get-by-ID tool with an output schema (mentioned in context signals), one required parameter, and a clear source for that parameter, the description is complete. The presence of an output schema means the return structure is already specified, so the description doesn't need to elaborate.
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 already provides 100% coverage with a clear description of the 'id' parameter ('Contact ID from m365_list_contacts or m365_search_contacts'). The tool description repeats exactly that information without adding new semantics or examples, so the baseline of 3 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 verb ('Get'), the resource ('full details of a specific Microsoft 365 contact by ID'), and the mechanism for obtaining the ID from sibling tools. It is specific and distinguishes itself from generic contact tools like 'get_contact' and 'search_contacts' by explicitly scoping to Microsoft 365.
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 guidance on when to use the tool: after obtaining an ID from m365_list_contacts or m365_search_contacts. This implies a workflow and gives clear context, though it does not explicitly state when not to use it or mention alternative lookups (e.g., by email/UPN).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_list_contactsMicrosoft 365 List ContactsARead-onlyInspect
List contacts from your Microsoft 365 / Outlook address book.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max contacts to return (default 50, max 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| contacts | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds little beyond the basic read operation; it does not mention default limits, pagination, sorting, or outcome details, but with annotations providing the key behavioral cues this is acceptable.
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, concise, front-loaded sentence that communicates the core purpose without any wasted words. It is appropriately sized for a straightforward list operation.
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 simple nature of the tool, one optional parameter, and presence of an output schema and safety annotations, the description is mostly complete. The only notable omission is guidance about prerequisites (e.g., needing a connected M365 account) or when to use search instead of list, but this is not critical for a basic list 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?
The input schema covers 100% of the single optional 'limit' parameter with a clear description, so the baseline is 3. The description adds no additional parameter context beyond the schema, but none is needed given the simple optional 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?
The description 'List contacts from your Microsoft 365 / Outlook address book' uses a specific verb ('List') and clearly identifies the resource (contacts in M365/Outlook). It distinguishes itself from generic siblings like 'list_contacts' by explicitly scoping to the Microsoft 365 / Outlook address book.
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 about when to use this tool versus the many similar sibling tools such as 'm365_search_contacts', 'search_contacts', or 'get_contact'. There are no explicit alternatives or exclusions, leaving the agent to infer usage purely from the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_list_emailsMicrosoft 365 List EmailsARead-onlyInspect
Use this when the user wants their Microsoft 365 / Outlook / Exchange inbox via the cloud — requires a connected M365 account (connect_m365_account). Returns subject, sender, date, and preview. For mail already in the Mac's Mail.app (including an Exchange account added there), use list_emails.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of emails to return (default 20, max 50) | |
| folder | No | Folder name: inbox (default), sentitems, drafts, deleteditems | |
| unread_only | No | If true, return only unread emails |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| emails | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false. The description adds context about requiring a connected account and returning subject/sender/date/preview. No contradictions; it complements annotations without being redundant.
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 usage condition, then return summary and alternative. Every word earns its place; no fluff or repetition of schema details.
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 description covers prerequisites, return content, and alternative tool. Combined with annotations and output schema, it is fully complete for a read-only list 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 has 100% coverage for all three parameters (limit, folder, unread_only), so description need not repeat details. The description adds no extra parameter semantics, but baseline 3 applies since schema fully documents 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?
The description uses a specific verb ('list') and clearly identifies the resource (Microsoft 365 / Outlook / Exchange cloud inbox). It distinguishes from sibling list_emails by specifying cloud-based access versus Mail.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?
Explicitly states when to use ('when the user wants their Microsoft 365 / Outlook / Exchange inbox via the cloud'), the prerequisite (connected M365 account via connect_m365_account), and names the alternative (list_emails for Mail.app).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_list_eventsMicrosoft 365 List EventsBRead-onlyInspect
List upcoming calendar events from your Microsoft 365 / Outlook calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days ahead to look (default 7, max 30) | |
| limit | No | Max events to return (default 20, max 50) | |
| calendar | No | Calendar name to filter by — partial, case-insensitive match (optional). Omit to use the primary calendar. |
Output Schema
| Name | Required | Description |
|---|---|---|
| days | No | |
| count | No | |
| events | No | |
| calendar | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the behavioral scope 'upcoming,' which tells the agent it returns future events only, but it does not mention timezone handling, default calendar behavior beyond what the schema states, or any limitations. This adds some context without being 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?
The description is a single concise sentence that immediately communicates the tool's purpose. It is front-loaded and contains no fluff 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?
Given the output schema exists, return values are already documented. However, the presence of a similarly named sibling 'list_calendar_events' creates ambiguity that the description does not resolve. For a simple read-only tool with rich schema, the description is mostly adequate but lacks the contextual differentiation needed for confident tool selection.
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 covers 100% of the parameters with descriptions for 'days,' 'limit,' and 'calendar,' so the schema already explains their meaning. The description provides no additional parameter semantics beyond the schema, which meets the baseline but does not elevate 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 uses the specific verb 'List' with the resource 'upcoming calendar events from your Microsoft 365 / Outlook calendar,' clearly indicating the tool's function. However, it does not differentiate itself from the sibling tool 'list_calendar_events,' which appears to serve a similar purpose, so it misses the opportunity to distinguish among 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?
There is no explicit guidance on when to use this tool versus alternatives such as 'list_calendar_events' or other calendar-related tools. The description only implies usage for retrieving upcoming events, but no contexts, exclusions, or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_read_emailMicrosoft 365 Read EmailARead-onlyInspect
Use this when the user wants the full content of a Microsoft 365 email (message ID from m365_list_emails/m365_search_emails). Requires a connected M365 account. For a message found via list_emails/search_emails (Apple Mail), use read_email.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The email message ID from m365_list_emails or m365_search_emails |
Output Schema
| Name | Required | Description |
|---|---|---|
| cc | No | |
| id | No | |
| to | No | |
| body | No | |
| date | No | |
| from | No | |
| is_read | No | |
| subject | No | |
| from_address | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context by specifying 'Requires a connected M365 account' and clarifying that it retrieves 'full content' (as opposed to metadata), which goes beyond the annotation safety profile. However, it does not describe output format or potential errors, so a perfect score is not warranted.
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, front-loaded with the primary use case, and then provides a clear alternative. Every sentence adds value, with no redundancy or 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?
This is a simple tool with one parameter, read-only behavior, and an output schema present (as indicated by context signals). The description covers the prerequisite (connected M365 account) and the source of the required ID, leaving no significant gaps for a tool of this complexity.
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%: the only parameter 'id' is fully described in the schema as 'The email message ID from m365_list_emails or m365_search_emails.' The description repeats this source ('message ID from m365_list_emails/m365_search_emails') without adding new semantics, so it does not enhance the schema 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 clearly states the tool's purpose: 'Use this when the user wants the full content of a Microsoft 365 email.' It specifies the resource (email), the verb (read/full content), and explicitly distinguishes from the sibling tool read_email (Apple Mail) via 'For a message found via list_emails/search_emails (Apple Mail), use read_email.'
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 explicit when-to-use guidance: 'Use this when the user wants the full content of a Microsoft 365 email (message ID from m365_list_emails/m365_search_emails).' It also gives a clear alternative for Apple Mail messages, naming read_email as the correct sibling, and states the prerequisite of a connected M365 account.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_reply_emailMicrosoft 365 Reply EmailAInspect
Use this when the user wants to reply to a Microsoft 365 email (message ID from m365_list_emails). Requires a connected M365 account. Shows a preview first — set confirm=true to actually send. For replying to a message found in Apple Mail, use reply_email.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Message ID to reply to (from m365_list_emails or m365_read_email) | |
| confirm | No | Set to true to actually send (default: shows preview only) | |
| message | Yes | Your reply text | |
| reply_all | No | If true, reply to all recipients (default: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a key behavioral trait not present in annotations: it shows a preview first and only sends when confirm=true. It also notes the account requirement. This adds valuable context beyond the readOnlyHint/destructiveHint annotations, which only indicate non-read-only and non-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?
The description is two sentences, front-loaded with purpose and immediate usage context. Every sentence adds value: purpose, source of ID, prerequisite, behavioral flow, and alternative. No unnecessary 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?
The description fully covers purpose, usage guidelines, prerequisites, behavioral nuance (preview/confirm), and alternative. With full schema coverage and an output schema present, the agent has all necessary information to select and invoke 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?
The input schema has 100% coverage, providing descriptions for all four parameters. The description's mention of 'message ID from m365_list_emails' is redundant with the schema's description. No additional semantic meaning is added beyond the schema, so the baseline of 3 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's purpose: to reply to a Microsoft 365 email, referencing the message ID from m365_list_emails. It uses the specific verb 'reply' with a defined resource and explicitly distinguishes from the sibling tool reply_email for Apple 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 provides explicit when-to-use guidance ('Use this when the user wants to reply to a Microsoft 365 email'), states a prerequisite (connected M365 account), and names an alternative tool for Apple Mail ('use reply_email'). This directly helps the agent choose among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_search_contactsMicrosoft 365 Search ContactsBRead-onlyInspect
Search contacts in your Microsoft 365 address book by name, email, or company.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search term — name, email, or company |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| contacts | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds that it searches the Microsoft 365 address book by name, email, or company, but does not disclose other behaviors like result limits, pagination, or whether the search is case-insensitive. This is consistent with annotations and adds some context, but not rich 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?
The description is a single, clear sentence with no wasted words. It front-loads the action and resource, making it immediately understandable.
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 with one parameter, an output schema, and safety annotations. The description sufficiently conveys the core purpose and scope. It does not explain return values, but the output schema covers that, and the annotations handle safety. A slightly higher score would require explicit guidance on alternatives or behavioral details, but for its simplicity, it is nearly 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 schema already provides 100% coverage for the single parameter 'query', describing it as a search term for name, email, or company. The tool description essentially repeats this information, adding no new meaning beyond what the schema provides. 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 (search), resource (contacts), and scope (Microsoft 365 address book), and specifies the search fields (name, email, or company). It is distinct from list_contacts and get_contact, though it does not explicitly differentiate itself from sibling tools like search_contacts or search_m365_directory.
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 no guidance on when to use this tool versus alternatives such as list_contacts or get_contact. It does not state prerequisites, exclusions, or when not to use it, relying solely on the implied purpose of searching contacts.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_search_emailsMicrosoft 365 Search EmailsARead-onlyInspect
Use this when the user wants to find emails in their Microsoft 365 / Outlook mailbox via the cloud — requires a connected M365 account. By default searches sender, subject, AND body (Microsoft Graph's own $search default). Pass scope="metadata" to search only sender/subject (faster, no body scan), or scope="body" to search only the message body. For accounts added to the Mac's Mail.app, use search_emails.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20, max 50) | |
| query | Yes | Search query, e.g. 'budget Q2', 'from:alice@contoso.com', 'subject:invoice' | |
| scope | No | "all" (default — sender+subject+body, today's behavior), "metadata" (sender+subject only), or "body" (body only). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| emails | No | |
| search_scope | No | |
| search_backend | No | |
| search_coverage | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, destructiveHint=false. The description adds detail on default search behavior (sender, subject, body) and scope options, which is useful context beyond annotations. However, it doesn't mention potential speed/performance trade-offs or auth handling beyond 'requires a connected M365 account' which is already implied.
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?
Concise, three sentences with clear structure. Front-loads main use case, then explains scope. Each sentence adds value, but the mention of 'today's behavior' in schema might be 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?
Has output schema (context signal), so no need to describe return format. Description covers use case, scope options, and alternative routing. Given simplicity (3 params, no nested), complete for an agent to call 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 100%, so baseline is 3. But the description adds meaningful context: explains scope enum in terms of fields searched and performance implications ('faster, no body scan'), and gives examples for query. This goes beyond the schema's description, earning a 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?
The description clearly states the tool's purpose: finding emails in Microsoft 365 cloud mailbox. It distinguishes from search_emails (for Mac Mail.app) and indicates a specific verb 'find emails' with clear resource. The scope options add specificity.
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?
Explicitly states when to use: when user wants to find emails in M365/Outlook via cloud, and explicitly says to use search_emails for accounts added to Mac's Mail.app. This directly addresses alternatives and provides a clear exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
m365_send_emailMicrosoft 365 Send EmailAInspect
Use this when the user wants to send from their Microsoft 365 / Outlook account via the cloud — requires a connected M365 account. Shows a preview first — set confirm=true to actually send. For sending from an account configured in the Mac's Mail.app, use send_email.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC recipients (optional, comma-separated) | |
| to | Yes | Recipient email address. For multiple, separate with commas. | |
| body | Yes | Email body (plain text) | |
| confirm | No | Set to true to actually send (default: shows preview only) | |
| subject | Yes | Email subject |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint false, destructiveHint false), the description discloses critical behavior: it shows a preview first and only sends when confirm=true. It also mentions the prerequisite of a connected M365 account. This adds valuable context beyond structured 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 concise sentences, front-loaded with use case, then prerequisite, then confirmation behavior, and finally alternative. Every sentence earns its place; 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?
The description covers the core context: when to use, prerequisite, confirm behavior, and alternative. Output schema exists, so return values need no description. For a tool of this complexity, this is complete and well-rounded.
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 the schema already documents all parameters clearly. The description adds no new parameter-specific meaning beyond what the schema provides, only restating the confirm behavior already described in the schema. Baseline 3 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 sends emails from a Microsoft 365/Outlook account via the cloud, using a specific verb and resource. It also explicitly distinguishes itself from the sibling send_email tool which sends from Mail.app, making its 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 explicit when-to-use guidance: 'Use this when the user wants to send from their Microsoft 365 / Outlook account via the cloud'. It also names the alternative tool for Mac Mail.app accounts, giving clear exclusions. This fully covers usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
media_probeMedia ProbeARead-onlyInspect
Reports duration_ms, width, height, fps, whether it has audio, and file size for a video/audio file. Call it before editing to reason about the footage (compute trim ranges, pick a reframe crop). No permission required.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the media file. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is covered. The description adds additional behavioral info (reports specific fields, no permission required) but doesn't disclose any side effects or complex behaviors beyond what annotations 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 extremely concise—two sentences with no wasted words. It front-loads the output fields and immediately follows with usage advice, making it 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?
Despite lacking an output schema, the description fully enumerates the returned fields (duration_ms, width, height, fps, has audio, file size) and the tool's purpose. For a simple probe tool, this is complete and sufficient for an agent to understand what it does.
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 has 100% coverage with a description for 'path'. The tool description does not add further semantic details about the parameter (e.g., file format, absolute/relative), so it meets the baseline but does not exceed 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 clearly states the tool reports specific metrics (duration_ms, width, height, fps, audio presence, file size) for video/audio files, and explicitly distinguishes itself from sibling editing tools by advising to call it 'before editing'.
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 explicit usage guidance: 'Call it before editing to reason about the footage' and notes that no permission is required. While it doesn't explicitly list when not to use, the context with sibling editing tools makes the intended workflow clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_emailMove EmailADestructiveInspect
Moves an email to another mailbox (nested target folders are found by name). Pass account= (returned by list_emails/search_emails) so the message lookup targets one account instead of scanning all of them — without it, multi-account Macs are slow and can time out on bulk moves. If you know the folder the message is in, also pass mailbox= (the mailbox field from the listing) so the lookup searches it first.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| confirm | No | false | |
| mailbox | No | ||
| message_id | Yes | ||
| target_mailbox | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| moved | No | |
| warning | No | |
| message_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, and the description adds behavioral details beyond that: folder lookup by name, account-scoped search to avoid slowdowns, and mailbox hinting to speed up lookups. However, it does not mention the behavior of the `confirm` parameter or what happens when the target folder doesn't exist.
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 sentences, front-loaded with the action, then each optional parameter gets a reason. No filler or repetition of schema 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 mutation tool with 5 parameters and no schema descriptions, the description covers the core operation, parameter rationale, and performance caveats. The `confirm` parameter and exact error handling are not addressed, but the output schema likely covers return values, so the description is fairly complete overall.
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 0% schema description coverage, the description partially compensates by explaining `account` and `mailbox` and their provenance from listing tools, plus the meaning of `target_mailbox`. It does not explain `confirm`, and `message_id` is left to be inferred, but the most important parameters are semantically clarified.
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 starts with 'Moves an email to another mailbox' which is a specific verb+resource statement. It also adds a distinguishing detail about nested target folders being found by name, clearly separating it from email reading, sending, and replying 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?
The description gives explicit guidance on when to pass optional `account` and `mailbox` parameters, referencing list_emails/search_emails as providers. It explains performance implications and timeout risks, which helps the agent decide when to use this tool effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nordvpn_diagnoseNordVPN DiagnoseARead-onlyInspect
Run a diagnostic check on NordVPN: installation, login state, connection status, kill switch, and supported protocols. Useful for troubleshooting.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | Full formatted text report |
| account | No | |
| running | No | True if the NordVPN app is running |
| version | No | |
| connected | No | True if the VPN is connected |
| installed | Yes | True if NordVPN is installed |
| logged_in | No | True if a NordVPN account is logged in |
| protocols | No | Supported VPN protocols |
| kill_switch | No | True if the kill switch is enabled |
| auto_connect | No | True if auto-connect / connect on demand is on |
| subscription | No | |
| last_location | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is established. The description adds value by specifying exactly what components are examined, which goes beyond the schema and gives the agent context on the tool's scope. No side effects are disclosed, but none are expected given the read-only nature.
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, front-loaded with the primary action and resource, followed by a scannable list of diagnostic areas and a one-line purpose. No redundant or filler words; every sentence contributes.
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 being a simple tool, the description covers the purpose, the specific checks performed, and the troubleshooting use case. The availability of an output schema means return values need not be described, and no prerequisites or side effects are required for a diagnostic 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 the schema coverage is trivially 100% and the description has no parameter details to provide. The baseline score of 4 applies for parameterless tools.
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 a specific verb 'Run a diagnostic check' on the resource 'NordVPN' and enumerates the key components checked (installation, login state, connection status, kill switch, protocols). This distinguishes it from sibling tools like nordvpn_status and nordvpn_servers by indicating a broader diagnostic 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?
The phrase 'Useful for troubleshooting' provides a clear use case context, implying this tool is for comprehensive diagnosis rather than simple status checks. However, it does not explicitly name alternatives or exclusion criteria when compared to sibling tools like nordvpn_status or run_diagnostics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nordvpn_serversNordVPN ServersARead-onlyInspect
Get recommended NordVPN servers by country or specialty. Uses NordVPN public API (no account needed). Returns server name, hostname, country, city, load %, and supported technologies.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Server type filter: 'standard', 'p2p', 'double_vpn', 'onion', 'dedicated_ip'. Default: standard. | |
| limit | No | Number of servers to return (1-10). Default: 5. | |
| country | No | Country name or 2-letter code (e.g. 'US', 'United States', 'JP'). Omit for auto-recommendation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| servers | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds useful context beyond annotations, such as using a public API without authentication and returning specific fields (name, hostname, country, city, load, supported technologies). It does not contradict 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 with the purpose front-loaded, followed by key context (API usage, return fields). Every sentence adds value, no fluff 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 read-only list tool with optional parameters and an output schema, the description covers essential context: what it returns and the fact no account is needed. The schema covers parameter details, and the output schema handles return structure, so 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?
The input schema provides thorough descriptions for all three parameters (type, limit, country) with defaults and examples, so the schema carries the semantic weight. The description's mention of 'country or specialty' loosely maps to country and type parameters but does not add significant new 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?
The description clearly states the tool retrieves recommended NordVPN servers, with a specific verb ('Get') and resource ('recommended NordVPN servers'). It also mentions filtering by country or specialty, which distinguishes it from sibling tools like nordvpn_status and nordvpn_diagnose.
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 states it uses the NordVPN public API with no account needed, giving clear context for when this tool is appropriate. It lacks explicit mention of alternatives or exclusions, but the context sufficiently implies it is for listing servers, not diagnosing or checking status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nordvpn_statusNordVPN StatusARead-onlyInspect
Check NordVPN connection status: connected/disconnected, auto-connect, snooze, and last known location. Does NOT open NordVPN.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| version | No | |
| connected | No | |
| installed | No | |
| app_running | No | |
| auto_connect | No | |
| last_location | No | |
| snoozed_until | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark read-only, non-destructive, open-world false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it will not launch the NordVPN application, and it returns specific status fields like autoreconnect, snooze state, and last known location. 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?
One focused sentence plus one brief clarifying negative sentence. It front-loads the core verb and resource, lists concrete output facets, and avoids fluff. 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?
With no parameters, an output schema present, and annotations describing side-effect profile, the description supplies the necessary intent and the single most important caveat (does not open NordVPN). No gaps remain for an agent to choose and invoke this 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?
There are zero parameters, so the vacuous 100% schema coverage means the schema contains all relevant information. The description correctly implies a parameterless call and adds no confusing parameter semantics. Baseline 4 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 opens with an action verb 'Check' and a specific resource ('NordVPN connection status'), then enumerates the exact status aspects returned (connected/disconnected, auto-connect, snooze, last known location). The negative clause 'Does NOT open NordVPN' further disambiguates it from UI-launching tools; among siblings nordvpn_diagnose and nordvpn_servers have different scopes.
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 this tool is for reading VPN connection state, but it never states when it should be chosen over nordvpn_diagnose or nordvpn_servers, nor what to do if status is abnormal. It only offers a negative usage note (does not open the app). Therefore usage guidance is present but only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_list_databasesNotion List DatabasesARead-onlyInspect
Lists Notion databases cached on this Mac with their schema (column names and types). Use notion_read_database to get the rows.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| databases | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe read nature is covered. The description adds meaningful context by stating the data is 'cached on this Mac' and that the result includes schema, which is not visible in annotations or the empty input 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?
The description is two concise sentences that front-load the main purpose and then point to the sibling for row retrieval. Every part adds value; no fluff 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 zero-parameter list tool with an output schema and safe annotations, the description is complete: it states the local cache behavior, the schema payload, and directs to the sibling for rows. No critical usage 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?
The tool has zero parameters, so parameter semantics are straightforward; the baseline of 4 applies. The description adds no parameter details because none are needed, and the schema is empty, leaving no ambiguity.
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 ('Lists') and resource ('Notion databases'), and clarifies the cached local scope and payload (schema with column names/types). It clearly distinguishes itself from notion_read_database by explicitly directing row access to that sibling.
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 tells the agent to use notion_read_database when rows are needed, providing a clear alternative for a different purpose. It implies this tool is for listing cached database schemas, but it doesn't explicitly contrast with notion_search or notion_list_pages as possible alternatives for discovering databases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_list_pagesNotion List PagesARead-onlyInspect
Lists Notion pages cached on this Mac (titles, last edited, hierarchy), newest first. Reads the Notion desktop app's local cache — no Notion API, no integration token. Note: only pages visited in Notion (or marked Available offline) are cached.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max pages (default 50, max 500) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| pages | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds valuable context about the data source (local desktop app cache), that no API token is required, and the condition that only visited/offline pages are cached. This goes beyond the annotations and explains 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 sentences with zero filler. The main purpose is front-loaded, followed by essential caveats. 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?
The tool is simple with one optional parameter and an output schema. The description covers the scope, source, and limitations, making it fully complete for the agent to 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?
Schema description coverage is 100%, so the 'limit' parameter is fully documented in the schema. The description does not add any extra detail about parameters, which is acceptable given the schema already covers it. Baseline 3 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 it lists Notion pages cached on the Mac, including the kinds of info (titles, last edited, hierarchy) and sort order (newest first). It distinguishes itself from sibling tools like notion_search or notion_read_page by specifying the local cache source.
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 when to use this tool: when you need cached pages from the local Notion app without API access. It notes the limitation that only visited or offline-marked pages are cached, which helps the agent decide whether this tool fits. However, it doesn't explicitly name alternative tools like notion_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_list_workspacesNotion List WorkspacesARead-onlyInspect
Lists the Notion workspaces cached on this Mac. Start here for Notion — its output feeds notion_list_databases / notion_list_pages / notion_search. Does not return workspace members: the names and emails of third parties are not part of listing workspaces.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| workspaces | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: the data is 'cached on this Mac' (local, possibly stale) and explicitly excludes third-party member names/emails. This enriches the agent's understanding of what the operation returns and its source.
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 sentences with zero redundancy: the first defines the action, the second provides entry-point guidance, the third preempts a likely failure expectation. It is concise, front-loaded, and every sentence adds distinct 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 zero-parameter tool with an output schema available, the description covers the essential context: what it lists, where the data comes from, how it fits into the Notion tool family, and what it intentionally omits. Nothing else is needed for an agent to correctly invoke it.
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 has zero parameters, so the baseline is 4 because there is nothing to document. The description doesn't add param details, but none are needed. It correctly implies the tool takes no arguments by listing no parameters in its usage context.
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: 'Lists the Notion workspaces cached on this Mac.' It also distinguishes itself from sibling Notion tools by noting it feeds notion_list_databases / notion_list_pages / notion_search, and it clarifies what it does not do (workspace members). This is unambiguous and separates it from 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 explicitly says 'Start here for Notion' and names the downstream tools that consume its output, which tells the agent exactly when to choose this tool. It also gives a negative constraint, 'Does not return workspace members,' preventing misuse when member data is needed. This is explicit routing guidance with no inference required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_open_pageNotion Open PageAInspect
Opens a Notion page in the desktop app (deep link). Accepts a page id or title. Useful to let the user view or edit a page, or to pull an uncached page into the local cache.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id (UUID) or title (partial, case-insensitive) |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | No | |
| opened | No | |
| page_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the deep-link mechanism and the side effect of caching ('pull an uncached page into the local cache'), which goes beyond the annotations (readOnlyHint=false, destructiveHint=false). It also implies the app is launched, providing useful 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?
The description is only two sentences, front-loaded with the primary action, and contains no redundant wording. Every clause adds 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 simple one-parameter tool with an output schema, the description adequately covers purpose, parameter format, and use cases. It omits potential prerequisites (e.g., desktop app installation) but that's a minor gap given the tool's simplicity.
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 already comprehensively describes the 'page' parameter (UUID or partial title, case-insensitive). The description merely echoes this without adding new semantic detail, so it meets the baseline for high schema coverage.
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: 'Opens a Notion page in the desktop app (deep link).' This is a specific verb+resource combination that distinguishes it from sibling tools like notion_read_page (reads content) and notion_search (finds pages).
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: 'Useful to let the user view or edit a page, or to pull an uncached page into the local cache.' This implies when to use it and hints at benefits, though it doesn't explicitly name alternatives or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_read_databaseNotion Read DatabaseARead-onlyInspect
Reads the cached rows of a Notion database with their properties mapped through the schema. Accepts the database id or name (partial match). Only locally-cached rows are returned.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 50, max 500) | |
| database | Yes | Database id (UUID) or name (partial, case-insensitive) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| rows | No | |
| count | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is clear. The description adds valuable context about caching ('Only locally-cached rows are returned') and schema mapping, which go beyond the annotations and inform the agent about data freshness and structure.
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 main purpose. Every clause adds meaningful information: what it reads, how properties are mapped, how to identify the database, and the crucial caching limitation. 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?
The tool is simple (2 params, output schema present) and the description covers the essential behavioral aspect (caching) that could affect use. With annotations and schema handling safety and parameter details, the description is sufficient 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 100%, so the parameters are already well-documented. The description adds that the database accepts id or name (partial match), but the schema already states this ('Database id (UUID) or name (partial, case-insensitive)'). Thus, the description provides little additional parameter 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 clearly states the tool reads cached rows of a Notion database, with a specific verb and resource. It distinguishes itself from siblings like notion_read_page (page-level read) and notion_search by emphasizing the database context and caching 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 implies usage context: it reads cached rows, so it's for when cached data is acceptable. The note that only locally-cached rows are returned serves as an implicit warning against using it for fresh data, but it doesn't explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_read_pageNotion Read PageARead-onlyInspect
Reads a Notion page from the local cache and returns its content as markdown (headings, lists, to-dos, code, files, subpage links). Accepts a page id or a title (partial match). If parts of the page aren't cached yet, says so — open the page in Notion or mark it Available offline for full content.
| Name | Required | Description | Default |
|---|---|---|---|
| page | Yes | Page id (UUID) or title (partial, case-insensitive) | |
| max_blocks | No | Max blocks to render (default 300, max 1000) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| note | No | |
| title | No | |
| last_edited | No | |
| blocks_rendered | No | |
| uncached_blocks | No | |
| content_markdown | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds valuable behavioral context beyond that: it reveals the local cache dependency, that partial title matches are accepted, and that the tool explicitly reports when content is missing from cache. This gives the agent transparency about limitations and side effects (none) and mitigates false expectations.
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 only three sentences, with the primary action and output in the first sentence. It is front-loaded, and every sentence provides useful information without redundancy. No waste or 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?
The tool is simple (2 params, existing output schema, strong annotations). The description covers the tool's purpose, input flexibility, cache limitations, and remediation steps. Given that an output schema exists, there is no need to describe return values. It is complete for an agent to select and invoke correctly, and it differentiates from siblings through the cache emphasis.
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 the schema already documents both 'page' (id or title, partial, case-insensitive) and 'max_blocks' (default 300, max 1000). The description adds no new parameter-level detail beyond rephrasing the page parameter, so it does not elevate beyond the baseline. It does mention 'partial match,' but that is already present in 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 tool 'Reads a Notion page from the local cache and returns its content as markdown.' It specifies the resource (Notion page), the action (reads), and the output format (markdown). It also distinguishes from siblings by emphasizing 'local cache' and listing content types (headings, lists, to-dos, code, files, subpage links), which separates it from notion_read_database and notion_open_page.
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 context: this tool reads from local cache, implying that for live or uncached content, alternatives may be needed. It explicitly states the fallback behavior ('open the page in Notion or mark it Available offline') when content isn't cached. However, it does not explicitly name alternative sibling tools or state when not to use it, so it stops 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.
notion_searchNotion SearchARead-onlyInspect
Searches cached Notion content (page titles and block text) for a phrase, case-insensitive. Returns matching blocks with the page they belong to. Only locally-cached content is searched — pages never opened in Notion won't match.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20, max 100) | |
| query | Yes | Text to search for |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| query | No | |
| results | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered. The description adds important behavioral context: case-insensitivity, returning blocks with page association, and the cached-only limitation. This goes well beyond the annotations and helps set expectations about coverage and 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 tightly worded sentences. The first front-loads the verb, target content, and action; the second adds a critical caveat without redundancy. Every clause earns its place and there's 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?
Given the tool's simplicity, an output schema is present, annotations cover safety, and the schema documents both parameters. The description supplies the essential behavioral nuance (cached-only limitation) and return format, leaving no major gaps. It is 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 input schema covers 100% of parameters with descriptions (query and limit). The description mentions 'phrase' and case-insensitivity but does not add any meaning beyond the schema's own parameter descriptions. Baseline 3 is appropriate since the schema already documents the parameters 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?
The description starts with a specific verb 'Searches' and clearly defines the scope: cached Notion content (page titles and block text), with a case-insensitive phrase match. It also states the return type (matching blocks with their parent page), which distinguishes it from sibling tools like notion_list_pages or notion_read_page that don't perform text 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?
Provides a key usage caveat: only locally-cached content is searched and pages never opened won't match. This gives clear context on when results may be incomplete, but it doesn't explicitly name alternative tools for full Notion search or when to use them instead. No exclusionary guidance, but the context is useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_delete_fileOneDrive Delete FileADestructiveInspect
Deletes a file or empty folder from OneDrive.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file or folder | |
| confirm | No | Must be true to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| deleted | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true and readOnlyHint: false, establishing the safety profile. The description adds the useful constraint that only empty folders can be deleted, which is beyond the annotations. However, it omits mention of the confirm parameter and whether deletion is permanent or moves to trash.
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 concise sentence that conveys the essential purpose without redundancy. Every word earns its place, making it highly scannable.
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 a full output schema and annotations, the description is largely sufficient. It covers the core action and an important constraint (empty folder). However, it could optionally mention the confirm requirement and the nature of deletion (permanent vs. trash) for added completeness, though these are partly covered by 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?
The schema fully documents both parameters (path with 'Absolute path' and confirm with 'Must be true to delete'), so the description adds no additional parameter meaning. With 100% schema coverage, the baseline of 3 applies without any extra compensation.
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 (deletes) and the target (a file or empty folder on OneDrive), using a specific verb and resource. It distinguishes from sibling tools like onedrive_write_file or onedrive_move_file by the deletion action and the OneDrive 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?
No guidance is given on when to use this tool versus alternatives, nor are there any exclusions or prerequisites. The only implicit usage is the destructive action itself, but the description does not mention the required confirm flag or contrast with non-destructive options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_file_infoOneDrive File InfoARead-onlyInspect
Returns metadata for a file or folder: size, modification date, type, and extension. Faster than listing the parent directory when you only need info about one item.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file or folder |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| path | No | |
| size | No | |
| type | No | file | directory |
| created | No | |
| modified | No | |
| extension | No | |
| size_human | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the safety profile is covered. The description adds useful context about the metadata fields and performance characteristics, but does not disclose other behaviors like path format constraints, error conditions, or authentication requirements. This is acceptable given the simple, read-only nature.
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 exceptionally concise: two sentences that front-load the purpose and then add a practical rationale. Every word earns its place, with no 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 single-parameter, read-only metadata tool with an output schema, the description covers what the tool does, why to use it, and its performance trade-off. The presence of an output schema means the return values need not be detailed in the description, making this complete for the tool's simplicity.
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 fully documents the single 'path' parameter with a clear description. The description adds no additional parameter-level detail, but because schema coverage is 100%, a baseline of 3 is appropriate without further elaboration.
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 returns metadata for a file or folder, listing specific fields (size, modification date, type, extension). It distinguishes itself from listing tools by explicitly noting it is faster for single-item queries, which differentiates it from onedrive_list_files and similar sibling 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 clear usage context: use when you need info about one item instead of listing the parent directory. It implies the alternative (listing) but does not explicitly name sibling tools or state when not to use it, so it falls slightly 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.
onedrive_list_filesOneDrive List FilesARead-onlyInspect
Lists files and folders in a OneDrive path. Use onedrive_root to find valid paths. Returns up to limit entries (default 1000, max 5000); large folders are truncated with a note — narrow the path for more specific results.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the OneDrive folder | |
| limit | No | Max entries to return (default 1000, max 5000). Folders with more entries are truncated; the response sets truncated=true and reports the total. |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | Entries returned in this response. |
| items | No | |
| total | No | Total entries in the folder. |
| truncated | No | True when total exceeds the limit. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, and the description adds useful behavioral context about the limit parameter, truncation of large folders, and the response containing a note. It does not contradict annotations and enhances the agent's understanding of result size and 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?
The description is two sentences long, with the primary purpose in the first sentence and essential usage details in the second. Every word adds value, and it is well-structured for quick comprehension.
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 a simple read-only list operation with full schema coverage and an output schema. The description covers the key usage (listing, path resolution, limit/truncation) and is sufficient for an agent to invoke it correctly without needing extra 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?
Though schema coverage is 100%, the description adds value by explaining that valid paths come from onedrive_root, and clarifies the limit behavior (default/max, truncation). This goes beyond the bare schema descriptions and helps the agent select meaningful 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?
The description clearly states the verb ('Lists') and resource ('files and folders in a OneDrive path'), and distinguishes this tool from siblings like onedrive_search_files and onedrive_file_info by its focus on directory listing. It also provides a dependency pointer to onedrive_root, further clarifying its role.
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 clear context by instructing to use onedrive_root for valid paths and advising to narrow the path for large folders. However, it does not explicitly mention alternatives for searching or file info, so it lacks a full when-not-to-use dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_move_fileOneDrive Move FileADestructiveInspect
Moves or renames a file/folder within OneDrive.
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Source path | |
| confirm | No | Must be true to move | |
| destination | Yes | Destination path |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | |
| from | Yes | |
| moved | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, covering the safety profile. The description adds no extra behavioral context beyond the action itself, such as the confirmation requirement or potential side effects. However, it does not contradict the annotations, and the annotations carry the important warning, so a neutral score is appropriate.
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 that directly conveys the tool's purpose with no filler or redundant information. Every word 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 move/rename operation, the description is adequate but minimal. It omits the critical behavior that 'confirm' must be true to execute the move, which is documented only in the schema. While the output schema exists and annotations handle safety, the description could provide a bit more context about the confirmation requirement and the difference between moving and renaming.
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 provides descriptions for all three parameters, including 'confirm' ('Must be true to move'). The tool description adds no additional parameter meaning beyond what the schema already covers, so the baseline score 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 action ('Moves or renames'), the resource ('a file/folder'), and the scope ('within OneDrive'). It effectively distinguishes this from sibling tools like onedrive_delete_file or onedrive_write_file by specifying the relocation/rename purpose.
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. The description does not mention situations like renaming versus moving, or when to prefer this over onedrive_write_file. It relies entirely on the tool's name and the verb 'moves or renames' to imply usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_read_fileOneDrive Read FileARead-onlyInspect
Reads a text file from your OneDrive synced folder. Supports .txt, .md, .csv, .json, .xml, .log and several code file types. Auto-detects UTF-8, falls back to Latin-1/Windows-1252 for legacy files (common in Latin American banking .TXT padrones). For files elsewhere on this Mac, use file_read.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file | |
| offset | No | Start reading at byte offset (default 0) | |
| encoding | No | Force a specific encoding: 'auto' (default), 'utf8', 'latin1', 'cp1252', 'ascii', 'utf16' | |
| max_bytes | No | Maximum bytes to read (default 1048576 = 1 MB, capped at 10485760 = 10 MB) |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Absolute path of the file |
| bytes | Yes | Total file size in bytes |
| offset | No | Byte offset the read started at |
| content | Yes | Decoded file text content |
| encoding | No | Encoding used to decode (utf8 | cp1252 | latin1 | ascii | utf16) |
| truncated | No | True if more content remains beyond what was returned |
| bytes_read | No | Number of bytes read in this slice |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only behavior is covered. The description adds valuable behavioral context by explaining encoding auto-detection and fallback: 'Auto-detects UTF-8, falls back to Latin-1/Windows-1252 for legacy files.' This goes beyond what the annotations or schema communicate.
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 three sentences, front-loaded with the core purpose, then supporting details on formats and encoding, and ends with a concise pointer to the alternative. Every sentence adds value with no repetition or fluff.
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 output schema exists and annotations cover safety, the description fully covers the relevant operational context: supported file types, encoding behavior, and scope limitation. It also names the sibling tool for out-of-scope files, making the tool's placement in the overall ecosystem clear.
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 already provides 100% coverage with descriptions for all four parameters, earning a baseline of 3. The description enhances parameter meaning by explaining the file type scope and the practical encoding fallback use case, which directly informs how to interpret 'encoding: auto' and the 'path' 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?
The description opens with a specific verb and resource: 'Reads a text file from your OneDrive synced folder.' It clearly distinguishes itself from the sibling file_read tool by stating 'For files elsewhere on this Mac, use file_read,' and it lists supported file types, making its scope 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?
It explicitly states when to use this tool (files in the OneDrive synced folder) and when not to, with a direct alternative: 'For files elsewhere on this Mac, use file_read.' This satisfies the requirement for explicit usage guidance and alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_rootOneDrive RootARead-onlyInspect
Lists all mounted OneDrive directories on this Mac. Start here for OneDrive — the mount paths it returns are what the other onedrive_* tools (onedrive_list_files, onedrive_read_file, onedrive_search_files) need.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| roots | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond that — it doesn't describe what happens if no OneDrive directories are mounted, whether it auto-mounts, how many paths to expect, or whether paths may be stale/expired. With no annotations covering mount-state behavior, the description should add this context but doesn't.
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. The first sentence states the core function, the second provides the essential context about how the result connects to the other onedrive_* tools. 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 tool has an output schema, zero parameters, and clear annotations. The description successfully explains what the mount paths are for and names the dependent tools. It's complete for a zero-input listing tool, though it could mention edge cases like zero mounted directories. Given the simplicity, the description is adequately 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 has 0 parameters and schema coverage is 100%, so the schema fully documents the input. The description adds value by explaining what the return values (mount paths) represent and how they feed into the dependent tools. With no parameters to document, this earns a strong baseline score for clarifying the output contract.
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: 'Lists all mounted OneDrive directories on this Mac.' It clearly scopes to this Mac and distinguishes its role as an entry point versus the other onedrive_* tools that list/read/search files. The purpose is unambiguous and differentiates from sibling onedrive 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 explicitly says 'Start here for OneDrive' and explains that the mount paths returned are what the other onedrive_* tools (onedrive_list_files, onedrive_read_file, onedrive_search_files) need. This provides clear when-to-use guidance and even names the dependent siblings, giving the agent a workflow sequence. No exclusions needed since no alternative root tool exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_search_filesOneDrive Search FilesARead-onlyInspect
Searches for files by name in a OneDrive directory (recursive). Returns up to max_results matches (default 50); raise max_results or narrow the root for more.
| Name | Required | Description | Default |
|---|---|---|---|
| root | No | Root OneDrive path to search in (optional) | |
| query | Yes | Filename pattern to search for | |
| max_results | No | Maximum results (default 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only and non-destructive, so the description adds value beyond them by disclosing recursive traversal, the max_results cap, and default of 50. It stops short of deeper behavior like case sensitivity or path normalization, but the added detail is meaningful.
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 core purpose, then a direct operational tip. No wasted words; 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 search tool with rich output schema and full parameter coverage, the description sufficiently explains the behavior, limits, and tuning approach. It does not need to describe return values because an 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 100%, so baseline is 3. The description adds a relationship between root and max_results ('raise max_results or narrow the root for more'), which helps agents understand how to achieve broader or narrower searches beyond the raw schema definitions.
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 ('Searches for files by name') and resource ('OneDrive directory'), with an important scoping detail ('recursive'). It clearly distinguishes this from related tools like onedrive_list_files by focusing on filename search semantics.
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 when-to-use context: searching by filename rather than listing. It also gives actionable tuning guidance ('raise max_results or narrow the root for more'), but does not explicitly mention alternatives or exclusion criteria, which would push it higher.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_set_scopeOneDrive Set ScopeAInspect
Restricts LMCP's OneDrive access to a specific folder. Once set, all OneDrive tools (read, write, list, search, delete, move) only work inside the allowed folder. Pass an empty folder to remove the restriction. Changes take effect immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | Allowed folder path relative to the root (e.g. '/000-Claude Personal Agent'). Empty string removes the scope. | |
| confirm | No | Must be true to apply | |
| root_name | Yes | OneDrive root name (from onedrive_root, e.g. 'OneDrive-WPPCloud') |
Output Schema
| Name | Required | Description |
|---|---|---|
| root | No | |
| access | No | |
| effect | No | |
| scope_set | No | |
| scope_removed | No | |
| allowed_folder | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond the annotations: the change is persistent and affects all subsequent OneDrive operations across read, write, list, search, delete, and move. It also states that changes take effect immediately and that passing an empty folder removes the restriction, which is valuable reversal information. Annotations only cover read/write/destructive hints, so this adds substantial 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 well-structured. It opens with the primary purpose, then explains the scope of the effect, how to remove the restriction, and the immediacy of the change. Every sentence earns its place with no fluff 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?
The tool is a configuration/safety setting with significant cross-tool implications. The description fully captures the essential behavior: what it restricts, which operations are affected, how to remove the restriction, and that changes are immediate. Since an output schema exists, return values are covered elsewhere. The description is complete for this tool's complexity.
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 each parameter having a clear description. The tool description adds no new information about parameters beyond what the schema already provides (e.g., folder example, empty string behavior, confirm must be true, root_name source). Thus the description does not need to compensate, and a baseline score of 3 is appropriate because it does not add extra semantic value.
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's purpose: 'Restricts LMCP's OneDrive access to a specific folder.' It uses a specific verb (restricts) and identifies the resource (OneDrive access). It distinguishes from sibling tools (onedrive_read_file, onedrive_delete_file, etc.) by explaining it is a scoping configuration that affects all other OneDrive 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 clear context for when to use the tool: when you want to limit LMCP's OneDrive operations to a specific folder. It explains the effect ('all OneDrive tools... only work inside the allowed folder') and how to undo it ('Pass an empty folder to remove the restriction'). It does not explicitly state when not to use it or name alternative tools, but the usage context is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
onedrive_write_fileOneDrive Write FileBInspect
Writes text content to a file in OneDrive.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the file in OneDrive | |
| confirm | No | Must be true to write | |
| content | Yes | Text content to write |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| bytes | Yes | |
| written | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, and the description adds no additional behavioral detail (e.g., overwrite behavior, confirmation requirement, permissions, or failure modes). The confirm parameter in the schema is a critical behavioral cue, but the description does not mention it.
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, efficient sentence that directly states the tool's function with 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 simple write operation, the description is adequate but minimal. It omits the important confirmation requirement and any notes on potential overwriting, though the schema covers parameter details. With no output schema visible, the description could have added return-value 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 100%, so all three parameters are documented in the input schema. The description adds no extra meaning beyond the schema, keeping the score at the baseline of 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?
The description uses the specific verb 'Writes' and names the resource ('text content to a file in OneDrive'), distinguishing it clearly from sibling tools like onedrive_read_file or onedrive_move_file. It provides concise and unambiguous purpose.
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, nor are there usage preconditions or exclusions. The description simply states the action without context, leaving the agent to infer suitability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
outlook_diagnoseOutlook DiagnoseARead-onlyInspect
Checks which email accounts are configured in Microsoft Outlook and compares them with Mail.app. If Outlook has accounts not in Mail.app, guides the user to add them so all email tools work seamlessly.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Plain-language guidance |
| report | No | Full formatted text report |
| installed | Yes | True if Microsoft Outlook is installed |
| outlook_accounts | No | |
| mail_app_accounts | No | |
| missing_from_mail_app | No | Outlook account emails not present in Mail.app |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms the tool is read-only (diagnose/compare) and non-destructive, aligning with annotations. It adds behavioral details (comparison and guidance) beyond annotations, but does not describe return format; output schema covers that. 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?
The description is two sentences, concise, and front-loaded with the primary action. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and annotations that already signal read-only and non-destructive behavior, the description provides sufficient context about when and why to use the tool. The output schema exists, so return value details are covered elsewhere.
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?
No parameters exist in the input schema, so the parameter semantics dimension is automatically met. The description does not need to add parameter details.
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's action: 'checks' Outlook accounts, 'compares' with Mail.app, and 'guides' the user. It specifies the resource (email accounts) and the outcome (all email tools work seamlessly). The tool is distinct from siblings like list_accounts by including comparison and guidance.
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 implicitly tells when to use: when you need to reconcile accounts between Outlook and Mail.app. It does not explicitly state when not to use or suggest alternatives, but the context is clear enough for an AI agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pdf_readPDF ReadARead-onlyInspect
Reads and extracts text from a PDF document (.pdf file).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the PDF file | |
| max_pages | No | Max pages to extract (default: all) |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | Extracted text content |
| chars | Yes | Number of characters in the extracted text |
| pages | No | Total number of pages in the PDF |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows the operation is safe. The description adds the context that it extracts text, which is useful but does not go beyond that. It does not mention behavior for image-based PDFs, pagination via max_pages, or error cases. 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?
The description is a single concise sentence that is front-loaded with the core action and resource. It contains no filler or redundant information, making it easy to parse quickly.
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 a simple interface with 2 parameters and an output schema, so the description does not need to explain return values. The core behavior is stated. However, it could be slightly more complete by noting that it works only on text-based PDFs or that max_pages limits extraction, but the schema covers parameter details. Overall adequate for the tool's simplicity.
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 covers 100% of parameters with descriptions (path and max_pages), so the schema does the heavy lifting. The description mentions 'extracts text' but does not add any additional semantics about how path or max_pages behave, such as default behavior for max_pages or path requiredness.
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 ('Reads and extracts text') and identifies the resource ('PDF document (.pdf file)'). This clearly distinguishes pdf_read from sibling file-reading tools like file_read or gdrive_read_file, which target different file types.
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 usage is implied by the description: it is specifically for PDF files. However, it does not explicitly state when to use this tool over alternatives, nor does it mention any exclusions (e.g., scanned PDFs, encrypted PDFs, or size limits). The distinct file type provides some guidance, but no direct comparison with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
permissions_statusPermissions StatusARead-onlyInspect
Reports the TCC permission state (screen recording, accessibility, microphone) this app needs to capture the screen and drive other apps' UI. Call it before a capture/automation run and surface the grant hints instead of failing mid-sequence. Screen Recording / Accessibility are granted in System Settings (not a JIT dialog); the URLs open the exact pane.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate read-only, non-destructive. Description adds context: it only reports state without modification, specifies that permissions are granted in System Settings (not JIT dialogs), and provides URLs to open the exact panes. 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?
Three sentences, each earning its place: purpose and permission list, usage guidance, additional context on permission granting. No wasted words, front-loaded with essential 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?
Given no output schema, description could detail the return format or structure. It states 'reports the TCC permission state' but not the shape. Slight gap, but still adequate for a tool with no parameters and clear intent.
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?
No parameters exist, so description carries no burden. Schema coverage is 100% automatically. Description adds no param info which is acceptable. Baseline score of 4 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 it reports TCC permission state (screen recording, accessibility, microphone) needed for capture/automation. It distinguishes itself from sibling tools like 'list_missing_permissions' by specifying exact permissions and usage context.
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?
Explicitly advises calling before capture/automation runs and surfacing grant hints to avoid mid-sequence failures. Provides details about permissions being set in System Settings (not JIT dialogs) and mentions URLs for direct access, but could be clearer about when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ppt_createPowerPoint CreateAInspect
Creates a PowerPoint presentation (.pptx) at path from an array of slides, each {title, bullets:[…]}. Requires confirm=true — called without it, returns a preview of the deck instead of writing the file. The path must be somewhere Local MCP can write; Desktop/Documents/Downloads may need a one-time Files-and-Folders grant (System Settings → Privacy & Security → Files and Folders). Returns {created, path, slides}.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Output path for the .pptx file | |
| slides | Yes | Array of {title, bullets:[]} slide objects | |
| confirm | No | Must be true to create |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Path of the created .pptx file |
| slides | Yes | Number of slides created |
| created | Yes | True when the file was created |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description adds key behavioral details: the confirm gate that switches between preview and actual file creation, and the macOS Files-and-Folders permission caveat for certain directories. This goes well beyond what 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 sentences, each earning its place: purpose, confirm behavior, and permission note. Front-loaded with the primary function, no redundant or vague 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?
With an output schema present and only 3 parameters, the description covers the create action, input format, confirmation semantics, permission prerequisites, and return value. This is sufficient for an agent to invoke 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 100%, so baseline is 3. The description adds meaning by clarifying that confirm must be true to write and returns a preview otherwise, and by noting path permission constraints. This enriches the schema definitions.
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 opens with a specific verb+resource: 'Creates a PowerPoint presentation (.pptx) at `path` from an array of slides'. It clearly distinguishes this from sibling tools like ppt_read and word_create by outlining the exact input structure and output 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 gives clear usage context by explaining the confirm=true requirement and the preview behavior when absent, plus the writable-path permission note. However, it does not explicitly name alternatives like ppt_read or when not to use this tool, so it stops 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.
ppt_readPowerPoint ReadARead-onlyInspect
Reads slide text content from a PowerPoint presentation (.pptx file).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the .pptx file |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of slides |
| slides | Yes | Per-slide structured content ({slide, title, bullets[]}), mirroring ppt_create |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful scope ('slide text content') but does not disclose edge cases like file access errors or limitations on embedded objects. Consistent with annotations, adding some value without being overly detailed.
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 sentence that front-loads the verb and resource, with zero wasted words. It is appropriately sized for the tool's simplicity.
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 one fully documented parameter and an output schema present, the description sufficiently explains the core functionality. No additional details about return values are needed since the output schema exists. The tool is fully contextualized for an AI agent.
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 the parameter 'path' is already fully documented as 'Absolute path to the .pptx file'. The description adds no additional semantic meaning beyond this, so a baseline of 3 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 uses a specific verb ('Reads') and resource ('slide text content from a PowerPoint presentation (.pptx file)'), clearly distinguishing this from siblings like ppt_create, pdf_read, and word_read. It precisely communicates the tool's function without ambiguity.
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 when to use the tool—when you need to extract text from a .pptx file. It does not explicitly mention alternatives or exclusions, but the filename and extension in the description provide clear context. Sibling names reinforce the distinction, so this is a clear but not fully explicit guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_emailRead EmailARead-onlyInspect
Use this when the user wants the full content of an email that lives in the Mac's Apple Mail (message ID from list_emails/search_emails). For a Microsoft 365 message ID from m365_list_emails, use m365_read_email. Pass account= (and mailbox= if known, both from list_emails/search_emails) so the lookup targets one account instead of scanning all of them. Call sequentially, not in parallel — concurrent calls serialize behind Mail.app's JXA lock and later calls will time out.
Performance: body fetch is the primary latency source (avg 20s on slow IMAP). Pass include_body=false to skip it and get metadata-only (fast). Pass max_body_chars=N to cap the body at N chars after HTML stripping (default 30000; 0=unlimited). Response includes body_fetch_ms when fetch took >2s, body_omitted=true when skipped, body_truncated_at=N when cut.
When a body isn't cached on this Mac, read_email returns metadata with body_omitted=true and body_omit_reason="not_downloaded" (iCloud/IMAP optimized storage) rather than making Mail fetch it (that can be slow and tie Mail up). If the user wants it anyway, retry with force_download=true to have Mail pull the body over IMAP now and return it (waits up to ~60s). Off by default; ignored while Mail is in a cooldown.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| mailbox | No | ||
| message_id | Yes | ||
| include_body | No | true | |
| force_download | No | false | |
| max_body_chars | No | 30000 |
Output Schema
| Name | Required | Description |
|---|---|---|
| cc | No | |
| id | No | |
| to | No | |
| body | No | |
| date | No | |
| from | No | |
| unread | No | |
| account | No | |
| mailbox | No | |
| subject | No | |
| body_omitted | No | |
| body_fetch_ms | No | |
| body_truncated_at | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnly and non-destructive, so the description adds value by covering performance latency, body caching behavior, body_omitted/truncated/omit_reason output fields, force_download semantics, and cooldown handling. It discloses that concurrent calls serialize and may time out, none of which is in 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?
The description is long (3 paragraphs) but information-dense with no filler; each section covers usage, performance, and edge cases. The structure mirrors parameter order and includes practical numbers (20s, 30000, 60s) that are directly useful.
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 an output schema present, the description doesn't need to enumerate all return fields, but it still documents the conditional response fields (body_omitted, body_truncated_at, body_fetch_ms) and handles edge cases (not_downloaded, cooldown, force_download). This is comprehensive for a tool with 6 parameters, 1 required, and complex caching 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 has no per-parameter descriptions (0% coverage), but description explains every parameter's purpose and defaults: account/mailbox scoping from list_emails/search_emails, include_body=false for metadata-only, max_body_chars cap with 0=unlimited, and force_download to trigger IMAP fetch. This fully compensates for the missing schema descriptions.
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 opens with a specific use case—retrieving full email content from Apple Mail using a message ID from list_emails/search_emails—and explicitly distinguishes the sibling m365_read_email for Microsoft 365 messages. It names the resource (Apple Mail email) and a clear verb (read).
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 states exactly when to call (user wants full email content) and provides an explicit alternative (m365_read_email for M365). It advises passing account/mailbox to narrow lookup, warns against parallel calls due to JXA lock, and gives guidance on include_body/force_download based on caching state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_messagesRead MessagesARead-onlyInspect
Reads messages from an iMessage conversation by chat ID or contact name.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages (default 50) | |
| chat_id | No | Chat identifier from list_message_chats | |
| contact_name | No | Contact name substring (alternative to chat_id) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| chat_id | No | |
| messages | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with that. It adds the iMessage scope and identifier options but does not disclose ordering, pagination, or default limit (which is covered 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?
The description is a single, concise sentence that front-loads the action and resource, 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 read-only tool with an output schema and full schema parameter coverage, the description covers the essential identifier options. It could potentially note the mutually exclusive nature of chat_id and contact_name, but the schema already does that, so the description is complete enough.
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 the schema fully documents all three parameters. The description merely restates the chat_id/contact_name parameters without adding new information about limit 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 uses the specific verb 'Reads' and clearly identifies the resource as 'messages from an iMessage conversation'. It also distinguishes the tool from siblings like send_message or search_messages by mentioning the two identification methods (chat ID or contact 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 implies usage for reading iMessage conversations but does not explicitly state when to prefer it over search_messages or how it complements list_message_chats. No exclusions or alternative tools are mentioned, though the schema hints at list_message_chats for obtaining chat_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_noteRead NoteBRead-onlyInspect
Reads the full content of a note by name or ID.
CHECK body_format BEFORE WRITING THE BODY BACK. "markdown" means the note's formatting (headings, bold/italic, bullet/numbered lists, checkboxes, links, monospaced) came through as Markdown and update_note takes it back as-is — literal *, backticks and brackets arrive backslash-escaped so they survive the round trip. "plain_text" means the formatting could NOT be recovered and body is flat text: writing it back REPLACES the note's structure with flat text, so edit the note by other means (or ask the user) instead of rewriting the whole body.
| Name | Required | Description | Default |
|---|---|---|---|
| note_id | No | ||
| note_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| body | No | |
| name | No | |
| folder | No | |
| modified | No | |
| body_format | No | What `body` actually is. "markdown": the note's formatting survived and update_note accepts this body back unchanged. "plain_text": the formatting could not be recovered — writing this body back flattens the note. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly and non-destructive, and the description adds genuinely valuable behavioral context by explaining the body_format field and the consequences of writing a plain_text body back. This goes beyond the annotations and warns the agent about a real round-trip hazard that is not visible anywhere else.
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 first sentence is a strong front-loaded purpose statement. The longer body_format paragraph is somewhat verbose and focuses on writing back, but it is relevant to interpreting the read result and earns its place despite being slightly longer than ideal.
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 critical body_format semantics are covered, and an output schema exists to explain return values. However, the complete absence of parameter-selection guidance is a meaningful gap for a tool that can look up by name or ID, especially with zero required parameters in 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% and the schema gives only 'note_id' and 'note_name' as bare strings. The description adds only 'by name or ID', which maps to the two parameters, but it does not clarify whether one is required, what happens if both are provided, or whether names must be exact.
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 opens with 'Reads the full content of a note by name or ID', which clearly states the verb, resource, and scope. The phrase 'full content' hints at a distinction from list/search tools, but it does not explicitly name or distinguish sibling tools like list_notes or search_notes.
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 choose read_note over list_notes, search_notes, or other note-related tools. The body_format warning concerns downstream update_note behavior, not the selection of this read tool versus alternatives, so the 'when to use' question is left unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_deleteRecipe DeleteADestructiveInspect
Use this when the user wants to remove one of THEIR saved recipes/skills (the manifests under ~/.local/share/local-mcp/recipes). Destructive with a preview gate: the first call (without confirm) shows what would be deleted; call again with confirm=true to actually delete. Bundled starter recipes can't be deleted. To modify a recipe instead, recipe_save with the same name overwrites it (upsert).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Recipe name (from recipe_list). | |
| confirm | No | Must be true to actually delete. Without it, returns a preview. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| status | No | 'preview' when confirm was not set. |
| deleted | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (destructiveHint=true), description explains two-step safety gate: first call previews deletion, second with confirm=true executes. Also notes bundled recipes are protected. No contradictions 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?
Four sentences, front-loaded with primary use case, no wasted text. Each sentence adds essential 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?
Given output schema exists, description needn't detail returns. It covers usage, behavioral nuance, constraints, and sibling differentiation. Complete for a deletion 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 has 100% coverage; description adds meaning: confirm parameter behavior (preview vs actual delete), and name sourced from recipe_list. This clarifies the two-step workflow.
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?
Description clearly states the tool removes saved recipes/skills (manifests under a specific path). It distinguishes from bundeled starter recipes which cannot be deleted, and references sibling recipe_save for modification.
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?
Explicitly says when to use ('when user wants to remove one of THEIR saved recipes/skills'), what not to use (bundled starters), and provides alternative (recipe_save for modification).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_discoverRecipe DiscoverARead-onlyInspect
Browses installable community SKILLS — ready-made LMCP workflows other people published (a morning brief, inbox triage, a weekly report). A user would browse them to find a ready-made workflow for a repeatable multi-app task instead of building it from scratch. Returns a list of {id, title, category, description, steps, votes}; install one with recipe_install(id).
| Name | Required | Description | Default |
|---|---|---|---|
| category | No | Optional filter hint shown to the user; the catalog is small so all skills are returned. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true. Description adds that the catalog is small so all skills are returned, and lists specific return fields. 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?
Three sentences: purpose, use case, returns/installation. Efficient, front-loaded, 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?
Given no output schema, description covers return fields. Complexity is low (one optional param). Sufficient for agent to use 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 has 100% coverage for the one optional parameter. Description adds nuance that filtering may be ineffective because catalog is small, providing useful interpretation beyond 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?
Clearly states the tool browses installable community skills, distinguishes from siblings like recipe_install by mentioning it outputs a list and referencing installation. Uses specific verbs and resource.
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?
Explains when to use: to find a ready-made workflow instead of building from scratch. Mentions recipe_install as follow-up. Lacks explicit when-not-to-use, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_exportRecipe ExportARead-onlyInspect
Exports a saved SKILL (recipe) as a single portable token the user can send to someone else — paste it in a message, email, or doc. The recipient installs it with recipe_import and runs it with recipe_run. A user would export a skill to share it with a teammate (a handy brief, a report, a workflow). Returns {name, skill_token} plus the readable manifest.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the saved skill to export (see recipe_list). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive. Description adds return format ({name, skill_token} and manifest) and the recipient workflow, providing behavioral context beyond 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?
Three sentences, no wasted words, purpose stated first. 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?
For a simple tool with one parameter and no output schema, the description fully covers purpose, usage, return values, and related tools. No 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 100% with a clear description for the 'name' parameter. Tool description restates but does not significantly add 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?
Description clearly states the tool exports a saved skill as a portable token. It distinguishes from siblings like recipe_get and recipe_save by explaining the sharing workflow and linking to recipe_import and recipe_run.
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 concrete use case: 'share it with a teammate'. Implicitly contrasts with related tools by describing the export-import-run flow, but no explicit exclusion or comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_getRecipe GetARead-onlyInspect
Returns the full manifest of a recipe by name. recipe_not_found if unknown.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| steps | No | |
| params | No | |
| description | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is clear. Description adds the error condition 'recipe_not_found if unknown', which is useful for error handling. No 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 sentences: first states purpose, second states an error case. No unnecessary words. Front-loaded with key 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?
Tool is simple with one required param and output schema exists. Description covers what it does and a key error condition. No missing essential context given the output schema handles return value 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?
Single required parameter 'name' described as 'by name' linking it directly to the tool's purpose. Schema coverage is 0%, but the description sufficiently clarifies the parameter's 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?
Clearly states it returns the full manifest of a recipe by name, with a specific error for unknown recipes. Verb 'returns' and resource 'recipe manifest' are specific. Distinguishes from siblings like recipe_list and recipe_run.
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 use when needing the full manifest of a specific recipe by name, but no explicit when-to-use or when-not-to-use guidance relative to siblings like recipe_list or recipe_discover.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_importRecipe ImportAInspect
Installs a SKILL someone shared with you — pass the skill_token from their recipe_export (or a raw recipe manifest JSON). Saves it to this Mac so recipe_run can use it. Safe: importing only stores the skill; when it's later run, any state-changing step (send/write/delete) previews first and needs confirmation. If a skill with the same name already exists, the import is saved under a non-colliding name. Returns {name, imported}.
| Name | Required | Description | Default |
|---|---|---|---|
| skill | No | A skill_token from recipe_export, or a raw recipe manifest JSON string. | |
| skill_token | No | Alias for `skill` — the exact field name recipe_export returns. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the simple annotations, the description discloses key behavioral details: importing only stores the skill, state-changing steps are previewed and confirmed on later runs, name collisions are handled via non-colliding names, and the return value is {name, imported}. This significantly enriches the agent's understanding of side effects and safety.
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 compact and front-loaded, with three sentences each carrying essential information: the purpose, the safety model, and collision handling. There is no redundant or vague 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 tool with simple inputs and no output schema, the description is complete: it covers the source of inputs, the installation effect, the security behavior, collision resolution, and the return shape. The agent has enough context to invoke the tool correctly and set expectations.
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 already provides 100% description coverage for both parameters, including the alias relationship between skill and skill_token. The description adds little beyond what the schema states, merely reiterating that a token or raw JSON can be passed. This is adequate but does not exceed the schema's clarity.
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's function: 'Installs a SKILL someone shared with you' and explains it does so by accepting a skill_token from recipe_export or a raw manifest JSON. It distinguishes the tool from siblings like recipe_export and recipe_run by explaining the import/use relationship.
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: use this when someone shares a skill with you, and it mentions the exact input source (recipe_export token or manifest). However, it does not explicitly name alternatives or list exclusions, so an agent might not immediately know when to prefer recipe_import over the sibling recipe_install.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_installRecipe InstallAInspect
Installs a community SKILL by id (from recipe_discover) onto this Mac so recipe_run can use it. Safe: installing only stores the skill; when it's later run, any state-changing step (send/write/delete) previews first and needs confirmation. If a skill with the same name already exists, it's saved under a non-colliding name. Returns {name, installed}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The community skill id from recipe_discover. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds value beyond annotations by explaining safety, non-colliding naming, and confirmation behavior for state-changing steps.
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 plus return info, front-loaded with key purpose, 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?
Adequately covers purpose, parameter, and return for a simple installation tool; no output schema but return format is described.
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%, description mentions id source (recipe_discover) which adds minimal value beyond 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?
Description clearly states it installs a community SKILL by id from recipe_discover, using specific verb and resource, and distinguishes from sibling tools like recipe_run.
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 context on when to use (after recipe_discover) and safety behavior, but lacks explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_listRecipe ListARead-onlyInspect
Lists the user's reusable SKILLS — saved recipes (an ordered sequence of LMCP tool calls with parameters), plus bundled ones — each runnable with recipe_run. Skills turn a repeated LMCP workflow into one reusable command. A user would list them to find an existing skill for a task rather than rebuilding it from scratch. Returns each skill's name, description, and steps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| recipes | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and destructiveHint=false. The description adds value by explaining that skills are ordered sequences of LMCP tool calls with parameters, and that each is runnable with recipe_run. It also specifies the return fields (name, description, steps), going beyond 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 three sentences, front-loading the core purpose and following with explanatory context. Every sentence adds value without 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?
The description fully covers the tool's purpose, usage context, and return value. Combined with zero parameters, good annotations, and an output schema, the description is complete for an agent to select and invoke 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?
The tool has no parameters, so schema coverage is 100%. The description does not need to add parameter information. Baseline score of 4 is appropriate for zero-parameter tools.
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 that the tool lists the user's reusable SKILLS (saved recipes and bundled ones), distinguishing it from siblings like recipe_run or recipe_get. The verb 'lists' explicitly defines the action and resource.
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 explains that a user would list skills to find an existing one for a task rather than rebuilding from scratch, providing a clear context of use. It does not explicitly state when not to use it, but the use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_runRecipe RunAInspect
Executes a recipe end to end: binds params, runs each step's tool in order via the registry, persists the run (see recipe_runs), and returns each step's result plus any markers_path. Recipes with state-changing steps (write/send/delete) PREVIEW first — call again with confirm:true to execute; read-only recipes run immediately. A step that errors stops the run and is reported.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| params | No | Param overrides (merged over the recipe defaults). | |
| confirm | No | Set true to execute a recipe that has state-changing steps; read-only recipes ignore it. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: preview for state-changing recipes, immediate execution for read-only ones, error handling (step error stops run and reports), and persistence. Annotations confirm non-read-only and non-destructive nature, and description adds value beyond annotations, though more details on side effects or idempotency would be beneficial.
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, two sentences, front-loaded with the core action. Every sentence provides necessary information without redundancy or 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?
Given the complexity (3 parameters, nested objects, no output schema), the description adequately covers the workflow, preview mechanism, and error behavior. It mentions return values (step results, markers_path) but could elaborate on what 'markers_path' is or mention concurrency restrictions.
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 has 67% description coverage. The tool's description adds meaning to the 'confirm' parameter by explaining its role in state-changing recipes, and to 'params' by mentioning binding. However, the 'name' parameter lacks explanation beyond schema, though the description implies it identifies the recipe.
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 executes a recipe end to end, binding params, running steps in order, persisting the run, and returning results. It distinguishes between state-changing and read-only recipes, which sets it apart from siblings like recipe_get or recipe_list.
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 context on when to use this tool: to run a recipe. It explains the preview-confirm workflow for state-changing steps, but does not explicitly mention alternatives like recipe_get for viewing a recipe definition, which would further guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_runsRecipe RunsARead-onlyInspect
Shows the history of past recipe runs and their results (recorded by recipe_run), so you can reuse, compare, or debug an automation. Pass name for one recipe's runs, or omit for a compact history across all recipes. Pass run_id (with name) to get that run in full detail. Newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Recipe name; omit for runs across all recipes. | |
| limit | No | Max runs to return (default 20). | |
| run_id | No | Return this one run in full detail (requires name). |
Output Schema
| Name | Required | Description |
|---|---|---|
| runs | No | |
| count | No | |
| recipe | No | Recipe name when scoped, null for the all-recipes history. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description discloses ordering ('newest first'), data source ('recorded by recipe_run'), and read-only nature, adding context beyond the readOnlyHint and destructiveHint 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 sentences that are front-loaded with purpose, no wasted words. Every sentence adds essential guidance.
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 output schema and annotations present, the description covers all necessary information: what it shows, how to filter, ordering, and use cases. No 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 100%, so baseline is 3. The description adds value by explaining parameter interactions (e.g., 'run_id requires name') and the distinction between compact and full detail.
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 it 'shows the history of past recipe runs and their results', using a specific verb and resource. It distinguishes from sibling tools by focusing on history and results, not running or listing recipes.
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?
Explicit guidance on parameter combinations: pass 'name' for one recipe's runs, omit for all; pass 'run_id' with 'name' for full detail. Also provides purpose: 'so you can reuse, compare, or debug an automation'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recipe_saveRecipe SaveAInspect
Saves a reusable SKILL — a named recipe (an ordered sequence of LMCP tool calls with parameters) — to this Mac so the user can re-run it anytime with recipe_run. A user would save one to turn a multi-step LMCP workflow they repeat (a morning brief, inbox triage, a weekly report, a data pull) into a single reusable command. Saved skills can be shared with other people via recipe_export. The manifest must have a name and a non-empty steps array. Returns {name}.
| Name | Required | Description | Default |
|---|---|---|---|
| manifest | Yes | The recipe manifest. Shape: {"name": string (required), "description": string, "params": [{"name": string, "type": "string"|"int"|"bool", "default": any}], "steps": [ ... ] (required, non-empty), "outputs": [{"kind": string}]}. A step is EITHER a tool call {"tool": <tool_name>, "args": {...}} OR a pause {"wait": {"seconds": N}} (also {"wait": N}). Any arg string may interpolate a declared param with ${name} (e.g. "limit": "${count}"); an arg that is exactly "${name}" keeps the param's type. Steps run in order; a later step can consume an EARLIER step's output with "${steps[N].result.KEY}" (0-based; supports .key and [i], e.g. "account": "${steps[0].result.accounts[0].name}"). On recipe_run a state-changing step previews first unless confirm:true. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate the tool is not read-only and not destructive. The description adds that it returns {name} and requires a valid manifest, but does not detail overwrite behavior or failure modes. With annotations, this is adequate but not exceptional.
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, front-loads the core action, and uses no unnecessary words. Every sentence contributes to understanding purpose and usage.
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 complexity and comprehensive schema, the description provides sufficient context for an agent. It mentions return value and key constraints, but lacks error handling info. Still, it is mostly 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 100%, so baseline is 3. The description only briefly mentions that the manifest must have 'name' and 'non-empty steps', adding no new semantic 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 clearly states the verb 'saves' and the resource 'reusable SKILL — a named recipe'. It provides examples (morning brief, inbox triage) and distinguishes from sibling tools like recipe_run and recipe_export.
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 clear context on when to use: to turn a repeated multi-step workflow into a single command. It mentions related tools but does not explicitly state when NOT to use or alternatives beyond recipe_run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_markerRecord MarkerBInspect
Drops a named marker into the active recording's timeline. t_ms is elapsed ms since recording start. Provide bounds (global points, top-left) to zoom toward an element, or omit for full-frame. note becomes a caption source. Returns no_active_session if nothing is recording.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Marker name, e.g. open_tray, act2_calendar_create. | |
| note | No | Free text → caption source. | |
| bounds | No | Optional {x,y,w,h} global points to zoom toward. | |
| session_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-destructive behavior. The description adds that dropping a marker modifies the timeline and that an error occurs if no active session exists. It does not contradict annotations (destructiveHint=false). However, it lacks details on idempotency or behavior if the same marker name is used twice.
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 three sentences, front-loaded with the main action. It efficiently covers usage of optional parameters and error case. The only waste is the incorrect 't_ms' mention.
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 no output schema and nested objects, the description is incomplete. It omits explanation of 'session_id' and introduces a parameter ('t_ms') not present in the schema. The error case is covered but missing details like bounds format expectation (e.g., coordinate system) or behavior when recording is paused.
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 75% (3 of 4 parameters have descriptions), but the description repeats some of those and adds a non-existent parameter 't_ms'. For 'name', it provides examples. For 'session_id', no additional meaning is provided. The description adds limited value beyond the schema and is misleading regarding 't_ms'.
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 ('drops a named marker') and the resource ('active recording's timeline'). It distinguishes from sibling screen recording tools by focusing on markers specifically. However, the mention of 't_ms' which is not in the input schema introduces confusion.
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 explains when to provide bounds ('zoom toward an element') and that note becomes a caption source. It also mentions the error case 'Returns no_active_session if nothing is recording.' But it does not explicitly state when not to use this tool or compare it to alternatives, which are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_reminder_folderRename Reminder FolderAInspect
Renames an existing Apple Reminders list. Pass the current list name (or list_id from get_reminder_folders) and new_name. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Current list name (or pass list_id) | |
| confirm | No | Must be true to apply | |
| list_id | No | List identifier from get_reminder_folders (alternative to name) | |
| new_name | Yes | New name for the list |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so the agent knows this is a mutation but not destructive. The description adds 'Requires confirm=true' as a safety guard, though this is also in the schema. It does not disclose more nuanced behavior such as error cases, reversibility, or side effects, but this is acceptable given the annotations and simple 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?
The description is three short sentences, front-loaded with the core purpose in the first sentence. Every sentence adds information (what, how to specify, and required confirm flag), with no filler or repetition.
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 rename tool, the description covers the essential usage: what it renames, how to identify the list (two methods), the new name, and the confirm requirement. An output schema exists, so return values need not be explained. It falls short of a 5 because it does not clarify precedence if both name and list_id are provided, or specify error behavior if the list does not exist.
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 the baseline is 3. The description reinforces the relationship between name and list_id as alternatives and new_name as the target, but these are already in the schema parameter descriptions. No additional semantic details are provided beyond what the schema already offers.
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 starts with a specific verb 'Renames' and a clear resource 'existing Apple Reminders list', making the tool's function unambiguous. It also distinguishes from sibling tools like create_reminder_list and delete_reminder_folder by explicitly stating 'existing' and 'renames'.
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 clear instructions on how to identify the list ('current list name (or list_id from get_reminder_folders)') and what to pass (new_name). It implies usage context by saying 'existing' and referencing get_reminder_folders as the source for list_id, but it does not explicitly exclude alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_emailReply EmailADestructiveInspect
Use this when the user wants to reply to an email that lives in the Mac's Apple Mail (message ID from list_emails/search_emails). Supports plain text or HTML body. For a Microsoft 365 message ID from m365_list_emails, use m365_reply_email. Pass account (from list_emails/search_emails results) to skip scanning other accounts and avoid timeouts on multi-account Macs.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Plain-text reply body. | |
| account | No | Account (from the listing) the message is in — pass it to skip scanning other accounts and avoid multi-account timeouts. | |
| confirm | No | Consent gate: the first call previews the reply; call again with confirm=true to actually SEND it. | false |
| html_body | No | HTML reply body. Takes precedence over `body` when both are given. | |
| reply_all | No | Reply to all original recipients instead of just the sender. | false |
| message_id | Yes | Id of the message to reply to (from list_emails/search_emails). |
Output Schema
| Name | Required | Description |
|---|---|---|
| replied | No | |
| message_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already flagging destructiveHint=true, the description adds useful behavioral context: the tool scans other accounts unless the `account` parameter is passed, which can cause timeouts on multi-account Macs. It also notes support for plain text or HTML bodies. This goes beyond the annotation's simple destructive flag, though it does not detail the confirm two-step consent flow (covered by 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?
Three sentences, each earning its place: purpose, alternative, and optimization tip. No filler or repeated schema details. Front-loaded with the primary use case.
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 description fully covers the selection decision (Apple Mail vs M365) and provides key operational guidance (account parameter). Output schema and parameter descriptions handle return values and other parameters, so the description is complete for correct tool selection and 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 100%, so baseline is 3. The description adds meaningful context by explaining that `message_id` comes from list_emails/search_emails and that `account` should be taken from those results to skip scanning and avoid timeouts. This clarifies parameter provenance and practical usage beyond schema definitions.
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 'reply to an email that lives in the Mac's Apple Mail', providing a specific verb plus resource. It also distinguishes itself from the sibling m365_reply_email tool by explicitly naming the alternative for Microsoft 365 messages.
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 clear when-to-use guidance ('Use this when the user wants to reply to an email that lives in the Mac's Apple Mail') and explicitly names the alternative for Microsoft 365 IDs ('use m365_reply_email'). It also offers operational advice about passing the account parameter to avoid timeouts on multi-account Macs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_frictionReport FrictionAInspect
Send an ANONYMOUS, content-free signal when an LMCP tool fails, returns nothing useful, the user seems frustrated, or you could not accomplish what they asked. Helps the LMCP team find and fix the roughest spots. Send ONLY the category + the tool name — NEVER the user's request, message/email content, account names, or any personal data. No confirmation needed: this is anonymous (categories only) and respects the user's opt-out.
| Name | Required | Description | Default |
|---|---|---|---|
| attempt_count | No | How many times this was attempted (optional). | |
| friction_type | Yes | What kind of friction you observed. | |
| error_category | No | Category of what went wrong (optional). | |
| tool_attempted | No | Name of the LMCP tool involved (e.g. list_emails). Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description provides strong behavioral transparency: it emphasizes the anonymous nature, explicitly states no confirmation is needed, clarifies it respects the user's opt-out, and details what data is included vs excluded. The annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false) leave room for ambiguity about side effects, but the description's explicit 'content-free' and 'anonymous' disclosure adds significant context about what gets transmitted and what doesn't.
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 compact yet information-dense: three sentences cover purpose, trigger conditions, data restrictions, and the no-confirmation behavioral guarantee. Punctuation and capitalization (ANONYMOUS, NEVER) effectively highlight the most critical constraints. Every sentence earns its place without redundancy. The front-loading of the purpose and trigger states is excellent.
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 telemetry/feedback tool with zero required behavior on the user-facing side, the description is complete. It covers when to fire, what to include, what to exclude, the anonymous nature, confirmation behavior, and opt-out respect. The output schema (if it exists) plus the input schema's enum coverage handle parameter typing. The privacy constraints, which are the highest-risk aspect, are exhaustively detailed.
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%, meaning every parameter has a schema description. The description adds clarity on friction_type and error_category by emphasizing to send 'ONLY the category + the tool name', and explicitly names tool_attempted with an example ('list_emails'). However, most parameter semantics are fully covered by the schema's enum-based descriptions, so the description adds marginal but useful emphasis on what should be flagged as most relevant.
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 what the tool does: 'Send an ANONYMOUS, content-free signal when an LMCP tool fails, returns nothing useful, the user seems frustrated, or you could not accomplish what they asked.' It uses a specific verb+resource ('send a signal') and specifies the trigger conditions. It also clearly distinguishes from sibling feedback tools like report_problem and request_feature by emphasizing the anonymity and content-free nature.
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 when-to-use guidance with explicit trigger conditions (tool fails, returns nothing useful, user seems frustrated, could not accomplish the task). It states what to send ('ONLY the category + the tool name') and what NOT to send ('NEVER the user's request... any personal data'). While it doesn't explicitly name alternative tools, the 'report_problem' sibling exists and the description effectively differentiates this as the lightweight anonymous version.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_problemReport ProblemAInspect
Sends a problem report, feature request, or integration request to the LMCP team — for when a user wants to report a bug, ask for a new capability, or request support for an app LMCP doesn't cover yet. Without confirm=true it returns a preview of the anonymous payload that would be sent (version, OS, permission status, and recent tool names / error-type codes — never arguments, messages or personal data); with confirm=true it submits and returns a case_id. type='problem' (default) reports a bug, type='feature' requests a new capability, type='integration' requests an unsupported app.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to submit the report. Without it, shows a preview. | |
| symptom | No | Required for type=problem: what is broken, in your own words. | |
| expected | No | What you or the user expected to happen. | |
| description | No | Required for type=feature or integration: what the user wants. | |
| report_type | No | 'problem' (default) | 'feature' | 'integration' | |
| user_request | No | What the user originally asked the AI to do. | |
| error_message | No | For type=problem: verbatim error string from the failed tool. | |
| tool_attempted | No | For type=problem: name of the LMCP tool that failed. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It discloses the key behavioral difference between confirm=true (submits and returns case_id) and without it (preview of anonymous payload). It even describes what the payload contains and excludes. This goes beyond annotations which only say readOnlyHint=false, destructiveHint=false. 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 multi-sentence but well-organized, with no filler. Each sentence contributes: purpose, preview/submit behavior, and type 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?
Given the 8-parameter conditional schema and output schema, the description covers the core behavior and privacy implications. It's enough for an agent to understand the tool's function, though it lacks details on error handling or prerequisites.
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?
All 8 parameters have schema descriptions (100% coverage), so description adds limited extra meaning. It does clarify confirm's role in preview vs submit and explains the three report_type values, but these are also in the schema descriptions. Baseline 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 it sends problem reports, feature requests, or integration requests to the LMCP team, with specific triggers for each. It does not explicitly distinguish from sibling tools like request_feature or report_friction, but the scope is well-defined.
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 clear contexts: reporting a bug, asking for a new capability, or requesting unsupported app support. It does not mention alternatives or exclusions, so it's missing explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
request_featureRequest FeatureAInspect
Submits a feature request to the LMCP team — a new capability, a tool that doesn't exist yet, or an app/integration the user wishes LMCP supported. A user would invoke this when they want to ask the team for something LMCP can't do yet. Without confirm=true it returns a preview; with confirm=true it submits. The request includes the machine ID and (if set) the account email so the team can follow up — it is not anonymous.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to submit. Without it, shows a preview. | |
| feature | Yes | What the user wants LMCP to do — a capability, tool, or integration. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false and destructiveHint=false. The description adds context: preview vs submission via confirm, and that the request includes machine ID and account email (not anonymous). 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?
Three sentences, no unnecessary words. Purpose stated first, then usage and behavior. Very efficient.
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 low complexity (2 params, no enums, output schema exists), the description covers all essential aspects: purpose, when to use, behavior of confirm parameter, and non-anonymity. 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 100%, so baseline 3. The description adds meaning: it explains the confirm parameter's role and mentions that the request includes machine ID and email, which goes beyond schema descriptions.
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's purpose: 'Submits a feature request to the LMCP team — a new capability, a tool that doesn't exist yet, or an app/integration the user wishes LMCP supported.' It distinguishes itself from sibling tools, which are mostly functional, by being a feedback mechanism.
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?
Explicitly says when to use: 'when they want to ask the team for something LMCP can't do yet.' It also explains the confirm parameter behavior. However, it doesn't explicitly state when not to use or compare to alternatives, though siblings are dissimilar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_diagnosticsRun DiagnosticsARead-onlyInspect
Runs a fast health check of all LMCP integrations on this machine. Shows what works, what doesn't, and how to fix it. Optionally submits a report to the LMCP team.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Integration to focus on: calendar, mail, contacts, reminders, omnifocus, outlook, notes, finder, onedrive, screen_recording, accessibility. Leave empty to check all. | |
| submit | No | Send the diagnostic report to the LMCP team for analysis (default: false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| report | No | Full formatted text report |
| summary | Yes | Plain-language summary of overall health |
| ok_count | Yes | Number of integrations working |
| submitted | No | True when the report was sent to the LMCP team |
| warn_count | Yes | Number of integrations with warnings / not running |
| integrations | Yes | |
| problem_count | Yes | Number of integrations with errors or missing permissions |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the optional behavior of submitting a report to the LMCP team, which is a critical side effect not covered by the readOnlyHint or destructiveHint annotations. This goes beyond the structured data by revealing potential external data transmission, aiding the agent in understanding consequences.
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 with zero filler. The core action, output value, and optional behavior are all presented upfront. Front-loaded and easily parseable.
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 existence of an output schema and rich annotations, the description covers the essential aspects: purpose, output nature, and optional submission. It slightly overstates 'all' integrations without mentioning the focus parameter, but the schema handles that nuance. Overall adequate for a simple diagnostic 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?
Input schema provides 100% coverage of both parameters (focus, submit) with clear descriptions. The tool description adds minimal extra meaning by mentioning the optional report submission, which aligns with the submit parameter but doesn't expand on focus. Baseline of 3 is appropriate as the schema carries the weight.
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's function with specific verbs and scope: 'Runs a fast health check of all LMCP integrations on this machine.' It also specifies what the user gets ('Shows what works, what doesn't, and how to fix it') and an optional action (submit report), distinguishing it from other diagnostic tools like lmcp_state or permissions_status.
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 context for when to use it (when checking health of LMCP integrations) by stating it covers all integrations and outputs actionable fixes. It does not explicitly name alternatives or state when not to use, but the context is unambiguous enough for an agent to select it over sibling diagnostic tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_attachmentSave AttachmentAInspect
Saves an attachment from an email to disk. Requires confirm=true; without it you get a preview of where the file would be written. Pass account= (and mailbox= if known, both from list_emails/search_emails) so the lookup targets one account instead of scanning all of them.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | ||
| confirm | No | false | |
| mailbox | No | ||
| message_id | Yes | ||
| destination | No | ~/Downloads | |
| attachment_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| saved | No | |
| attempts | No | |
| destination | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false and destructiveHint=false, which don't fully capture the write behavior. The description adds the confirm=true requirement and preview behavior, which is valuable. However, it doesn't disclose what happens on success (file created? overwritten?), or permission requirements. Since annotations are sparse, description should carry more burden – it covers the core safety but misses overwrite behavior and success/failure outcomes.
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 concise sentences. Front-loads the core purpose, then explains the critical confirm flag and the account/mailbox optimization. No redundant text.
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?
Covers the confirm safety mechanism and account scoping, which are key behaviors. But lacks edge-behavior details (what if attachment missing, overwrite rules, destination resolution). With 6 params and 0% schema descriptions, the description could do 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 coverage is 0%, so description must explain parameters. It explains account/mailbox purpose and confirm's behavior, but message_id and attachment_name are not described beyond their names. destination is given a default in schema but the description doesn't clarify resolution or naming rules. Insufficient compensation for 0% coverage.
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?
Clearly states it saves an attachment from an email to disk. Verb+resource are specific (save, attachment), distinguishing it from file operations and email reading tools. The description also immediately clarifies the tool's core function.
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?
Explicitly explains that confirm=true is required and provides a workflow (get account/mailbox from list_emails or search_emails). It doesn't name alternative tools, but the email-attachment context is clear enough to disambiguate from file-saving siblings. Could mention when NOT to use this tool (e.g., if just reading an attachment) but not critical.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_record_startScreen Record StartAInspect
Begins a screen recording (ScreenCaptureKit) of a display, window, or region. Single active session in v1 — a second start returns already_recording. Returns a session_id used by record_marker and screen_record_stop. Requires Screen Recording permission; without it returns an explicit permission_required error, never a silent no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frames per second (default 60). | |
| target | Yes | What to capture. | |
| output_path | No | Where to write the .mov (default: temp file, returned by stop). Missing parent folders are created. | |
| show_cursor | No | Default true. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral traits: it uses ScreenCaptureKit, enforces a single active session, returns an explicit already_recording error on conflict, requires Screen Recording permission, and returns a permission_required error rather than silently failing. This is exceptional transparency for a mutating 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?
Three dense, front-loaded sentences with no filler. Every sentence contributes meaningful operational information: what it starts, the single-session constraint, the return value, and the permission/error 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?
For a tool with moderate complexity, no output schema, and rich sibling context, this description covers the essential call-time facts: start behavior, session limit, session_id usage, permission requirements, and error semantics. Nothing critical is missing for an agent 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?
The input schema already covers 100% of parameters with descriptions, so the description does not need to repeat parameter details. It does add context around target kinds (display, window, region) and the session_id relationship, but does not go beyond the schema's parameter-level clarity.
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 identifies the action ('Begins a screen recording') and the exact capture targets (display, window, region). It is easily distinguished from sibling tools like screen_record_stop and screen_record_status by focusing on the start operation, and the session_id pointer reinforces its role.
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 strong contextual guidance: there can only be one active session, a second start returns already_recording, and the returned session_id is needed by record_marker and screen_record_stop. It does not explicitly exclude alternatives like screenshot_capture, but the context is clear enough for a start action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_record_statusScreen Record StatusARead-onlyInspect
Reports whether a recording is active, with the session_id, elapsed_ms, output path, and marker_count.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior; description adds specific output fields (session_id, elapsed_ms, output path, marker_count) beyond that, providing useful context 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?
Single sentence with 13 words, front-loaded with the main action, and efficiently lists output fields. No unnecessary 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 simple status tool, the description covers purpose and output but omits parameter explanation and error conditions. With no output schema, it could provide more detail, but it remains 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?
Schema has one optional parameter session_id with 0% coverage in description. The description does not explain what session_id is for or how to use it, failing to compensate for the schema's lack of 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?
Description clearly states 'reports whether a recording is active' with a specific verb and resource, distinguishing it from screen_record_start and screen_record_stop among 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?
No explicit when-to-use or alternatives are mentioned, though the name and context imply it is for checking recording status. Lacks guidance on when not to use or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_record_stopScreen Record StopAInspect
Stops the active recording, finalizes the .mov, and writes the marker timeline JSON (§6) next to it. Returns the video path, duration, resolution, marker_count and markers_path. Returns no_active_session if nothing is recording.
| Name | Required | Description | Default |
|---|---|---|---|
| session_id | No | Optional; the single active session is used if omitted. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds value beyond annotations: it details the side effect of writing a marker timeline JSON, specifies the return fields (video path, duration, etc.), and covers the error case. Annotations indicate non-destructive mutation, which is consistent.
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 covers the action and side effect, the second lists return values and error case. Every sentence is necessary and front-loaded. 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 tool with one optional parameter and no output schema, the description covers the action, side effects, return values, and error condition. The only minor gap is the unexplained '§6' reference, which could be clarified.
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 optional parameter session_id is fully described in the input schema. The description adds no new semantic information about the parameter beyond the schema, so it meets the baseline for high schema coverage.
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 stops an active recording, finalizes a .mov file, and writes a marker timeline JSON. It distinguishes from siblings like screen_record_start and screen_record_status. However, the cryptic reference '§6' may confuse an agent without additional context, slightly reducing clarity.
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 when an active recording is present and mentions the no_active_session error condition. It does not explicitly provide when-not-to-use or compare alternatives, but the context (with screen_record_start and screen_record_status) makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot_captureScreenshot CaptureARead-onlyInspect
Captures a single frame of a display, window, or region to a PNG. Returns {path, resolution (PIXELS), scale_factor, display_id} — scale_factor is the backing scale of the display that was ACTUALLY captured (the same value list_displays reports for that display_id, by construction: both read one function), so pixels = points x scale_factor when converting a coordinate from the image to ui_click. If the display could not be determined you get scale_factor_unknown instead of a guess; resolution is always there, so you can derive the ratio yourself. Requires Screen Recording permission; without it returns an explicit permission_required, never a blank image.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| output_path | No | Where to write the PNG (default: temp file). Missing parent folders are created. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnlyHint=true annotation by disclosing the permission requirement (Screen Recording permission), error behavior (returns permission_required, never a blank image), and the scale_factor/unknown edge case. It also explains the relationship between pixels and points, which is critical behavioral context. 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?
The description is dense but information-rich, front-loading the core function before adding edge cases and permission notes. It is longer than minimal, but each sentence adds necessary behavioral context (permission, scale_factor semantics, error handling), so there is no waste.
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 capture tool with no output schema, the description fully specifies the return shape, resolution semantics, permission failure mode, and the display_id construction guarantee. The only minor gap is not explaining the 'region' global points coordinate space, but the schema notes it as global points. Given the complexity and no output schema, this is 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 schema covers 50% of parameters (target and output_path have descriptions), and the tool description adds return-value semantics (resolution, scale_factor) that help interpret output. The nested target object is adequately described by the schema. The description also clarifies the meaning of scale_factor in the output, which adds value 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 and resource: 'Captures a single frame of a display, window, or region to a PNG'. It clearly distinguishes itself from sibling tools like screen_record_start (video capture) and web_screenshot (browser page capture). It also names the return shape, making the tool's purpose unmistakable.
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 implicitly defines when to use this tool versus alternatives: it captures a single frame, unlike screen_record_start for video or web_screenshot for web pages. It does not explicitly name alternatives or exclusions, but the context is clear enough for an agent to select this tool for static screen capture.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactsSearch ContactsARead-onlyInspect
Searches the Mac's Contacts app (Contacts.app, local/iCloud) by name, email, or phone number. For a Microsoft 365 directory use m365_search_contacts or search_m365_directory instead.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50) | |
| query | Yes | Name, email, or phone to search for |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| query | Yes | |
| contacts | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is structurally disclosed. The description adds the data source and searchable fields, but it does not disclose additional behavioral traits such as permissions, rate limits, or limitations beyond what the annotations and schema already 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?
The description is two sentences, front-loaded with the core action and scope. The second sentence directs to alternatives without any unnecessary words or repetition.
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 simple read-only search tool with an output schema, strong annotations, and full schema parameter descriptions, the description covers the essential information: the source, searchable fields, and alternative tools. An agent has enough context to select and invoke this 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?
The schema has 100% description coverage for both query and limit, so the schema carries the parameter documentation burden. The description restates that query accepts name, email, or phone number, which aligns with the schema but does not add meaning beyond 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 clearly states the tool searches the Mac's Contacts app (Contacts.app, local/iCloud) by name, email, or phone number, using the specific verb 'Searches' plus the exact resource. It also distinguishes itself from Microsoft 365 directory tools by explicitly naming 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 explicitly tells the agent to use m365_search_contacts or search_m365_directory for Microsoft 365 directories, providing clear when-not-to-use guidance. It also implies this is the right tool for local/iCloud Contacts searches, establishing a clear usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_emailsSearch EmailsARead-onlyInspect
Use this when the user wants to find specific emails on this Mac (Apple Mail — any account added to Mail.app). Searches subject and sender by default; pass scope="body" or scope="all" to also search the message body (see search_coverage in the response — a body search can be partial while its local index is still building). For a Microsoft 365 mailbox NOT added to Mail.app, use m365_search_emails.
IMPORTANT: on machines with 2+ accounts, call with account= (from list_email_accounts). Without it, and when the fast index can't answer, search_emails returns the account list instead of scanning all of them — scanning every account in one call has no time limit and can block Mail for other requests too. Exactly 1 account is unaffected.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 20 | |
| query | Yes | ||
| scope | No | "metadata" (default, subject+sender — fast, unchanged behavior), "body" (message body only, via a local index — see search_coverage in the response), or "all" (subject+sender+body). | metadata |
| account | No | ||
| mailbox | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No | |
| warnings | No | |
| next_actions | No | |
| search_scope | No | |
| search_backend | No | |
| search_coverage | No | |
| omitted_mailboxes | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag read-only and non-destructive, and the description adds valuable behavior: body search may be partial during index build, multi-account calls without account may return the account list, and scanning all accounts can block Mail. 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?
The description is compact and front-loaded: primary use case first, alternative second, then a focused warning. Every sentence carries distinct information, and the IMPORTANT warning is clearly 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?
For a search tool with an output schema, the description covers use case, alternatives, scope edge cases, and a blocking-risk warning. It omits semantics for the mailbox parameter, which is a minor gap given the otherwise strong 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 coverage is only 20%, but the description compensates for the most important parameters: scope meanings and account usage for multi-account setups. It also clarifies that body search coverage is reflected in search_coverage. However, mailbox and limit are left 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 clearly states the tool finds specific emails on this Mac via Apple Mail, with a specific verb and resource. It also names the sibling alternative m365_search_emails for mailboxes not in Mail.app, which distinguishes it from 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?
It explicitly says when to use it (user wants to find specific emails in Mail.app) and when not to (Microsoft 365 mailbox not in Mail.app → m365_search_emails). It also provides account-selection guidance for multi-account machines.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_m365_directorySearch Microsoft 365 DirectoryBRead-onlyInspect
Search your organization's Microsoft 365 directory for users by name or email. Returns matching users with their title, department, and contact info.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10, max 25) | |
| query | Yes | Name or email to search for, e.g. 'Sarah' or 'sarah@contoso.com' |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| users | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description adds context about the return format (user info). It does not contradict annotations, and the added behavioral info is limited but acceptable.
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, directly states the action and results, and contains no unnecessary words. It is front-loaded and efficient.
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 description, combined with the rich schema (100% coverage) and output schema, provides adequate context for a search tool. It could mention pagination or scope, but overall it is sufficiently 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 100% with clear descriptions for both parameters. The description does not add any additional meaning beyond what the schema already provides, so the baseline score of 3 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 searches the Microsoft 365 directory for users by name or email, and specifies the returned fields (title, department, contact info). However, it does not differentiate from the sibling tool 'm365_search_contacts', which likely has similar functionality.
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 no guidance on when to use this tool versus alternatives. Given the many sibling tools for searching users and contacts, explicit when-to-use or when-not-to-use advice would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesSearch MessagesARead-onlyInspect
Searches iMessage conversations by content, sender name, or date range.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 30) | |
| query | No | Text to search for in message content (optional if from_sender is set) | |
| since | No | ISO8601 date — only return messages on or after this date (optional, e.g. '2026-04-10' or '2026-04-10T00:00:00Z') | |
| until | No | ISO8601 date — only return messages on or before this date (optional). Combine with 'since' to search a date range with no text query. | |
| from_sender | No | Substring of sender name/handle to filter by (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| since | No | |
| until | No | |
| results | No | |
| from_sender | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only/non-destructive. The description adds the search criteria context (content/sender/date range) but no additional behavioral traits like sorting or pagination. No 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?
Single sentence, 13 words, front-loaded with 'Searches iMessage conversations'. 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?
For a read-only search tool with a full output schema and complete parameter descriptions, the concise description suffices. It could mention that query is optional and date-only searches are possible, but the schema already handles this.
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?
Input schema descriptions cover all 5 parameters (100%). The description provides a high-level summary but does not add details beyond the schema, so baseline 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 ('Searches') and resource ('iMessage conversations'), and enumerates three distinct search facets (content, sender name, date range). This clearly differentiates from sibling messaging search tools by naming iMessage 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 use this tool versus alternatives like read_messages or signal_search_messages. The description states the function but not the decision context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesSearch NotesARead-onlyInspect
Searches Apple Notes by title or content.
Paginated: limit is capped at 100 per call, so page with offset instead of asking for a bigger limit. The response carries total (how many notes match the query in all) and has_more, so a capped page is never mistaken for the complete answer — page until has_more is false, which is exact even when total_is_estimated says the count is only a lower bound. To walk every match, pass order="id" — see the order parameter.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Matches per page (default 20, capped at 100). To get more, page with offset. | 20 |
| order | No | order: "modified" (default) sorts newest-modified first — what you want to SHOW someone, but NOT safe for paging: modification date changes, so a note edited between two calls jumps to the front and another note is pushed past your cursor and never returned. "id" sorts by the note's immutable store id — stable, never renumbered, new notes append at the end — so use order="id" to walk an entire library page by page: edits and insertions mid-crawl are safe with it. One case it cannot cover, because pages are addressed by offset: if a note is DELETED mid-crawl, every note after the hole shifts one slot back and the note that was on the page boundary is skipped, silently. If completeness matters, re-run the crawl and reconcile against total, or crawl while nothing is deleting notes. | modified |
| query | Yes | ||
| offset | No | How many matches to skip (default 0). An offset past the end returns an empty page with has_more=false, not an error. | 0 |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Matches in THIS page |
| order | No | The ordering actually applied (modified | id) |
| query | No | |
| total | No | Matches in total, ignoring limit/offset. A LOWER BOUND, not the exact figure, when total_is_estimated is true |
| offset | No | Where this page started |
| results | No | |
| has_more | No | True when matches remain past this page — call again with offset = offset + count |
| next_actions | No | |
| total_is_estimated | No | True when the exact count could not be taken (the unbounded COUNT failed, or the JXA fallback answered) — total is then only a lower bound. has_more stays exact either way: page until it is false, never until count reaches total |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, but the description adds rich behavioral details: pagination mechanics (limit cap, offset), response fields (total, has_more, total_is_estimated), order semantics (instability of modified, deletion shifts with offset), and edge cases (offset past end returns empty page). This exceeds 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 short paragraphs, front-loaded with the purpose, then efficiently covers pagination, order modes, and edge cases. Every sentence adds value with no repetition or fluff.
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 complexity of pagination and order modes, the description covers all key behaviors: limit cap, offset, response indicators, total estimation, order stability, and deletion edge cases. An output schema exists, so description rightly focuses on usage nuances. Complete for agent 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 high (75%) with detailed descriptions for limit and order. The description adds context for query ('by title or content') and reiterates pagination guidance, but does not significantly enhance understanding beyond the schema. Baseline 3 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 'Searches Apple Notes by title or content', using a specific verb-resource combination. This distinguishes it from siblings like create_note, read_note, and list_notes, making the tool's function 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 detailed guidance on pagination: limit cap, offset usage, and when to use order='id' vs 'modified' for stable paging. However, it does not explicitly compare to sibling tools like list_notes or search_contacts, so it lacks alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_omnifocus_tasksSearch OmniFocus TasksARead-onlyInspect
Searches OmniFocus tasks by name or note content.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max matches to return (default 30). | 30 |
| query | Yes | Text to match against task names and notes (case-insensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds the search field context (name or note content), which is useful but does not disclose additional behavior like result ordering or pagination beyond what the schema already indicates.
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 concise sentence that immediately conveys the tool's purpose. No unnecessary words 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 simple read-only search tool with full schema coverage and an output schema, the description is sufficient. It states the core function, and the structured data covers parameters and return values. However, it could have added a bit more contextual guidance, such as typical use cases, to be more helpful.
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 query and limit parameters already described. The description's phrase 'by name or note content' mirrors the query parameter description and adds no new 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 clearly states the action (Searches), resource (OmniFocus tasks), and scope (by name or note content). It distinguishes from sibling tools like list_omnifocus_tasks and other search tools by specifying the exact fields searched.
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 a search use case but does not explicitly mention when to use this tool versus alternatives such as list_omnifocus_tasks or other search tools. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_emailSend EmailADestructiveInspect
Use this when the user wants to send an email from an account configured in the Mac's Apple Mail. Composes and sends via Mail.app; supports plain text or HTML body. For sending from a Microsoft 365 account NOT added to Mail.app, use m365_send_email. Pass from to send from a specific configured Mail.app account instead of the default sender. Pass attachments as a comma-separated list of absolute file paths to attach files.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | CC address(es), comma-separated. | |
| to | Yes | Recipient address(es), comma-separated for multiple. | |
| bcc | No | BCC address(es), comma-separated. | |
| body | No | Plain-text body. Use this OR html_body; if both are given, html_body wins. | |
| from | No | Sender address — on a multi-account Mac, selects which configured Mail.app account sends. Omit to use Mail's default account. | |
| confirm | No | Safety gate: the call only PREVIEWS (nothing is sent) unless confirm:true. Set true to actually send. | false |
| subject | Yes | Subject line. | |
| html_body | No | HTML body. Takes precedence over `body` when both are set. | |
| attachments | No | Files to attach, as comma-separated absolute paths (e.g. a PDF). |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| from | No | |
| sent | No | |
| subject | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true and readOnlyHint=false. The description adds meaningful behavioral context: it composes and sends via Mail.app, supports plain text or HTML, and allows selecting a specific sender account. It does not contradict annotations and provides extra context about the sending mechanism.
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 three sentences, front-loaded with the primary use case, and every sentence provides necessary detail without fluff. It efficiently covers scope, alternatives, and key parameter usage.
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 send tool with a full input schema, output schema, and annotations, the description clearly explains what it does, when to use it, and how to use key optional parameters. It does not mention the `confirm` safety gate, but that is thoroughly described in the schema, so the overall context is 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 100% with each parameter well-described. The description adds a bit of extra context for `from` (specific account vs default) and `attachments` (absolute paths), but the schema already covers these well, so the added value is marginal.
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 ('send an email') and the resource (via Apple Mail/Mail.app), and explicitly distinguishes this from m365_send_email. It also covers the key capabilities (plain text/HTML) and scope (configured Mail.app 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?
It opens with 'Use this when...' and explicitly names the alternative for M365 accounts not in Mail.app. Instructions for using `from` and `attachments` provide concrete usage context, making it clear when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageSend MessageAInspect
Sends an iMessage via the Mac's Messages.app to a recipient handle (phone number with country code, e.g. +14155551234, or an Apple ID email). This is a write operation: the first call (without confirm) returns a preview; call again with confirm=true to actually send. Direct (1:1) iMessage only — sending into an existing group chat isn't supported yet. Requires Messages.app signed in to iMessage + Automation permission.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient handle: phone number with country code (+14155551234) or Apple ID email. | |
| text | Yes | Message body to send. | |
| confirm | No | Set true to actually send. Without it, returns a preview only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| note | No | |
| sent | No | |
| text | No | |
| error | No | |
| preview | No | |
| service | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint false, destructiveHint false), description details write nature, preview vs send, and scoping. No 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 sentences, no wasted words. Front-loaded with action. Perfectly concise.
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?
Covers prerequisites, workflow, constraints. With output schema present, no need to describe return values. Complete for a write 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 100%, but description adds recipient format guidance, behavior of confirm parameter, and preview semantics, enhancing beyond 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?
Clearly states it sends an iMessage via Messages.app, distinguishing from sibling tools like signal_send_message. Specific verb 'sends' and resource 'iMessage'.
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?
Explicitly describes two-step confirmation workflow, prerequisites (signed in, Automation permission), and constraint (no group chats). Provides clear when-to-use and when-not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
setup_installInstall LMCPARead-onlyInspect
Returns a personalized LMCP install link and setup steps (~30 sec to install). LMCP is a free Mac and Windows app that gives access to Mail/Calendar/Contacts/Notes/Reminders on Mac, Outlook/Teams/OneDrive/Office on Windows, and 100+ tools on the user's machine (data stays local). A user would invoke this to install LMCP or reconnect it. Pass os ("macos" or "windows" for real install steps; linux/ios/android go to a waitlist). Optional: email, step, issue.
| Name | Required | Description | Default |
|---|---|---|---|
| os | Yes | macos | windows | linux | ios | android. Cloud connectors must pass os (or server asks). Desktop terminal clients may omit → macOS. macOS and Windows both get real install steps. Linux/mobile → waitlist (not supported yet). | |
| step | No | If stuck: connector | install | email | connecting_stuck | server_down. | |
| No | Optional. Helps Cloud Relay auto-connect after install. | ||
| issue | No | Optional tag: gatekeeper_error, dot_not_green, install_failed, etc. |
Output Schema
| Name | Required | Description |
|---|---|---|
| os | No | Target operating system the instructions are for, when known. |
| instructions | Yes | Full human-readable, step-by-step install/setup text. |
| install_command | No | One-line terminal command to install LMCP, when applicable to this OS/step. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false already declared, the description adds helpful context: it returns a link rather than performing an installation, notes the ~30 sec install time, and mentions 'data stays local'. The waitlist behavior for unsupported OSes is also disclosed. 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?
The first sentence is front-loaded with the core purpose and time estimate. The middle sentence provides useful context about LMCP's capabilities, though it is somewhat lengthy. Overall the description is well-structured and each sentence contributes 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?
Given the output schema exists and parameter schema coverage is 100%, the description provides sufficient context: what it returns, when to use it, how OS values behave, and optional parameters. It does not explain the relationship to lmcp_install_upgrade, but that 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 100% and the os parameter description already contains the macos/windows vs waitlist distinction. The description only restates 'Optional: email, step, issue' without adding new meaning beyond the schema, 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 a specific verb and resource: 'Returns a personalized LMCP install link and setup steps'. It also explains the tool is invoked 'to install LMCP or reconnect it'. This distinguishes it from state and diagnostic siblings, though it does not explicitly differentiate from the similar lmcp_install_upgrade sibling.
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 explicit OS-specific guidance: 'macos/windows for real install steps; linux/ios/android go to a waitlist'. It also states the tool is for installing or reconnecting LMCP. It lacks explicit references to alternative tools or when not to use it, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_compose_guidanceSignal Compose GuidanceARead-onlyInspect
Composes a Signal message and returns step-by-step guidance for the user to send it themselves. This tool does NOT send: Signal Desktop exposes no local send API and LMCP reads its database read-only, so it cannot transmit Signal messages. Call it when the user wants to message someone on Signal — it drafts the text and tells them how to deliver it. First call (show_send_steps=false or omitted) returns a preview; show_send_steps=true returns the send-it-yourself steps. chat_id should come from a previous signal_list_chats call — never fabricate IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Plain-text message body | |
| chat_id | Yes | Chat ID from signal_list_chats | |
| show_send_steps | No | Set true to get the send-it-yourself steps. Default: preview only. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, which aligns with the description. The description adds meaningful context beyond annotations by explaining WHY it can't send (no local send API, LMCP reads DB read-only) and disclosing the two-behavior split between preview and steps. It could mention return-format details but the output schema likely covers 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 efficient and front-loaded with the core purpose and the critical 'does NOT send' caveat, then neatly covers usage context, chat_id sourcing, and the mode switch. Every sentence earns its place with no filler or repetition.
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 tool with full schema coverage (100%), an output schema present, and clear annotations, the description thoroughly covers purpose, limitations, when-to-use, parameter sourcing, and mode behavior. The only minor gap might be return-content expectations, but the output schema handles that. This is complete for the complexity level.
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% (all 3 params documented), so baseline is 3. The description adds context for chat_id specifically (source from signal_list_chats, never fabricate) and clarifies the show_send_steps default behavior ('Default: preview only'), adding modest value beyond the schema. Text param gains no additional 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?
The description uses a specific verb+resource ('Composes a Signal message') and clearly states the tool's key scope limitation: it does NOT send messages. It distinguishes itself from siblings like send_message, teams_send_message, etc. by explicitly noting it returns guidance for self-delivery rather than transmitting. The 'preview vs steps' behavior is clearly defined.
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?
Explicitly states when to call it ('when the user wants to message someone on Signal') and what the two modes do (show_send_steps=false/omitted returns preview, =true returns steps). It names the prior tool signal_list_chats for obtaining chat_id and explicitly warns 'never fabricate IDs.' This is strong, concrete guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_connectSignal ConnectARead-onlyInspect
Connect Signal to Local MCP. Reports whether Signal Desktop is installed and signed in, and tells you exactly what to do next — install Signal, or open it and link your phone. (Signal links inside its own desktop app, so the QR is shown there, not here.) Once you're signed in, signal_list_chats / signal_read_messages work. If Signal is already connected, it just reports that.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description adds valuable behavioral context: it reports status, gives next steps, explains the QR appears in the desktop app, and notes how other tools depend on successful connection. This goes beyond 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 three sentences, slightly longer than minimal, but every clause adds value: purpose, status reporting, QR location, next steps, and dependency on other tools. It is front-loaded with the main purpose and remains readable.
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 zero parameters, the description fully covers the tool's role: install/sign-in status, instructions, QR specifics, integration with signal_list_chats and signal_read_messages, and the already-connected case. Since an output schema exists, not explaining return values is acceptable.
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 schema coverage is trivially 100%. The description correctly omits parameter details. Baseline of 4 is appropriate for parameter-free tools.
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's purpose: 'Connect Signal to Local MCP' and reports installation/sign-in status. It distinguishes from siblings like signal_list_chats and signal_read_messages by focusing on setup/connection rather than message operations.
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 implicitly provides usage context by noting that 'Once you're signed in, signal_list_chats / signal_read_messages work', which suggests this tool is a prerequisite. It also handles the already-connected case. Does not explicitly name alternatives but the sibling context makes it clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_list_chatsSignal List ChatsARead-onlyInspect
Lists Signal conversations (chats) with last-active timestamps. Reads from the local Signal Desktop database — no network access required. Returns chat IDs, contact names, and type (direct or group). Use the chat_id in subsequent signal_read_messages calls.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max chats to return (default 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| chats | Yes | Signal conversations |
| count | No | Number of chats returned |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds useful context beyond this: it reads from the local database (no network access) and describes the return fields, which is valuable for privacy and reliability expectations.
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 four short sentences, each adding distinct information: purpose, data source, return content, and usage hint. It is tight, front-loaded, and contains 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?
With one optional parameter and an output schema present, the description covers all essential aspects: what it lists, where data comes from, what it returns, and how to use the result. There are no significant gaps given the tool's simple read-only nature.
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 has one optional parameter (limit) with complete description coverage (100%), including the default value of 50. The description does not need to repeat parameter details, and the schema fully communicates the only parameter, so a baseline of 3 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 Signal conversations (chats) with last-active timestamps' and specifies the output includes chat IDs, contact names, and type. This distinguishes it from siblings like signal_read_messages (which reads messages) and signal_search_messages (which searches messages).
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 explains the tool reads from the local Signal Desktop database with no network access, providing context for when it is appropriate. It also explicitly instructs to use the chat_id in subsequent signal_read_messages calls, implying a workflow and directing to the correct sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_read_messagesSignal Read MessagesARead-onlyInspect
Reads messages from a specific Signal chat. The chat_id must come from a previous signal_list_chats call. Returns messages in chronological order with sender phone numbers and body text. Only messages cached locally by Signal Desktop are available.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return (default 50) | |
| chat_id | Yes | Chat ID from signal_list_chats |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of messages returned |
| messages | Yes | Messages from the chat, chronological |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive, and the description adds valuable behavior details: messages are returned in chronological order, include sender phone numbers and body text, and are limited to local Signal Desktop cache. This goes beyond the schema and annotations without contradicting them.
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 concise sentences: purpose, prerequisite, and return details. Every sentence earns its place with no redundancy or filler. The most important information is 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 two-parameter read tool with a full input schema, output schema, and annotations, the description provides all essential context: the source of chat_id, chronological ordering, content fields, and the local cache limitation. No significant 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?
The schema already covers both parameters with descriptions, including the default for limit, so baseline is 3. The description adds operational meaning by requiring chat_id to originate from signal_list_chats, reinforcing the parameter's provenance. This extra context justifies a score above 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 starts with a specific action, 'Reads messages from a specific Signal chat,' which clearly identifies the tool's purpose and resource. It distinguishes itself from sibling tools like signal_list_chats (which lists chats) and signal_search_messages (which searches messages) by emphasizing direct retrieval from a specified chat.
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 states that chat_id must come from a previous signal_list_chats call, providing a clear prerequisite. It also adds the important limitation that only locally cached messages are available, giving context on when this tool is appropriate. However, it does not name alternative tools like signal_search_messages for search scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_search_messagesSignal Search MessagesARead-onlyInspect
Full-text search across locally-cached Signal messages. Only messages Signal Desktop has stored on disk are searched — no network access required. Optionally restrict search to a specific chat_id.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 50) | |
| query | Yes | Search text (case-insensitive substring match) | |
| chat_id | No | Optional chat ID to restrict search |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of results returned |
| results | Yes | Matching messages |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds valuable behavioral context beyond these flags by specifying that only locally-cached messages are searched and that no network access is required. This clarifies the tool's data scope and offline nature, which is not covered by 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 exactly two sentences, with no filler. The first sentence states the core purpose, and the second adds a critical constraint. Information is front-loaded and every phrase earns its place, making it highly efficient for an AI agent 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?
Given the presence of an output schema and strong annotations, the description is nearly complete. It covers the tool's purpose, local-only scope, and optional chat_id restriction. The only minor gap is not mentioning that the search is case-insensitive or the default limit, but these are already documented in the input schema, so the context is 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?
The input schema has 100% coverage, describing all three parameters (limit, query, chat_id) with clear descriptions. The tool's description only restates the chat_id restriction in prose, adding no extra semantic details beyond what the schema already provides. Therefore, the description meets the baseline but does not elevate parameter understanding.
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 opens with a specific verb and resource: 'Full-text search across locally-cached Signal messages.' It clearly identifies the platform (Signal), the scope (locally-cached), and the operation (full-text search). This distinguishes it from sibling search tools like slack_search_messages or teams_search_messages, which target different platforms.
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 context: this tool searches messages that Signal Desktop has stored on disk, with no network access. It implies the tool is appropriate when the user wants to search local Signal messages, but it does not explicitly name alternatives or state when not to use it. Thus it gives 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.
slack_list_channelsSlack List ChannelsARead-onlyInspect
Lists channels in a Slack workspace, including public channels, private channels, and direct messages (DMs). Reads from the local IndexedDB cache — only channels that Slack Desktop has synced to disk are returned. Pass workspace_id from slack_list_workspaces to filter to a specific workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max channels to return (default 200) | |
| workspace_id | No | Workspace ID from slack_list_workspaces (optional — omit to list channels across all workspaces) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of channels returned |
| channels | Yes | Channels and DMs synced to the local cache |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true, the description adds a significant behavioral caveat: data comes from the local IndexedDB cache and only includes channels synced by Slack Desktop. This is critical for setting expectations about data freshness and completeness, going beyond 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?
Three concise, front-loaded sentences deliver all key information without redundancy. The most important facts (purpose, data source limitation, workspace filtering) are presented in order, and no sentence 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?
Given the tool's low complexity, optional parameters, existing output schema, and clear annotations, the description covers every practical concern: what is listed, data source caveat, and how to scope the query. It is complete for an agent to select and invoke 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?
The input schema already fully documents both parameters (limit and workspace_id), so the description does not add much semantic value. It repeats the workspace_id source from the schema without introducing new meaning, aligning with the baseline for high schema coverage.
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 a specific action ('Lists channels in a Slack workspace') and enumerates the channel types included (public, private, DMs). It distinguishes this from sibling tools like slack_read_channel_messages by focusing on listing channels, not reading messages.
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 context: it reads from a local cache and instructs to pass workspace_id from slack_list_workspaces to filter, establishing a sequence between tools. It does not explicitly state when not to use it or mention alternative listing tools, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_list_workspacesSlack List WorkspacesARead-onlyInspect
Lists the Slack workspaces (teams) the user has connected in Slack Desktop. Start here for Slack — the workspace id it returns is what slack_list_channels / slack_read_channel_messages / slack_search_messages need. Reads from the local IndexedDB cache — no token needed. Only workspaces that have been synced to disk are returned.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of workspaces returned |
| workspaces | Yes | Connected Slack workspaces synced to the local cache |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, matching the description's read-only nature. The description adds valuable behavioral context beyond annotations: it reads from local IndexedDB cache, requires no token, and returns only disk-synced workspaces. These are meaningful behavioral disclosures not captured by 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?
Three dense, purposeful sentences with zero wasted words. Every sentence adds distinct value: what it lists, why it's the entry point, and how it sources data. Front-loaded with the core purpose.
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 list tool with a well-described return value and no token requirements, the description is complete. It addresses data source, prerequisites (none), return value significance, and a known limitation (sync-to-disk) — no gaps remain for an agent to discover.
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 are 0 parameters and schema coverage is 100%, so the baseline could be 4 per the rubric. The description doesn't need to explain parameters it doesn't have. It explains the return value's significance (workspace id used by downstream tools) which adds value 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?
Clear specific verb+resource: 'Lists the Slack workspaces (teams) the user has connected.' It also positions itself as the entry point for Slack, stating the returned workspace id feeds into slack_list_channels / slack_read_channel_messages / slack_search_messages, distinguishing it from related sibling 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?
Explicitly states 'Start here for Slack' and names the downstream tools that need its workspace id. Also discloses the data source (IndexedDB cache, no token needed) and a limitation (only workspaces synced to disk are returned), giving clear when-to-use context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_read_channel_messagesSlack Read Channel MessagesARead-onlyInspect
Reads recent messages from a Slack channel or DM. Reads from the local IndexedDB cache — only messages that Slack Desktop has synced to disk are available (typically the last few hundred messages for active channels). channel_id must come from slack_list_channels.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return (default 50) | |
| channel_id | Yes | Channel ID from slack_list_channels |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | Number of messages returned |
| messages | Yes | Recent messages from the channel, oldest first |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe read operation (readOnlyHint=true, destructiveHint=false), and the description adds meaningful behavioral context beyond that: it reads from the local IndexedDB cache, not directly from Slack servers, and may only contain the last few hundred messages for active channels. This informs the agent about potential incompleteness of data. No contradictions 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 three sentences, front-loaded with the core function, and every sentence adds value: what it reads, the cache limitation, and the prerequisite for the channel_id. There is 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 read tool with full schema coverage, safety annotations, and an output schema, the description is sufficiently complete. It covers the key limitation (local cache) and the source of the required parameter, leaving no significant gaps for an agent 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 100%—both parameters (channel_id and limit) are described in the schema itself. The description repeats the channel_id source instruction ('must come from slack_list_channels') but does not add new semantic meaning beyond what the schema already provides, so it meets the baseline but does not exceed 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 clearly states the tool's function with a specific verb and resource: 'Reads recent messages from a Slack channel or DM.' It distinguishes itself from siblings like slack_search_messages and send_message by specifying the read-only nature and the data source (local IndexedDB cache).
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 context for when to use the tool: to access recent cached messages, with the limitation that only synced messages are available. It also instructs that channel_id must come from slack_list_channels, serving as a prerequisite. However, it does not explicitly name alternative tools like slack_search_messages for searching older messages, so it lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
slack_search_messagesSlack Search MessagesARead-onlyInspect
Searches Slack messages. Optionally restrict to a specific channel_id. A hit whose text is the marker "[body not included in this search result]" (with body_missing: true) DID match — its body was lost by the reader, not empty. Read it with slack_read_channel_messages on its channel_id; never report it to the user as an empty message. Direct messages come back as an unresolved id rather than a name; slack_list_channels maps ids to names.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results to return (default 50) | |
| query | Yes | Search text (case-insensitive substring match) | |
| channel_id | No | Optional channel ID to restrict search |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when something about the answer needs stating: bodies that did not survive the reader, unresolved channel names, or a genuine zero |
| count | Yes | Number of results returned |
| results | Yes | Matching messages, most recent first |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only and non-destructive. The description adds valuable behavioral detail beyond that: body_missing hits are true matches whose body was lost, and DM identifiers may be unresolved ids. This helps the agent avoid misinterpretation without contradicting 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 compact and front-loaded with the primary purpose, followed by high-value edge-case guidance. Every sentence earns its place: search scope, body_missing interpretation, remediation path, and DM id handling. No redundant or filler 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?
Given the read-only annotations, an output schema, and full parameter coverage, the description covers the important non-obvious behaviors an agent must know. It explains how to interpret ambiguous results and which sibling tools to use for resolution. The tool is a search operation, and the description adequately completes the contextual 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 description coverage is 100%, with query, limit, and channel_id each already documented in the schema. The description only restates that channel_id is optional, adding little meaning beyond the structured definitions. Baseline of 3 is appropriate because schema carries the parameter documentation burden.
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 identifies the tool as searching Slack messages, with an optional channel restriction. It is specific enough to distinguish from reading channel messages, though it doesn't explicitly differentiate itself from the generic search_messages sibling tool. The resource and action are 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, including how to handle body_missing results by reading the full message with slack_read_channel_messages. It also instructs agents not to report marker-only hits as empty messages and points to slack_list_channels for resolving DM ids. It lacks explicit when-not-to-use guidance relative to other search tools but gives actionable workflow direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stocks_get_chartStocks Get ChartARead-onlyInspect
Gets historical price data for a stock symbol. Range: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Time range (default: 1mo) | |
| symbol | Yes | Ticker symbol, e.g. AAPL | |
| interval | No | Data interval (default: 1d). Intraday (1m–90m) needs a short range. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| range | No | |
| symbol | No | |
| candles | No | |
| currency | No | |
| interval | No | |
| change_pct | No | |
| data_points | No | |
| current_price | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds no additional behavioral traits beyond the range values, which are also present in the schema. There are no side effects disclosed, but none are expected for a read-only market data 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?
The description is two concise sentences, front-loaded with the main purpose and followed by the range options. No unnecessary words or repetition.
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 rich schema with all parameters documented, enums, and defaults, plus an output schema, the description is complete enough. It clearly states the core function and key range options without needing to explain return values or parameter 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 schema covers 100% of parameters with descriptions, enums, and defaults. The description merely repeats the range enum values, adding no new semantic depth. The interval parameter's constraint ('Intraday needs a short range') is already in the schema's description, not 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?
The description clearly states it gets historical price data for a stock symbol, using a specific verb and resource. This distinguishes it from sibling tools like stocks_get_quote (current quote) and stocks_search_symbol (symbol lookup), as historical data is explicitly mentioned.
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 context for when to use this tool (when historical price data is needed) but does not explicitly mention alternatives or exclusions such as using stocks_get_quote for current prices. However, the historical vs. quote distinction is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stocks_get_quoteStocks Get QuoteARead-onlyInspect
Gets current stock price and market data for one or more symbols (e.g. AAPL, MSFT, BTC-USD). Uses Yahoo Finance — no API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | Ticker symbols, comma-separated ('AAPL,MSFT,GOOGL') or a JSON array (['AAPL','MSFT']) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful context about the data source (Yahoo Finance) and that no API key is required, which goes beyond the annotations and aids the agent in setting expectations.
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, front-loaded with the primary action, and contains no filler. Every phrase adds value, including examples and the no-API-key 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?
Given the simple one-parameter tool and presence of an output schema, the description is complete enough. It covers the tool's purpose, input format examples, and a key context note about the data source and authentication.
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 already fully describes the symbols parameter with format and examples, giving 100% coverage. The description adds little beyond what the schema provides, only reinforcing that one or more symbols are accepted.
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 gets current stock price and market data for one or more symbols, with concrete examples. This specific verb+resource phrasing distinguishes it from sibling tools like stocks_get_chart (historical chart data) and stocks_search_symbol (symbol lookup).
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 context by specifying this is for current quotes and highlights that Yahoo Finance is used without an API key. It implies when to use this tool, but does not explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stocks_search_symbolStocks Search SymbolARead-onlyInspect
Searches for a stock ticker symbol by company name (e.g. "Apple" → AAPL). Start here for Stocks — the symbol it returns is what stocks_get_quote / stocks_get_chart need.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 10) | |
| query | Yes | Company name or partial ticker to search for |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the useful context that results feed into quote/chart tools. It doesn't describe return format or pagination/limit behavior, but annotations carry the safety burden adequately, so a 3 is fair.
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 waste. The first states the purpose with an illustrative example; the second provides workflow direction by naming the dependent sibling tools. Every word serves a 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?
For a simple lookup tool with 2 well-documented params, an output schema present, and safe annotations, the description is complete. It explains what it does, how to use it, and what to do with the result. The output schema covers return structure, and annotations cover safety.
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 descriptions for both 'query' (company name or partial ticker) and 'limit' (max results, default 10). The description reinforces query semantics with the concrete example 'Apple' → AAPL, adding value beyond the bare schema by clarifying the input format and expected output mapping.
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: 'Searches for a stock ticker symbol by company name' with a concrete example (Apple → AAPL). It distinguishes itself from siblings stocks_get_quote / stocks_get_chart by explicitly saying 'the symbol it returns is what stocks_get_quote / stocks_get_chart need', clarifying it's a lookup/entry point rather than a data retrieval 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?
The description explicitly says 'Start here for Stocks' and identifies the downstream consumers (stocks_get_quote / stocks_get_chart), giving clear guidance on when this tool fits in a workflow. This provides strong usage context among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
survey_respondSurvey RespondAInspect
Shows or submits the short in-product survey Local MCP assigned to this machine. Called with NO arguments it returns the pending survey and, in clients that support MCP Apps, renders it as an interactive card the user answers directly — prefer this. To submit conversational answers instead, pass answers keyed by each question's id (single/scale = one value, multiple = an array of values): call once to PREVIEW, then again with confirm=true to record. Do NOT invent answers — if no human gave them (you're running autonomously), call survey_skip instead.
| Name | Required | Description | Default |
|---|---|---|---|
| answers | No | Answers keyed by question id. Single/scale = a value; multiple = an array. | |
| confirm | No | Set true to actually record the answers. Omit/false = preview only (nothing is stored). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| survey | No | The pending survey (no-args call) — rendered by the MCP Apps card. |
| message | No | |
| preview | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds rich behavioral context beyond the sparse annotations: the tool can both display and record responses, confirm=true is required for persistence, and inventing answers is prohibited. It also discloses the autonomous-agent fallback behavior, giving a clear safety boundary.
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 dense but every sentence carries essential information: main behavior, preferred mode, submission flow, and safety instruction. It is well-structured and front-loaded with the core purpose.
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 interactive nature, nested answer objects, and output schema, the description is remarkably complete. It covers all invocation modes, the recording semantics, and the alternative for autonomous contexts, leaving no major 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?
While the schema already describes both parameters, the description adds crucial semantics: how question types map to value shapes (single/scale vs. multiple), the preview-then-confirm pattern, and the directive not to invent answers. This goes well beyond the bare schema descriptions.
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's purpose: showing or submitting the short in-product survey assigned to this machine. It distinguishes itself from the sibling tool survey_skip by explicitly directing autonomous agents to use survey_skip instead.
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 explicit guidance on when to call with no arguments (preferred interactive path), when to pass answers, the two-step preview/confirm flow, and when to avoid this tool entirely (if no human gave answers, call survey_skip). This fully clarifies usage relative to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
survey_skipSurvey SkipAInspect
Skips the short in-product survey Local MCP showed the user, for now — use this when the user doesn't want to answer right now. They won't be asked again this session.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| message | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the key behavioral consequence: 'They won't be asked again this session.' This goes beyond the annotations (readOnlyHint false, destructiveHint false) by clarifying the temporary, session-limited state change. It adds meaningful context for a simple skip action.
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 action, condition, and effect without any filler. Information is front-loaded and every word 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 description is fully adequate for a zero-parameter, low-complexity tool. It explains what it does, when to use it, and the relevant consequence. An output schema exists, so no return-value details are needed.
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 coverage is trivially 100%. With no parameters to explain, the baseline of 4 applies, and the description appropriately says nothing about 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?
The description clearly states the action ('Skips the short in-product survey') and specifies the scope ('for now'). It distinguishes itself from the sibling tool survey_respond by defining when to use it: when the user doesn't want to answer right now.
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 provides an explicit usage condition: 'use this when the user doesn't want to answer right now.' While it does not name the alternative survey_respond directly, the intent is clear and the condition is unambiguous. The session-scoped effect also helps guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_call_historyTeams Call HistoryARead-onlyInspect
Reads Microsoft Teams call & meeting history from the Mac's local Teams cache — no Graph API, no token, no admin consent (the same local store the Teams Calls tab renders). Each call includes direction (incoming/outgoing/missed), participants (names + ids), start / answered / end times, duration, call type (1:1/group/meeting) and a stable call id. Optional since/until (YYYY-MM-DD) narrow the range — e.g. a daily collector pulls the previous day's calls.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max calls to return (default 50), newest first | |
| since | No | Only calls on/after this date, YYYY-MM-DD (optional) | |
| until | No | Only calls on/before this date, YYYY-MM-DD (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| calls | No | |
| count | No | |
| error | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds valuable context beyond annotations: data is from a local cache, no network auth required, and it lists the specific fields returned (direction, participants, times, duration, call type). This exceeds the baseline for annotation-backed 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 description is three focused sentences with no fluff. It front-loads the core purpose, then adds return-field details, and ends with parameter usage and a practical example. 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?
Even though an output schema exists, the description still explains the kinds of data returned, the source (local cache), a usage example, and the Mac-specific constraint. It is complete for a read-only tool with three optional parameters and simple filtering.
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%, so all three parameters are already well-documented with descriptions. The description adds a brief mention of the optional since/until range and an example, but it mostly repeats schema info without introducing new semantics or edge-case behavior. Baseline 3 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 reads Microsoft Teams call & meeting history from the local Mac cache, using a specific verb and resource. It distinguishes itself from sibling tools that handle chats/channels by focusing on call history and emphasizing it works without Graph API or admin consent.
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 provides clear context for when to use it (reading call history) and includes an example use case (daily collector pulling the previous day's calls). It doesn't explicitly exclude alternatives, but the local cache and no-API framing makes its niche obvious relative to siblings like teams_read_chat_messages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_list_channelsTeams List ChannelsARead-onlyInspect
Lists channels in a Microsoft Teams workspace. Returns channels that are cached in the local Teams client. If the result is empty, the channels have not been loaded into the local cache yet — ask the user to open Microsoft Teams and browse to the team's channels, then try again.
| Name | Required | Description | Default |
|---|---|---|---|
| team_id | Yes | Team ID from teams_list_teams |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| error | No | |
| channels | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses that the tool returns only cached channels and may return empty results until the user populates the cache. This is a non-obvious and critical behavioral trait that goes beyond what annotations already 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?
The description is three concise sentences, front-loaded with the purpose, then explaining cache behavior and the recommended action. Every sentence contributes operational value 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?
Given the simple one-parameter design, an existing output schema, and annotations, the description covers all essential aspects: what it does, its cache dependence, and the fallback action. There are no significant 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 input schema fully documents the single parameter team_id with a clear description ('Team ID from teams_list_teams'), providing 100% coverage. The tool description does not add additional parameter semantics, so the baseline of 3 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 opens with 'Lists channels in a Microsoft Teams workspace,' which uses a specific verb and resource, clearly distinguishing it from sibling tools like teams_list_chats and teams_list_teams. It also clarifies the cache-based scope of the 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?
The description provides clear context about the cache dependency and gives explicit instructions to open Microsoft Teams and browse to channels if the result is empty. However, it does not mention alternative tools or when not to use this tool, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_list_chatsTeams List ChatsARead-onlyInspect
Lists Microsoft Teams chats (direct messages and group chats).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max chats to return (default 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| chats | No | |
| count | No | |
| error | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that chats include DMs and group chats, but provides no additional behavioral context such as authentication needs, ordering, or pagination.
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 clear sentence with no filler or redundancy. It conveys the essential information efficiently.
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 operation with one optional, fully documented parameter and an output schema present, the description is sufficiently complete. It does not need to explain return values because the 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?
The schema fully describes the only parameter (limit) with default value, giving 100% coverage. The description adds no extra parameter meaning, so the baseline of 3 is appropriate given the schema handles all parameter 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?
Description clearly states the tool 'Lists Microsoft Teams chats' and specifies the scope as 'direct messages and group chats', effectively distinguishing it from sibling tools like teams_list_channels and teams_list_teams.
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 for listing Teams chats but does not explicitly state when to use it over alternatives (e.g., teams_read_chat_messages, teams_search_messages) nor any exclusions. Context is provided, but guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_list_teamsTeams List TeamsARead-onlyInspect
Lists all the Microsoft Teams the user belongs to. Start here for Teams channels — the team id it returns feeds teams_list_channels / teams_read_channel_messages. (For 1:1 and group chats, list_message-style, use teams_list_chats.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| error | No | |
| teams | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only safety profile is covered. The description adds the return-value utility context — that team IDs feed downstream channel listing/reading tools. It doesn't detail pagination or content of each item, but with no params and a safe read profile this is adequate and adds value beyond 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 sentences, front-loaded with the primary purpose, then workflow context. Every clause earns its place — the 'Start here... feeds' guidance is genuinely useful, not filler. Zero waste.
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?
Complete for a zero-parameter, read-only tool. The description covers purpose, workflow position, and the chat alternative. Output schema exists, and the safe-read behavior is specified by annotations. Nothing significant 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?
Tool has zero parameters and 100% schema coverage (empty object). Baseline 3 applies since there are no params to document; description adds nothing needed about parameters but isn't required to.
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: 'Lists all the Microsoft Teams the user belongs to' — distinct from sibling tools like teams_list_channels and teams_list_chats. Explicitly positions itself as the entry point that feeds downstream tool 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?
Explicitly states 'Start here for Teams channels' with a clear workflow (output feeds teams_list_channels / teams_read_channel_messages). Also names the alternative for chats: 'For 1:1 and group chats... use teams_list_chats.' Distinguishes from the sibling teams_list_chats tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_read_channel_messagesTeams Read Channel MessagesARead-onlyInspect
Reads messages from a Microsoft Teams channel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages (default 50) | |
| team_id | Yes | Team ID | |
| channel_id | Yes | Channel ID from teams_list_channels |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| error | No | |
| messages | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description merely repeats 'Reads' without adding any additional behavioral context such as pagination, ordering, authentication requirements, or rate limits. No extra value is provided beyond the structured 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 concise sentence that front-loads the verb and object. Every word earns its place with no filler or repetition.
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 straightforward read operation with a readOnly annotation and an output schema, the description is functionally complete. It lacks usage guidance, but the schema and annotations cover the remaining structured 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?
The input schema covers 100% of the parameters with descriptions, so the description is not required to add parameter details. The description does not mention any parameter semantics, but none are needed given the schema coverage.
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 ('Reads'), resource ('messages from a Microsoft Teams channel'), and scope ('channel'), distinguishing it from chat message tools like teams_read_chat_messages. The name and title reinforce this unambiguous action.
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 reading messages from a Teams channel, but it provides no explicit guidance on when to prefer it over alternatives such as teams_search_messages or teams_read_chat_messages. No exclusions or alternative tools are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_read_chat_messagesTeams Read Chat MessagesARead-onlyInspect
Reads messages from a Teams chat or direct message thread.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages (default 50) | |
| chat_id | Yes | Chat ID from teams_list_chats |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| error | No | |
| messages | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read behavior is covered. The description adds scope (chat vs DM) but does not disclose other behavioral traits like sorting, pagination, or permissions. 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?
The description is a single, complete sentence that front-loads the core functionality. There is zero wasted text or redundancy with the title or 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?
Given the tool's simplicity, strong annotations, full schema coverage, and presence of an output schema, the description is mostly complete. It could benefit from explicitly noting that it excludes channel messages, but the name and sibling context largely compensate.
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 both parameters (chat_id and limit) have meaningful descriptions. The tool description does not add any additional parameter semantics beyond the schema, so a baseline of 3 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 uses a specific verb ('Reads') and resource ('messages from a Teams chat or direct message thread'), clearly distinguishing it from sibling tools like teams_read_channel_messages. It succinctly states exactly 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 for chat/DM threads but does not explicitly contrast with alternatives such as teams_read_channel_messages or teams_search_messages. No exclusions or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_search_messagesTeams Search MessagesARead-onlyInspect
Searches your Microsoft Teams chat and direct-message history (all conversations at once) by text, sender name, and/or date range. Use this to find where something was discussed in Teams without knowing which chat. Returns matching messages with the chat they came from. Provide at least one of query, from_sender, since, until.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results, newest first (default 50, max 200) | |
| query | No | Text to find in message bodies (case-insensitive substring) | |
| since | No | Only messages on/after this date, YYYY-MM-DD (optional) | |
| until | No | Only messages on/before this date, YYYY-MM-DD (optional) | |
| from_sender | No | Filter to a sender by display-name substring (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| error | No | |
| messages | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and destructiveHint annotations, the description discloses the return format ('Returns matching messages with the chat they came from') and a usage constraint ('Provide at least one of query, from_sender, since, until'). This adds valuable behavioral context without contradicting 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 sentences, front-loaded with the primary action and scope, then use-case, return, and a requirement. Every sentence adds value with no redundancy or 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 read-only search tool with an output schema and fully documented parameters, the description covers the essential aspects: what it searches, when to use it, what it returns, and a required filter constraint. No critical gaps remain for the agent 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 100% with each parameter already described. The description reinforces the parameter roles ('text, sender name, and/or date range') and adds an explicit requirement that at least one filter be provided, which is not present in the schema. This supplements the schema meaningfully.
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 a specific action ('Searches') on a specific resource ('Microsoft Teams chat and direct-message history'), and emphasizes the cross-chat scope ('all conversations at once'). This distinguishes it from sibling tools like teams_read_chat_messages that operate on a single chat.
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 clear guidance on when to use this tool: 'to find where something was discussed in Teams without knowing which chat.' This implies the alternative use of chat-specific reads when the chat is known, though it does not explicitly name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_send_channel_messageTeams Send Channel MessageAInspect
Sends a text message to a Microsoft Teams channel via Graph API. Requires connect_m365_account with Chat.ReadWrite / ChannelMessage.Send permissions. team_id and channel_id must come from teams_list_teams / teams_list_channels. First call returns a preview; set confirm=true to send.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Plain-text message body | |
| confirm | No | Set true to send; false returns preview | |
| team_id | Yes | Team ID from teams_list_teams, or the team's name | |
| channel_id | Yes | Channel ID from teams_list_channels, or the channel's name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses significant behavioral traits beyond annotations: it requires authentication permissions, and it sends a preview first rather than directly sending, requiring confirm=true to complete the send. This is important for an agent to know to manage user confirmation. Annotations only indicate it's not read-only and not destructive, so the description adds crucial 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?
The description is two sentences, with the core purpose in the first sentence, followed by prerequisites and behavioral flow. No redundant information; each clause adds 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?
Given the output schema, annotations, and clear input schema, the description provides all necessary contextual information: purpose, permissions, dependencies on list tools, and the preview/confirm workflow. It is complete for an agent to use 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?
Input schema descriptions cover all parameters (100% coverage), including the source of team_id/channel_id and the meaning of confirm. The description reiterates these points but doesn't add new parameter-level semantics beyond what the schema already provides. The baseline is 3 given high schema coverage.
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 identifies the tool as sending a text message to a Microsoft Teams channel, using a specific verb ('sends') and resource ('text message to a Microsoft Teams channel'). This distinguishes it from related tools like teams_send_message, which likely handles chat messages. It also provides the channel context, 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 guidance by specifying that team_id and channel_id must come from teams_list_teams/teams_list_channels, and that connect_m365_account is required with specific permissions. It also explains the preview-then-confirm flow. However, it does not explicitly name alternative tools or state when not to use this tool (e.g., for chat messages), so it lacks explicit exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
teams_send_messageTeams Send MessageAInspect
Sends a text message to a Microsoft Teams chat or channel. Requires Microsoft Teams to be running and signed in (token is read fresh from Teams' local cookies on each call). The chat_id MUST come from a previous teams_list_chats call — never fabricate ids. This is a write operation: the first call returns a preview, the second call (with confirm=true) actually sends. sent:true means the message was read back from the conversation (delivery verified) — trust THAT field, not a follow-up read: teams_search_messages and teams_read_chat_messages read Teams' own local sync index, which can lag a verified send by minutes (single observed case: 3 min, #2285). A zero-result sibling read right after sending is NOT evidence the send failed. A response with status "sent_unconfirmed" means the server accepted the POST but the message could NOT be verified — tell the user to open Teams itself and check before assuming the recipient was notified.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Plain-text message body. Max 28000 chars. No formatting / mentions / attachments in v1. | |
| chat_id | Yes | Thread id from teams_list_chats (e.g. '19:<uuid>_<uuid>@unq.gbl.spaces' for 1:1, '19:<uuid>@thread.tacv2' for group) | |
| confirm | No | Must be true to actually send. Without it, returns a preview without making any network call. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag readOnlyHint=false and openWorldHint=true, which are minimal. The description adds the full write behavior: local cookie auth, Teams must be running, two-phase confirmation, verified vs unverified send status, and the sync-lag caveat for sibling reading tools. 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?
The description is long but information-dense; every major sentence covers a distinct operational necessity. It could arguably be trimmed (e.g., the specific 3-min case and issue number), but the detail serves a real functional purpose.
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 two-step confirmation, verification semantics, sibling-read lag, and presence of an output schema, the description covers all necessary operational context: prerequisites, expected behavior, failure modes, and how to trust results. No significant gap remains.
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%, so baseline 3 applies. The description adds critical semantics beyond the schema: chat_id must be sourced from teams_list_chats and never fabricated, and confirm must be true to send while first call returns a preview. This extra guidance elevates it above 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 first sentence states a clear verb and resource ('sends a text message to a Microsoft Teams chat or channel'). The title and description make the core function obvious, and the chat_id parameter ties it to teams_list_chats. However, it doesn't explicitly differentiate from the sibling teams_send_channel_message, and saying 'chat or channel' broadens scope beyond the chat_id parameter's actual channel semantics.
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?
Explicitly states the prerequisite that chat_id must come from teams_list_chats and never fabricated. It defines the two-step confirm workflow (preview then send) and explicitly warns that zero-result sibling reads after sending do not indicate failure, with a precise status sent_unconfirmed action. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_complete_taskTo Do Complete TaskAInspect
Marks a Microsoft To Do task as complete (via Reminders sync).
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | List name to narrow search by title (optional) | |
| title | No | Task title (partial match, alternative to task_id) | |
| confirm | No | Must be true to complete | |
| task_id | No | Task ID from todo_list_tasks |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutating operation (readOnlyHint=false) and not destructive (destructiveHint=false). The description adds the detail that it works via Reminders sync, which is extra context. However, it does not disclose requirements like confirm=true or potential side effects, but the parameter schema covers confirm.
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 sentence with no redundant phrasing. It front-loads the core action and includes a useful qualifier. Every word 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?
Given the simple operation and rich structured data (full schema coverage, annotations, and an output schema), the description is sufficient. It could mention the need for confirm=true or retrieving task_id from todo_list_tasks, but the schema already communicates these. The description is complete enough for an agent to invoke correctly with schema awareness.
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 each parameter is already well-documented. The description adds no additional meaning about parameters, such as which identifier to prefer, but the schema already explains that title is a partial match and alternative to task_id.
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 ('Marks a Microsoft To Do task as complete') with a specific verb and resource. It distinguishes the tool from siblings like complete_reminder and complete_omnifocus_task by explicitly naming Microsoft To Do and the 'via Reminders sync' detail.
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 through the name and 'Microsoft To Do' mention, but it does not explicitly state when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. No direct guidance on selecting task_id vs title is given, though the schema covers that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_create_taskTo Do Create TaskAInspect
Creates a task in Microsoft To Do (via Reminders sync). Task appears in To Do automatically once synced.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | List name (from todo_get_folders). Defaults to first available list. | |
| notes | No | Task notes (optional) | |
| title | Yes | Task title | |
| confirm | No | Must be true to create | |
| due_date | No | Due date (YYYY-MM-DD, optional) | |
| priority | No | Priority: 1=high, 5=medium, 9=low (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the underlying sync mechanism (Reminders sync) and eventual consistency ('once synced'), which is beyond the minimal annotations. It does not mention potential failure modes or the confirm guard, but the schema covers confirm. 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?
Two concise sentences, front-loaded with the action and resource. The second sentence adds a useful behavioral detail without redundancy. Every word 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 description, combined with a 100% covered schema and an output schema, is sufficient for a create operation. It explains the integration path and sync behavior, while the schema covers required parameters and defaults. It doesn't discuss prerequisites like account connection, but that's implied by the M365/To Do 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?
The input schema provides full definitions for all 6 parameters with clear types, formats, and defaults (e.g., 'list' references todo_get_folders, 'priority' explains numeric mapping). The description itself adds no additional parameter-specific semantics, so it relies on 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 uses a specific verb ('Creates'), names the resource ('task in Microsoft To Do'), and clarifies the integration path ('via Reminders sync'). It distinguishes from sibling tools like todoist_create_task and create_reminder by specifying the exact destination service.
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 context about the sync behavior ('Task appears automatically once synced') but does not explicitly state when to use this tool vs alternatives like create_reminder or todoist_create_task. There are no exclusions or alternative recommendations, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_get_foldersTo Do Get FoldersARead-onlyInspect
Lists Microsoft To Do task lists. Requires Microsoft account in Reminders sync (System Settings → Internet Accounts → Microsoft Exchange → enable Reminders).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | |
| count | No | |
| lists | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since annotations already declare readOnlyHint=true and destructiveHint=false, the description need not restate safety. It adds value by disclosing the non-obvious dependency on Reminders sync and by clarifying that 'folders' are called 'task lists' in Microsoft To Do. This context goes beyond the structured fields and does not contradict them.
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 exactly two sentences: the first states the core purpose, the second gives a necessary setup prerequisite. Every word earns its place, with no fluff or repetition of the tool name/title. This is an exemplar of concise, structured tool documentation.
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 zero-parameter read-only tool with an output schema, the description sufficiently covers the action and a key prerequisite. It does not describe the return format, but the output schema handles that. The only minor omission is not explicitly confirming that it returns all folders, though 'Lists' implies the full 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?
The input schema has zero parameters, so there is no parameter detail to provide. Schema description coverage is 100% (vacuously). Per the rubric, a zero-parameter tool gets a baseline of 4, and the description appropriately adds no redundant parameter information.
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 'Lists Microsoft To Do task lists' with a specific verb and resource. It clearly identifies the tool as a read-only list operation for Microsoft To Do, and the qualifier 'Microsoft To Do' distinguishes it from Apple Reminders-based siblings like get_reminder_folders. However, it does not explicitly compare against todo_list_tasks, leaving some differentiation 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 description provides a concrete prerequisite: 'Requires Microsoft account in Reminders sync (System Settings → Internet Accounts → Microsoft Exchange → enable Reminders).' This tells the agent a necessary condition for success. However, it does not explicitly state when to prefer this tool over alternatives like get_reminder_folders or todo_list_tasks, so usage context is implied rather than fully articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_complete_taskTodoist Complete TaskAInspect
Mark a Todoist task complete (closes it). Pass the task_id from todoist_list_tasks.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | The task id to complete |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| message | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only and destructive hints, so the safety profile is known. The description adds that the task is closed and where to get the task_id, but does not disclose any additional side effects or error behavior. This is adequate but not rich beyond 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 concise sentences: the first states the action, the second states the input source. There is no filler or unnecessary 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 mutation with annotations and an output schema, the description is sufficient to guide invocation. It could mention what happens on invalid task IDs or whether the action is reversible, but these are not required for basic usage.
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 already documents task_id with 100% coverage. The description adds value by specifying the provenance of the task_id ('from todoist_list_tasks'), which helps the agent correctly populate the parameter. This exceeds the baseline for schema-only coverage.
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 ('Mark') and resource ('Todoist task complete'), and clarifies what 'complete' means ('closes it'). It also tells the agent to pass a task_id from todoist_list_tasks, which distinguishes it from other completion tools like complete_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?
It clearly states the context for use: marking a Todoist task complete, and provides the necessary prerequisite of using a task_id obtained from todoist_list_tasks. It does not explicitly name alternative tools or state when not to use it, but the usage context is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_create_taskTodoist Create TaskAInspect
Create a Todoist task. Optionally set a project, a natural-language due date (due_string, e.g. 'tomorrow 5pm', 'every monday'), and priority (1=normal … 4=urgent).
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | The task text | |
| priority | No | 1 (normal) to 4 (urgent). Todoist UI p1 = 4. | |
| due_string | No | Natural-language due date, e.g. 'tomorrow 5pm', 'next monday' | |
| project_id | No | Project to add it to (default: Inbox) |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| due | No | |
| url | No | |
| content | No | |
| priority | No | |
| project_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false and destructiveHint=false, so the description's 'Create' is consistent. The description adds helpful context beyond the annotations by explaining the priority scale (1=normal to 4=urgent) and giving examples of natural-language due strings, which aids in correct usage. It doesn't disclose potential side effects, but for a simple create operation, this is sufficient.
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 that states the core action first and then lists optional parameters efficiently. It contains no filler or redundant information, making it easy to parse and act upon.
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 creation tool with an output schema available, the description covers the essential purpose and key options. It doesn't explain return values, but that's unnecessary given the output schema. It could theoretically mention prerequisites like needing a connection, but the sibling connect_todoist implies that; overall, it's complete enough for an agent to 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?
Schema description coverage is 100%, so the baseline is 3. The description essentially restates the schema's parameter descriptions: it mentions project, due_string with examples, and priority with the same scale. It adds no new meaning beyond what the schema already provides, so it doesn't exceed 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 explicitly states 'Create a Todoist task' with a clear verb and resource, and distinguishes itself from siblings like todoist_complete_task and todoist_list_tasks by focusing on creation. It also briefly lists key optional parameters, leaving 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 clearly implies use when creating a new task in Todoist, providing examples for due dates and priority levels. While it doesn't explicitly mention alternatives, the specificity of 'Create a Todoist task' and the optional parameters give clear context. No exclusions are stated, but the purpose is unambiguous enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_list_projectsTodoist List ProjectsARead-onlyInspect
List your Todoist projects (id + name). Use a project's id to scope todoist_list_tasks or todoist_create_task.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| projects | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces a safe read-only list operation. It adds useful context by stating the exact fields returned (id + name) and that it lists the user's own projects, though it does not address auth or rate 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?
Two sentences, front-loaded with the core action, and every clause adds value (output shape plus downstream usage). No filler or repetition of schema 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 no-parameter list operation with output schema present and annotations covering safety, the description is complete: it states purpose, return fields, and how results should be used. Nothing important 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 tool has zero parameters, so the baseline is 4. The description appropriately mentions using a project id downstream, but there are no input parameters requiring semantic explanation.
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?
Description opens with a specific verb and resource: 'List your Todoist projects (id + name)'. This clearly distinguishes it from sibling tools like todoist_list_tasks and todoist_create_task, and the phrase 'id + name' specifies the return 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?
The second sentence gives explicit downstream usage: 'Use a project's id to scope todoist_list_tasks or todoist_create_task.' This tells the agent when/how to use the output and implies this tool is the prerequisite for project-scoped Todoist operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todoist_list_tasksTodoist List TasksARead-onlyInspect
List active (incomplete) Todoist tasks. Optionally scope to a project_id, or pass a Todoist filter (e.g. 'today', 'overdue', '#Work & p1').
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50, max 200) | |
| filter | No | A Todoist filter query, e.g. 'today', 'overdue', 'p1' | |
| project_id | No | Only tasks in this project (from todoist_list_projects) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| tasks | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and non-destructive behavior. The description adds meaningful context that only active/incomplete tasks are returned and that filtering/scoping is available. It does not discuss pagination or edge cases, but the annotation coverage raises the baseline and the added default-behavior note is valuable.
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 sentence, front-loaded with the core purpose, and includes examples without unnecessary verbosity. Every word 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?
With an output schema present and all parameters documented, the description covers the essential behavior and common use cases. The mention of the default active/incomplete scope and filter examples bridges most gaps. The limit default (50) is and max (200) are in the schema, so not mentioning them here is acceptable.
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?
Although the schema covers all three parameters (100% coverage), the description enriches the filter parameter with practical examples like '#Work & p1' that are absent from the schema. It also clarifies that project_id scopes results, adding value beyond the schema's generic descriptions.
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's function: 'List active (incomplete) Todoist tasks.' It uses a specific verb and resource, and distinguishes itself from sibling tools like todoist_create_task and todoist_list_projects by narrowing scope to active tasks.
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 by offering optional parameters (project_id, filter) and provides concrete filter examples ('today', 'overdue', '#Work & p1'), but it does not explicitly mention when to use this tool over alternatives like todoist_list_projects or todoist_complete_task. No direct when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
todo_list_tasksTo Do List TasksARead-onlyInspect
Lists tasks from a Microsoft To Do list (or any Reminders list). Syncs via macOS Reminders.
| Name | Required | Description | Default |
|---|---|---|---|
| list | No | List name (from todo_get_folders). Leave empty to show all. | |
| limit | No | Max tasks to return (default 50) | |
| include_completed | No | Include completed tasks (default false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| tasks | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to reiterate safety. It adds the detail about syncing via macOS Reminders, but does not disclose behavior like pagination, default limit, or completed-task filtering, though those are covered by 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?
The description is two sentences, front-loaded with the core action, and contains no filler. Every word contributes to explaining the tool's purpose and data source.
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 an output schema present and full schema coverage, the description is sufficient for a simple read tool. It explains the data source (Microsoft To Do/Reminders) but could have explicitly mentioned using todo_get_folders for list names, though the schema already provides that hint.
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 each parameter (list, limit, include_completed) clearly documented. The description adds no additional parameter semantics beyond the schema, so the baseline score of 3 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 tasks from a Microsoft To Do list or Reminders list, using a specific verb and resource. It distinguishes from sibling task tools like list_reminders and todoist_list_tasks by naming Microsoft To Do/Reminders.
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 guidance on when to use this tool versus alternatives such as list_reminders or todoist_list_tasks. The mention of 'Syncs via macOS Reminders' provides context but does not clarify when to choose this over other task-listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_clickUi ClickAInspect
Clicks an element (by element_ref, at its center) or a screen coordinate (by coords). button left|right, count 2 = double-click. Returns {clicked, at:{x,y}} — clicked means the click event was POSTED at those coordinates, NOT that the app acted on it: CGEvent carries no delivery confirmation, so a busy, modal or input-ignoring app reports exactly the same success. Confirm the effect with ui_wait_for_element or ui_read_tree rather than trusting clicked. element_disabled is returned ONLY when the app actually publishes AXEnabled=false; a control that does not publish AXEnabled at all is treated as unknown and clicked. Requires Accessibility permission.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | Default element if element_ref given, else coords. | |
| count | No | 1 (default) or 2 for double-click. | |
| button | No | Default left. | |
| coords | No | {x,y} in global screen points. | |
| element_ref | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is exemplary behavioral disclosure far beyond the minimal annotations (readOnlyHint:false, destructiveHint:false). The description reveals that clicked=true only means the CGEvent was POSTED with no delivery confirmation, that busy/modal/input-ignoring apps report identical success, and that element_disabled is returned only when AXEnabled=false is actually published — a control lacking AXEnabled is treated as unknown and clicked. These caveats directly prevent an agent from drawing false conclusions about side effects.
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 sentences, each earning its place: the core action is front-loaded in sentence one, the return-value caveat in sentence two, the verification advice in sentence three, and the disabled/permission semantics in sentence four. It is dense rather than short, but the length is justified because every clause carries information an agent would otherwise mis-learn at runtime.
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 tool with 5 parameters, one nested object, and no output schema, the description covers the return shape ({clicked, at:{x,y}}), failure semantics, permission requirements, and edge-case behavior — essentially compensating for the missing output schema. Minor gaps remain: it never says where element_ref comes from (e.g., ui_read_tree or ui_find_element), and it doesn't specify the behavior when neither element_ref nor coords is supplied.
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 80%, placing the baseline at 3, but the description adds genuine value beyond the schema: it explains that element_ref is clicked at its center, that coords is the alternate targeting mode, and that element_ref and coords are mutually exclusive alternatives. It compensates for the one undocumented parameter (element_ref has no schema description) by giving it semantic meaning in the first sentence.
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 precise verb+resource: "Clicks an element (by element_ref, at its center) or a screen coordinate (by coords)." The mechanism details (center-click, button left|right, count 2 = double-click) make it unambiguous within the ui_* family and clearly distinct from web_click, ui_menu_bar_click, ui_keystroke, and ui_type. The AXEnabled and Accessibility references anchor it to native UI, preventing confusion with the web interaction 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 gives actionable workflow guidance: "Confirm the effect with ui_wait_for_element or ui_read_tree rather than trusting `clicked`" — this tells the agent what to do after invoking the tool and names the sibling verification tools. It also flags the Accessibility permission prerequisite. It stops short of explicit when-not-to-use exclusions (e.g., 'for menu bar use ui_menu_bar_click, for browser use web_click'), so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_find_elementUi Find ElementARead-onlyInspect
GUI automation — control a native app's interface. Finds an element (button, field, menu…) in an app's accessibility tree by role and/or label. Scope with app_bundle_id or window_id. Returns an opaque element_ref (usable by ui_click / ui_get_element this session) plus role, label, bounds, focused, and enabled only when the app publishes AXEnabled (otherwise enabled_unknown: true, which does NOT mean disabled). found=false when the app is reachable but no element matches; app_not_found is an explicit error. Requires Accessibility permission.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | AX role, e.g. AXButton, AXMenuItem, AXTextField. | |
| index | No | Which match to return if several (default 0). | |
| label | No | AX title/description to match. | |
| match | No | Default contains. | |
| window_id | No | Alternatively scope by a window_id from list_windows. | |
| app_bundle_id | No | Scope the search to this app. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and non-destructive annotations, the description explains session-limited element_ref lifetime, the enabled vs enabled_unknown distinction, the found=false result when no match occurs, the app_not_found error, and the Accessibility permission requirement. This is rich behavioral disclosure that materially helps an agent anticipate outcomes.
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 dense but every sentence carries operational value: purpose, scoping, return value, edge cases, and permissions. The front-loaded 'GUI automation' context orients the agent immediately, and the length is appropriate for the tool's complexity.
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 burden of explaining return semantics, error cases, and required permissions. It covers the key operational concerns an agent needs to invoke the tool correctly and interpret results, including subtle cases like enabled_unknown and app_not_found.
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 the schema already documents role, label, index, match, window_id, and app_bundle_id. The description adds a useful framing of role and/or label and scoping, but does not go beyond the schema in explaining individual parameter semantics. This meets the baseline for high schema coverage.
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 operation: finding an element in a native app's accessibility tree by role and/or label, with optional scoping by app_bundle_id or window_id. It also specifies the return artifact and how it relates to sibling tools like ui_click and ui_get_element, making the tool's identity 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 gives clear context for when to use this tool: locating a UI element for later interaction and scoping the search to a specific app or window. It does not explicitly enumerate alternatives like ui_read_tree or ui_wait_for_element, so it lacks exclusions, but the use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_get_elementUi Get ElementARead-onlyInspect
Re-resolves a previously returned element_ref (its bounds/state may have changed). Returns role, label, bounds, focused, value, and enabled ONLY when the app publishes AXEnabled — that attribute is optional, so many perfectly usable controls omit it (TextEdit's text area does). When it is missing you get enabled_unknown: true instead; that is 'unknown', NOT disabled, and ui_click will click it. stale_element if the handle is unknown or the element no longer exists.
| Name | Required | Description | Default |
|---|---|---|---|
| element_ref | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/destructive annotations by explaining the optional nature of `enabled`, the `enabled_unknown: true` fallback, the fact that unknown is not disabled and remains clickable, and the `stale_element` failure mode. This is precisely the kind of non-obvious runtime behavior an agent needs.
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 dense but every sentence adds essential information: core action, return fields, conditional attribute semantics, and error behavior. The TextEdit example is a concrete clarification rather than padding, and the most important information is 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?
Despite having no output schema, the description documents the return payload, the conditional presence of fields, the semantics of the unknown flag, and the stale-element error. For a single-parameter read-only utility, 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 0% schema description coverage, the description carries the burden for `element_ref`. It explains that the value must be a previously returned element handle and what happens when it is stale or unknown, which is meaningful semantic context beyond the bare 'string' type.
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?
Description opens with a specific action ('Re-resolves a previously returned element_ref') and a clear resource, distinguishing it from lookup-style siblings like ui_find_element. It also enumerates what is returned, so an agent knows exactly what this 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 phrase 'previously returned element_ref' establishes the intended use case: refresh a stale handle rather than search for a new one. It does not explicitly name alternatives or state when not to use it, but the context is clear enough from the opening clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_keystrokeUi KeystrokeAInspect
Sends a key combination, e.g. "cmd+shift+5", "return", "cmd+,", "escape". Modifiers: cmd, shift, alt/option, ctrl, fn. The last token is the key. Returns {sent, delivery:"posted_not_confirmed"} — sent means the key events were POSTED, NOT that the app acted on them: CGEvent carries no delivery confirmation, and a keystroke's effect is arbitrary so nothing can be read back to prove it. Confirm the effect with ui_get_element / ui_read_tree rather than trusting sent. Modifiers are released after the combo, so a following ui_type is not swallowed. unknown_key if the key isn't recognized. Requires Accessibility permission.
| Name | Required | Description | Default |
|---|---|---|---|
| keys | Yes | e.g. cmd+shift+5, return, cmd+, |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by explaining the return semantics (posted not confirmed), lack of delivery confirmation, arbitrary effect, modifier release, unknown_key error, and Accessibility permission requirement. This rich behavioral detail is exactly what an agent needs and no annotation covers it.
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?
Every sentence adds essential value: purpose, syntax, return-semantics caveat, confirmation strategy, modifier behavior, error case, permission. Dense but no filler, and the core purpose is 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 single-parameter tool with no output schema, the description covers purpose, usage, return value, failure modes, side effects, and prerequisites. Nothing critical is missing for an agent 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 coverage is 100%, providing the baseline. The description adds meaningful parameter guidance: key format, modifiers list, 'last token is the key', and examples. It clarifies syntax beyond the schema's bare 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 ('Sends a key combination') with concrete examples, clearly distinguishing it from sibling tools like ui_type and ui_click. The purpose is unambiguous and immediately understandable.
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 clear context for when to use the tool (sending key combos, not typing text) and references ui_get_element/ui_read_tree for confirming effects. It does not explicitly contrast all alternatives, but the examples and modifier note ('a following ui_type is not swallowed') make usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_read_treeUi Read TreeARead-onlyInspect
Returns a COMPACT accessibility tree of a running native app's labeled + interactive elements (buttons, links, text fields, checkboxes, menus…) — the native equivalent of web_read's a11y mode. Use it to DISCOVER what to act on in an unfamiliar app when you don't already know an element's role/label (ui_find_element needs one up front). Each interactive node carries a ref you can pass straight to ui_click. Pass app_bundle_id of a running app (e.g. com.apple.finder — see list_windows); the tree is pruned to signal-bearing nodes and bounded by max_depth (default 12) and a node budget, so very large windows return partial. The app's macOS menu bar is skipped by default (it's hundreds of menu-item nodes) — pass include_menu_bar=true if you specifically need to act on menu-bar items.
| Name | Required | Description | Default |
|---|---|---|---|
| max_depth | No | Max tree depth to descend (default 12, max 20) | |
| window_id | No | Alternative to app_bundle_id: a window id from list_windows (targets that window's app) | |
| app_bundle_id | No | Bundle id of a RUNNING app (e.g. com.apple.finder) | |
| include_menu_bar | No | Include the app's macOS menu bar (hundreds of menu-item nodes). Default false. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is known to be safe. The description adds valuable behavioral context beyond annotations: tree pruning, node budget, partial return on large windows, and menu bar skipping by default. This helps the agent set expectations and handle partial 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?
The description is a single dense paragraph, but it is front-loaded with the main outcome and each subsequent sentence adds a needed caveat (pruning, bounds, menu bar). It is not overly verbose; every sentence earns its place, though it could be slightly restructured for readability.
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 discovery purpose, the description covers purpose, when to use, key parameters, behavioral limits, and the menu bar exception. It also references sibling tools for alternate flows. With a rich output schema expected, the description is sufficient for an agent to select and invoke this 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 description coverage is 100%, so the schema already documents all four parameters with meaningful descriptions. The description adds minor context like 'running app' and an example bundle ID, but these are already present in the schema. Baseline 3 is appropriate since the description doesn't significantly compensate 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 tool returns a compact accessibility tree of a running native app's labeled + interactive elements, using a specific verb ('Returns') and resource. It also distinguishes itself from sibling ui_find_element by noting it works when you don't already know an element's role/label, and references web_read's a11y mode.
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?
Explicitly states when to use: 'Use it to DISCOVER what to act on in an unfamiliar app when you don't already know an element's role/label (ui_find_element needs one up front).' Also provides a pointer to list_windows for finding bundle IDs and clarifies when include_menu_bar should be set to true.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_typeUi TypeAInspect
Types text into the focused control (or focuses element_ref first, then types). Sends real key events so validation/handlers fire. The result is VERIFIED BY READING the control back, not by the write succeeding: {typed, verified:true} means its value actually changed; input_not_applied is an explicit error meaning the events were posted and the value did NOT change (nothing was typed — usually the window is not frontmost); verified:false + verification:'unavailable' means the target publishes no readable value, so delivery could not be confirmed and you should read it back yourself. Requires Accessibility permission.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to type. | |
| element_ref | No | Optional; focus this element first. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond the sparse annotations: it reveals that results are verified by reading the control back, explains the input_not_applied error, describes the verified:false/unavailable case, and calls out the Accessibility permission requirement. It also implies state mutation by typing real key events, which is consistent with readOnlyHint=false.
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 long but every sentence carries critical information: core action, event behavior, verification semantics, error handling, and permission requirements. It is front-loaded with the main action and then details edge cases. Slight over-density comes from packing verification modes into one run-on sentence, but 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 simple two-parameter tool with no output schema, the description is remarkably complete. It covers behavior, optional targeting, permission requirements, return semantics, failure modes, and guidance for the unverifiable case. An agent has enough information to call the tool correctly and interpret its result without guessing.
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%, so the schema already documents both parameters. The description adds a useful ordering clarification for element_ref ('focuses element_ref first, then types'), but this largely restates the schema's 'focus this element first.' It does not add meaningful new semantics for the text 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?
The description clearly states the action ('types text') and the target resource ('the focused control' or element_ref), and it differentiates implicitly from web_type by referring to a control rather than a web page. However, it does not explicitly distinguish itself from sibling tools like ui_keystroke or web_type, so full sibling differentiation is left to inference.
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 explains how the tool behaves and what permissions it needs, but it gives no explicit guidance on when to use ui_type instead of alternatives such as ui_keystroke, ui_click, or web_type. There are no stated exclusions or comparison points, so an agent gets little help selecting between related UI input tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_wait_for_elementUi Wait For ElementARead-onlyInspect
Deterministic synchronization — replaces all sleeps. Polls for an element until it reaches state (present|enabled|focused|absent) or times out. A timeout is an EXPLICIT error, never a false success. Returns {satisfied, waited_ms, element_ref?, bounds?, enabled_unknown?}. state:'enabled' is satisfied unless the app publishes AXEnabled=false; if the app publishes no AXEnabled at all the result carries enabled_unknown:true — the wait did not block, but nothing was actually verified about enabled-ness.
| Name | Required | Description | Default |
|---|---|---|---|
| role | No | ||
| label | No | ||
| match | No | ||
| state | No | Default present. | |
| poll_ms | No | Default 150. | |
| window_id | No | ||
| timeout_ms | No | Default 5000. | |
| app_bundle_id | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the sparse annotations by explaining timeout semantics (explicit error, never false success), the return payload shape, and the subtle enabled_unknown edge case with AXEnabled. This is rich behavioral disclosure that is genuinely useful for an agent deciding whether the call succeeded as intended.
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 dense sentences, each earning its place. The most important claim ('replaces all sleeps') is front-loaded, and the subtle enabled_unknown caveat is included without bloat. The structure is clear and scannable.
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 description covers core behavior, timeout semantics, and return values unusually well, but it leaves element selection ambiguous: with zero required parameters, it is unclear whether role/label are needed, or what happens when none are supplied. The role/label/match/window_id/app_bundle_id semantics are a notable gap for a tool with this many parameters and no output schema to clarify 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 coverage is only 38%, and the description adds real meaning for state and timeout behavior but does little for role, label, match, window_id, or app_bundle_id. The state:'enabled' nuance and timeout-as-error detail compensate partially, but several element-locator parameters remain unexplained beyond their names.
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 opens with a specific purpose — deterministic synchronization that replaces sleeps — and clearly states the polling behavior and state targets (present|enabled|focused|absent). This clearly differentiates it from sibling tools like ui_find_element and ui_get_element by emphasizing waiting for a state over time, not mere lookup.
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 explicitly frames the tool as the replacement for sleeps, giving strong context for when to use it: whenever deterministic waiting for a UI state is needed. It does not explicitly name alternatives like ui_find_element or state when *not* to use it, but the 'replaces all sleeps' guidance is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_calendar_eventUpdate Calendar EventAInspect
Updates an existing event in the Mac's Calendar app (Calendar.app) by ID. Pass only the fields you want to change — unspecified fields are left as-is. Get the event_id from list_calendar_events. For Microsoft 365 use the m365 calendar tools instead.
| Name | Required | Description | Default |
|---|---|---|---|
| span | No | For recurring events: 'this' (default) or 'future' | |
| notes | No | New notes — pass empty string to clear (optional) | |
| title | No | New title (optional) | |
| confirm | No | Must be true to apply changes | |
| end_date | No | New end datetime ISO 8601 (optional). Same timezone rules as start_date. | |
| event_id | Yes | Event identifier from list_calendar_events | |
| location | No | New location — pass empty string to clear (optional) | |
| start_date | No | New start datetime ISO 8601 (optional). No timezone = Mac's local time; append Z/offset to pin the zone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| end | No | |
| notes | No | |
| start | No | |
| title | No | |
| all_day | No | |
| updated | No | |
| calendar | No | |
| location | No | |
| attendees | No | |
| calendar_id | No | |
| attendees_total | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false. The description additionally clarifies the partial-update behavior (unspecified fields left as-is), which is useful. It does not mention the `confirm` flag requirement, though that is covered 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?
Three sentences, front-loaded with the core action, followed by usage guidance and cross-service disambiguation. 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?
Given the tool's complexity (8 params, output schema present), the description covers the most important context: partial update semantics, ID source, and service boundary. It wisely omits return-value details since an output schema exists. Minor omission: no mention of the `confirm` parameter requirement, but that is in 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 coverage is 100%, but the description adds crucial semantics: 'Pass only the fields you want to change — unspecified fields are left as-is' directly instructs how to use the optional parameters. It also explains where to get event_id, going beyond individual schema descriptions.
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 ('Updates') and resource ('existing event in the Mac's Calendar app (Calendar.app) by ID'), making the function clear. It distinguishes from create/delete and explicitly mentions the m365 alternative for a different service.
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 explicit guidance: pass only fields to change, get event_id from list_calendar_events, and use m365 calendar tools for Microsoft 365. This gives clear when-to-use and alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_noteUpdate NoteAInspect
Updates an existing note in Apple Notes. Change the title and/or body (the body accepts Markdown, converted to Apple Notes' native formatting). Find note_id with list_notes or search_notes. Requires confirm=true.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| title | No | ||
| confirm | No | ||
| note_id | No | ||
| note_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | No | |
| name | No | |
| updated | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate non-read-only and non-destructive behavior. The description adds that body accepts Markdown (converted to native format) and requires confirm=true, but lacks details on side effects, error handling, or behavior when omitting 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?
The description is two concise sentences: the first states the purpose, the second provides essential details on finding the note and the confirm requirement. No extraneous 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?
Given the output schema exists, return values need not be explained. However, the description does not clarify partial updates or the role of note_name, leaving some ambiguity. It is adequate but not fully comprehensive.
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 0% schema coverage, the description explains title, body, note_id (implied), and confirm parameters, but omits note_name entirely. It adds meaning beyond the schema but does not fully cover all five 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?
The description clearly states the tool updates an existing note in Apple Notes, specifying it can change title and/or body. It distinguishes from siblings like create_note, read_note, list_notes, and search_notes by the update action.
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 advises finding note_id with list_notes or search_notes and requires confirm=true, providing clear usage context. It does not explicitly state when not to use it or mention alternatives, but the sibling list implicitly differentiates.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_reminderUpdate ReminderAInspect
Updates an existing reminder in Reminders.app. Change the title, due date, notes, priority, or move it to another list (list_name). Get reminder_id from list_reminders. Requires confirm=true. IMPORTANT: moving to a list in a DIFFERENT account (e.g. iCloud ↔ Exchange) recreates the reminder, so its id changes — the response then has id_changed: true, the new id in reminder_id and the dead one in previous_reminder_id. Always take reminder_id from the response before any follow-up call.
| Name | Required | Description | Default |
|---|---|---|---|
| notes | No | New notes text (optional) | |
| title | No | New title (optional) | |
| confirm | No | Must be true to apply changes | |
| due_date | No | New ISO 8601 due date. Pass empty string to clear (optional) | |
| priority | No | Priority: none | low | medium | high (optional) | |
| list_name | No | Move the reminder to this list (a name from get_reminder_folders) (optional). Moving to a list in ANOTHER account recreates the reminder and CHANGES its id — read the new one from reminder_id in the response (id_changed: true). | |
| reminder_id | Yes | Reminder identifier from list_reminders |
Output Schema
| Name | Required | Description |
|---|---|---|
| list | No | Destination list, when the update moved the reminder. |
| note | No | |
| title | No | |
| updated | No | |
| id_changed | No | true when the update recreated the reminder (a move across accounts), which invalidates the id you passed in. |
| reminder_id | No | The reminder's id AFTER the update — use this one from now on. |
| previous_reminder_id | No | Only when id_changed: the id you passed in, which no longer exists. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond annotations by disclosing a non-obvious behavioral trait: moving a reminder to a list in a different account recreates it, changes its id, and returns id_changed, new reminder_id, and previous_reminder_id. It also gives a critical follow-up instruction to always take reminder_id from the response. Annotations only set readOnlyHint=false and destructiveHint=false, so this is additive, not contradictory.
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 purposeful sentences: purpose first, then prerequisites, then a clear warning about a critical edge case. No filler, every sentence earns its place, and the most important operational caveat is prominently flagged with 'IMPORTANT'.
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 a complex 7-parameter mutation with an output schema, the description covers prerequisites, mandatory confirm, parameter effects, a cross-account recreation edge case, and the required follow-up behavior. No critical guidance an agent needs to invoke the tool 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 100%, so baseline is 3. The description adds operational meaning beyond the schema by stating that confirm=true is required, that reminder_id comes from list_reminders, and by reinforcing the id-changing consequence of list_name. This elevates it above baseline, though the schema already documents most parameter details.
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 ('Updates'), identifies the resource ('existing reminder in Reminders.app'), and enumerates the modifiable fields. The word 'existing' plus the instruction to get reminder_id from list_reminders clearly distinguishes this from create_reminder and complete_reminder, even without naming 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?
Provides clear operational context: use it to update an existing reminder, obtain reminder_id from list_reminders, and set confirm=true. It doesn't explicitly state when not to use it or point to alternatives, but the 'existing reminder' scope and field list make the applicable case unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_blur_regionVideo Blur RegionAInspect
Pixelates/blurs one or more rectangles over the video — the tool for redacting PII (an email pane, a name) before publishing a screen recording. Rects are in source pixels, top-left origin: [{x,y,w,h, start_ms?, end_ms?}] — omit the times to cover the whole clip. Great with a marker timeline's bounds. Returns the output path.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Path to the source video file. | |
| output | No | Default: <input>_blurred.mov. Missing parent folders are created. | |
| regions | Yes | [{x,y,w,h, start_ms?, end_ms?}] in source pixels (top-left). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry little safety detail, so the description carries the burden. It covers output behavior (returns output path), coordinate convention (source pixels, top-left origin), and region timing semantics (omit start/end to cover full clip). It does not explicitly state the source video is unmodified, but the output-path guarantee makes that reasonably clear.
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 dense sentences, front-loaded with purpose before syntax. No filler; the parenthetical format example is essential 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?
Together with the 100%-covered schema, the description covers invocation context, region encoding, timing behavior, and return value. Since there is no output schema, the explicit 'Returns the output path' fills the main 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?
Adds key semantics beyond the schema: exact region object shape, origin, pixel units, optional start/end times, and whole-clip default behavior. The marker-timeline `bounds` tip is actionable and helps an agent construct valid `regions` values.
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: pixelates/blurs rectangles over a video, and frames it as the redaction tool for PII in screen recordings. This clearly distinguishes it from video_concat, video_trim, video_reframe, and video_export_gif by purpose.
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 when-to-use context: redacting PII before publishing a screen recording, and coordinates well with a marker timeline's `bounds`. It does not explicitly name alternatives or when-not-to-use, so it is a clear context without exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_concatVideo ConcatAInspect
Stitches multiple videos end-to-end, in order, into one NEW file (e.g. assemble separate acts). All inputs should share a resolution for a clean result. Returns the output path + duration.
| Name | Required | Description | Default |
|---|---|---|---|
| inputs | Yes | Ordered list of video file paths. | |
| output | No | Output path (default: <first-input>_joined.mov). Missing parent folders are created. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only and not destructive. The description adds useful behavioral detail beyond that: it creates a NEW file (implying source files are preserved), preserves input order, and returns both output path and duration. This gives the agent a solid behavioral model without contradicting 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 compact sentences carry the core operation, a real-world example, a quality precondition, and the return value. Every sentence earns its place, and the most important concept ('stitches end-to-end into one NEW file') is 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 two-parameter tool with no output schema, the description covers the essential operational details: ordering, new-file creation, resolution guidance, and the return value. It could have mentioned failure modes or format compatibility, but nothing critical is missing 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 100%, so the schema already explains both parameters. The description adds a relevant resolution guideline and clarifies the result file, but it does not add meaningful parameter semantics beyond what the schema already provides. A baseline 3 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 states a specific verb ('stitches') and resource ('multiple videos end-to-end') and clarifies the result is one NEW file, with a concrete example. This clearly differentiates video_concat from sibling video tools like video_trim, video_blur_region, video_export_gif, and video_reframe.
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 clear context for when to use the tool: assembling separate acts into a single file. It also provides a practical precondition ('All inputs should share a resolution for a clean result'). It does not explicitly name alternatives or state when not to use it, but the intended use case is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_export_gifVideo Export GifAInspect
Exports a video (or a [start_ms,end_ms] slice of it) to an optimized looping GIF — for README/social. fps (default 12) and width (default 640, height auto) control size. Returns the output path, frame count, and size.
| Name | Required | Description | Default |
|---|---|---|---|
| fps | No | Frames per second in the GIF (default 12). | |
| input | Yes | Path to the source video. | |
| width | No | Output width in px, height scales to keep aspect (default 640). | |
| end_ms | No | Slice end (default: end of video). | |
| output | No | Output path (default: <input>.gif). Missing parent folders are created. | |
| start_ms | No | Slice start (default 0). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral details beyond the annotations: it explains that the output is an optimized looping GIF, that fps and width control size with height scaling automatically, and that the return value includes output path, frame count, and size. It does not mention overwrite behavior, but the annotations do not contradict the description.
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 with no filler. The main purpose and slice capability are front-loaded, followed by the most important tuning parameters and return details. 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 straightforward file-export tool with fully documented parameters and no output schema, the description covers purpose, slicing, defaults, output behavior, and return values. Nothing essential is missing for an agent 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 100%, so the schema already documents every parameter. The description repeats the fps and width defaults and the slice semantics, adding little beyond what the input schema provides. Baseline 3 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 opens with a specific action and resource: 'Exports a video (or a [start_ms,end_ms] slice of it) to an optimized looping GIF'. It also names the intended use case (README/social), making the tool's purpose unmistakable and clearly different from siblings like video_trim or video_concat.
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 'for README/social' phrasing gives clear context about when this tool is appropriate. It does not explicitly name alternative tools or exclusion conditions, but the GIF-export purpose is distinct enough among the video siblings that an agent can select it confidently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_reframeVideo ReframeAInspect
Crops a video to a target aspect ratio (e.g. "9:16" vertical, "1:1" square, "4:5") around a focus point — for social clips. Takes the LARGEST crop of that aspect that fits, centered on focus (x,y in source pixels, top-left origin; default = center) and clamped to the frame. Audio passes through. Returns the output path + new dimensions.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | {x,y} center of interest in source pixels (top-left). Default: frame center. | |
| input | Yes | Path to the source video file. | |
| aspect | Yes | Target aspect "W:H", e.g. 9:16, 1:1, 4:5, 16:9. | |
| output | No | Default: <input>_<aspect>.mov. Missing parent folders are created. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses substantial behavior beyond annotations: it takes the largest fitting crop, centers on focus, clamps to the frame, passes audio through, and returns the output path plus new dimensions. It also notes that missing output parent folders are created. These details meaningfully explain how the tool behaves at runtime.
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 sentences pack in the operation, examples, focus behavior, clamping, audio handling, and return value. The most important information is front-loaded, and every sentence contributes without 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 4-parameter tool with a full schema and no output schema, the description covers the operation, parameter semantics, behavioral edge conditions, and return values concisely. No critical information needed to invoke or understand the tool 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 100%, so the baseline is 3, but the description adds useful parameter semantics: it clarifies that `aspect` is interpreted as the largest crop that fits, and that `focus` is in source pixels with a top-left origin and defaults to center. It also explains how `output` is derived by 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?
The description uses a specific verb ('crops') with a specific resource ('a video') and a clear goal ('to a target aspect ratio ... around a focus point'). It differentiates itself from media siblings like video_trim, video_concat, and video_export_gif by emphasizing aspect-ratio cropping and focus-point centering for social clips.
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 'for social clips' gives clear use context, and the mechanics of aspect-ratio reframing make the tool's niche obvious. It does not explicitly name alternatives such as video_trim or video_blur_region, or state when not to use it, so it stops short of a full when/when-not comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_trimVideo TrimAInspect
Trims a video to one or more time ranges (milliseconds), concatenated in order into a NEW file — e.g. keep [{start_ms:0,end_ms:6000},{start_ms:126000,end_ms:223000}] to drop a dead segment. Audio is carried along. Returns the output path + duration. Never overwrites the input in place.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | Path to the source video. | |
| output | No | Output path (default: <input>_trimmed.mov). Missing parent folders are created. | |
| ranges | Yes | Ordered [{start_ms, end_ms}] to keep. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds valuable behavioral guarantees: never overwrites the input in place, audio is carried along, and it returns the output path + duration. This goes beyond annotations and helps an agent predict side effects. It does not mention potential encoding/transcoding details, but the key safety and return behavior are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short, front-loaded sentences, each earning its place: what it does, an example, audio behavior, return value, and non-destructive guarantee. No filler or repetition of schema text. Excellent structure for an agent to scan quickly.
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 tool with no output schema and moderate complexity, the description covers the return value (output path + duration), provides a concrete ranges example, and assures non-destructive behavior. It lacks explicit routing to sibling tools (e.g., video_concat) and details on edge cases like overlapping ranges, but is complete enough 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 100%, so the baseline is 3. The description adds meaning beyond the schema by explicitly stating milliseconds, using an example for the ranges structure, and clarifying the new-file behavior. The output default and parent folder creation are already in the schema, but the example and unit clarification add value.
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 ('Trims a video'), names the resource, and specifies the core behavior: one or more time ranges in milliseconds, concatenated in order into a NEW file. This clearly differentiates it from siblings like video_concat, video_reframe, or video_export_gif. The example adds concrete clarity.
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 usage context is clear: trim video by keeping specified ranges and dropping dead segments, with the output as a new file. It provides a concrete example but does not explicitly contrast with alternatives such as video_concat or video_blur_region, nor does it state when not to use this tool. No explicit exclusions, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_clickWeb ClickAInspect
Clicks an element on the current page. target is a CSS selector or visible text (resolved fresh each call). Clicks that SUBMIT a form preview first — call again with confirm:true to execute; plain links/buttons click directly. Returns {url, title, navigated, url_as_of}: url_as_of is "settled" when the page has finished changing, and "before_click" together with navigation_pending:true when the click started a navigation that had not finished — in that case url/title are the page BEFORE the click, NOT the destination, so do not read them as 'the click did nothing' and retry (the page is already changing); read the destination with web_read or wait for it with web_wait_for. navigated:false means the click changed no page.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | CSS selector or visible text of the element to click. | |
| confirm | No | Required (true) to perform a click that submits a form. | |
| session | No | Session name (default 'default'). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false, openWorldHint=true, and destructiveHint=false. The description adds substantial behavioral detail: confirm gating for form submits, fresh resolution of target, and exact url_as_of/navigation-pending semantics. This goes well beyond the annotations and prevents misinterpreting 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?
The description is long but information-dense; every clause either clarifies behavior, gives a decision rule, or prevents a common mistake. It is well structured: action first, then the confirm variant, then return 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, the description thoroughly explains the return object, the meaning of url_as_of in both settled and pending states, and the navigated flag. The form-submit flow is fully specified, giving an agent enough detail to invoke the tool correctly and interpret its result.
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 already provides 100% coverage for all three parameters, so the baseline is 3. The description adds meaning for target (resolved fresh, CSS selector or visible text) and confirm (required for form submits), but it does not enrich the session parameter 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?
The opening sentence states the action (clicks), object (element), and context (current page), and specifies target formats. The form-submit preview/confirm behavior and navigation-aware return semantics distinguish this from generic click tools in the sibling list.
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 operational context: preview-then-confirm for form submissions, direct click for plain elements, and explicitly warns against retrying when a navigation is pending. However, it never names sibling alternatives such as ui_click or web_navigate or states when to choose this tool over them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_extractWeb ExtractARead-onlyInspect
Scrapes structured data from the current page. Pass selectors = an object mapping field names to CSS selectors (e.g. {"title":"h1","price":".price"}); returns each field's first-match text/href, null when absent.
| Name | Required | Description | Default |
|---|---|---|---|
| session | No | Session name (default 'default'). | |
| selectors | Yes | Field name → CSS selector map. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| data | No | One key per requested field; first-match text/href, null when absent. |
| title | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false. The description adds behavioral details: returns first-match text/href per field, null when absent. This complements the annotations well.
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: first states purpose, second details parameter format and return behavior. No redundancy, all information 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 description covers purpose, parameter format, and return format. With an output schema present, the return details are sufficient. Could mention that it operates on the 'current page' but that is already implied. Complete enough for a straightforward scraping 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 100%, but the description adds significant value: explains selectors as a map of field names to CSS selectors and gives a concrete example. This clarifies usage 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 uses a specific verb 'scrapes' and resource 'current page', and provides an example of the selectors parameter. It distinguishes from sibling tools like web_read (full page text) and web_find (element presence).
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 use when structured data is needed from the current page, but does not explicitly state when to use vs alternatives or provide exclusions. Among many sibling web tools, no guidance on selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_findWeb FindARead-onlyInspect
Finds elements on the current page of a web session so you can decide what to click or type into. query is a CSS selector OR visible text to match. Returns up to 30 matches with tag/text/name/type/href — never a silent empty.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A CSS selector (e.g. 'input[name=q]') or visible text (e.g. 'Sign in'). | |
| session | No | Session name (default 'default'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | Number of matching elements (max 30 returned). |
| query | No | |
| matches | No | Matched elements with tag/text/name/type/href. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. Description adds useful behavioral context: always returns results (never a silent empty) and at most 30 matches. No contradictions. Could be more precise about empty match behavior but adequate.
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 covering purpose, parameter usage, and output. No redundant information. Front-loaded with the core function. 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?
Given that annotations cover safety and an output schema exists (though not fully shown), the description provides key functional details: query types, result limits, and field summary. It does not explain the session parameter default or behavior for non-existent sessions, but overall it is sufficiently complete for typical use.
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% so parameters are documented in schema. Description adds value by clarifying that query accepts both CSS selectors and visible text, and by summarizing the return fields (tag, text, name, type, href). This supplements the schema definitions effectively.
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?
Clearly states the tool finds elements on a web page, explicitly naming the verb (finds), resource (elements on current page), and purpose (to decide what to click or type into). Distinguishes from siblings like web_click and web_type by positioning itself as a precursor action. Also specifies output characteristics (up to 30 matches, fields returned, never silent empty).
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?
Implicitly guides when to use: before clicking or typing. Clearly explains that query can be a CSS selector or visible text. Does not explicitly state when not to use or mention alternatives like web_extract, but the context and sibling tool names provide natural differentiation. Lacks explicit exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_loginWeb LoginAInspect
Opens a real browser window on the Mac for the user to sign into a website themselves (you never handle their password). After they log in, the session is saved on this Mac and reused by web_navigate/web_read/web_screenshot — they won't need to log in again. Use a stable session name per site (e.g. 'linkedin'). NOTE: automating sites like Instagram/LinkedIn may violate their terms — the user accepts that risk.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The site's login URL to open, e.g. https://www.linkedin.com/login | |
| session | No | A stable name for this login profile, e.g. 'linkedin'. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, openWorldHint=true), the description adds key behavioral details: it opens a real browser window, the user handles passwords, sessions are saved and reused, and a terms-of-service warning. 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 three sentences, front-loads the core purpose, and every sentence provides essential information without 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 login tool, the description covers the process, session persistence, and risks. However, without an output schema, it omits what the tool returns (e.g., success status), which 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 coverage is 100%, so baseline is 3. The description adds context by clarifying the url is a login URL and providing an example session name ('linkedin'), adding value 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 tool opens a real browser window for user sign-in, specifies the verb 'Opens' and resource, and distinguishes from sibling tools like web_navigate by explaining session reuse for those 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 clear when-to-use guidance (for user login), advises using stable session names, and warns about terms of service. It implies post-login use of other tools but lacks explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_readWeb ReadARead-onlyInspect
Reads the current page of a web session so you can reason over it. mode='text' (visible text, default), 'a11y' (compact accessible tree of links/buttons/fields — best for deciding what to click), or 'html' (raw DOM). Returns an explicit no_session error if the session isn't open, and no_page if it hasn't loaded a page — never a silent empty.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | What to return (default text). | |
| session | No | Session name (default 'default'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| mode | No | The mode that was read (text/a11y/html). |
| title | No | |
| content | No | The page content in the requested mode. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds useful behavioral guarantees: explicit no_session and no_page errors, and the guarantee that it 'never' returns a silent empty result. This helps an agent trust the tool's failure behavior and react appropriately. It also clarifies the nature of each mode rather than overstating the output.
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: it states the core action first, then the mode semantics, then failure behavior. Every sentence earns its place, and there is no redundant repetition of the annotations or 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 read-only tool with an output schema and clear annotations, the description covers all essential behavioral corners: what it reads, mode contrasts, defaults, session handling, and explicit error conditions. It is complete enough for an agent to invoke it correctly without ambiguity.
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%, but the description meaningfully enriches the mode enum by explaining what 'text', 'a11y', and 'html' actually return (visible text, accessible tree, raw DOM) and which one is best for deciding what to click. It adds no unique semantic detail for the session parameter, but no more is needed.
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+resource combination ('Reads the current page of a web session') and clearly identifies the browser-read scope. It also differentiates itself from sibling tools by focusing on reading current-session content rather than searching, clicking, or extracting, and it enumerates the three available modes.
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 clear contextual guidance for when each mode is appropriate, especially highlighting a11y as 'best for deciding what to click.' However, it does not explicitly contrast this tool with close sibling web tools like web_extract or web_find, so the guidance is use-oriented but not fully alternative-oriented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_screenshotWeb ScreenshotARead-onlyInspect
Captures a PNG screenshot of the current page of a web session (returned inline so web AIs can see it). Useful to ground what the page looks like before acting.
| Name | Required | Description | Default |
|---|---|---|---|
| session | No | Session name (a named login profile, e.g. 'linkedin'). Defaults to 'default'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | URL of the page that was captured. |
| bytes | No | PNG size in bytes (the image itself is an inline content block). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the description adds the detail that the screenshot is 'returned inline so web AIs can see it,' which is useful but limited. It does not mention potential delays due to page load or that it captures only the visible viewport, missing some behavioral depth.
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 consists of two succinct sentences. The first states the core function and output format, and the second provides usage guidance. Every word is necessary and front-loaded, 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?
Given the tool's simplicity (1 optional parameter, read-only, output schema present), the description is almost complete. It mentions inline return and usage context. The only slight gap is not clarifying the exact output format (e.g., base64 URL), but the output schema likely covers 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?
With 100% schema description coverage and only one optional parameter ('session'), the schema already explains the parameter fully. The description does not add extra meaning beyond the schema, so the baseline score 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 action ('captures a PNG screenshot of the current page') and the resource ('web session'), with added context that it's returned inline for AI visibility. It distinguishes from sibling tools like chrome_read_tab or screenshot_capture by specifying the scope and usage.
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 tool explicitly mentions it's useful to 'ground what the page looks like before acting,' providing clear context for when to use it. While it doesn't list when not to use it or name alternatives, the phrasing implies a preparatory role before interactive actions (e.g., clicking), which is sufficient given sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_session_closeWeb Session CloseAInspect
Closes a web-automation session's window and frees it. The saved login STAYS on disk (cookies included), so web_login/web_navigate can reopen it later without signing in again — it also means closing does NOT clean up: to erase a profile you no longer want stored, use web_session_delete.
| Name | Required | Description | Default |
|---|---|---|---|
| session | No | Session name (a named login profile, e.g. 'linkedin'). Defaults to 'default'. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the sparse annotations by disclosing that closing does not delete the saved login, that cookies persist on disk, and that the session can be reopened without signing in. It also warns that closing is not a cleanup operation, which is critical behavioral context not present in readOnlyHint/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?
The description is compact and well-structured: the first sentence states the core action, and the second sentence delivers the crucial persistence caveat and the deletion alternative. No sentence is wasted, and the most decision-relevant information (session persists after close) is 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 one-parameter session close operation with no output schema, the description covers the key contextual facts: what is closed, what persists, how to reopen later, and how to permanently delete. The contrast with web_session_delete gives the agent enough context to choose correctly among the web_session siblings.
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 already fully documents the single 'session' parameter with its type, description, and default. The tool description does not add parameter-level detail, but with 100% schema coverage the baseline of 3 applies; the description's mention of named login profiles indirectly reinforces the parameter's meaning without adding new syntax or format 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?
The description states a specific action ('Closes a web-automation session's window and frees it') and names the resource (a web-automation session). It also explicitly contrasts with web_session_delete by clarifying what closing does NOT do, which distinguishes it from the most similar sibling.
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 clearly indicates when to use this tool versus alternatives: use it to close a session while preserving login credentials, and use web_session_delete when the profile should be erased. It also notes that web_login/web_navigate can reopen the session later without re-authenticating, giving an agent concrete routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_session_deleteWeb Session DeleteADestructiveInspect
Deletes a SAVED web-automation login profile: closes its window if open, erases its cookies and site data from this Mac, and removes it from web_session_list. Use it to clean up a profile that is no longer needed — web_session_close only closes the window and leaves the login (and its cookies) on disk. IRREVERSIBLE: the next web_login for that name starts from a signed-out browser. Requires confirm=true; without it you get a preview. Verify with web_session_list, which must no longer list the name.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | Must be true to actually delete. Without it, returns a preview and deletes nothing. | |
| session | No | Name of the profile to delete, as web_session_list reports it. Defaults to 'default'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | True only when BOTH halves are done: data erased and name removed from the list |
| closed | No | Whether a live window had to be closed first |
| deleted | No | The profile name that was deleted |
| data_removed | No | Whether the cookies and site data were erased |
| name_forgotten | No | Whether the name was removed from web_session_list |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint=true, but the description adds substantial behavioral context: what gets destroyed (window, cookies, site data, list entry), the IRREVERSIBLE consequence (next web_login starts signed-out), and the confirm-gate behavior (without confirm=true it only previews). This is exactly the kind of beyond-annotations transparency that matters 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?
Four sentences, each earning its place: what it deletes, when to use it versus the sibling, the irreversibility warning, and the confirm/verify steps. The most safety-critical information (IRREVERSIBLE) is front-loaded and emphasized, with no filler or repetition of schema 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 destructive 2-parameter tool with an output schema present, this description is fully sufficient: it covers the action scope, the alternative tool, the irreversible consequence, the confirmation guardrail, and a verification step. There is no operational gap an agent would need to guess about.
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 both confirm and session are already fully documented in the schema. The description reinforces the confirm=true requirement and mentions the preview behavior, but adds no genuinely new parameter meaning beyond what the schema provides. Baseline 3 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?
States a precise verb ('Deletes') and resource ('SAVED web-automation login profile'), then enumerates the exact scope of deletion: closes the window, erases cookies/site data, removes from web_session_list. It also names the sibling it is not (web_session_close), so an agent can distinguish it from the close-only alternative 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?
Explicitly says when to use it ('clean up a profile that is no longer needed') and when to use the alternative instead ('web_session_close only closes the window and leaves the login on disk'). Adds a post-condition check ('Verify with web_session_list'), giving the agent a complete decision and verification workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_session_listWeb Session ListARead-onlyInspect
Lists your web-automation login profiles: every SAVED login (persisted on disk, so web_login/web_navigate can reopen it without signing in again) plus which are currently OPEN. Each entry has saved (a persisted profile exists) and open (its window is live now, with url + title). Use it to check whether a login a recipe needs already exists before running it, instead of opening it and failing.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| sessions | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive behavior. The description adds valuable context about persistence (saved profiles on disk) and the meaning of 'saved' and 'open' fields. 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?
Concise, well-structured, and front-loaded. Each sentence adds value: main purpose, details on entries, usage recommendation. 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?
Despite having an output schema, the description already covers the essential output. No missing information for this simple tool. Complete and self-contained.
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?
No parameters exist, so baseline is 4. The description compensates by explaining the output structure (saved, open, url, title), adding meaning beyond the empty 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 tool lists web-automation login profiles, distinguishing between saved and open ones. No sibling tool provides a similar list function, so it's 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?
Explicitly advises when to use it: to check if a login exists before running a recipe, avoiding a failure. This is precise usage guidance with a clear alternative (opening and failing).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_showWeb ShowAInspect
Brings a web session's browser window to the FRONT so the USER can take over directly — solve a CAPTCHA, complete 2FA, or make a choice the AI shouldn't. Local MCP never solves CAPTCHAs itself; this hands control to the user. Pair with web_screenshot first to show them what's on the page. After they finish, tell the agent to continue — the session keeps its state.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Short reason shown to the user, e.g. 'a CAPTCHA appeared' or 'confirm which account'. | |
| session | No | Session name (default 'default'). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses that the tool brings the window to the front, hands control to the user, does not solve CAPTCHAs, and preserves session state. Annotations (readOnlyHint=false, destructiveHint=false) are consistent; the description adds valuable context beyond what annotations provide, making the behavior fully transparent.
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 extremely concise (two sentences plus a brief usage note), front-loaded with the primary purpose, and every sentence adds value without redundancy. It efficiently communicates the tool's function, behavior, and pairing advice.
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 low complexity, the description fully covers its purpose, behavior, usage context, and pairing recommendation. Annotations provide additional safety hints. No output schema is needed, and the description is complete for an agent to use 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 100% with both parameters described. The description adds little beyond the schema: it mentions that the reason is shown to the user, but that's already in the schema description. Since the schema already covers parameter meaning, a baseline score of 3 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 uses a specific verb ('brings') and resource ('web session's browser window'), clearly stating the tool's function of bringing the window to the front for user intervention. It distinguishes from siblings by mentioning pairing with web_screenshot and explicitly stating that Local MCP never solves CAPTCHAs itself, which sets it apart from other web automation 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 explicitly states when to use the tool (when a CAPTCHA, 2FA, or decision appears) and provides guidance to pair with web_screenshot. It also tells the agent to signal continuation after user intervention. While it doesn't explicitly list when NOT to use it, the context is clear enough for an agent to decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_typeWeb TypeAInspect
Types text into a form field (input/textarea) on the current page. target is a CSS selector or the field's visible label/placeholder. Does NOT submit — use web_click on the submit button afterwards (that step is gated). SPECIAL CASE — file inputs: if target resolves to an , text is instead treated as a LOCAL FILE PATH on this Mac and the file is attached (JS can't set a file input's value directly; this answers the native file panel programmatically without ever showing it).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to type. For an input[type=file], this is instead the LOCAL FILE PATH to upload. | |
| target | Yes | CSS selector or visible label/placeholder of the field. | |
| session | No | Session name (default 'default'). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate readOnlyHint=false, but description goes beyond: it explains that the tool does NOT submit the form, and for file inputs, it handles the native file panel programmatically without showing it. These are non-obvious behaviors disclosed clearly. 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?
The description is well-structured, front-loading the core purpose and then adding the critical special case. Every sentence adds value, and it does not repeat schema details unnecessarily. The special case is clearly delineated.
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 moderate complexity (3 params, one with special behavior) and no output schema, the description covers all necessary aspects: what it does, how to use it, what it doesn't do, and the file input exception. No additional info is needed 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 100%, so baseline is 3. The description adds meaningful context beyond schema: 'text' for file inputs becomes a local file path, and 'target' can be a CSS selector or visible label/placeholder. This clarifies parameter semantics beyond the schema's descriptions.
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 types text into form fields on the current page, specifying the target as CSS selector or label/placeholder. It explicitly differentiates from sibling tools like web_click by noting it does NOT submit, and the special case for file inputs adds further clarity.
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 says when to use this tool (typing into fields) and when not to (do not use for submission; use web_click instead). The special case for file inputs is a clear condition: if target resolves to a file input, use a local file path. This is explicit usage guidance with a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_wait_forWeb Wait ForAInspect
Waits (polls, not a fixed sleep) until an element appears on the page, or times out. Use for SPA pages that hydrate after load. Prefer selector (a CSS selector, e.g. "input[name=password]"). condition also accepts the form "document.querySelector('...')"; any OTHER JavaScript condition runs arbitrary code on the page (same power as web_eval) and is disabled when LMCP is in read-only mode. Returns met:true/false.
| Name | Required | Description | Default |
|---|---|---|---|
| session | No | Session name (default 'default'). | |
| selector | No | CSS selector to wait for (preferred; treated as data, never executed). e.g. .feed | |
| condition | No | Alternative to selector: "document.querySelector('...')" is accepted as-is; any other JS expression runs arbitrary code on the page (same power as web_eval). | |
| timeout_seconds | No | Max seconds to wait (default 15). |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| met | No | True if the condition became truthy before the timeout. |
| message | No | Present when the condition was not met. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, etc.), the description discloses critical behavioral facts: the wait is implemented as polling rather than a fixed sleep, selector input is treated as data and never executed, condition can run arbitrary JavaScript with the same power as web_eval, and condition execution is disabled in read-only mode. These details materially affect how an agent uses the tool safely.
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 three sentences with every sentence earning its place: the primary behavior is front-loaded, then the primary use case and parameter preference, then the critical safety/deployment constraint. No filler or redundant restating of parameter names.
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?
It covers the core operation, the exact usage context, the difference between the two waiting modes, a security-critical caveat about arbitrary code, and the return shape. The tool has an output schema that already describes met:true/false, so the description does not need to re-explain the return value.
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 already covers all four parameters in detail, but the description adds extra meaning: it explicitly 'prefers' selector for safety, explains the two distinct forms of condition, and reveals that condition is disabled in read-only mode — something not present in the schema description. This helps agents choose between the parameters correctly.
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 — waits (polls) for an element to appear on the page — with an explicit timeout, and clarifies it is not a fixed sleep. It references the SPA hydration use case, making it clear this is a web-page readiness check, distinct from sibling tools like web_find or web_extract.
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 includes a clear context signal: 'Use for SPA pages that hydrate after load' and provides a recommended parameter preference ('Prefer selector'). It does not explicitly distinguish from the similar ui_wait_for_element sibling, but the web-page scope is evident and no alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
window_focusWindow FocusAInspect
Brings a window (by window_id from list_windows) to the front and activates its app. window_not_found if it can't be resolved. Requires Accessibility permission.
| Name | Required | Description | Default |
|---|---|---|---|
| window_id | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses error case (window_not_found) and permission requirement (Accessibility), adding context beyond annotations. Annotations indicate non-read-only and non-destructive mutation; description confirms focus behavior without overpromising.
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 covering action, input, error, and prerequisite. No extraneous information; every sentence adds 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 simple one-parameter tool with no output schema, description covers essential aspects: what it does, input source, error, and permission. Minor gap: does not specify return value or other potential failures beyond window_not_found.
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 0% schema coverage, description explains that window_id should come from list_windows, providing necessary context for the agent to correctly source the parameter. Adds meaning beyond plain type definition.
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?
Description clearly states the tool brings a window to front and activates its app, using a window_id from list_windows. It distinguishes itself from siblings like window_set_frame by specifying the core focus action.
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?
Mentions source of window_id (list_windows) and permission requirement, but does not explicitly contrast with alternatives or state when not to use. Provides implicit 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.
window_set_frameWindow Set FrameAInspect
Pins a window (by window_id) to fixed bounds {x,y,w,h} in global points, so every take is framed identically across runs. Returns the actual post-constraint bounds. Requires Accessibility permission.
| Name | Required | Description | Default |
|---|---|---|---|
| bounds | Yes | {x,y,w,h} global points. | |
| window_id | Yes |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavioral context beyond annotations: describes that it constrains window to bounds, returns actual bounds after constraint, and requires permission. No contradiction with readOnlyHint=false or destructiveHint=false.
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 efficiently cover purpose, use case, return value, and permission. No 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?
Covers return value, permission requirement, and use context. Lacks details on error handling or bounds validation, but adequate for a simple tool with two 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 coverage is 50% (bounds described, window_id not). Description repeats bounds format but adds no new meaning for window_id. Partially compensates for missing schema 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?
Clearly states the tool pins a window to fixed bounds for consistent framing. Verb 'pins' and resource 'window' are specific. No explicit sibling differentiation, but context implies it differs from window_focus or list_windows.
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 usage for consistent framing across runs and mentions required Accessibility permission. Does not provide when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_appendWord AppendAInspect
Appends text to the end of an existing Word (.docx) document at path, preserving the document's existing content and formatting. Requires confirm=true — called without it, returns a preview instead of modifying the file. Same file-access rules as word_create (Desktop/Documents/Downloads may need a Files-and-Folders grant). Returns {appended, chars_appended, path}. To create a new document use word_create; to read one use word_read.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the existing .docx file | |
| confirm | No | Must be true to modify | |
| content | Yes | Text to append |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: preserves formatting, requires confirm to modify, returns a preview without confirm, and returns a specific object. These are not visible in the annotations and add significant 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?
Four sentences, each carrying essential information: operation, prerequisite behavior, file-access rules, and return value. No fluff, front-loaded with the action verb.
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 description covers prerequisites, side effects, alternatives, and return values, and is fully sufficient for an agent to select and invoke the tool correctly, even without detailed output schema knowledge.
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%, so the baseline is 3. The description adds meaningful semantics for 'confirm' (preview vs. modification) and mentions return values, going slightly beyond the schema without repeating 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 clearly states the tool appends text to an existing Word docx file at a specified path, preserving content and formatting. It also explicitly distinguishes from sibling tools word_create and word_read, making its 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?
It provides explicit usage guidance: requires confirm=true to modify, without it returns a preview. It also mentions file-access rules and explicitly points to word_create for new documents and word_read for reading, giving clear alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_createWord CreateAInspect
Creates a new Word (.docx) document at path with the given text content (and an optional title rendered as the heading). Requires confirm=true — called without it, returns a preview of what will be written instead of creating the file. The path must be somewhere Local MCP can write; Desktop/Documents/Downloads may need a one-time Files-and-Folders grant (System Settings → Privacy & Security → Files and Folders). Returns {created, path}. For a OneDrive or Google Drive path use onedrive_write_file / gdrive_write_file; to append to an existing doc use word_append, to read one word_read.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Output path for the .docx file | |
| title | No | Document title (optional) | |
| confirm | No | Must be true to create | |
| content | Yes | Document text content |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Path of the created .docx file |
| created | Yes | True when the document was created |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, it discloses the confirm requirement and preview behavior, filesystem permissions for Desktop/Documents/Downloads, and return shape {created, path}. This is rich behavioral context that annotations alone 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?
Four sentences, each carrying necessary information: action, critical confirm caveat, permission context, and sibling references. Front-loaded with the core purpose and 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?
The description covers purpose, invocation requirements (confirm), environmental prerequisites (permissions), return value, and alternatives. With an output schema already present, this is fully complete for selecting and invoking 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?
Even though schema coverage is 100%, the description adds meaning by explaining that title is rendered as a heading, confirm must be true to create, and omitting confirm returns a preview. These details go beyond the field names and base schema descriptions.
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 ('Creates') with a clear resource ('new Word (.docx) document') and includes path/content/title details. It distinguishes itself from siblings by explicitly naming onedrive_write_file, gdrive_write_file, word_append, and word_read.
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 explicit alternative tools for different scenarios (OneDrive/Google Drive, append, read) and explains the required confirm=true behavior with preview mode. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
word_readWord ReadARead-onlyInspect
Reads text content from a Word document (.docx file).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the .docx file |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | Extracted text content |
| chars | Yes | Number of characters in the extracted text |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description is consistent with a read operation. It adds that text content is extracted, but gives no additional context about output format, error handling, or limitations, which is acceptable given 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 a single sentence, front-loaded with the action and resource, with no filler words. Every word contributes to understanding the tool's purpose.
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 one parameter, high schema coverage, and an output schema, the description is largely sufficient. It could optionally mention return format or non-support for legacy .doc files, but the low complexity makes these omissions minor.
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%—the single 'path' parameter is well-documented as 'Absolute path to the .docx file'. The description adds no further parameter semantics beyond what the schema already provides, so baseline 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 action ('Reads text content') and the specific resource (Word .docx file), distinguishing it from other format-specific readers like pdf_read, ppt_read, and from word_append/word_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?
The description implies usage for extracting text from .docx files but provides no explicit guidance on alternatives, exclusions, or when not to use this tool. It does not mention using file_read or other format readers for different file types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zoom_list_recordingsZoom List RecordingsARead-onlyInspect
Lists Zoom meeting recordings saved locally on this Mac (~/Documents/Zoom), newest first: meeting name, date, and which artifacts exist (transcript, captions, saved chat, audio, video). Local recordings only — no Zoom API, no admin approval. Use zoom_read_transcript to read the text of a meeting.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max recordings to return (default 20) |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| total | No | |
| recordings | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, but the description adds valuable context: the exact local path (~/Documents/Zoom), sort order (newest first), and which artifact types exist (transcript, captions, saved chat, audio, video). It also notes no API access or admin approval needed, going beyond 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 compact but dense: each sentence adds distinct value (what is listed, where, ordering, artifact types, scope limitations, sibling pointer). No filler or redundancy. Front-loaded with the main purpose.
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 one optional parameter, the description fully covers purpose, location, ordering, included data, exclusions, and alternative tools. An output schema exists for return values, so no need to describe the full response shape. Complete in 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?
The single parameter 'limit' has 100% schema coverage with a clear description and default. The tool description mentions 'newest first' which indirectly relates to how limit applies, but it does not add parameter-specific meaning beyond the schema. Baseline 3 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?
Description clearly states the verb and resource: 'Lists Zoom meeting recordings saved locally on this Mac (~/Documents/Zoom)'. It specifies scope (local), sort order (newest first), and included fields (meeting name, date, artifacts). It also distinguishes from sibling zoom_read_transcript by pointing to it as the alternative for reading 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?
States 'Local recordings only — no Zoom API, no admin approval', which explicitly excludes cloud recordings and clarifies no special permissions. It also names zoom_read_transcript as the alternative for reading transcript text, giving clear when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zoom_read_transcriptZoom Read TranscriptARead-onlyInspect
Reads the text artifacts of a local Zoom recording: the transcript/captions (.vtt or closed_caption.txt, cleaned to readable 'Speaker: text' lines) and the saved in-meeting chat. Pass the recording name or path from zoom_list_recordings. Perfect for 'summarize my last meeting' or 'what did we agree on in the kickoff call'.
| Name | Required | Description | Default |
|---|---|---|---|
| include | No | 'all' (default), 'transcript' or 'chat' | |
| recording | Yes | Recording folder name (or full path) from zoom_list_recordings. Partial name match works. |
Output Schema
| Name | Required | Description |
|---|---|---|
| chat | No | |
| note | No | |
| path | No | |
| recording | No | |
| transcript | No | |
| chat_source | No | |
| transcript_source | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds behavioral context beyond this by specifying that it cleans transcripts to readable lines, reads from local recordings, and includes both transcript and chat. It does not contradict the annotations and provides useful details about output processing.
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 and front-loaded with the core function. It avoids redundancy and every clause adds value: the first sentence defines what is read and the output format, while the second gives input source and use cases. 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 tool with full parameter schema, an output schema, and clear annotations, the description covers all necessary context: what artifacts are read, how the transcript is cleaned, where to get the input, and typical use cases. It is complete for an agent to select and invoke 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 description coverage is 100%, so both parameters are already fully documented. The description reinforces the 'recording' parameter by referencing zoom_list_recordings but does not add new semantic details about the 'include' parameter or the recording path format. Baseline 3 applies because the schema carries the burden.
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 ('Reads') and resource ('text artifacts of a local Zoom recording'), enumerating the exact artifacts (transcript/captions and chat) and the cleaned output format ('Speaker: text' lines). This clearly distinguishes it from sibling tools like zoom_list_recordings, which lists recordings rather than reading their content.
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 tells users to pass the recording name or path from zoom_list_recordings, establishing a clear prerequisite and context for use. It also gives example use cases ('summarize my last meeting'). However, it does not explicitly state when not to use the tool or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceConnect AI with any macOS app. Deep integration with native apps like Calendar, Mail, Notes, plus UI control for all applications. Works with Claude, Cursor, Raycast, and any MCP-compatible AI.37

Machinaofficial
FlicenseNot gradedqualityCmaintenanceAI's home on your Mac: gives AI agents remote access to iMessage, Notes, Reminders, Contacts, and more via MCP.1- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to read, create, update, and delete data in macOS apps (Reminders, Calendar, Notes, Mail, Messages, Contacts) via natural language, using EventKit, JXA, and SQLite backends.615MIT

ToolPiperofficial
AlicenseNot gradedqualityCmaintenance300+ MCP tools for macOS, all on-device — local AI inference (llama.cpp on Metal), voice, vision OCR, local RAG, browser automation, and ~140 system actions across 26 macOS domains. Nothing leaves your Mac.2MIT
Your Connectors
Sign in to create a connector for this server.