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
- 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.2/5 across 227 of 227 tools scored. Lowest: 2.8/5.
Many tools have near-equivalent counterparts across domains (chrome_click vs safari_click vs web_click vs ui_click; list_emails vs m365_list_emails; fs_read vs gdrive_read_file vs onedrive_read_file). Despite clear individual descriptions, the sheer number of overlapping purposes creates significant risk of misselection.
A domain_prefix_verb_noun pattern dominates (chrome_navigate, m365_create_event, onedrive_list_files), but there are many deviations: unprefixed tools (get_datetime, request_feature), noun-only names (lmcp_state, recipe_runs), and inconsistent prefix placement. Still readable overall.
227 tools is an extreme count for a single server, far beyond the well-scoped 3–15 tool range. Even for a broad Mac automation suite, this creates massive selection overhead and dilutes the usefulness of any individual tool.
Domain coverage is broad but uneven: email lacks delete, contacts lack create/update/delete, notes lack delete, and some integrations (Signal, Slack, Zoom, Notion) are read-only. Core workflows in most domains exist, but several obvious lifecycle operations are missing.
Available Tools
226 toolschrome_clickChrome ClickAInspect
Clicks the first element matching a CSS selector in the current Google Chrome tab. Returns the tag name and visible text of the clicked element so you can confirm the right thing was hit. Pass wait_for_navigation: true to wait up to 3 seconds for the page to load after the click.
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to click if there are several (0-based, default 0) | |
| selector | Yes | CSS selector (e.g. 'button.primary', '#save', '[data-testid=login]') | |
| wait_for_navigation | No | Wait up to 3s for page load after click (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 provide readOnlyHint=false and destructiveHint=false. The description adds that it returns tag name/visible text for confirmation and can wait up to 3s for navigation, which are useful behavioral details not covered by annotations. 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?
Three sentences covering purpose, return value, and wait behavior. No redundancy, front-loaded with purpose, and 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 single-click tool, description covers purpose, confirmation output, and optional wait. With output schema and annotations present, it is sufficiently complete; minor gap is lack of error-handling detail (e.g., element not found), but not essential.
Complex tools with many parameters or behaviors need more documentation. 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 with detailed descriptions for selector, nth, and wait_for_navigation, so baseline is 3. The description only reiterates wait_for_navigation and 'first element' (nth default), adding little 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 states 'Clicks the first element matching a CSS selector in the current Google Chrome tab' – a specific verb+resource+scope. It distinguishes from sibling tools by specifying Chrome, current tab, and 'first element', differentiating it from safari_click and web_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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/when-not-to-use or alternatives. The description implies usage for Chrome-specific clicks and mentions waiting for navigation, but does not contrast with chrome_query_selector_all or other browser-click tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_fill_formChrome Fill FormAInspect
Fills multiple form fields in one shot in the current Google Chrome tab. Pass fields as a JSON object mapping CSS selector to value.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| result | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey readOnlyHint=false and destructiveHint=false. The description adds the useful 'current Google Chrome tab' and 'one shot' behavior, but does not disclose what happens on missing selectors, whether it submits the form, or if it disturbs other page state. This is minimal but 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?
Two sentences, front-loaded with purpose and parameter format. Could be more precise about the string/JSON encoding, but otherwise 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?
With a simple single parameter and an output schema present, the description is mostly complete. However, the ambiguous fields type (string vs object) and lack of clarification about JSON encoding leave a gap for correct invocation, making it not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry full parameter meaning. It says 'Pass fields as a JSON object mapping CSS selector to value,' which is helpful, but it conflicts with the schema declaring fields as a string. It does not clarify whether the JSON should be stringified, nor provide an example, creating 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 states a specific verb and resource: 'Fills multiple form fields in one shot in the current Google Chrome tab.' This clearly distinguishes it from siblings like chrome_type (single field) and safari_fill_form (Safari).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: use when you need to fill multiple form fields at once in the current Chrome tab. However, it does not explicitly mention alternatives or when not to use it, such as preferring chrome_type for a single field.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_go_backChrome Go BackARead-onlyInspect
Navigates the current Google Chrome tab back to the previous page.
| Name | Required | Description | Default |
|---|---|---|---|
| window_index | No | 0 |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| from | No | |
| went_back | 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 that it operates on the 'current' tab, which is useful context. However, it does not disclose potential side effects like losing form data or clearing transient state, though these may not be relevant for a simple back navigation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no fluff or extraneous information. Every word contributes to understanding, earning a perfect score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the description captures the core action. However, due to missing parameter semantics and no explicit mention of the optional window_index, the contextual completeness is only adequate. The presence of an output schema reduces the need to explain return values, but the description still leaves some gaps for the parameter.
Complex tools with many parameters or behaviors need more documentation. 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 one parameter, 'window_index', with 0% schema description coverage and no description text. The description does not mention this parameter at all, leaving the agent without any guidance on what window_index means, its format, or why it might need to be set. With such low coverage, the description should compensate but fails 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?
The description explicitly states the tool's function: 'Navigates the current Google Chrome tab back to the previous page.' It uses a specific verb ('navigates') and resource ('current Google Chrome tab') and clearly distinguishes it from sibling tools like chrome_navigate (which would load a specific URL), chrome_history, and safari_go_back.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 need to go back to the previous page in the current Chrome tab. It does not explicitly mention alternatives or exclusions, but the use case is sufficiently clear for such a simple navigation action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_historyChrome HistoryARead-onlyInspect
Lists or searches the user's Google Chrome browsing history (local SQLite, read-only — no page is opened). Optional query matches the URL or page title (case-insensitive substring). Returns url, title, visit_count and last_visit (ISO), newest first. Requires Full Disk Access. For Safari use safari_history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (default 50, max 200). | |
| query | No | Substring to match against the URL or page title. Omit to list the most recent history. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=true, destructiveHint=false), the description adds meaningful behavioral disclosures: 'read-only — no page is opened,' 'Requires Full Disk Access,' and 'Returns url, title, visit_count and last_visit (ISO), newest first.' This gives the agent crucial context about permissions and output without relying solely on 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 purpose, and every clause adds useful information. It covers operation, query behavior, return fields, ordering, permissions, and the Safari alternative without any 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 simple list/search tool with no output schema, this description is fully complete: it covers permissions, behavior, return shape, ordering, query semantics, and the relevant sibling alternative. No critical information 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. The description adds value by noting 'case-insensitive' matching and that results are 'newest first,' which are not in the schema. It also reinforces the semantics of omitting query, but does not explain 'limit'—though the schema already does that 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 uses specific verbs 'Lists or searches' and clearly identifies the resource: the user's Google Chrome browsing history. It further differentiates from the sibling 'safari_history' by explicitly naming it as the Safari alternative, making the tool's scope 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 provides explicit usage guidance: 'Optional `query` matches the URL or page title' and 'Omit to list the most recent history.' It also names the alternative for Safari users ('For Safari use safari_history.'), satisfying the when-to-use vs. alternatives criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_list_tabsChrome List TabsARead-onlyInspect
Lists every open tab across all Google Chrome windows with title, URL, and whether it is active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tabs | 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 adds value by specifying the exact data returned (title, URL, active status) and scope (all windows). 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?
Single sentence, no fluff, front-loaded with the verb. Every word earns its place; it is 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?
With an output schema present and no parameters, the description fully captures what the tool does. It mentions the key output fields and scope, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. No parameter explanation is needed, and the description appropriately focuses on the output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lists'), names the resource ('every open tab across all Google Chrome windows'), and specifies the returned fields ('title, URL, and whether it is active'). This clearly distinguishes it from siblings like chrome_search_tabs and safari_list_tabs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool (when you need an enumeration of all open tabs across Chrome windows). It does not explicitly mention alternatives or exclusions, but the use case is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_query_selector_allChrome Query Selector AllARead-onlyInspect
Runs document.querySelectorAll in the current Google Chrome tab and returns a compact summary of each match.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 50 | |
| selector | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| result | 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: it runs in the current tab and returns summaries rather than full elements. No contradiction; the added detail goes beyond annotation basics.
Agents need to know what a tool does to the 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 sentence, no wasted words, front-loaded with the action and key details. Perfectly concise structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, and the output schema covers return format. However, the missing parameter semantics for 'limit' leaves an agent uncertain about behavior. The description covers what it does and where, but not enough about how to control 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?
Schema description coverage is 0%, and the description does not explain either parameter. While 'selector' is implied by querySelectorAll, 'limit' is entirely unexplained (no mention of capping results or default behavior). The description fails to compensate for empty 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?
Description clearly states the tool runs document.querySelectorAll in the current Chrome tab and returns a compact summary of each match. This specific verb+resource+scope distinguishes it from siblings like chrome_read_tab (reads whole page) and safari_query_selector_all (different browser).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: use this to extract multiple matching elements via CSS selector from the current Chrome tab. It does not explicitly mention alternatives or when-not-to-use, but the context is sufficient 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.
chrome_read_tabChrome Read TabARead-onlyInspect
Reads the rendered text content of a Google Chrome tab. Identify the tab either by url_match (substring match against URL; first hit wins) or by window_index + tab_index (from chrome_list_tabs). Text is capped at max_bytes (default 100 KB). Pass include_html: true to also get the raw HTML source. Pass include_links: true to extract all links with their href and text. Requires 'Allow JavaScript from Apple Events' (Chrome → View → Developer); run chrome_setup_check if reads come back empty.
| Name | Required | Description | Default |
|---|---|---|---|
| max_bytes | No | Max bytes of text (and html) to return (default 102400) | |
| tab_index | No | Tab index from chrome_list_tabs (default active tab of that window) | |
| url_match | No | Substring to match against the tab URL. Takes precedence over indices. | |
| include_html | No | Also return the HTML source (default false) | |
| window_index | No | Window index from chrome_list_tabs (default 0) | |
| include_links | No | Extract all links with href + visible text (default false). Great for navigating SPAs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| html | No | |
| text | No | |
| links | No | |
| title | No | |
| truncated | No | |
| html_bytes | No | |
| link_count | No | |
| text_bytes | No | |
| links_error | No | |
| html_truncated | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only safety, and the description adds valuable behavioral context: text cap via max_bytes, opt-in HTML/links, the critical 'Allow JavaScript from Apple Events' permission, and the suggestion to run chrome_setup_check on empty reads. This goes well beyond the structured annotations with 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 compact and front-loaded: core function stated first, followed by identification methods, options, and a critical prerequisite. Every sentence adds distinct useful information without filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values are already covered elsewhere. The description fully equips an agent to select tabs, choose optional outputs, understand the size cap, and handle the JavaScript permission prerequisite, making it self-sufficient 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 covers all 6 parameters with descriptions, but the description enriches them with inter-parameter relationships not present in the schema: url_match takes precedence, substring matching with first-hit-wins, default max_bytes value, and the pairing of window_index/tab_index. This adds meaningful selection logic beyond the raw 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?
Specific verb 'Reads' plus resource 'rendered text content of a Google Chrome tab' clearly states the function and differentiates it from sibling tools such as chrome_list_tabs (metadata) and chrome_search_tabs. The additional mention of optional HTML and link extraction further pins down its 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?
Provides explicit guidance on how to identify tabs (url_match vs window_index+tab_index), explains precedence, lists optional flags, and even notes a prerequisite and a diagnostic fallback. However, it does not explicitly name alternatives or state when not to use this tool compared to safari_read_tab or web_read.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_search_tabsChrome Search TabsARead-onlyInspect
Searches the rendered text of every open Google Chrome tab for a substring. Returns each matching tab with the surrounding snippet. Useful for 'do I have a tab open with X?' across many tabs. Requires 'Allow JavaScript from Apple Events' (Chrome → View → Developer).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Substring to search for (case-insensitive) | |
| context | No | Characters of context around each match (default 120) | |
| max_tabs | No | Max tabs to scan (default 30). Higher = slower. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | |
| query | No | |
| scanned | 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 valuable context: it searches 'rendered text' (not just titles/URLs) and discloses a prerequisite: 'Requires "Allow JavaScript from Apple Events" (Chrome → View → Developer).' This goes beyond annotations to inform the agent about setup requirements and the nature of the 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 two sentences, front-loaded with the core functionality and outcome, followed by a use case and requirement. Every sentence earns its place; 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 has an output schema, so return values are covered elsewhere. The description explains scope, use case, and prerequisites. The only minor gap is that 'every open tab' is contradicted by max_tabs defaulting to 30, but that limitation is visible in the schema. Overall, it is complete enough 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?
Schema description coverage is 100%, so the input schema already fully documents query, context, and max_tabs with descriptions. The description does not add additional parameter semantics beyond what the schema provides. 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 clearly states the verb and resource: 'Searches the rendered text of every open Google Chrome tab for a substring.' It also specifies the output ('Returns each matching tab with the surrounding snippet'), distinguishing it from sibling tools like chrome_list_tabs (which lists without searching) and safari_search_tabs (which targets Safari).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 use case: 'Useful for "do I have a tab open with X?" across many tabs.' This gives context for when to use the tool. It does not explicitly mention alternatives or exclusions, so it doesn't reach the 'explicit when/when-not/alternatives' bar, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_setup_checkChrome Setup CheckARead-onlyInspect
Reports whether Google Chrome is ready for interactive tools (chrome_click, chrome_type, chrome_evaluate_js, chrome_read_tab text). Returns setup instructions if JavaScript from Apple Events is not enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tabs_open | No | |
| instructions | No | |
| ready_for_js_tools | 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 valuable behavioral context beyond annotations: it returns setup instructions if JavaScript from Apple Events is not enabled, which tells the agent about a failure mode and the tool's diagnostic nature. This exceeds the baseline but isn't exhaustive (e.g., doesn't describe the output schema, but that's covered by the output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and every word earns its place. It states the core purpose first, then adds the key failure-mode behavior. 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?
The tool is simple (no parameters, low complexity) and an output schema is present, so the description doesn't need to explain return values. It fully covers the tool's role as a prerequisite check for Chrome interactive tools, including what happens when setup is incomplete. This 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?
With zero parameters, the baseline is 4 per the rubric. The description correctly doesn't waste space inventing parameter details. The schema already covers parameter definitions (there are none), so no additional semantics 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 uses a specific verb ('Reports') and a specific resource ('whether Google Chrome is ready for interactive tools'), and explicitly lists the dependent tools (chrome_click, chrome_type, chrome_evaluate_js, chrome_read_tab). It clearly distinguishes itself from sibling safari_setup_check by focusing on Chrome.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 should be used before Chrome interactive tools by framing it as a readiness check for those exact tools. It provides clear context for when to invoke it, though it doesn't explicitly state alternatives or when not to use it. The sibling safari_setup_check is not mentioned, but the Chrome-specific naming and tool list make the usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_typeChrome TypeAInspect
Sets the value of an input/textarea matching a CSS selector in the current Google Chrome tab and fires input/change events.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | true | |
| value | Yes | ||
| selector | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| result | 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, so the description focuses on adding the behavioral detail that it fires input/change events. This gives valuable context about side effects on the page, which is not covered by the annotations and helps the agent anticipate event-triggered behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence conveys the core purpose with no fluff or redundant details. Every phrase contributes meaning, making it an ideally concise description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, an output schema, and annotations, the description provides a reasonable but minimal summary. It misses key context such as the meaning of the 'clear' parameter and does not discuss expected failures or edge cases, but it covers the essential action sufficiently for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'value' and 'CSS selector' implicitly, but does not explain the 'clear' parameter (e.g., whether it clears the existing field before typing). The parameter names are self-explanatory to some degree, but the description adds little beyond the schema names and leaves 'clear' ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: it sets the value of an input/textarea matching a CSS selector in the current Chrome tab and fires input/change events. This makes it distinct from sibling tools like chrome_click and safari_type by specifying the exact action, target element, and browser.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (current Chrome tab, CSS selector, input/textarea elements) but does not explicitly mention alternatives or exclusions. It implies usage when you need to set form field values in Chrome, but lacks direct comparison to similar tools like chrome_fill_form.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
chrome_wait_forChrome Wait ForARead-onlyInspect
Polls the current Google Chrome tab until a CSS selector appears, or until text_match appears (anywhere on the page, or inside selector if you also pass one). Pass at least one of selector/text_match. Useful after chrome_click to wait for the next page or a modal to render.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector to wait for (optional if text_match is given) | |
| text_match | No | Text to wait for. With `selector`, must appear inside that element; without it, anywhere on the page. | |
| timeout_ms | No | Max time to wait (default 10000 = 10s, max 30000) |
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. The description adds valuable behavioral context: it 'polls' (repeated checks), explains the conditional interaction between selector and text_match, and states the requirement to pass at least one. This goes 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?
Two sentences with no redundancy. The first sentence encapsulates the core logic, and the second provides a concrete usage example. 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 tool's main behavior, parameter relationships, and a typical use case. With an output schema present, it doesn't need to explain return values. It lacks detail on timeout behavior, but that's a minor gap given the schema documents timeout_ms.
Complex tools with many parameters or behaviors need more documentation. 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 descriptive parameter docs. The description adds a cross-parameter constraint ('Pass at least one of selector/text_match') and clarifies that text_match can be scoped inside selector, which is not fully obvious from the schema descriptions 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 clearly states the tool polls the current Chrome tab for a CSS selector or text match. It uses a specific verb ('polls') and resource ('current Google Chrome tab'), and the behavior is unambiguous, distinguishing it from sibling wait tools like safari_wait_for or web_wait_for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'Useful after chrome_click to wait for the next page or a modal to render', giving a clear when-to-use context. It doesn't explicitly mention alternatives or exclusions, but the Chrome-specific scope and practical example provide solid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
complete_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 using your personal API token (Todoist → Settings → Integrations → Developer → copy the API token). Stored locally, never sent to Claude's servers.
| Name | Required | Description | Default |
|---|---|---|---|
| api_token | Yes | Your Todoist API token (a 40-char hex string) |
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?
Beyond the annotations, the description discloses a significant behavioral trait: 'Stored locally, never sent to Claude's servers.' This addresses privacy and data handling, adding valuable context that annotations do not capture.
Agents need to know what a tool does to the 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 accomplish both purpose and behavioral transparency. The first sentence fronts the primary action, and the second adds context. No wasted words; each 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 one-parameter connection tool, the description covers how to get the token, what happens with it (stored locally), and privacy implications. With an output schema present, no further details about return values are needed. The tool is fully contextualized.
Complex tools with many parameters or behaviors need more documentation. 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 the api_token as a 40-char hex string, but the description adds practical guidance on where to find it ('Todoist → Settings → Integrations → Developer'). This extraction guidance goes beyond schema, making parameter usage much clearer.
Input schemas describe structure but not intent. Descriptions should explain 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 specific verb and resource: 'Connect Todoist using your personal API token.' This distinguishes it from siblings like disconnect_todoist and Todoist task tools, leaving no ambiguity about 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 for use, including the precise path to obtain the token, which is essential before invoking the tool. It doesn't explicitly mention alternatives or when not to use it, but as a connection/setup step, its use case is self-evident.
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). 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.
| 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`. | |
| 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?
With annotations only indicating readOnlyHint=false and destructiveHint=false, the description adds valuable behavioral context: it never sends, it places drafts in the account's Drafts folder, and for multi-account Macs, behavior depends on whether account/from is provided, defaulting to the default account. It also discloses that attachments are attached to the saved draft. This goes well beyond the annotations, though it doesn't cover error handling or failure modes.
Agents need to know what a tool does to the 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 five sentences, each earning its place: core purpose, two usage modes, account selection, attachment behavior, and target user. It is front-loaded with the most critical fact ('never sends'), and the length is appropriate for a tool with 11 parameters and two distinct modes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 (11 optional parameters, two modes, multi-account concerns), the description covers the essential behavior: saving a draft, new vs reply, account selection, attachments, and the non-sending guarantee. An output schema exists, so return-value details are not needed. The description is complete enough for an AI agent to select and 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 baseline is 3. The description adds meaning by grouping parameters into two modes: new draft (to/subject/body) and reply draft (reply_to_message_id plus body), and clarifies the account/from alternative. It also gives an example for attachments (a PDF quote). Though the schema already covers many relationships, the description reinforces and provides a mental model, meriting 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: 'Saves an email to the Mail.app Drafts folder... never sends.' It differentiates from siblings like send_email and reply_email by explicitly emphasizing that it never sends, and it distinguishes two modes (new draft vs reply draft) with specific parameters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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: 'Use this for the cautious user who wants AI-composed mail but insists on sending it themselves.' It also explicitly says 'never sends,' which serves as a when-not-to-use. However, it doesn't explicitly name alternative tools like 'use send_email for direct sending,' so it stops short of full exclusions.
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. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the description adds value by detailing the composition of the brief and the graceful handling of missing Mail app for emails. 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 sentences, no wasted words. The first sentence immediately states the output composition, and the second provides the use case. Fully 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?
Given that the tool has an output schema, the description adequately explains the return value without needing to detail structure. It covers all components and optionality, but could briefly mention the aggregated format for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds meaning by explaining that 'location' enables weather inclusion and 'include_emails' defaults to true with graceful failure, which is useful context 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 specific verbs ('Returns', 'combining') and clearly identifies the aggregated resources (calendar events, reminders, emails, weather). It distinguishes itself from sibling tools like list_calendar_events or get_weather by being a combined morning briefing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the ideal use case ('Perfect for starting each day') and provides context on what is included. While it doesn't explicitly state when not to use or list alternatives, the purpose is clear enough for an agent to decide appropriately.
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_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.
| 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?
The description does not disclose the confirm requirement (must be true to create), nor behavior if the file already exists. It only restates the basic create action, adding minimal context beyond the annotation that this is a write operation. The confirm flag is a notable behavioral gate not mentioned in 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?
The description is a single sentence, front-loaded with the action 'Creates a new Excel spreadsheet', and contains no fluff. Every word adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema and 4 parameters, but description omits the confirmation gate and fails to differentiate from excel_write_cell. It states the core purpose but leaves contextual gaps that are only partially filled by the schema and annotations. This is adequate but not complete for a write operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description mentions headers and optional data rows but adds no additional semantics about path format, row structure, or confirm requirement 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 clearly states the tool creates a new Excel spreadsheet (.xlsx) with headers and optional data rows, using a specific verb and resource. It distinguishes this tool from siblings like excel_read and excel_write_cell that operate on existing 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 implies this tool is for creating new spreadsheets but does not explicitly mention alternatives or when not to use it. It lacks guidance like 'use excel_write_cell to modify existing files' or mention of the confirm flag as a prerequisite.
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_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. For Microsoft To Do use todo_get_folders instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| lists | 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 clear. The description adds useful context about the platform scope ('on this Mac') and the object type (folders vs. reminders), which goes beyond annotations without contradicting them. It does not describe return format, but that is available via output schema, and the tool is a simple read-only 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 two sentences: the first states the primary function, the second provides an explicit alternative. Every word earns its place, with no fluff or repetition of the title. Information is front-loaded and immediately actionable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 listing tool with an output schema, the description is complete. It identifies the platform (Apple Reminders), the scope (folders), and the key alternative (To Do). No additional context is needed 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?
The tool has zero parameters, so the input schema is empty and the description carries no parameter burden. Baseline for 0 params is 4, and there is nothing else to explain. The description correctly implies no arguments 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 the lists (folders) in Apple Reminders (Reminders.app) on this Mac.' It uses a specific verb ('Lists') and identifies the resource (Reminders folders) and platform. It also distinguishes from a sibling tool by explicitly directing users to todo_get_folders for Microsoft To Do.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (Apple Reminders on this Mac) and explicitly names an alternative for Microsoft To Do ('use todo_get_folders instead'). It does not enumerate all non-uses, but the platform scoping and sibling differentiation give solid usage guidance for a simple listing tool.
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 and type (imap/pop/iCloud). 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). Use list_accounts only when you specifically need the addresses or account type.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| count | Yes | |
| accounts | 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. Description adds that it is 'Slower' and 'queries Mail directly' implying potential lock. No contradiction. Provides useful 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, front-loaded with main action. Every sentence adds value: what it does, performance characteristic, when to use alternative. 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 no parameters and presence of output schema, description covers purpose, behavior, and usage context comprehensively. Trade-off with sibling is clearly explained.
Complex tools with many parameters or behaviors need more documentation. 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% (no parameters), baseline 3. Description explains what is returned (addresses, type), adding meaning beyond 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?
Clearly states verb 'Lists', resource 'Mail.app email accounts', and what is included (addresses and type). Distinguishes from sibling 'list_email_accounts' by noting the additional 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?
Explicitly tells when to use this vs. 'list_email_accounts': use list_accounts only when addresses/type needed; otherwise prefer the faster cached alternative. Perfect when/not guidance.
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 3+ accounts, always pass account= (from list_email_accounts) to avoid timeouts. Without account, all accounts are scanned which can be slow on macOS 15+.
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?
Annotations already declare read-only and non-destructive hints, and the description adds substantial behavioral detail: header-only results, multi-account scanning performance implications (slow on macOS 15+, timeout risk), and pagination mechanics with capped limits. This far exceeds what the annotations alone 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 focused paragraphs that front-load the primary use case and alternative, followed by critical performance and pagination details. Every sentence carries actionable information with no filler, making it well-structured and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 purpose, alternatives, performance caveats, and pagination thoroughly, and the output schema covers return fields. The only notable omission is the lack of context for the mailbox and unread_only parameters, but the overall tool behavior is sufficiently clear 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 description adds concrete parameter context for account (sourced from list_email_accounts), offset (paging example), and limit (cap 50, default 20). However, with 0% schema coverage, mailbox and unread_only parameters are unintelligible from the description alone, leaving these two parameters unexplained. The covered parameters are well detailed, but the gaps prevent a 5.
Input schemas describe structure but not intent. Descriptions should explain 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 lists email headers (subject, sender, date, unread) from Apple Mail on this Mac, and explicitly distinguishes itself from m365_list_emails for M365 mailboxes not in Mail.app. It also cross-references read_email for full message bodies, making the resource and verb 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 says 'Use this when the user wants to see or triage their inbox on this Mac' and provides an explicit alternative for M365 mailboxes not added to Mail.app. It also directs to read_email for full body and includes performance guidance on passing account for machines with 3+ accounts, giving clear when-to-use and when-not-to-use context.
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 NotesCRead-onlyInspect
Lists notes from Apple Notes app. Optionally filter by folder.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 50 | |
| folder | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| notes | No | |
| total | No | |
| next_actions | 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 no behavioral context beyond restating the tool's purpose. It does not disclose whether results are sorted, how pagination works, or what happens if the folder does not exist. The 'Optionally filter by folder' note is a parameter hint rather than a behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the core action ('Lists notes') and adds a key option ('filter by folder'). There is no superfluous text, and it is appropriately sized for a simple listing tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity and the presence of an output schema, the description is still too sparse. It omits important contextual detail such as whether the folder filter is exact match, the behavior of the limit parameter, and any note-ordering guarantees. Compared to similar tools in the calibration set, this description lacks the specificity needed for an agent to confidently 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 0%, so the description must compensate. It explains the 'folder' parameter ('filter by folder') but says nothing about 'limit'. The limit parameter's default and type are in the schema, but its effect (controlling the number of notes returned) is not explained. This partial compensation leaves a notable gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Lists') and resource ('notes from Apple Notes app'), clearly indicating the tool's function. However, it does not differentiate from sibling tools like 'search_notes', which also lists notes but with different filtering semantics. The optional folder filter adds a distinguishing detail, but it is not explicitly contrasted with 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 guidance on when to use this tool versus alternatives such as 'search_notes' or 'read_note'. The phrase 'Optionally filter by folder' hints at one usage scenario but does not explain when listing is preferred over searching or how the folder filter behaves. No exclusions or recommendations are provided.
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_safari_bookmarksList Safari BookmarksARead-onlyInspect
Lists Safari bookmarks (title + URL) from the Mac's Safari (reads ~/Library/Safari/Bookmarks.plist — needs Full Disk Access).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max bookmarks to return (default 100) |
Output Schema
| Name | Required | Description |
|---|---|---|
| note | No | Present when bookmarks can't be read (e.g. Full Disk Access needed). |
| count | No | |
| bookmarks | 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 important context about the need for Full Disk Access and the specific file read. This goes beyond the annotation baseline and discloses a significant potential failure point (permission requirement).
Agents need to know what a tool does to the 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 core purpose and then adds essential context (file path, permission). Every word contributes value; there is 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 read-only list tool, the description covers the purpose, output fields, data source, and access requirements. An output schema exists, so return structure is handled there. 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 input schema fully describes the only parameter 'limit' with a clear default and meaning. The description does not mention this parameter, but that is acceptable since schema_description_coverage is 100%. No additional parameter detail 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 states a specific action ('Lists') and resource ('Safari bookmarks'), and adds detail about what is returned ('title + URL') and the data source ('~/Library/Safari/Bookmarks.plist'). This clearly distinguishes it from sibling tools like safari_history and safari_list_tabs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the tool should be used by identifying the exact source file and the Full Disk Access prerequisite. No explicit alternatives are given, but no sibling tool exists for bookmarks, so 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_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. 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?
Beyond the annotations (readOnlyHint=true, destructiveHint=false), the description discloses that window titles require Screen Recording permission and that a permission_required error is returned instead of a title-less result. It also notes that display_id matches list_displays and that window_id is session-stable, adding 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?
The description is information-dense yet concise, with each sentence serving a distinct purpose: listing returned fields, explaining permission behavior, noting the optional filter, and highlighting ID stability. 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 description covers the key return fields, permission requirements, and ID stability. Although there is no output schema, the description adequately implies the return shape (a list of window objects). It doesn't explicitly describe the on_screen_only parameter's default or behavior, 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?
The input schema already provides full descriptions for both parameters (app_bundle_id and on_screen_only), so schema coverage is 100%. The description only reiterates the app_bundle_id filter without adding new semantic details, thus providing no additional 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 lists on-screen windows of any app, enumerating specific fields returned (window_id, bundle id, title, bounds, display_id, is_focused). It distinguishes itself from related window tools like window_focus/window_set_frame by focusing on enumeration, and cross-references list_displays for display 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 implies usage for enumerating windows and mentions the stable window_id for later targeting, guiding agents to use this for discovery before focus/resizing. However, it doesn't explicitly state when not to use it or name alternatives, though the sibling context makes the role clear.
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.
lmcp_welcomeLMCP WelcomeARead-onlyInspect
Onboarding overview for a newly installed LMCP connection. Returns a live snapshot of what LMCP can currently see on this Mac — today's calendar events, due reminders, unread email counts, and total contacts — along with a short list of the domains LMCP reaches (Mail, Calendar, Contacts, Files, and more) and example first requests. Useful right after install, when a user wants to see what LMCP can do. Available only until the first other tool call runs, after which it is removed from the tool list.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| domains | No | Every domain LMCP reaches, with a short capability blurb. |
| snapshot | No | |
| automations | No | Example multi-step prompts the user can try immediately. |
| capabilities | No | Domains grouped by the job the user wants done, each with one example ask (the discoverability map). |
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 that it provides a live snapshot and that it is removed from the tool list after first use, which is critical 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?
Description is a single paragraph, efficiently conveys purpose, contents, usage context, and lifecycle. No filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that this is a simple, zero-parameter tool with output schema described fully in the description, it covers all necessary context: what it returns, when to use, and its transient nature. 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?
No parameters required; schema coverage is 100%. Baseline for 0 params is 4. The description does not need to add parameter information, and it correctly avoids unnecessary 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?
Description clearly states the tool returns a live snapshot of LMCP's view on the Mac, listing specific data (calendar events, reminders, email counts, contacts) and domains. It distinguishes itself as an onboarding tool that disappears after first use, which is unique 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?
Explicitly states it's useful right after install to see what LMCP can do, and notes it's available only until the first other tool call runs. This provides clear when and when-not to use, and implies that subsequent calls should use individual data tools.
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. Searches by keyword, sender, or subject. 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' |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| emails | 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 context about account connectivity and search scoping (keyword, sender, subject), which is valuable beyond annotations. It does not mention rate limits or auth details, but the added context plus annotations justify a score above 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 concise two-sentence structure, front-loaded with the use case and immediately providing an 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?
Given the output schema exists, return values are already defined. The description covers the use case, prerequisite (connected M365 account), search capabilities, and a clear alternative for a different mailbox type, making it complete for this tool's complexity. The sibling context further clarifies its scope against similar tools.
Complex tools with many parameters or behaviors need more documentation. 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 fully documents both parameters. The description's mention of 'keyword, sender, or subject' reinforces the query semantics but adds little beyond the schema's examples ('from:', 'subject:'). Baseline of 3 is appropriate as the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain 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 emails in a Microsoft 365/Outlook mailbox via the cloud, using a specific verb ('find') and resource. It explicitly distinguishes this from search_emails (Mac Mail.app), eliminating ambiguity among sibling email 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?
It explicitly states when to use this tool (when searching cloud M365/Outlook emails) and provides an alternative for local Mail.app accounts ('use search_emails'). It also notes the prerequisite of a connected M365 account, giving clear usage context.
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 with their members (names and emails). Start here for Notion — its output feeds notion_list_databases / notion_list_pages / notion_search.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| workspaces | No | |
| known_users | 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 the context that workspaces are 'cached on this Mac' (local data source) and that members are included with names and emails. This provides useful behavioral context beyond the annotations, though it doesn't describe return format (but an output schema 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?
Two sentences, zero waste. First sentence establishes scope and output type; second provides the one critical piece of guidance (start here, feeds other tools). 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?
Given 0 params, a strong output schema, complete annotations (readOnly=true, non-destructive), and rich sibling context, the description is complete. It tells the agent what it returns, where the data comes from, and how it fits into the tool sequence.
Complex tools with many parameters or behaviors need more documentation. 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 no param doc needed. With 0 params, the baseline is 4 per the rubric, and the description fully describes what the tool yields (workspaces with members).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Lists the Notion workspaces cached on this Mac') and uniquely distinguishes it from siblings like notion_list_databases and notion_list_pages. It's clearly the entry point in the Notion 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 instructs 'Start here for Notion' and explains that its output feeds notion_list_databases / notion_list_pages / notion_search. This gives the agent clear sequencing guidance and names alternative/successor tools.
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 NoteARead-onlyInspect
Reads the full content of a note by name or ID.
| 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 |
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 retrieves the full content and supports lookup by either name or ID, which clarifies behavior beyond the schema and 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 is front-loaded with the verb and contains no wasteful words. Every word earns its place, making it highly 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 read tool with an output schema and annotations covering safety, the description adequately covers purpose and lookup methods. The only minor gap is the lack of clarification about behavior when both parameters are provided, but overall it is complete for low 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 provides some meaning by stating 'by name or ID', indicating the two parameters are alternative identifiers. However, it does not explain parameter precedence, ID format, or edge cases like duplicate names, 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 uses a specific verb 'Reads' and resource 'note', and specifies 'full content' and 'by name or ID', which clearly distinguishes it from sibling tools like list_notes, search_notes, create_note, and update_note. It leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you have a note name or ID and need the full content, but it does not explicitly state when to use this over list_notes or search_notes, nor does it mention any exclusions or alternatives. Usage is inferred but not directly guided.
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. 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?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that it optionally submits a report to the LMCP team, which is a side effect not covered by annotations. This provides useful behavioral context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that efficiently communicate purpose and key behavior. Front-loaded with the main action (health check) and concise 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?
Given the tool's broad scope and the presence of an output schema, the description covers essential aspects: it checks all LMCP integrations and optionally submits a report. It could list the integrations, but the schema parameter 'focus' provides that detail. Adequate for a diagnostics 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% with parameter descriptions for 'focus' and 'submit'. The description adds context about optional report submission but does not significantly enhance schema meaning beyond the overall purpose. 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 runs a fast health check of all LMCP integrations, showing what works, what doesn't, and how to fix it. This distinguishes it from sibling tools that focus on specific integrations (e.g., outlook_diagnose, 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 implies usage for checking LMCP integrations but does not explicitly state when to use this tool versus sibling diagnostics like outlook_diagnose or when to avoid it. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_clickSafari ClickAInspect
Clicks the first element matching a CSS selector in the current Safari tab. Returns the tag name and visible text of the clicked element so you can confirm the right thing was hit. Pass wait_for_navigation: true to wait up to 3 seconds for the page to load after the click (useful when clicking links or buttons that trigger navigation).
| Name | Required | Description | Default |
|---|---|---|---|
| nth | No | Which match to click if there are several (0-based, default 0) | |
| selector | Yes | CSS selector (e.g. 'button.primary', '#save', '[data-testid=login]') | |
| wait_for_navigation | No | Wait up to 3s for page load after click (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?
Beyond annotations (readOnlyHint=false, destructiveHint=false), the description reveals that the tool returns the tag name and visible text of the clicked element, enabling confirmation, and explains the wait_for_navigation behavior. This adds useful behavioral context 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?
Two sentences, front-loaded with the primary action, then the return confirmation and optional wait behavior. Every sentence 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 click tool with a full input schema, an output schema, and annotations, the description covers the core action, the confirmation return value, and the navigation-wait option, making it complete for an agent to select and invoke correctly. 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 covers all parameters at 100%, so baseline is 3. The description adds meaningful guidance for wait_for_navigation (purpose and timeout), which is extra value beyond the schema's short description. It does not explain selector/nth beyond schema, but those are already well-documented.
Input schemas describe structure but not intent. Descriptions should explain 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 ('clicks the first element matching a CSS selector') and a specific resource ('current Safari tab'), clearly distinguishing it from sibling click tools like chrome_click or web_click. It also notes the return value, reinforcing its 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?
It offers practical guidance on when to set wait_for_navigation (for links/buttons triggering navigation), but does not explicitly contrast with alternative tools (e.g., safari_query_selector_all or chrome_click). The context is clear, but exclusions/alternatives are not named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_fill_formSafari Fill FormAInspect
Fills multiple form fields in one shot. Pass fields as a JSON object mapping CSS selector to value.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| result | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows it's a mutating action on the browser. The description adds that it operates on multiple fields in one atomic-like action, but it does not disclose details like whether values replace existing ones, whether it waits for page readiness, or whether the form is submitted. 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?
Two sentences, no fluff. The first sentence states the action, the second provides the input format. Perfectly sized and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers purpose and input format. The presence of an output schema (not shown) likely covers return values. Annotations address safety. It could mention that it operates on the active tab or requires a loaded page, but given the tool's simplicity, the current description 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?
Schema coverage is 0% and the single 'fields' parameter is typed as a string. The description compensates by explaining that it is a JSON object mapping CSS selectors to values, which is essential for correct invocation. It does not elaborate on edge cases like nested JSON or escaping, but the core format is conveyed.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Fills'), the resource ('multiple form fields'), and the batch nature ('in one shot'). This distinguishes it from sibling tools like safari_type that fill a single field and safari_click that clicks an element. The scope is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'in one shot' and 'multiple form fields' implies a batch use case, contrasting with single-field type tools. It does not explicitly name alternatives or give when-not to use, but the context is clear enough for an agent to select this over single-field tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_go_backSafari Go BackBRead-onlyInspect
Navigates the current Safari tab back to the previous page.
| Name | Required | Description | Default |
|---|---|---|---|
| window_index | No | 0 |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| from | No | |
| went_back | 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, which cover safety. The description adds the scope of operating on the current tab, but does not disclose edge behaviors such as what happens when there is no previous page. This is minimal added 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?
The description is a single sentence with no extra words, front-loading the key action and resource. It is appropriately concise 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?
Despite being a simple tool, the description omits any explanation of the window_index parameter and does not address edge cases like navigating from the first page. With only one sentence, it leaves meaningful gaps in understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter (window_index) with 0% description coverage, and the description does not explain what window_index means or how it affects behavior. Since the description fails to compensate for the schema's lack of documentation, the parameter semantics are essentially undefined.
Input schemas describe structure but not intent. Descriptions should explain 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 'navigates' and names the exact resource ('current Safari tab') and action ('back to the previous page'). This clearly distinguishes it from sibling tools like safari_navigate or chrome_go_back.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 via the action itself but does not explicitly state when to use this tool over alternatives like chrome_go_back or safari_navigate. There is no mention of exclusions or alternative tools, so 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.
safari_historySafari HistoryARead-onlyInspect
Lists or searches the user's Safari browsing history (local SQLite, read-only — no page is opened). Optional query matches the URL or page title (case-insensitive substring). Returns url, title, visit_count and last_visit (ISO), newest first. Requires Full Disk Access. For Chrome use chrome_history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return (default 50, max 200). | |
| query | No | Substring to match against the URL or page title. Omit to list the most recent history. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the local SQLite data source, that no page is opened, the return fields and ordering, and the access prerequisite. This is rich behavioral context with 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?
Four sentences deliver purpose, safety, parameter behavior, return details, access requirement, and a sibling alternative—no filler. The most critical 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 lacking an output schema, the description fully specifies return values (url, title, visit_count, last_visit), ordering (newest first), and all parameter behavior. This is complete for a two-parameter read-only 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 both parameters, giving a baseline of 3. The description adds semantic detail by specifying that query performs a case-insensitive substring match on URL or title, which is not in the schema, and clarifies the listing behavior when omitted.
Input schemas describe structure but not intent. Descriptions should explain 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 or searches') with a clear resource ('user's Safari browsing history') and explicitly distinguishes from the sibling tool chrome_history. It also notes the read-only nature, 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?
It explicitly states when to list vs. search (omit query for recent history), notes the Full Disk Access requirement, and directs users to chrome_history for Chrome. This provides clear when-to-use and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_list_tabsSafari List TabsARead-onlyInspect
Lists every open tab across all Safari windows with title, URL, and whether it is active.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tabs | 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, covering the safety profile. The description adds behavioral context by specifying the scope ('every open tab across all Safari windows') and the included fields (title, URL, active status), which goes beyond annotation basics. No contradictions found.
Agents need to know what a tool does to the 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 action, scope, and output fields without any filler. Every piece of information earns its place, 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 zero-parameter tool with an output schema and clear annotations, the description is complete. It covers the scope and return content, and the output schema handles detailed return values, so no 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 0 parameters, so the description cannot add parameter-specific meaning. Baseline for 0 parameters is 4; the description appropriately focuses on the output rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: 'Lists every open tab across all Safari windows' with specific output fields (title, URL, active status). It uses a specific verb and resource, and distinguishes from similar siblings like safari_search_tabs and safari_read_tab by emphasizing the comprehensive scope of all windows and tabs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (obtain all open tabs) but does not explicitly mention when to use this tool versus alternatives. It lacks statements like 'To search for a specific tab, use safari_search_tabs instead,' so the 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.
safari_query_selector_allSafari Query Selector AllARead-onlyInspect
Runs document.querySelectorAll in the current Safari tab and returns a compact summary of each match.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 50 | |
| selector | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| result | 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 that it returns a 'compact summary' of matches, but this is output shape rather than a behavioral trait. No additional caveats (e.g., invalid selectors, page state requirements) are disclosed, so the description adds minimal 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?
The description is a single, front-loaded sentence that states the action, context, and output type without any filler. 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 read-only tool with an output schema and safety annotations, the description is largely complete. It clearly identifies the target browser and action, but it omits details about the limit parameter's effect and any potential edge cases, which 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 description coverage is 0%, so the description must compensate. It implicitly explains 'selector' by referencing querySelectorAll, but it does not explain the 'limit' parameter at all. With only two parameters and one unexplained, the description only partially addresses 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?
The description uses a specific verb ('Runs') and identifies the resource ('document.querySelectorAll in the current Safari tab'), clearly distinguishing it from sibling Safari tools and the analogous Chrome tool. It also states the output ('compact summary of each match'), 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 implies the tool is for querying DOM elements in the current Safari tab, but it does not explicitly state when to use it over alternatives like chrome_query_selector_all or safari_read_tab. There is no explicit 'when/when-not' guidance, though the context is clear from the name and phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_read_tabSafari Read TabARead-onlyInspect
Reads the rendered text content of a Safari tab. Identify the tab either by url_match (substring match against URL; first hit wins) or by window_index + tab_index (from safari_list_tabs). Text is capped at max_bytes (default 100 KB). Pass include_html: true to also get the raw HTML source. Pass include_links: true to extract all links with their href and text (useful for following navigation in SPAs like dashboards).
| Name | Required | Description | Default |
|---|---|---|---|
| max_bytes | No | Max bytes of text (and html) to return (default 102400) | |
| tab_index | No | Tab index from safari_list_tabs (default current tab of that window) | |
| url_match | No | Substring to match against the tab URL. Takes precedence over indices. | |
| include_html | No | Also return the HTML source (default false) | |
| window_index | No | Window index from safari_list_tabs (default 0) | |
| include_links | No | Extract all links with href + visible text (default false). Great for navigating SPAs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| html | No | |
| text | No | |
| links | No | |
| title | No | |
| truncated | No | |
| html_bytes | No | |
| link_count | No | |
| text_bytes | No | |
| links_error | No | |
| html_truncated | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors not in annotations: text capped at `max_bytes` (default 100 KB), `url_match` uses substring and 'first hit wins', and `url_match` takes precedence over indices. It also explains the effect of `include_html` and `include_links`. This adds meaningful context beyond the readOnly/destructive hints.
Agents need to know what a tool does to the 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 purpose is stated first, followed by identification methods and optional flags. Every sentence contributes information without redundancy, 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?
Given the tool has an output schema and comprehensive annotations, the description covers all necessary aspects: how to identify the target tab, the text limit, and optional HTML/link extraction. It even references a sibling tool (`safari_list_tabs`) for index sourcing, which is a helpful integration detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds extra semantics: `max_bytes` default, `url_match` substring/first-hit behavior, and the SPA navigation use case for `include_links`. These details go beyond the schema's 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 states a specific verb and resource: 'Reads the rendered text content of a Safari tab.' It clearly distinguishes from siblings by focusing on reading content, not listing or navigating. It also outlines identification methods, 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?
It provides explicit usage strategies: identify by `url_match` or by `window_index` + `tab_index`, with a reference to `safari_list_tabs` for index values. It also suggests `include_links` for SPAs. However, it does not explicitly contrast with alternative read-like tools such as `safari_query_selector_all`, so some inference is required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_search_tabsSafari Search TabsARead-onlyInspect
Searches the rendered text of every open Safari tab for a substring. Returns each matching tab with the surrounding snippet. Useful for 'do I have a tab open with X?' questions across dozens of tabs.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Substring to search for (case-insensitive) | |
| context | No | Characters of context around each match (default 120) | |
| max_tabs | No | Max tabs to scan (default 30). Higher = slower. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | |
| query | No | |
| scanned | 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, and the description adds that it searches 'rendered text' and returns 'each matching tab with the surrounding snippet', disclosing the return format and scope. 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?
Two sentences, front-loaded with action, and every sentence earns its place. The description is efficient and free of 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 an output schema present, the description doesn't need to detail return structure, and it covers the core behavior, use case, and scaling concern. Slightly missing explicit performance implications or alternatives, but schema and annotations fill the gaps well.
Complex tools with many parameters or behaviors need more documentation. 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 the description does not elaborate on parameter details beyond the schema. The mention of 'surrounding snippet' clarifies the context parameter's purpose, but the schema already covers this. Baseline for full schema coverage 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 specific action ('Searches the rendered text of every open Safari tab for a substring') and the resource (Safari tabs). It distinguishes from sibling tools like safari_list_tabs and safari_read_tab by focusing on search behavior and returning matching tabs with snippets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 ('do I have a tab open with X?') and suggests it scales across dozens of tabs. It does not explicitly mention alternatives or when not to use, but the tool name and Safari-sibling context make the platform-specific scope clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_setup_checkSafari Setup CheckARead-onlyInspect
Reports whether Safari is ready for interactive tools (safari_click, safari_type, safari_evaluate_js). Returns setup instructions if JavaScript from Apple Events is not enabled.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| tabs_open | No | |
| instructions | No | |
| ready_for_js_tools | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a safe, read-only operation. The description adds useful context about the behavior: it returns setup instructions if JavaScript from Apple Events is not enabled, which helps the agent anticipate the tool's response and side-effect-free 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 purpose, and every sentence adds value. There is no fluff or redundancy, 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?
Given the tool's simplicity (zero parameters, output schema present, read-only annotations), the description fully covers the necessary context. It explains the purpose, the prerequisite condition, and the fallback behavior, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has no parameters, and the schema is empty. The description appropriately does not include parameter details, and the baseline for zero-parameter tools is 4. No additional parameter semantics 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's function with a specific verb ('Reports') and resource ('whether Safari is ready'), and explicitly distinguishes it by naming the interactive Safari tools it supports. It is not tautological and clearly differentiates from sibling setup checks like chrome_setup_check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 (before using Safari interactive tools like safari_click, safari_type, safari_evaluate_js) and what it returns when setup is incomplete. It does not explicitly state when not to use it or mention alternatives, but the context is clear enough for an agent to infer the appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_typeSafari TypeAInspect
Sets the value of an input/textarea matching a CSS selector and fires input/change events.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | true | |
| value | Yes | ||
| selector | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | No | |
| result | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context by specifying that input/change events are fired, which is important for triggering JavaScript listeners. It also clarifies that the tool sets the value directly rather than simulating keystrokes. This goes beyond the annotations, though it omits details about the 'clear' 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, well-structured sentence that immediately states the action and target. It is minimal and effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 simplicity of the tool and the existence of an output schema, the description is mostly adequate. However, it lacks usage guidance and leaves the 'clear' parameter undocumented, making it incomplete for an agent to use effectively without additional inference.
Complex tools with many parameters or behaviors need more documentation. 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 clarifies that 'selector' is a CSS selector and 'value' is the string to set, but the 'clear' parameter is not described. With no schema description coverage, the function of 'clear' remains ambiguous despite its default 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 function: setting the value of an input/textarea via CSS selector and firing input/change events. This distinguishes it from sibling tools like safari_click or safari_fill_form by specifying the exact target and event 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?
No guidance is provided on when to use this tool versus alternatives such as safari_fill_form or chrome_type. The description does not mention use cases, exclusions, or differences from similar typing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
safari_wait_forSafari Wait ForARead-onlyInspect
Polls the current Safari tab until a CSS selector appears, or until text_match appears (anywhere on the page, or inside selector if you also pass one). Pass at least one of selector/text_match. Useful after safari_click to wait for the next page or a modal to render.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | No | CSS selector to wait for (optional if text_match is given) | |
| text_match | No | Text to wait for. With `selector`, must appear inside that element; without it, anywhere on the page. | |
| timeout_ms | No | Max time to wait (default 10000 = 10s, max 30000) |
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, covering safety. The description adds that the tool polls/wait for conditions and clarifies text_match scoping ('anywhere on the page, or inside selector if you also pass one'). It doesn't detail timeout behavior, but that is partially in the schema via timeout_ms.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loads the main behavior, and avoids repeating schema/annotation information. Every word serves a purpose, making it 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?
Given the 3 optional parameters, full schema descriptions, annotations, and an output schema, the description covers the core behavior, a key use case, and parameter constraints. There is a slight ambiguity about the exact success condition when both selector and text_match are provided, 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%, so parameters are well documented. The description goes further by explaining the relationship between selector and text_match (text scope changes when selector is also provided) and the at-least-one constraint, adding semantic 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 verb 'Polls' and the resource 'current Safari tab', and specifies the completion condition with `selector` or `text_match`. It distinguishes itself from sibling tools by explicitly targeting Safari, 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 a clear use case ('Useful after safari_click to wait for the next page or a modal to render') and a prerequisites rule ('Pass at least one of selector/text_match'). However, it does not mention when not to use it or call out alternatives like chrome_wait_for, so it stops short of full exclusion guidance.
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. 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 | ||
| 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?
The description reveals a performance-relevant behavior (scanning all accounts vs one) which is not covered by annotations. However, annotations already declare destructiveHint=false, and the tool writes to disk—a meaningful side effect. The confirm parameter implies user confirmation behavior that is not explained. There's no mention of whether this overwrites existing files or what happens on failure. The description adds some behavioral context but there are gaps given this is a write-to-disk 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 coherent sentences with no wasted words. The essential purpose is stated first, then the account/mailbox guidance. It's appropriately brief, though the confirm and destination parameters could merit one more sentence without bloating it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is an output schema, and the tool has 6 parameters with 0% schema coverage. Sibling tools include list_emails/search_emails which cross-reference well. However, the tool writes files to disk with a confirm boolean and destination path—these are meaningful side effects that deserve more explanation. The description covers the account-targeting optimization but not the full behavioral surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does explain account and mailbox (that they come from list_emails/search_emails and improve lookup targeting). However, the description doesn't explain message_id, attachment_name, destination, or confirm semantics—especially what 'confirm: false' default means behaviorally. The confirm parameter is non-obvious and undocumented. Partial compensation for the 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?
The description states 'Saves an attachment from an email to disk' with a specific verb (saves) and resource (attachment from email). It clearly distinguishes from list/search/read email tools, and the 'to disk' target clarifies the sink. Could be more specific about the exact output location behavior but the core purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises passing account= and mailbox= (sourced from list_emails/search_emails) so the lookup targets one account instead of scanning all. This gives clear when-to-use context about performance optimization. However, it doesn't explicitly state when NOT to use this tool or mention alternatives, though the account-targeting guidance is genuinely useful.
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). | |
| show_cursor | No | Default true. |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-readonly, non-destructive. Description adds valuable behavioral context: requires permission, never silent no-op, returns explicit permission_required error. Also describes the behavior of second start returning already_recording. 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?
Concise four sentences, front-loaded with action and target. Every sentence adds value: core action, session limitation, output description, and permission requirement. No redundant or missing 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 still explains return of session_id and error cases. Covers all key aspects: parameters, behavior, errors, and links to related tools (record_marker, screen_record_stop). Complete for a start-recording 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%, baseline 3. Description adds useful defaults (fps=60, show_cursor=true, output_path default temp file) and clarifies the target object structure, especially the region format as global points. Adds 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?
Clearly states it begins a screen recording of a display, window, or region using ScreenCaptureKit. Differentiates from siblings like screen_record_stop and record_marker by mentioning the returned session_id and the single active session constraint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 use: start a recording, mentions the single session limitation and error on second start. Also notes the required Screen Recording permission and the explicit error behavior. Lacks explicit when-not-to-use alternatives beyond the single session rule.
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. 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). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint, destructiveHint), the description adds that failure yields permission_required, never a blank image. This is valuable behavioral context, though more on formats or limitations could improve 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?
Two sentences: first states the core action, second adds a critical permission constraint. No redundant words, front-loaded for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and nested target object. The description omits the return value (saved PNG path) and that no output_path defaults to a temp file. Partially complete but has 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 50% (only output_path documented). The description adds no detail about how to use target parameters (kind, region, window_id, display_id). It does not compensate for the undocumented schema properties.
Input schemas describe structure but not intent. Descriptions should explain 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 captures a single frame to PNG for display, window, or region. This distinguishes it from tools like screen_record_start (video) and web_screenshot (browser-specific).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 mentions the Screen Recording permission requirement and the error behavior when lacking it. Does not directly compare to sibling tools like web_screenshot for browser content, but context is adequate.
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 by keyword, sender, or date. For a Microsoft 365 mailbox NOT added to Mail.app, use m365_search_emails. On machines with 3+ accounts, pass account= (from list_email_accounts) to search a specific account and avoid timeouts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 20 | |
| query | Yes | ||
| account | No | ||
| mailbox | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No | |
| next_actions | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and destructiveHint=false already in annotations, the description adds useful behavioral context: Apple Mail scope, account-specific searches to avoid timeouts, and search criteria (keyword, sender, date). This goes beyond 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 sentences pack scope, alternatives, and parameter guidance without wordiness. Front-loaded with the primary use case, making it easy to skim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, existing annotations, and presence of an output schema, the description covers search scope, query fields, alternative tool, and account handling—sufficient 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?
The schema has no parameter descriptions (0% coverage), so the description must compensate. It adds meaning for query (keyword/sender/date) and account (specific account, from list_email_accounts), but does not explain limit or mailbox parameters. This is partial but 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?
Description uses specific verb 'search' with resource 'emails' scoped to Mac Apple Mail, explicitly distinguishing from m365_search_emails for Microsoft 365 mailboxes. This provides clear differentiation 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?
Explicitly states when to use (find specific emails on this Mac's Apple Mail), when not to use (M365 mailbox not in Mail.app -> use m365_search_emails), and gives account parameter guidance for multi-account machines to avoid timeouts.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 20 | |
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| query | No | |
| results | No | |
| next_actions | 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, so the safety profile is covered. The description adds the behavioral nuance that searches both title and content, but does not disclose return format, pagination, or default limit 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 filler words, front-loading the verb and resource. It is appropriately sized for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists and the tool is a simple read-only search, the description covers the core functionality. Some gaps remain around limit semantics and matching behavior, but the annotations and output schema reduce the need for more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains that the query parameter searches by title or content, which adds meaning to that parameter. However, the 'limit' parameter is not described, and with 0% schema description coverage, the description only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain 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 'Searches' and identifies the resource 'Apple Notes' with scope 'by title or content.' This clearly distinguishes it from siblings like list_notes and read_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when the user wants to find notes by a query, but it does not explicitly state when to prefer this over list_notes or read_note, nor does it mention any exclusions or alternatives. The context is clear but lacks direct sibling differentiation.
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 app that gives access to Mail, Calendar, Contacts, Teams, OneDrive, Notes, Reminders, and 100+ tools on the user's Mac (data stays local). A user would invoke this to install LMCP or reconnect it. Pass os ("macos", or windows/linux/ios/android). 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. Windows/Linux/mobile → waitlist (macOS-only today). | |
| 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?
Annotations already declare readOnlyHint=true, and the description adds context about returning a link and setup steps, with data staying local. No contradictions, and the behavior is well explained 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 concise (two sentences plus a usage line) and front-loaded with the core function. 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?
For a simple install tool, the description provides enough context about what it returns (link and steps) and when to use it. No output schema is provided, but the description sufficiently covers the return 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 coverage is 100%, and the description adds significant value: it explains platform-specific behavior for os, usage for step (e.g., 'if stuck'), and the role of email. This goes beyond the schema enums.
Input schemas describe structure but not intent. Descriptions should explain 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 personalized LMCP install link and setup steps, and differentiates it from siblings like lmcp_state or configure_clients by focusing on installation/reconnection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 invoke (to install or reconnect) and what to pass (os, optional email/step/issue). It also implies platform constraints but does not list alternatives or 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.
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 across locally-cached channels using full-text substring matching. Only messages that Slack Desktop has synced to disk are searched — this is not the Slack cloud search API. Optionally restrict search to a specific channel_id.
| 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 |
|---|---|---|
| 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 declare readOnlyHint=true and destructiveHint=false, but the description adds valuable behavioral context: the search is limited to what Slack Desktop has synced to disk, and it uses substring matching. This goes beyond the annotations and helps the agent understand the tool's limitations and data 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?
Two sentences, front-loaded with the core action, and no wasted words. The key caveat about local caching is integrated naturally. Excellent structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 does not need to explain return values. It provides the essential limitation (local cache) and the optional filter (channel_id), making it complete and actionable for an agent. The description fully covers the tool's scope and 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 coverage is 100% with each parameter already documented (query, limit, channel_id). The description adds some context by mentioning 'full-text substring matching' and 'restrict search to a specific channel_id', but these largely overlap with the schema descriptions. It does not significantly enhance parameter understanding 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 searches Slack messages with a specific scope ('locally-cached channels') and matching method ('full-text substring matching'). It distinguishes itself from the Slack cloud search API, making its purpose explicit and differentiating it from sibling tools like search_messages or slack_read_channel_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 context on when to use this tool: for searching locally cached messages, and explicitly states it is not the cloud search API. It mentions an optional channel_id restriction but does not name alternative tools or give explicit 'use this instead' guidance. Still, the context is strong enough to guide selection.
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 | |
| channel_id | Yes | Channel ID from teams_list_channels |
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 indicate non-read-only and non-destructive, but the description adds crucial behavioral details: the required permissions, the prerequisite of prior list calls, and the two-step preview/confirm mechanism. It does not mention potential errors or what the preview contains, but the added context is valuable and consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, front-loaded with the core purpose, followed by requirements and usage flow. Every sentence earns its place with no verbose filler, making it easy to scan and understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 involves a write operation with a confirmation step, and the description covers all essential context: permissions, ID sources, and the preview/confirm behavior. The output schema exists, so return values need not be explained. The description is sufficiently 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 coverage is 100%, so the baseline is 3. The description enhances the schema by linking team_id/channel_id to their originating list tools and explicitly clarifying that confirm=true is needed to send rather than preview. This adds meaningful context to the parameters beyond their 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 function: 'Sends a text message to a Microsoft Teams channel via Graph API.' It uses a specific verb ('sends') and resource ('channel'), and the mention of 'channel' distinguishes it from the sibling tool teams_send_message, which handles chat 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 explicit usage context: it requires connect_m365_account with specific permissions, dictates that team_id and channel_id must come from teams_list_teams / teams_list_channels, and explains the preview-then-confirm flow ('First call returns a preview; set confirm=true to send'). This gives clear when-to-use and how-to-use guidance, effectively distinguishing it from alternatives.
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.
| 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?
The description goes well beyond the annotations by disclosing that the token is read fresh from Teams' cookies, that the first call returns a preview, and that confirm=true is required to actually send. These details give the agent crucial behavioral expectations not present in 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, no redundancy. Purpose is stated first, followed by essential prerequisites and the write operation's confirmation flow. 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 moderate-complexity tool with an output schema, the description covers the key operational aspects: purpose, prerequisites, chat_id provenance, and confirmation behavior. It doesn't discuss error cases or rate limits, but those are not necessary given the output schema and annotations.
Complex tools with many parameters or behaviors need more documentation. 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 nuance beyond the schema, particularly the preview/confirm flow and the explicit warning that chat_id must come from a prior list call. This elevates the score to 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 'Sends a text message to a Microsoft Teams chat or channel' with a specific verb and resource. However, it does not differentiate from the sibling tool 'teams_send_channel_message', which may cause ambiguity about which tool to use for channels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 usage context: requires Teams to be running/signed in, mandates chat_id from previous teams_list_chats call, and explains the two-step confirmation process. It does not explicitly mention alternatives or exclusions, 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.
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}}. 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?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not elaborate on side effects of clicking, such as potential state changes or destructive actions. It fails to disclose what happens on failure (e.g., element not found), leaving behavioral gaps.
Agents need to know what a tool does to the 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 covering purpose, inputs, return value, and requirements. 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 the tool has no output schema, the description adequately explains the return value. It covers key usage nuances (double-click, button types) but omits error handling and precedence rules for input parameters, which would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, and the description adds context beyond the schema, such as clicking at the center of an element and enumerating button options. However, it does not fully describe all possible parameter interactions (e.g., when both element_ref and coords are provided).
Input schemas describe structure but not intent. Descriptions should explain 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 clicks an element by reference or a screen coordinate, with specific details on button and count options. It distinguishes between two modes (element vs coords) and is highly specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 requirement of Accessibility permission but does not provide explicit guidance on when to use this tool versus sibling tools like chrome_click or safari_click. It lacks when-not-to-use scenarios or alternative recommendations.
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, enabled, focused. 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?
Despite annotations already declaring readOnlyHint=true and destructiveHint=false, the description adds substantial behavioral detail: returns an opaque element_ref plus role, label, bounds, enabled, focused; explains found=false vs app_not_found error semantics; and states the Accessibility permission requirement. This provides valuable beyond-annotation 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 efficient and front-loaded: starts with the general purpose, then specifics of search, scoping, return value, error handling, and permission. Every sentence adds value with no filler. The semi-colon-separated return and error details are dense but well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 6 parameters and no output schema, the description covers the essential aspects: what it does, how to scope, what it returns (with field names), error conditions, and permission requirements. It is complete enough for an agent to invoke it correctly without further documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful context by explicitly mentioning the key parameters role and label, and scoping via app_bundle_id or window_id, reinforcing how to use them together. It does not need to explain every parameter since the schema already does, but it elevates understanding of the core search criteria.
Input schemas describe structure but not intent. Descriptions should explain 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 'Finds' and identifies the resource as 'an element in an app's accessibility tree', scoped by role and/or label. It clearly distinguishes itself from sibling UI tools like ui_click, ui_get_element, and ui_read_tree by focusing on the discovery step, and from web automation tools by explicitly stating 'native app's interface'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 use: GUI automation of native apps, scoping via app_bundle_id or window_id, and the returned element_ref being usable by ui_click/ui_get_element, which implies a workflow of finding before acting. It does not explicitly name alternatives or exclusions, but the contextual guidance is strong 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.
ui_get_elementUi Get ElementARead-onlyInspect
Re-resolves a previously returned element_ref (its bounds/state may have changed). Returns role, label, bounds, enabled, focused, value. 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?
Annotations indicate readOnlyHint=true and destructiveHint=false. The description adds that it re-resolves state and can return stale_element if the element no longer exists, providing useful 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?
Two efficient sentences: first states purpose and context, second lists returns and error state. 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?
For a single-parameter tool, the description covers purpose, return values, and error case. Missing output schema is compensated by listing return fields in text.
Complex tools with many parameters or behaviors need more documentation. 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 no description for element_ref (0% coverage), but the description explains it is a 'previously returned element_ref', adding semantic meaning about its origin and usage.
Input schemas describe structure but not intent. Descriptions should explain 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 re-resolves a previously returned element_ref, lists return values (role, label, bounds, etc.), and distinguishes from sibling tools like ui_find_element or ui_click by its specific 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?
It explicitly says when to use (re-resolve a previous element_ref) and mentions the stale_element error case. It does not explicitly state when not to use but the context is clear.
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. 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?
Mentions permission requirement and error case ('unknown_key'), but does not disclose side effects or behavior details like press order or timing. Annotations do not contradict, but description adds moderate 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?
Two efficient sentences: first states purpose with examples, second covers modifiers and error handling. 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?
For a simple tool with one parameter and no output schema, the description fully covers functionality, examples, error handling, and 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?
Despite 100% schema coverage, the description adds meaningful context by explaining the modifier+key format and listing modifiers, going beyond the schema's example string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Title and description clearly state 'Sends a key combination' with specific examples, distinguishing it from siblings like ui_type and ui_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 examples and lists modifiers, but lacks explicit guidance on when to use this tool vs alternatives (e.g., ui_type for text input). Does not state exclusions.
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. 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?
Discloses that it sends real key events to trigger validation/handlers, and that it can focus an element first. This adds value beyond annotations, which only indicate non-readonly and non-destructive. 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 front-load the primary action, then add behavior and prerequisite. No unnecessary words; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two parameters and no output schema, the description covers the main behavior, optional focusing, real key events, and permission requirements. Missing edge cases like element not found, but still 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?
Both parameters have schema descriptions (100% coverage). The description adds clarification that element_ref is focused before typing, which enhances understanding beyond the schema's basic 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 types text into the focused control, with an optional focus step via element_ref. It implies general UI automation but does not explicitly differentiate from browser-specific siblings like chrome_type or safari_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?
Mentions a prerequisite (Accessibility permission) but provides no guidance on when to use this tool versus alternatives (e.g., ui_type vs chrome_type). The 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.
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?}.
| 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?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description adds context: it is deterministic, polls until state or timeout, and treats timeout as an explicit error. The return shape is detailed. 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 extremely concise (two sentences) and front-loaded with the core purpose. Every sentence earns its place, stating what it does, how it behaves (polling, timeout error), and the return format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 behavior and return format but lacks explanation on how the element identification parameters (role, label, match) interact. It also does not mention that no parameters are required. Given no output schema, the return structure description helps, but more context on param usage 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?
Schema description coverage is low (38%), with only 2 of 8 parameters having descriptions. The tool description does not elaborate on any parameter, leaving the agent to infer usage from schema enums and names. It adds no 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?
The description clearly states it is for deterministic synchronization and replacing sleeps, with polling for an element state. It specifies the states and timeout behavior. However, it does not explicitly differentiate from sibling wait tools like safari_wait_for or web_wait_for, which are for specific contexts, but the UI prefix implies the 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 description says 'replaces all sleeps,' implying it should be used over arbitrary waits. However, it provides no explicit guidance on when not to use this tool versus sibling wait tools (e.g., for web elements) or alternatives. The context is clear but exclusions are missing.
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.
| 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) | |
| 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?
Annotations already indicate non-read-only behavior. The description adds the confirm=true requirement, which is a meaningful behavioral gate, and notes the ability to move reminders between lists. No contradiction with annotations, and the added context is useful.
Agents need to know what a tool does to the 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 clear front-loading of the primary action. No filler or redundant wording; 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?
With a rich schema and output schema present, the description covers the essential context: how to obtain the reminder ID, the confirmation gate, and supported update fields. It is complete for a mutation tool with well-documented 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 100% with descriptions for all 7 parameters. The description provides a brief summary of editable fields but repeats the confirm requirement already in the schema. It adds minimal value beyond the structured 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 'Updates an existing reminder in Reminders.app' with a specific verb and resource. It enumerates the modifiable fields (title, due date, notes, priority, list_name), distinguishing it from sibling tools like create_reminder or 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?
It provides a concrete prerequisite ('Get reminder_id from list_reminders') and a required confirmation flag ('Requires confirm=true'). It implies the tool is for existing reminders, but does not explicitly name alternatives like create_reminder for new reminders.
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 | |
| 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 confirm it's not read-only or destructive; the description adds behavioral details: it operates on source-pixel coordinates, supports optional time windows, and returns the output path. It does not specify overwrite behavior or that it creates a new file, but the return path implies this. This is sufficient 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?
Two sentences pack in purpose, usage, coordinate system, time handling, and return value. Every clause adds value, and the structure front-loads the core function. 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 has no output schema, so the description correctly explains the return value ('Returns the output path'). It covers coordinate origin, time optionality, and a use case. It doesn't mention error conditions or output format, but for a moderately simple tool this seems adequate. A 4 is appropriate.
Complex tools with many parameters or behaviors need more documentation. 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 beyond the schema by explaining the rect structure '[{x,y,w,h, start_ms?, end_ms?}]' and how to omit times for the whole clip. This extra semantic guidance for the regions parameter earns 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: 'Pixelates/blurs one or more rectangles over the video' with a specific use case (redacting PII). It is distinct from sibling tools like video_trim, video_concat, and video_export_gif, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: redacting PII before publishing a screen recording, and suggests pairing with a marker timeline's bounds. It does not explicitly contrast with alternatives or state when not to use, but the intended use case is well-defined.
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). |
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 that it creates a NEW file (non-destructive to originals) and returns 'output path + duration', providing transparency beyond annotations. 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 two concise sentences: first states purpose, second gives usage hint and return info. No wasted words, well 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 2-parameter tool with no output schema, the description covers purpose, usage hint, and return value. It is largely complete, though it could mention error handling or order constraint more explicitly (already says 'in order').
Complex tools with many parameters or behaviors need more documentation. 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 described). The description reiterates the schema info (ordered list, output path) and adds return value info but does not significantly enhance parameter meaning beyond what's 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 it stitches multiple videos end-to-end in order into a new file, with an example (assemble separate acts). The verb 'stitches...into one NEW file' distinguishes it from siblings like video_trim or video_blur_region.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a usage hint ('All inputs should share a resolution for a clean result') but does not explicitly state when to use this tool vs alternatives (e.g., video_trim, video_export_gif) or when not to use it. The context is implied but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). | |
| start_ms | No | Slice start (default 0). |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses key behavioral traits: default fps and width, auto-height scaling, slice support via start_ms/end_ms, optimization, and return values. Annotations (readOnlyHint=false) are consistent; description adds valuable 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?
Two sentences with no extraneous words. Front-loaded with main action, followed by parameter details and return info. Every sentence provides 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 tool complexity (6 parameters, no output schema), description sufficiently explains function, parameters, defaults, return values, and use case. No missing critical 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 has 100% parameter coverage, providing baseline 3. Description adds meaning: explains that height auto-scales to maintain aspect ratio, clarifies slice concept, and reiterates defaults. This enhances understanding beyond raw 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 video to a looping GIF. Distinguishes it from sibling video tools (e.g., video_trim, video_concat) which serve different purposes. The verb 'exports' and resource 'video to GIF' are specific and 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?
Includes explicit usage context ('for README/social'), guiding agents to appropriate use cases. Does not explicitly exclude scenarios or mention alternatives, but the unique GIF-export nature makes usage clear.
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 |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors beyond annotations: 'Takes the LARGEST crop of that aspect that fits, centered on `focus`... and clamped to the frame. Audio passes through. Returns the output path + new dimensions.' This is valuable since annotations are all false and provide no safety context. It doesn't mention overwrite behavior but is otherwise 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?
Three sentences, front-loaded with the main action, then key details. Every sentence serves a purpose 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 moderately complex tool with complete schema coverage and no output schema, the description covers the crop algorithm, focus handling, audio pass-through, and return value. It could mention edge cases (e.g., file overwrite) but 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?
The input schema already describes all 4 parameters (100% coverage). The description adds algorithmic meaning, such as how 'focus' is used (default center, clamped) and the 'largest crop' logic for 'aspect'. This goes beyond the schema's basic 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 and resource: 'Crops a video to a target aspect ratio... around a focus point — for social clips.' It clearly distinguishes itself from sibling tools like video_trim (duration), video_concat (joining), and video_blur_region (blurring).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 clear context ('for social clips') and the behavior makes it obvious when to use it (reframing to a new aspect ratio). However, it does not explicitly state alternatives or when not to use it, e.g., 'use video_trim for cutting duration.'
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). | |
| 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?
The description discloses that the operation is non-destructive (new file, never overwrites input), which aligns with destructiveHint=false. It also mentions audio preservation and the return of output path and duration. This adds value beyond the sparse 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 an example, all highly relevant. It front-loads the core action and key constraints. 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 the tool's moderate complexity (multiple ranges, concatenation, output path), the description covers input, output, ranges syntax, non-destruction, audio, and return values. It lacks details on error handling or performance, but is sufficient for most use cases.
Complex tools with many parameters or behaviors need more documentation. 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 explains the structure and order of the ranges parameter with a concrete example, and notes the default output path. This adds meaning beyond the input schema, which only lists parameter names and types. With 100% schema coverage, the baseline is 3, but the description enriches 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 clearly states the tool trims a video to specified time ranges and concatenates them into a new file. It distinguishes itself from siblings like video_concat (which concatenates entire videos) and video_blur_region (which adds blur effects).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 a concrete example of dropping a dead segment and emphasizes that the input is never overwritten. While it doesn't explicitly list alternatives, the usage is clear: use for cutting out segments. The mention of audio being carried along adds practical context.
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 the resulting URL/title.
| 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?
Discloses key behavior beyond annotations: preview-then-confirm for forms, fresh resolution of target each call, and return of URL/title. No contradiction with annotations (readOnlyHint=false, 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?
Three sentences, no waste. Front-loaded with purpose, each sentence adds essential detail. Perfectly concise for the complexity described.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description specifies return of URL/title. The preview-confirm mechanism is fully explained. Could mention error behavior if element not found, but not critical given typical tool 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?
Schema coverage is 100%, but description adds meaning: 'resolved fresh each call' for target, and clarifies confirm parameter's role in form submission. This goes beyond 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?
Clearly states 'Clicks an element on the current page' with specific verb and resource. Distinguishes from sibling click tools (chrome_click, safari_click) by being web-specific and details form vs plain click 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?
Provides explicit guidance for form-submitting clicks: preview first, call again with confirm:true. Implicitly tells when not to use confirm (plain links/buttons). Lacks explicit comparison to alternatives like ui_click, but sufficiently clear within context.
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 — 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?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that it returns an explicit no_session error if the session is not open, which goes beyond annotations. 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 sentences, front-loaded with the main action, efficiently covers mode options and error behavior 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?
Given that an output schema exists (not shown but indicated), the description need not cover return values. It adequately covers purpose, mode semantics, and error handling for a simple read operation. The tool has only 2 optional parameters, and the description provides sufficient context 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 input schema has 100% description coverage for both parameters (mode and session). The description adds value by explaining the default mode ('text') and clarifying that 'a11y' is best for deciding what to click, which helps the agent choose 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 clearly states it reads the current page of a web session, enumerates three output modes (text, a11y, html), and the a11y mode is explicitly differentiated as 'best for deciding what to click'. This distinguishes it from sibling tools like web_click, web_navigate, and platform-specific read tools (chrome_read_tab, safari_read_tab).
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 guidance on when to use each mode: 'text' for visible text, 'a11y' for interaction planning, and 'html' for raw DOM. It also states error behavior (no_session error). However, it does not explicitly state when not to use this tool versus alternatives (e.g., when to use web_extract or web_find instead).
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, so web_login/web_navigate can reopen it later without signing in again.
| 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?
Disclosure of window closing and login preservation adds context beyond annotations. Annotations (readOnlyHint=false, destructiveHint=false) are consistent with description. 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 sentences, no extraneous words. Front-loaded with primary action, then key behavioral 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?
Adequate for a simple close operation. No output schema, but description addresses common concerns about login persistence. Could optionally mention that the window/tab closes, but implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers the single parameter with description and default. Description adds minimal extra value (linking session to login profiles). Baseline 3 due to 100% 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?
Clearly states it closes a web-automation session's window and frees it. Mentions login persistence, distinguishing it from related tools like web_login, web_navigate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 that login remains saved, so web_login/web_navigate can reopen without re-signing in. Provides context for when to close vs. alternatives, though no explicit 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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The text to type. | |
| 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 indicate non-read-only and non-destructive behavior, which the description supports by stating it types text. The description adds value by clarifying that submission is a separate step. However, it omits details on error handling or what happens if the target is not found.
Agents need to know what a tool does to the 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 sentence states the core action, and the second provides critical guidance about submission. Every word serves a purpose, and it is front-loaded with the most important 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 simplicity of the tool (typing text into a field), the description covers the essential behavior and usage context. It does not explain return values (no output schema) or error handling, but for a straightforward input action, it is reasonably 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 descriptions for all parameters. The description adds extra meaning for 'target' by specifying it can be a CSS selector or visible label/placeholder. Other parameters are not elaborated beyond the schema, but overall the combination is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool types text into a form field on the current page, using a specific verb and resource. However, it does not differentiate from sibling browser-specific type tools (chrome_type, safari_type, ui_type), which share a similar 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?
The description provides clear context for when to use the tool (typing text) and explicitly states not to submit afterwards, directing the agent to use web_click. It does not, however, mention alternatives or when to prefer this over similar sibling tools.
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 ForARead-onlyInspect
Waits (polls, not a fixed sleep) until a JavaScript condition is truthy on the page, or times out. Use for SPA pages that hydrate after load, e.g. condition "document.querySelector('input[name=password]')". Returns met:true/false.
| Name | Required | Description | Default |
|---|---|---|---|
| session | No | Session name (default 'default'). | |
| condition | Yes | JS expression evaluated on the page; waits until it's truthy. e.g. document.querySelector('.feed') | |
| 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?
Annotations already mark the tool as read-only and non-destructive. The description adds that it polls (not sleeps) and returns met:true/false, which is useful but doesn't cover additional details like session handling or error behaviors.
Agents need to know what a tool does to the 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-load the core behavior, polling mechanism, use case, and return value. Every sentence adds information without 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?
For a simple wait tool with three parameters and an output schema, the description covers the polling behavior, return value, and typical use case. No missing details are critical for safe 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?
With 100% schema coverage, all parameters have descriptions in the schema. The description reiterates the condition parameter with an example but doesn't add significant 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 tool waits until a JavaScript condition is truthy on the page, distinguishing it from fixed sleep by noting it polls. The example clarifies usage for SPAs, and the verb-resource pair is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 for SPA pages that hydrate after load, providing a clear context. It stops short of explicitly excluding alternative wait tools, but the guidance is sufficient for an AI to infer when to use this tool.
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
- Flicense-qualityAmaintenanceConnect 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
Flicense-qualityCmaintenanceAI's home on your Mac: gives AI agents remote access to iMessage, Notes, Reminders, Contacts, and more via MCP.1- Alicense-qualityAmaintenanceEnables 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.455MIT

ToolPiperofficial
Alicense-qualityCmaintenance300+ 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.1MIT