Scribe Mail
Server Details
Email signature management finally simple and measurable. Built for teams & AI agents. Install consistent signatures company-wide in under a day. IT sets up once. Marketing takes over. AI agents assist. No employee installation. 12% average CTR on signature banners. Conversion tracking from click to revenue.
- Status
- Healthy
- Uptime
- 2.5% over 63 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- scribemail/claude-plugin
- GitHub Stars
- 0
TDQS
Scored across 67 tools
Most tools target a clearly distinct resource+action, and descriptions actively cross-reference siblings (install_signature vs install_signature_for_email, preview_signature vs get_signature_html, add_signature_recipients vs add_signature_recipient_entities). The main overlap is get_analytics_views and get_analytics_clicks, which return nearly identical breakdown payloads (view_count, click_count, clickthrough_rate), so an agent may not always know which to call.
The set is predominantly snake_case with predictable verb_noun patterns (create_*, update_*, delete_*, list_*, get_*, add_*, remove_*, set_*, publish_*). A few names break the pattern or use awkward suffixes (get_more_tools, read_docs_page, send_test_email, install_signature_for_email, add_signature_recipient_entities), but they remain readable and grouped.
At 67 tools, this is far past the 3-15 sweet spot and exceeds the rubric's extreme-mismatch threshold of 50+. Even allowing for legitimate sub-domains (signatures, campaigns, analytics, assets, teammates, docs), many micro-operations (separate install_for_email, variant reset, split analytics endpoints) could be consolidated.
Coverage is near-comprehensive CRUD/lifecycle across signatures, campaigns, teammates, emails, smart fields, assets, folders, and variants, plus analytics, visitor breakdowns, integrations, docs search, and feedback. Niche flows like content schema discovery, recipient rules, installation status, and publishing lifecycles are all represented, leaving no obvious dead ends.
Available Tools
67 toolsadd_signature_recipient_entitiesTarget signature at org unitsAIdempotentInspect
Target a signature at a batch of directory org units / groups (by uuid); everyone in them becomes a recipient. Returns the updated selection. Unknown entity uuids fail with 422.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| signature_id | Yes | The signature template's UUID (the `id` from list_signatures). | |
| integration_entity_ids | Yes | Org-unit/group uuids to target (from list_integration_entities). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description still adds real behavioral value: it discloses that unknown uuids fail with 422 and that the updated selection is returned, which annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the purpose, then side effect, then error behavior. 'Returns the updated selection' is mildly redundant given an output schema exists, but it costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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, full schema coverage, and an output schema, the description adds the missing behavioral pieces (recipient side effect, 422 on unknown uuids) and is complete enough to call correctly. Only the sibling-routing guidance is absent.
Complex tools with many parameters or behaviors need more documentation. Simple 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 each parameter is documented in the schema (signature_id, integration_entity_ids with source tool, context). The description adds only 'by uuid', which is marginal 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?
States a specific verb+resource: targeting a signature at a batched set of directory org units/groups by uuid, with the side effect named ('everyone in them becomes a recipient'). The 'batch of org units/groups (by uuid)' framing implicitly distinguishes it from the individual-recipient sibling add_signature_recipients, but that sibling is never named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance. The closest sibling, add_signature_recipients, is never mentioned, so the agent must infer from the 'org units / groups' framing when this batch variant is preferable to the individual-recipient one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_signature_recipientsAdd manual signature recipientsAIdempotentInspect
Manually assign a signature to specific email addresses (by email uuid). Use it to add named people one by one; use add_signature_recipient_entities to target whole org units or groups, set_signature_recipient_rules for smart-field conditions or all future emails, and remove_signature_recipients to undo. Additive and idempotent: the emails join the manual list, and org-unit and condition-based recipients are kept. When the signature's installation is on and a signature integration can push it, Scribe queues installation on its recipients' mailboxes right away. Returns the full updated selection; check who it reaches with list_signature_recipients. Needs the signatures:write scope; an unknown signature returns 404.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| email_ids | Yes | Email uuids to assign as manual recipients: the `id` from list_emails (or a teammate's `emails[].id` from list_teammates), not teammate ids. At least one is required (an empty list returns 422); if any uuid is unknown the whole batch fails with 422 and nothing is added. Duplicates and already-assigned emails are ignored. | |
| signature_id | Yes | The signature template's UUID (the `id` from list_signatures). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint, destructiveHint, readOnlyHint), the description discloses the additive semantics (org-unit and condition-based recipients preserved), the side effect that Scribe queues installation on recipients' mailboxes immediately, the 404 for unknown signatures, and the required signatures:write scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: the manual-assignment purpose leads, sibling routing and behavioral notes follow. Every clause carries information, though the routing and behavior sentences are somewhat packed together.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 an output schema present, the description covers the essentials an agent needs: additive/idempotent behavior, install side effect, error code, scope, and confirmation path via list_signature_recipients. Return format needn't be described since 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?
Schema coverage is 100% and the schema already explains uuid sources, batch-failure (422), and duplicate handling in depth. The description only restates "by email uuid", adding little beyond the schema, so the 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?
States a specific verb and resource ("Manually assign a signature to specific email addresses (by email uuid)") and immediately contrasts with add_signature_recipient_entities for org units, so an agent can distinguish it from siblings without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes: "use add_signature_recipient_entities to target whole org units or groups, set_signature_recipient_rules for smart-field conditions or all future emails, and remove_signature_recipients to undo." The when/when-not and alternatives are all named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_assetCreate an assetAInspect
Upload an image to the workspace's asset library. Provide EITHER file_base64 (+ filename) OR source_url — exactly one. For a file the user uploaded in chat (no public URL), send its bytes as file_base64; if you cannot read the raw bytes on this platform, ask the user for a hosted URL or reuse an existing asset from list_assets instead of guessing. Non-images, bad base64, oversized files (>15MB), or a disallowed URL return 422.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name (defaults to the filename). | |
| role | No | Optional role: company_logo, profile_picture, or banner. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| filename | No | Original filename (required when `file_base64` is given). | |
| source_url | No | Public http(s) URL the server downloads the image from (alternative to file_base64). Redirects ARE followed (each hop re-checked); hosts resolving to private/loopback addresses are blocked. If a fetch fails (some hosts block server-side downloads), pass the bytes as `file_base64` instead. | |
| file_base64 | No | Base64-encoded image bytes. Provide WITH `filename`, or use `source_url` instead. A `data:` URI, line-wrapped base64, or base64url is accepted as-is — the server unwraps it, so pass whatever your file-reading helper returned without re-encoding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (not read-only, open-world, not idempotent). The description adds valuable behavioral context beyond them: the 15MB size limit, and the specific failure modes (non-image, malformed base64, disallowed URL) that return a 422. This meaningfully helps an agent anticipate and handle errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then the input-mode rule, then error handling — a logical progression. Every sentence carries information (mode selection, fallback guidance, error conditions), though the final sentence is dense with edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values are covered by the output schema, so the description need not explain them. For an upload tool with multiple input modes and several failure paths, the description supplies exactly the context needed to invoke it correctly: which argument to use when, size/type limits, and fallback behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter in detail. The description reinforces the mutual-exclusivity rule ('exactly one' of file_base64 or source_url) and the filename pairing, but this largely restates what the schema already provides. Baseline 3 is appropriate when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: 'Upload an image to the workspace's asset library.' It is unambiguous what the tool does. However, it does not explicitly contrast its purpose against the create/update/delete_asset siblings — the named alternative (list_assets) is invoked for reuse rather than for purpose differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit conditions and alternatives: use file_base64 for a chat-uploaded file with no public URL, ask for a hosted URL or reuse from list_assets if raw bytes can't be read, and it warns against guessing. When-to-use and when-not-to-use are both covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_emailCreate an emailAInspect
Add an alias email address to a teammate. Only available when the workspace manages its own team list — if a directory integration (Google, Microsoft or Zoho Mail) drives teammates, this returns a 409 conflict. The address is validated (format, uniqueness, disposable/deny-list) → 422 on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Email address to add. Added as an alias — the teammate's primary is unchanged. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| teammate_id | Yes | UUID of the teammate to add the email to (the teammate `id`). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, open-world, non-destructive behavior; the description adds real value beyond them with the 409 conflict condition, the validation pipeline (format, uniqueness, disposable/deny-list), and the 422 failure mode. It stops short of stating what happens to existing aliases or any 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?
Three compact sentences with no filler: purpose first, availability constraint and its failure code second, validation outcome third. Every clause is an actionable fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no prose. For a 3-parameter creation tool with a non-trivial eligibility gate, the description covers purpose, precondition, and error semantics; nothing an agent needs before calling 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 3 (entity, format, and context-string) parameters are baseline-documented. The description goes beyond the schema by characterizing address validation (format, uniqueness, disposable/deny-list) and reinforcing that the alias leaves the primary address unchanged. The mandatory `context` parameter is left entirely to 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?
States a specific verb and resource: 'Add an alias email address to a teammate.' The alias framing distinguishes it from create_teammate (which adds a teammate) and update_email (which mutates an existing address), so the agent can route without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the when-not condition: only usable when the workspace manages its own team list, and that a directory integration (Google, Microsoft, Zoho Mail) yields a 409. It does not name the alternative path (e.g. sync_teammates or list_integrations) for directory-driven workspaces, which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_folderCreate a folderBInspect
Create a signature folder to organize signature templates. A blank name returns 422.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the new signature folder (required). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write semantics (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false). The description contributes one genuinely useful behavioral fact beyond the annotations — a blank name yields a 422 — but says nothing about permissions, duplicates, or nesting 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 short sentences, front-loaded with the action and purpose, with the validation caveat second. 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?
An output schema exists so return values need not be explained, and annotations cover safety. The description covers what it does plus one failure mode; only sibling routing and permission requirements are absent.
Complex tools with many parameters or behaviors need more documentation. Simple 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%, including a detailed 'context' parameter, so the schema carries the burden and the baseline is 3. The description's note that a blank name returns 422 adds a validation constraint, a small increment 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?
States a specific verb and resource ('Create a signature folder') and adds the organizing purpose, so it is distinguishable from update_folder and delete_folder. It stops short of explicitly naming siblings, so it lands at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to create a folder versus updating one or using list_folders, and no prerequisites or exclusions are given. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_marketing_campaignCreate a marketing campaignAInspect
Create a marketing campaign. name, start_time, end_time, and time_zone are required; a missing one returns 422. The campaign is created as a draft — use schedule_marketing_campaign to activate it. content is a block tree (a stack root whose children are blocks) strict-validated server-side, the same format as signature draft_content; smart_fields_conditions and signature_template_ids set the targeting.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Campaign name (required). | |
| content | No | Campaign block tree (ILayoutBlock): a `stack` root whose `children` are blocks. Strict-validated server-side. Omit to leave unchanged; null to clear. Every node (block AND token) needs an `id` that is a fresh LOWERCASE uuid — any other string, including an uppercase uuid, is rejected 422. Every numeric size is in PIXELS, never a CSS multiplier: `lineHeight` is a px line box (~1.3x fontSize, e.g. fontSize 14 -> 18), so 1.3 is rejected. Call get_content_schema for the full schema, every enum value, and a worked example. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| end_time | Yes | ISO-8601 end of the campaign window (required). | |
| behaviour | No | How the campaign content combines with the signature (replace or append). | |
| time_zone | Yes | IANA time zone, e.g. 'Europe/Paris' (required). | |
| send_email | No | ||
| start_time | Yes | ISO-8601 start of the campaign window (required). | |
| filter_kind | No | Which targeting dimension applies: by signature_templates or by smart_fields conditions. | |
| signature_template_ids | No | UUIDs of the signature templates to apply the campaign to (replaces the set; [] clears). | |
| smart_fields_conditions | No | Smart-field targeting: an array of OR-groups, each an array of AND-conditions { smart_field_id (uuid), operator, values }. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the write/idempotency profile, and the description goes well beyond them: it discloses the draft lifecycle, the 422 failure mode for missing required fields, server-side strict validation of content, and the lowercase-uuid requirement with a concrete format hint. These are behavioral facts an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and state, then the activation sibling, then content and targeting semantics. Dense but every clause carries load; only the parenthetical detail about block-tree shape edges toward surplus given it also defers to get_content_schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter creation tool with an output schema, the description covers the riskiest areas (required-field failures, content format, targeting, lifecycle). It leaves behaviour, filter_kind, send_email, and the mandatory `context` argument unmentioned, but the schema documents those adequately.
Complex tools with many parameters or behaviors need more documentation. 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 91% schema coverage the baseline is 3, but the description adds real meaning: it names the required fields (albeit omitting the required `context`), explains that content is a strict-validated block tree rooted at `stack`, and clarifies the targeting role of smart_fields_conditions and signature_template_ids. It does not touch behaviour, filter_kind, or send_email, which remain schema-only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a marketing campaign') and immediately differentiates the resulting state from the activation path: 'The campaign is created as a draft — use schedule_marketing_campaign to activate it.' An agent can distinguish this from schedule_marketing_campaign, update_marketing_campaign, and delete_marketing_campaign without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to the sibling that activates the campaign once created, and points to get_content_schema for the content format. It stops short of saying when NOT to use it (e.g. versus update_marketing_campaign for existing campaigns), but the create-vs-activate split is clearly drawn.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_signatureCreate a signatureAInspect
Create a signature template. Sets draft_content (the working copy) — content stays empty until you publish_signature. name is required; draft_content is a block tree (a stack root whose children are blocks) strict-validated server-side; folder_id is a folder UUID. Call get_content_schema FIRST for the block-tree schema, every enum value (incl. the non-obvious icon names like linkedin-in/facebook-f), and a complete worked example to adapt — that's how you build a full signature, social-icon row included, in one shot. An invalid tree returns 422 naming each offending field and (for enums) its allowed values. Returns the created template.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Signature template name (required). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| priority | No | Ordering priority (lower = higher). | |
| folder_id | No | UUID of the folder to file the signature under; null detaches it. | |
| draft_content | No | Draft block tree (ILayoutBlock): a `stack` root whose `children` are blocks. Strict-validated server-side. Omit to leave unchanged; null to clear. Every node (block AND token) needs an `id` that is a fresh LOWERCASE uuid — any other string, including an uppercase uuid, is rejected 422. Every numeric size is in PIXELS, never a CSS multiplier: `lineHeight` is a px line box (~1.3x fontSize, e.g. fontSize 14 -> 18), so 1.3 is rejected. Call get_content_schema for the full schema, every enum value, and a worked example. | |
| signature_installation_activated | No | Whether installation is activated for this template. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (not read-only, not destructive, not idempotent, open-world). The description adds real behavioral context: draft-vs-published state semantics, strict server-side validation, the shape of the 422 error payload, and the return value. It does not discuss rate limits or permissions, but the uncovered traits it does disclose are substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the 'call get_content_schema FIRST' directive in the opening lines, and every sentence carries information. It is dense and somewhat long, with the UUID/pixel warnings partially duplicating the schema's own notes, which is the only reason it is not a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 nested block-tree input, the description covers the state model, validation behavior, error contract, prerequisite lookup call, and return value. With an output schema present, return details need not be elaborated, and nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes beyond it by flagging the high-risk gotchas an agent would otherwise miss: the stack-root block tree shape, the lowercase-UUID requirement, and pixel (not CSS multiplier) sizing for lineHeight. It adds genuine semantic guidance rather than restating field docs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a signature template') and immediately scopes what the call actually writes (draft_content, not content), which cleanly separates it from poster/updater siblings like update_signature and publish_signature. An agent can identify the tool and its effect without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit sequencing guidance ('Call get_content_schema FIRST') with a stated rationale, plus the when-to-use relationship to publish_signature ('content stays empty until you publish_signature'). It also predicts the failure mode (422 on invalid tree) and what that error returns, which is far beyond generic when-to-use text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_smart_fieldCreate a smart fieldAInspect
Define a new custom smart field, a merge field signature templates and campaign conditions can use. Check list_smart_fields first: labels are unique, and to rename, retype or rebind an existing field use update_smart_field instead. A manual field starts empty; set each teammate's value with update_teammate. Bound to an integration (integration_id + integration_attribute), its values come from that integration and update_teammate can no longer set them; integrations do not fill url fields, so keep a url field manual. Creating the field changes no signature until a template references it. Writes one field and returns it. Needs the smart_fields:write scope; a taken label, an invalid kind or an unknown or unsuitable integration returns 422.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | Field type (default text). url/email values are validated; image values are read-only via the API. | |
| label | Yes | Display name for the field (required). Must be unique in the workspace: a label already in use returns 422 `taken`. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| required | No | Whether teammates must fill this field (default true when omitted). | |
| integration_id | No | UUID of a workspace integration to sync this field's values from, from list_integrations. It must be a directory or HR/enrichment integration that supplies teammate data; any other returns 422. Omit for a manual field. | |
| integration_attribute | No | The integration's attribute key to map (required when integration_id is set; 422 without it). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the generic safety profile (write, non-destructive, non-idempotent). The description adds high-value behavior: manual fields start empty and are set via update_teammate, bound fields draw values from the integration and disable update_teammate, url fields cannot be integration-filled, nothing changes in any signature until a template references the field, and the required smart_fields:write scope plus the 422 failure modes (taken label, invalid kind, unsuitable integration).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose first, then alternatives, then the manual/integration branch, then edge cases and errors. Nearly every sentence carries distinct information, though the single-block paragraph format makes it harder to scan than a short enumerated structure would.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be restated, and the description still notes "writes one field and returns it." With permissions, error conditions, and the manual/bound behavioral split all covered, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining the semantic interaction of integration_id + integration_attribute (values then come from the integration, update_teammate stops working) and the constraint that url fields must stay manual, which the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Define a new custom smart field") and immediately scopes what a smart field is ("a merge field signature templates and campaign conditions can use"). It also names the sibling it is not (update_smart_field for rename/retype/rebind) and the pre-check tool (list_smart_fields), so it is unmistakable among the many create_* 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?
Explicit when-to-use (check list_smart_fields first because labels are unique) and when-not (use update_smart_field to rename, retype or rebind an existing field). It also distinguishes manual vs integration-bound creation, which is the key branch an agent must choose between.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_teammateCreate a teammateAInspect
Create a new teammate from a primary email plus optional smart-field values. Only available when the workspace manages its own team list — if a directory integration (Google, Microsoft or Zoho Mail) drives teammates, this returns a 409 conflict. Email aliases are managed separately.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Primary email address for the new teammate. Required, must be valid and not already used. | ||
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| smart_fields | No | Optional initial smart-field values, by smart_field_id (UUID). Integration-synced and image fields are ignored; an unknown id or a value invalid for its field type fails the whole create. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that: the environment-dependent 409 conflict condition and the fact that email must be new. It does not mention side effects such as whether the teammate is immediately active or what the response contains, but with annotations and an output schema present that gap is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, zero filler. The core action is front-loaded and the precondition is stated before the exclusionary alias note, so the most decision-relevant information comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with annotations covering idempotency and side-effect profile, a full schema, and an output schema, the description covers the remaining decision-critical unknown — the directory-integration conflict — and clearly separates alias management. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so email, context and smart_fields are fully documented in the schema itself (including smart-field failure semantics and null clearing). The description restates the email + smart-field composition without adding syntax or constraints beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a new teammate") and immediately scopes the input shape ("from a primary email plus optional smart-field values"), which separates it from list_teammates, update_teammate and delete_teammate at a glance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition with a concrete failure mode: create is only usable when the workspace manages its own team list, and a directory integration (Google, Microsoft, Zoho Mail) yields a 409 conflict. It also excludes a related concern — email aliases are handled elsewhere — so the agent knows this tool is not the route for aliases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_assetDelete an assetADestructiveIdempotentInspect
Delete an asset by UUID. If it's still in use (referenced by a signature or set as the workspace picture) it is soft-deleted so those keep rendering; otherwise it is permanently removed. Either way it disappears from list_assets.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset's UUID (the `id` returned by list_assets). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (destructiveHint=true, idempotentHint=true), but the description adds genuinely new context: it explains the conditional soft-delete vs permanent-removal logic, why references preserve the asset ('so those keep rendering'), and that the asset vanishes from list_assets either way. This is exactly the kind of consequence detail an agent needs before calling a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the payload (what happens on delete) is front-loaded right after the verb. Every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the annotations already cover idempotency and destructiveness. The description closes the remaining gap by explaining the soft/hard delete outcome, making the definition complete for a destructive 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% and the schema already documents the `id` parameter as the UUID returned by list_assets, plus the full `context` contract. The description's 'by UUID' repeats what the schema provides without adding syntax or format detail, so the 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?
States a specific verb and resource ('Delete an asset by UUID'), immediately distinguishing it from the many other delete_* siblings. The behavior it describes is uniquely scoped to assets, so an agent can select it without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the tool's nature (delete a specific asset) and it points to list_assets as the source of the UUID, but there is no explicit when-to-use/when-not guidance or mention of alternatives such as update_asset when the goal is modification rather than removal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_emailDelete an emailADestructiveIdempotentInspect
Delete an alias email by UUID (soft delete). A teammate's primary email cannot be deleted (returns 422). Only available when the workspace manages its own team list — a directory integration returns a 409 conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The email's UUID (the `id` returned by list_emails). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/idempotent/openWorld, but the description adds substantive behavior the annotations cannot express: the delete is soft rather than permanent, teammate primary emails are rejected with 422, and managed-directory workspaces conflict with 409. These are exactly the side effects and auth/ownership constraints an agent needs before invoking a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its soft-delete nature, followed by two error-condition clauses. No filler, no restatement of the title, and each sentence carries distinct operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool with an output schema and rich annotations, this covers action, semantics, and the two most likely failure modes. It omits whether the soft-deleted alias can be restored or what happens to signature installations referencing it, which is the only meaningful remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — the `id` parameter is already documented as "the UUID returned by list_emails" and `context` is fully specified. The description's "by UUID" adds no syntax or format detail beyond the schema, so the 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?
States a precise verb+resource ("Delete an alias email by UUID") and immediately narrows scope with "(soft delete)", which separates it from sibling delete_* tools operating on assets, folders, signatures, smart fields, and teammates. The qualifier "alias email" also distinguishes it from delete_teammate and update_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?
Gives concrete preconditions and failure conditions: primary emails return 422, and workspaces using a directory integration return 409. That tells the agent when the call is invalid, but it never names the alternative action for those cases (e.g., remove/update the address instead of deleting), so it stops just short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_folderDelete a folderADestructiveIdempotentInspect
Delete a signature folder by UUID. A folder that still contains signatures cannot be deleted (returns 409) — move or delete its signatures first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The folder's UUID (the `id` returned by list_folders). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds genuinely new behavior beyond the annotations: the 409 error condition and the empty-folder requirement, which the agent cannot infer from 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?
Two sentences, no filler, with the core action and the blocking precondition front-loaded. Every clause carries operational 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 destructive tool with full annotation coverage, a 100% documented schema, and an output schema handling return values, the description supplies the one missing piece an agent needs: the precondition that would cause the call to fail.
Complex tools with many parameters or behaviors need more documentation. Simple 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 documented, including the requirement that id is 'the id returned by list_folders'. The description only restates 'by UUID' and says nothing extra about the analytics-only context parameter, 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?
States a specific verb and resource ('Delete a signature folder by UUID'), which cleanly separates it from update_folder, list_folders, and the other delete_* siblings that target different resources. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition and failure mode: a folder containing signatures cannot be deleted (409), and the agent is told to move or delete the signatures first. It stops short of naming the sibling tools to perform that remediation, so it is clear context rather than full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_marketing_campaignDelete a marketing campaignADestructiveIdempotentInspect
Delete a marketing campaign by UUID. An active campaign is stopped first (it stops applying to signatures), then removed.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The campaign's UUID (the `id` from list_marketing_campaigns). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered structurally. The description adds real value beyond that by disclosing the cascade: an active campaign is stopped first, ceases applying to signatures, and is then removed. It stops short of stating irreversibility or any required permissions/scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero filler, and the identifying detail (UUID) plus the lifecycle behavior are front-loaded. Nothing could be cut without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive two-parameter tool with an output schema, the safety hints, the parameter documentation, and the cascade behavior are all covered. The only meaningful omission is an explicit statement about irreversibility or recovery, which matters for a delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `id` and `context` are already fully documented, including the pointer to list_marketing_campaigns for obtaining the UUID. The description's "by UUID" restates the schema rather than extending it, so the 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?
States a specific verb and resource ("Delete a marketing campaign") and pins the identifier form ("by UUID"), which separates it cleanly from sibling mutations like update_marketing_campaign, pause_marketing_campaign, and resume_marketing_campaign. An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the destructive use case but never states when to choose this over pause_marketing_campaign or update_marketing_campaign, nor does it warn that the operation is permanent. Usage is inferable from the verb alone, which is the minimum-viable bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_signatureDelete a signatureADestructiveIdempotentInspect
Permanently delete a signature template by UUID; there is no undo or trash. The template is removed with its recipient assignment (manual, org-unit and smart-field rules), its marketing-campaign targeting and its installation records, but Scribe does not push an uninstall to mailboxes it was already installed in. Use it only when the template itself should go: to stop it reaching some people, use remove_signature_recipients or remove_signature_recipient_entities; to reset only a reply or internal variant, use delete_signature_variant. Needs the signatures:delete scope; an unknown id returns 404.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The signature's UUID (the `id` from list_signatures). Only primary templates can be deleted: a reply or internal variant's id returns 404. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it enumerates the cascade (recipient assignment, marketing-campaign targeting, installation records), clarifies what does NOT happen ('Scribe does not push an uninstall to mailboxes it was already installed in'), states the required scope, and predicts the 404 on an unknown id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most consequential fact (permanent, no undo or trash) is front-loaded in the first clause, followed by cascade details and then routing alternatives. Every sentence carries distinct information with no filler, appropriate length for a destructive cascade 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?
With an output schema present, return values need not be explained; the description still covers the operation's permanence, side effects, scope requirement, failure mode, and tool-selection boundaries. Nothing an agent needs to invoke this safely 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% and both parameters are fully documented in the schema, including the 'only primary templates can be deleted' caveat and the context-writing rules. The description's 'by UUID' and 404 note largely restate the schema, so it adds marginal value here — 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?
States a specific verb and resource ('Permanently delete a signature template by UUID') and immediately distinguishes itself from sibling deletion tools like delete_signature_variant. An agent can identify exactly what this deletes and how it differs from remove_signature_recipients without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly conditions use: 'Use it only when the template itself should go', then routes to the correct alternatives with their own conditions — remove_signature_recipients/remove_signature_recipient_entities for narrowing reach, delete_signature_variant for resetting a single variant. When-not guidance and named alternatives are both present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_signature_variantReset a signature variantADestructiveIdempotentInspect
Reset a signature's reply/internal variant back to the primary: deactivate it and restore the primary's content (the variant record is kept). This is the 'reset to primary' action, not a hard delete. Returns 409 if the workspace lacks a Microsoft 365 signatures integration (variants_unavailable).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which variant to reset. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| signature_id | Yes | The primary signature's UUID (the `id` from list_signatures). |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| reset | Yes | |
| signature_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses the actual side effects an agent cannot infer: the variant is deactivated rather than removed, the primary's content is restored, the variant record is retained, and a 409 variants_unavailable error is returned when the workspace lacks the M365 integration. This is exactly the extra behavioral context annotations cannot carry.
Agents need to know what a tool does to the 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 its most important semantic distinction ('reset to primary, not a hard delete'), followed by the failure condition. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description still covers the mutation's semantics, the retention of the variant record, and the error case. For a 3-parameter mutation tool this is complete enough 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% and all three required parameters are documented there. The description restates the variant kinds ('reply/internal') but adds no syntax, format, or edge-case detail beyond the schema; the baseline 3 applies when structured fields do 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?
States a precise verb and resource (reset a signature's reply/internal variant to the primary) and immediately clarifies the operation's nature versus what the name implies — explicitly 'not a hard delete'. This lets an agent distinguish it from delete_signature, update_signature_variant, and publish_signature_variant without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to call it (the 'reset to primary' action) and names the error condition that blocks it (409 / variants_unavailable without a Microsoft 365 signatures integration). It does not, however, explicitly name the alternative tools (update_signature_variant, delete_signature) or state when-not to use it, so the routing guidance is contextual rather than exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_smart_fieldDelete a smart fieldADestructiveIdempotentInspect
Delete a custom smart field by UUID (this also removes its value on every teammate). Default fields are read-only (422), the computed Email field is not addressable (404), and a field used in a signature template or campaign can't be deleted (409).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The smart field's UUID (the `id` returned by list_smart_fields). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds materially more: deletion cascades to remove the field's value on every teammate, plus three concrete failure modes with HTTP codes. That is exactly the 'what gets destroyed and when it won't work' context the annotation cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the verb and destruction scope front-loaded, followed by the failure cases. No filler, no restatement of the title, and every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with an output schema present and full annotation coverage, the description supplies the cascade semantics, addressing requirements, and complete error preamble. Nothing an agent needs before invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description goes beyond the schema's 'id returned by list_smart_fields' by constraining which IDs are valid targets (custom fields only, not default or computed fields). It does not add anything further about the analytics-only context parameter, which is already fully 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?
States a specific verb+resource ('Delete a custom smart field') with the addressing key (UUID) and immediately distinguishes it from sibling operations by noting it is a custom field. It also names what makes a field non-custom, so an agent knows update_smart_field/list_smart_fields are not substitutes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 enumerates the when-not conditions with status codes: default fields (422), computed Email field (404), fields in use by a signature template or campaign (409). These effectively tell an agent when the call will fail, though no alternative tool (e.g., update_smart_field) is named as a fallback.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_teammateDelete a teammateADestructiveIdempotentInspect
Delete a teammate by UUID (a soft delete; their emails are removed from signature deployment). Only available when the workspace manages its own team list — if a directory integration (Google, Microsoft or Zoho Mail) drives teammates, this returns a 409 conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The teammate's UUID (the `id` returned by list_teammates). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| deleted | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: it discloses the soft-delete semantics (not a hard delete), the cascade effect on signature deployment, and the 409 conflict condition tied to directory integrations. Annotations only give generic destructive/idempotent hints; the description supplies the domain-specific 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, front-loaded with the core action and then the critical precondition. No filler; every clause carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 action, scope constraint, side effects, and failure mode. With an output schema present, return values need not be explained, and the description is fully 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 coverage is 100%, so the baseline is 3. The description adds meaning by tying 'UUID' to the id returned by list_teammates, reinforcing correct sourcing of the 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?
States a specific verb+resource ('Delete a teammate by UUID') and immediately clarifies it is a soft delete with a specific side effect (emails removed from signature deployment), distinguishing it from update_teammate and delete_* 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 the precondition for use ('Only available when the workspace manages its own team list') and the failure mode with an alternative-driving integration (directory integration → 409 conflict). This tells the agent both when to use it and when it will fail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_signatureDuplicate a signatureAInspect
Copy a signature into a new one, as the dashboard's Duplicate: a safe copy to try a change on (a new banner, a layout) without touching the original or anyone's signature. The copy gets the source's design (its draft, published as the copy's content) and its reply/internal variants; it is assigned to no one, its installation is off, it has no smart-field rules. Use it instead of reading the design and create_signature. Then edit the copy with update_signature and check it with preview_signature; to bring a tried change back, update_signature the original with the copy's draft_content. Unknown signature → 404; unknown folder → 422. Returns the copy.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | UUID of the signature to copy (from list_signatures). | |
| name | No | The copy's name. Omit for "<name> (Copy)", in the user's language. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| folder_id | No | UUID of the folder to file the copy under; null for no folder. Omit for the source's folder. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true); the description adds substantial behavior beyond that: the copy inherits the source's design (draft published as its content) and reply/internal variants, is assigned to no one, has installation off, and carries no smart-field rules. It also discloses error semantics (404 for unknown signature, 422 for unknown folder).
Agents need to know what a tool does to the 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 core purpose and the copy's state are front-loaded, then the alternative and follow-up workflow, then error codes and return. It is dense and information-rich with little waste, though the single long sentence carries several clauses that could be split 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?
An output schema exists, so return values need only be summarized ('Returns the copy.'), which it does. Combined with the inheritance behavior, the assignment/installation state, the workflow routing, and the 404/422 errors, an agent has everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, name, context, and folder_id, making 3 the baseline. The description clarifies defaults (name falls back to '<name> (Copy)', folder defaults to the source's) but adds no syntax or format detail beyond the schema, so it does not rise 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?
States a specific verb and resource ('Copy a signature into a new one') and immediately differentiates from siblings by saying to use it 'instead of reading the design and create_signature'. An agent can distinguish it from create_signature, update_signature, and preview_signature without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives the when ('a safe copy to try a change on ... without touching the original or anyone's signature') and the alternative it replaces (reading the design + create_signature). It also routes the follow-up workflow to update_signature and preview_signature, and explains how to bring a tried change back to the original.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analytics_clicksAnalytics — signature clicksARead-onlyIdempotentInspect
Signature-click counts over a date range. By DEFAULT a timeseries bucketed by granularity (hour/day/week/month, UTC): { data:[{period, count}], totals:{count} }. Set group_by (signature_template | marketing_campaign | teammate | country) for a ranked breakdown instead: { data:[{id, label, view_count, click_count, clickthrough_rate}], pagination } — each breakdown row already carries views, clicks, AND the clickthrough rate, so one call answers "which signature/teammate drives the most engagement". Filter by start_date/end_date and any of signature_template_id, marketing_campaign_id, teammate_id.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (breakdown only; ignored for the timeseries). | |
| limit | No | Page size 1–100 (breakdown only; default 20). | |
| order | No | Sort direction. Default desc. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| end_date | No | Range end (inclusive), ISO-8601 date YYYY-MM-DD. Default: today. | |
| group_by | No | If set, return a ranked breakdown by this dimension instead of a timeseries: signature_template | marketing_campaign | teammate | anchor (link) | country. | |
| start_date | No | Range start (inclusive), ISO-8601 date YYYY-MM-DD. Default: 2 months ago. | |
| granularity | No | Timeseries bucket size: hour | day | week | month (default day). Ignored when `group_by` is set. `hour` is capped at a 31-day range. | |
| teammate_id | No | Restrict to one teammate (their UUID). | |
| marketing_campaign_id | No | Restrict to one marketing campaign (its UUID). | |
| signature_template_id | No | Restrict to one signature template (its UUID). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond them: UTC bucketing, the fact that group_by switches the entire response mode, and that breakdown rows bundle views, clicks and clickthrough rate in one call. No permission/rate-limit disclosure, but that is minor given rich 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?
Front-loaded with the core purpose and mode contrast, and every sentence carries information. The response-shape fragments are somewhat redundant since an output schema already exists, but they serve to make the timeseries-vs-breakdown distinction concrete rather than being pure 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 rich annotations (4 hints) and an output schema, the description is not required to explain returns or safety, yet it covers the critical mode-switching behavior an agent must understand before calling. The only real gap is the missing 'anchor' group_by value, which could lead an agent to believe that breakdown dimension is unsupported.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above it by explaining what group_by actually does to the result shape and which filters combine with the range. It does, however, list group_by options as 'signature_template | marketing_campaign | teammate | country' and omits the 'anchor' enum value present in the schema, a small inconsistency.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Signature-click counts over a date range' — which is clearly distinct from the views/events analytics siblings by virtue of naming clicks. However, it never names or contrasts with the closest alternative (get_analytics_views), so sibling differentiation is left implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two operating modes and when each applies: default timeseries bucketed by granularity vs. setting group_by for a ranked breakdown, plus a motivating use case ('which signature/teammate drives the most engagement'). No explicit when-not guidance or named alternative tools, but the mode-selection context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analytics_events_summaryAnalytics — conversions & revenue (aggregated events)ARead-onlyIdempotentInspect
Aggregated conversion/revenue numbers from recorded events. By DEFAULT a timeseries of event count + sum of value bucketed by granularity: { data:[{period, count, value}], totals:{count, value} }. Set group_by (name | signature_template | marketing_campaign | teammate | anchor | country | currency | user) for a ranked breakdown: { data:[{id, label, count, value}], pagination } — rank by order_by (count | value). value is summed across currencies, so pass currency or group_by=currency for a clean total. Answers total revenue, revenue by campaign/template/teammate/country, conversions per day, top customers (group_by=user).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Restrict to one event name (e.g. `purchase`). | |
| page | No | 1-based page (breakdown only). | |
| limit | No | Page size 1–100 (breakdown only). | |
| order | No | Sort direction. Default desc. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| country | No | Restrict to one country (ISO 3166-1 alpha-2). | |
| currency | No | Restrict to one currency (e.g. `USD`) for a clean sum. | |
| end_date | No | Range end (inclusive), ISO-8601 date YYYY-MM-DD. Default: today. | |
| group_by | No | Ranked breakdown by dimension instead of a timeseries: name | signature_template | marketing_campaign | teammate | anchor | country | currency | user. | |
| order_by | No | Breakdown ranking metric: count | value (default count). | |
| start_date | No | Range start (inclusive), ISO-8601 date YYYY-MM-DD. Default: 2 months ago. | |
| distinct_id | No | Restrict to one identified visitor (their user id). | |
| granularity | No | Timeseries bucket size (default day). Ignored when `group_by` is set. | |
| teammate_id | No | Restrict to one teammate (their UUID). | |
| marketing_campaign_id | No | Restrict to one marketing campaign (its UUID). | |
| signature_template_id | No | Restrict to one signature template (its UUID). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/destructive=false, so the description's job is to add nuance, which it does: the multi-currency warning ('value is summed across currencies, so pass currency or group_by=currency for a clean total') and the rule that granularity is ignored when group_by is set are genuine behavioural disclosures beyond the annotations. It stops short of permissions, rate limits, or data-freshness notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, but front-loaded with the default behaviour and output shape before the optional breakdown path, and every clause carries information (output shapes, currency caveat, use cases). Slightly long, yet nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter tool with an output schema and rich annotations, the description covers the two operating modes, the shape returned by each, the key caveat, and representative questions it answers. Nothing an agent needs in order to call it correctly appears to be 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, and the description exceeds it by explaining relationships the schema states only locally: granularity's default of day and its being ignored under group_by, the default ranking metric for order_by, and how currency interacts with the summed value. It adds cross-parameter meaning rather than repeating field 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?
States a specific verb and resource ('Aggregated conversion/revenue numbers from recorded events') and immediately distinguishes its output shape from the sibling list_analytics_events / get_analytics_clicks / get_analytics_views by declaring both the default timeseries and the group_by breakdown modes. An agent can tell what this returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Answers total revenue, revenue by campaign/template/teammate/country, conversions per day, top customers' clause gives strong positive usage cues, and it explains the mode switch (default vs group_by) that selects behaviour. It does not, however, name or exclude the adjacent analytics siblings, so the routing 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.
get_analytics_viewsAnalytics — signature viewsARead-onlyIdempotentInspect
Signature-view counts over a date range. By DEFAULT a timeseries bucketed by granularity (hour/day/week/month, UTC): { data:[{period, count}], totals:{count} }. Set group_by (signature_template | marketing_campaign | teammate | country) for a ranked breakdown instead: { data:[{id, label, view_count, click_count, clickthrough_rate}], pagination } — each breakdown row already carries views, clicks, AND the clickthrough rate, so one call answers "which signature/teammate drives the most engagement". Filter by start_date/end_date and any of signature_template_id, marketing_campaign_id, teammate_id.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (breakdown only; ignored for the timeseries). | |
| limit | No | Page size 1–100 (breakdown only; default 20). | |
| order | No | Sort direction. Default desc. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| end_date | No | Range end (inclusive), ISO-8601 date YYYY-MM-DD. Default: today. | |
| group_by | No | If set, return a ranked breakdown by this dimension instead of a timeseries: signature_template | marketing_campaign | teammate | anchor (link) | country. | |
| start_date | No | Range start (inclusive), ISO-8601 date YYYY-MM-DD. Default: 2 months ago. | |
| granularity | No | Timeseries bucket size: hour | day | week | month (default day). Ignored when `group_by` is set. `hour` is capped at a 31-day range. | |
| teammate_id | No | Restrict to one teammate (their UUID). | |
| marketing_campaign_id | No | Restrict to one marketing campaign (its UUID). | |
| signature_template_id | No | Restrict to one signature template (its UUID). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly/idempotent/non-destructive, so the safety burden is covered. The description adds real behavioral context: the default mode and shape, UTC bucketing, the hour-granularity 31-day cap, and that breakdown rows include clicks and CTR. It could note rate limits or large-range behavior, but this is strong added 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?
Front-loaded with purpose and default behavior, then the alternative mode, then filters. It is dense and somewhat long, but nearly every clause carries invocation-relevant meaning; the return-shape sketches are arguably redundant given the output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 an 11-parameter analytics tool with an output schema, it covers mode selection, defaults, filters, bucketing constraints, and the response shapes of both modes, leaving no gap an agent would need to guess at before calling.
Complex tools with many parameters or behaviors need more documentation. Simple 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 goes beyond it by explaining the semantic split (group_by switches the response shape entirely, page/limit apply only to breakdown) and by enumerating group_by dimensions and filter semantics, which materially aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain 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 ('Signature-view counts') with explicit scope (date range), and differentiates itself from siblings like get_analytics_clicks and list_analytics_events by naming the entity counted. An agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly explains the two modes and when each applies: default timeseries, or set `group_by` for a ranked breakdown. It even gives a motivating question ('which signature/teammate drives the most engagement'). It stops short of naming competing analytics siblings explicitly, so no exclusion guidance, 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.
get_content_schemaGet the content schemaARead-onlyIdempotentInspect
Call this FIRST before authoring or editing a signature draft_content (create_signature / update_signature) or a marketing-campaign content. Returns, in ONE call, everything needed to build a valid block tree: the strict JSON Schema; a flat enums lookup of every allowed value (including the 100+ valid icon names and the iconStyle.shape values); the social_icons map from common platform to its exact (non-obvious) icon enum, e.g. linkedin -> linkedin-in, facebook -> facebook-f, youtube -> youtube, instagram -> instagram, whatsapp -> whatsapp; a complete worked example signature containing every block type AND a populated 5-platform socialList; and short guidance. Adapt example to author a full signature — social-icon row included — without guessing the format or brute-forcing enum spellings.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds non-annotation behavior: the prerequisite ordering, that everything arrives in ONE call, and that it removes the need to brute-force enum spellings. It does not mention auth or rate limits, but for a schema-fetch tool that is minor.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the imperative 'Call this FIRST', which is exactly what an agent needs to see first. It is dense but the parenthetical icon enumerations (linkedin -> linkedin-in, etc.) are repetitive; a couple of examples would have carried the same signal with less bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value structure need not be re-explained, and the description still gives the shape of what comes back (schema + enums + example + guidance). Together with annotations this is fully sufficient for an agent to call the tool correctly and know why.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter (context) with 100% schema description coverage, so the schema already explains its purpose and constraints. The description adds no parameter-level detail beyond that, which is the expected baseline when 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 names a specific verb+resource (returns the content schema needed to build a valid block tree) and enumerates exactly what is returned: strict JSON Schema, enums lookup, social_icons map, worked example, and guidance. It is unmistakably distinct from siblings like get_signature_html or preview_signature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 an explicit call-order rule ('Call this FIRST before authoring or editing') and names the exact downstream tools it enables: create_signature / update_signature drafts and marketing-campaign content. When-to-use is spelled out rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_more_toolsARead-onlyIdempotentInspect
Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | A description of your goal and what kind of tool would help accomplish it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no additional behavioral context such as what 'check' entails, whether it makes a network call, or what side effects (if any) occur 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, front-loaded sentence with no wasted words. It quickly communicates the action and the conditions for use, making it efficient and easy to parse, though it could be slightly more structured with a separate usage 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?
The description gives clear usage guidance but does not explain what the tool returns or what happens after 'checking' for tools. With no output schema present, the description carries the burden of explaining the result, which it fails to do. For a simple one-parameter tool, this is a notable gap, though not severe.
Complex tools with many parameters or behaviors need more documentation. Simple 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 single parameter 'context' is already documented with a clear description in the schema. The tool description adds no additional semantic meaning beyond what the schema provides, which aligns with 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 clearly states the tool's function: checking for additional tools when a task could benefit from specialized capabilities. It distinguishes itself from the sibling clipform_* tools by being a meta-tool for tool discovery rather than a domain-specific operation, though it does not explicitly name this 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?
The description provides explicit usage guidance: use this tool whenever specialized capabilities might help, even if existing tools could work as a fallback. This gives the agent a clear decision rule, though it does not mention when not to use it or list alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_signature_htmlGet a signature's real HTML for a recipientARead-onlyIdempotentInspect
Get the REAL final installed HTML of a signature for a SPECIFIC recipient — the live published content rendered with that teammate's real values and tracking links on, i.e. exactly what their mail client receives. This is NOT a preview: it reflects the published signature (publish_signature first), and returns empty HTML if the signature has not been published. The email must be a recipient of this signature (see list_signature_recipients), otherwise the API returns a 404 (no such email) or 422 (not a recipient). For a tracking-free placeholder layout check of a draft before publishing, use preview_signature instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The signature's UUID (the `id` from list_signatures). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| email_id | Yes | UUID of a recipient email of this signature (an `email_id` from list_signature_recipients). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), yet the description adds substantial behavior beyond them: it returns empty HTML for unpublished signatures, and returns 404 (no such email) versus 422 (not a recipient) for ineligible recipients. These failure modes and lifecycle constraints are exactly the kind of context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action before the caveats, and every sentence carries distinct information (non-preview, publish prerequisite, empty-HTML case, error codes, alternative tool). The heavy ALL-CAPS emphasis and stacked parenthetical references make it denser than it needs to be, but there is 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?
An output schema exists, so return-value documentation is not the description's job, and the description still covers prerequisites, eligibility, error behavior and the alternative tool. For a 3-parameter read tool with full schema coverage and annotations, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the schema already documents id, email_id and context. The description adds meaning by tying email_id to a recipient-membership requirement and its error consequences, which goes beyond the schema's 'UUID of a recipient email'. It does not add format or syntax detail beyond that, so a 4 rather than 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?
States a specific verb and resource ('get the REAL final installed HTML of a signature for a SPECIFIC recipient') and immediately scopes it as live published content rendered with the teammate's real values. It explicitly distinguishes itself from the nearest sibling by declaring 'This is NOT a preview' and naming preview_signature. An agent can differentiate it from preview_signature and list_signature_installations without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite (publish_signature must run first), an eligibility constraint (the email must be a recipient — see list_signature_recipients), and a named alternative with the condition that selects it ('For a tracking-free placeholder layout check of a draft before publishing, use preview_signature instead'). When-to-use, when-not-to-use and the alternative are all covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visitorGet a visitorARead-onlyIdempotentInspect
Fetch one identified visitor (the customer's identify subject — NOT a Scribe member) by its Scribe id — the uuid from list_visitors, not the distinct_id (to look up by distinct_id, filter list_visitors instead). Returns the visitor's distinct_id, traits (PII lives here), first/last_seen_at, first_touch attribution (the signature click that drove their first visit), and stats — the visitor's lifetime engagement (event count + total value).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The visitor's Scribe `id` (a uuid, as returned by list_visitors) — NOT the distinct_id. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| stats | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so safety is covered elsewhere. The description goes beyond them by flagging that PII lives in `traits` and by naming the returned surfaces (first/last_seen_at, first_touch attribution, lifetime `stats`), which is meaningful sensitivity context for a read 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?
A single dense sentence, but front-loaded with the core action and keyed alternates. It is longer than most definitions, yet each clause (not-a-member, id-not-distinct_id, return contents) carries distinct routing or data-sensitivity 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?
An output schema exists, so return values need not be enumerated here. The description nonetheless covers identity disambiguation, the sibling alternative, and PII location — everything an agent needs before calling — leaving only minor gaps such as error behavior for a missing id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description's note that `id` is the Scribe uuid from list_visitors restates what the schema already documents, and it adds no format or constraint detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (fetch one) and resource (identified visitor), and immediately delimits what it is NOT — the customer's `identify` subject rather than a Scribe member. It also says what identity key is required (Scribe `id` uuid, not `distinct_id`), which no sibling needs spelled out.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative path: to look up by `distinct_id`, use list_visitors rather than this tool. Combined with the id-vs-distinct_id routing, an agent knows exactly which tool to reach for given the identifier it holds.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_visitor_breakdownVisitor acquisition breakdown (first-touch)ARead-onlyIdempotentInspect
Rank which signature template or teammate acquired the most identified visitors (the first signature click that drove their first visit): { data:[{id, label, count}], pagination }.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size 1–100 (default 20). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| group_by | Yes | Rank acquisition by the first-touch dimension: signature_template | teammate. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| pagination | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this a safe, idempotent, open-world read, so the safety profile is covered. The description adds genuine behavioral context by defining how the ranking is computed (the first signature click that drove the first visit) and sketching the return shape, which the annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. The trailing inline return-shape sketch is mildly redundant given an output schema exists, but it is brief and does not bloat the definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 analytics tool with an output schema, this covers purpose, metric definition, and dimension adequately; nothing about return values needs restating. What is missing is the time window the ranking spans, which is meaningful context an agent cannot get from any structured field.
Complex tools with many parameters or behaviors need more documentation. Simple 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 page, limit, context, and the group_by enum are already documented in the schema. The description restates the group_by dimension as 'first-touch dimension' but adds no syntax, defaults, or format details beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb plus resource: ranks acquisition of identified visitors by signature template or teammate. The parenthetical defines 'first-touch' so the agent can distinguish this from click/view analytics siblings such as get_analytics_clicks and get_analytics_views.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the analytics framing and the definition of the first-touch metric, but there is no explicit when-to-use or when-not-to-use guidance and no sibling is named. An agent must infer that this is the attribution-ranking tool rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_workspaceWorkspace plan, seats & tracking setupARead-onlyIdempotentInspect
A snapshot of the current workspace's commercial state: plan (tier, kind, status, billing_interval, cancel_at_period_end + start/end dates), seat_count (invoiced seats — what Stripe is billed for), and event_tracking (conversion-tracking setup: the Event Tracking ID to paste into the website snippet / @scribemail/js init, plus whether events would be ingested). When helping a user set up conversion tracking, read the ID here and search_docs for 'conversion tracking' to walk them through the snippet, identify() and track() calls. There is no id — it is always the API key's own workspace. Read-only: plan and seats are managed in the dashboard / by the billing system, never via the API.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint, so the safety bar is lower; the description still adds real value by explaining why it is read-only ('plan and seats are managed in the dashboard / by the billing system, never via the API') and clarifying the no-identifier scoping. It does not cover rate limits or freshness of the snapshot, which would be the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the payload's contents before the usage hint, and each sentence carries information (returned fields, setup workflow, scoping, read-only rationale). Slightly dense with parenthetical field lists, but no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value explanation is optional; the description nonetheless names the key fields, covers the no-id scoping, and supplies the conversion-tracking workflow. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single `context` parameter, so the baseline is 3. The description adds only the meta-point that the tool takes no workspace identifier, which is useful but not a per-parameter specification.
Input schemas describe structure but not intent. Descriptions should explain 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 ('snapshot of the current workspace's commercial state') and enumerates exactly what is returned (plan, seat_count, event_tracking). This clearly separates it from the analytics/visitor/signature siblings, which cover different data domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete task trigger ('when helping a user set up conversion tracking, read the ID here and search_docs for...') and names the companion tool, plus a scoping exclusion ('there is no id — it is always the API key's own workspace'). It stops short of stating when *not* to reach for this tool for plan/seat questions beyond noting they are dashboard-managed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_signatureInstall a signatureADestructiveInspect
Trigger installation of a signature template's current content to connected mail clients (without publishing), on every email it is assigned to; for one email alone, use install_signature_for_email. Returns 403 if the plan lacks signature installation, or 409 if no API signature integration is connected — in both cases the error includes a dashboard link to connect an integration or upgrade the plan; relay it to the user (the API can't run OAuth).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The signature's UUID (the `id` from list_signatures). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, idempotentHint=false, openWorldHint=true, but add no detail. The description supplies the crucial 'without publishing' distinction, the specific 403/409 failure modes, the fact that errors carry a dashboard link, and the agent-facing instruction to relay it since OAuth can't run via API. That is substantive context well 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?
Front-loaded with purpose, then the sibling alternative, then error semantics — a logical order with no filler. It is somewhat dense and compresses the failure handling into em-dash clauses, but every clause carries usable 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?
An output schema exists, so return values need not be explained. Given that, the description covers purpose, scope, the sibling boundary, and both failure paths with the required agent behavior — nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the `id` and `context` parameters are already fully documented in the schema; baseline 3 applies. The description adds only an indirect hint about `id` (it points at 'the signature's current content') and nothing about the analytics `context` field beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Trigger installation') plus the exact resource and scope ('a signature template's current `content` to connected mail clients... on every email it is assigned to'). It also explicitly distinguishes itself from the sibling install_signature_for_email by scope, so an agent can route correctly without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the when-to-use condition and names the alternative plus the condition that selects it ('for one email alone, use install_signature_for_email'). It also tells the agent what to do on failure (relay the dashboard link to the user because the API can't run OAuth).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_signature_for_emailInstall the signatures of one emailADestructiveInspect
Install one email's signatures now, in its mailbox alone, without reinstalling the signature for everyone else (install_signature): a send-as alias that needs its signature, one person whose details changed (a new title). Installs the installed (activated) and published signatures assigned to the email, or only signature_id, through the workspace's signature integrations (Google Workspace, Zoho Mail, Front, …). Runs in the background: the result lists what was queued, and list_signature_installations with the email_id shows each one as it ends. 409 installed_by_client when the Outlook add-in or the desktop app installs the workspace's signatures: the client picks up the latest published signature by itself, there is nothing to push, say so. 409 no_signature_to_install when no installed signature is assigned to the email; 422 not_a_recipient when signature_id is not assigned to it. Returns 403 if the plan lacks signature installation, or 409 installation_unavailable if no signature integration is connected; relay the dashboard link.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| email_id | Yes | The email's UUID: the `id` from list_emails, or the `email_id` from list_signature_recipients or list_signature_installations. | |
| signature_id | No | Install only this signature (its UUID from list_signatures), one assigned to the email. Without it, every installed signature assigned to the email. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that execution is asynchronous ('runs in the background', result lists what was queued), how to observe completion, and the full error surface (409 installed_by_client, 409 no_signature_to_install, 422 not_a_recipient, 403 plan limitation, 409 installation_unavailable), including the prescribed agent response for each. The annotations only flag it as a non-idempotent, destructive write.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its scope, then layers usage examples, then error handling — a logical order. It is dense and clause-heavy but nearly every sentence carries operational content; only the parenthetical integration list (Google Workspace, Zoho Mail, Front) is arguably expendable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, asynchronous, multi-error-path tool it covers what is needed: scope vs the sibling, async behavior and polling, and every documented failure with the expected relay message. An output schema exists, so the description is right not to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple 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 email_id and signature_id semantics are already documented, and the description largely restates them ('or only `signature_id`', installed/activated vs published assignments). It adds the useful nuance that the scope is 'the installed (activated) and published signatures assigned to the email', but not enough beyond the schema to raise 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?
States a specific verb and resource (install one email's signatures) and immediately bounds the scope: 'in its mailbox alone, without reinstalling the signature for everyone else (install_signature)'. An agent can distinguish it from the sibling install_signature and from the recipient-management tools without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use scenarios (a send-as alias needing a signature, one person whose title changed) and names the higher-scope alternative install_signature as the thing you should not reach for. It also spells out the operational follow-up (list_signature_installations with the email_id) and the conditions that produce each failure mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_analytics_eventsList analytics eventsARead-onlyIdempotentInspect
List the raw conversion events recorded for the workspace (from the website SDK and server-to-server calls), most recent first, one row per event with its attribution uuids and its properties returned as recorded. Use it to verify that conversion tracking works, to read one visitor's event history (distinct_id) or to export rows. For counts, revenue or rankings use get_analytics_events_summary instead, which aggregates; for signature views and clicks use get_analytics_views / get_analytics_clicks; for visitor profiles use list_visitors. Events are ingested asynchronously, so one tracked seconds ago may not show yet. Read-only; needs the analytics:read scope and a plan with event tracking (403 otherwise). Returns one page (default 50, max 100); set auto_paginate to fetch up to max_pages, and truncated: true means more remain.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Filter to one event name (exact match). | |
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| country | No | Filter to one country (ISO 3166-1 alpha-2, case-insensitive, e.g. FR). | |
| end_date | No | Range end (inclusive), ISO-8601 date YYYY-MM-DD. | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| start_date | No | Range start (inclusive), ISO-8601 date YYYY-MM-DD. Omit both dates for all time. | |
| distinct_id | No | Filter to one identified visitor's event history: their user id, the `distinct_id` from list_visitors (exact match). | |
| teammate_id | No | Filter to one teammate (UUID from list_teammates); unknown returns 404. | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). | |
| marketing_campaign_id | No | Filter to one marketing campaign (UUID from list_marketing_campaigns); unknown returns 404. | |
| signature_template_id | No | Filter to one signature template (UUID from list_signatures); unknown returns 404. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, and the description confirms 'Read-only' consistently while adding information the annotations cannot carry: asynchronous ingestion lag, the required analytics:read scope plus plan gating with a 403 outcome, and pagination semantics including the truncated flag. That is substantive context beyond the structured safety 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?
Four sentences, each load-bearing: what is returned, when to use it and what to use instead, the freshness caveat, and the auth/pagination contract. Information is front-loaded with the resource and result shape before the caveats.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 13-parameter, high-complexity list tool with an output schema and full annotation coverage, the description supplies everything else an agent needs: routing, async staleness, permission/plan failure mode, and page limits. Return-value detail is correctly left 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% and all 13 parameters are documented in the schema, so the baseline is 3. The description restates the pagination behavior (auto_paginate up to max_pages, truncated meaning more remain) and one filter usage (distinct_id for a visitor's history), but adds little that the schema fields do not already say.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb+resource+scope: raw conversion events for the workspace, sourced from the website SDK and server-to-server calls, most recent first, one row per event. It also names the sibling alternatives (get_analytics_events_summary, get_analytics_views/clicks, list_visitors), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use cases are given (verify conversion tracking, read one visitor's history via distinct_id, export rows) and explicit when-not-to-use routing is provided for three sibling families. This is a complete routing guide, not an implied one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_assetsList assetsARead-onlyIdempotentInspect
List the workspace's asset library (logos, banners, profile pictures), newest first. Each has its id, a downloadable file URL, its role, in_use (a signature or the workspace picture references it) and signature_template_count. Use it to reuse an image: put an asset's id in an image block's assetUuid (see get_content_schema) rather than uploading a duplicate with create_asset. Also use it to find the id for update_asset or delete_asset, and check in_use first, since delete_asset only soft-deletes an asset in use. Deleted assets are excluded and there is no filter by role, so page through and match role or name. Read-only; needs the assets:read scope. Returns one page (default 50, max 100); set auto_paginate to fetch up to max_pages, and truncated: true means more remain.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive annotations, the description discloses the required assets:read scope, that deleted assets are excluded, that delete_asset only soft-deletes an asset in use, the sort order (newest first), and pagination behavior including the truncated flag. This is substantial behavioral context the annotations alone don't cover.
Agents need to know what a tool does to the 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 relatively long but front-loaded with the core purpose, then layers usage and pagination details, and every sentence earns its place. It is dense but not padded, with only minor over-packing of sibling-related 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?
An output schema exists, so return-value explanation is not required, and the description still covers scope, filtering limits, sort order, pagination, and sibling routing. Nothing an agent needs to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the parameters, but the description adds real meaning: it ties auto_paginate to max_pages ('fetch up to max_pages') and states the default/max page size (50/100). This clarifies how the pagination parameters interact, going beyond the per-field 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 gives a precise verb+resource ('List the workspace's asset library') and enumerates the resource types (logos, banners, profile pictures) and returned fields. It clearly separates this from create_asset, update_asset, and delete_asset, which are named as distinct 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?
Explicit when-to-use guidance: reuse an image by putting the asset's id in an image block's assetUuid rather than uploading a duplicate with create_asset, and use it to find the id for update_asset/delete_asset. It also names the condition to check in_use first, and discloses the no-filter-by-role constraint with the workaround (page and match role or name).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_emailsList emailsARead-onlyIdempotentInspect
List the workspace's teammate email addresses, primary and aliases, newest first, each with its id, address, primary flag and owning teammate_id. Use it to get the email id that add_signature_recipients, remove_signature_recipients, update_email, delete_email, install_signature_for_email and send_test_email take. Use list_teammates instead when you also need smart-field values: it embeds each teammate's emails too. There is no address search: filter by teammate_id, or page through and match address. Deleted emails and teammates are excluded. Read-only; needs the emails:read scope. Returns one page (default 50, max 100); set auto_paginate to fetch up to max_pages, and truncated: true means more remain.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| teammate_id | No | Filter to a single teammate's emails by their UUID (the `id` from list_teammates). An unknown id returns an empty list, not an error. | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds beyond them: the required emails:read scope, exclusion of deleted emails and teammates, page-size defaults (50/100), the auto_paginate+max_pages behavior, and the meaning of `truncated: true`.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but every sentence earns its place: scope/return shape first, then consumer tools, then the alternative, then the no-search constraint, then pagination. 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?
Covers the identity of the resource, filtering limits, pagination semantics, scope/auth, and sibling routing; with an output schema present it correctly avoids re-explaining the raw return payload. Nothing needed to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3; the description adds meaning by explaining that filtering is by `teammate_id` only, that paging plus matching `address` is the search substitute, and what `truncated` signals. It stops short of documenting every parameter, so a 4 rather than 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?
States a specific verb+resource ('List the workspace's teammate email addresses, primary and aliases') and enumerates the returned fields (`id`, `address`, `primary`, `teammate_id`). It explicitly distinguishes itself from the sibling list_teammates and names the downstream tools that consume the returned `id`.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use (get the email `id` for add/remove_signature_recipients, update_email, delete_email, etc.), a named alternative with its selection condition (list_teammates when smart-field values are also needed), and a negative constraint ('There is no address search') with a workaround.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_financial_documentsList financial documentsARead-onlyIdempotentInspect
List the workspace's financial documents (invoices and credit notes), newest first. Only documents with a downloadable PDF are returned: each carries a file ({ url, filename, content_type, byte_size }) whose url downloads the document, plus a receipt (same shape) when a separate receipt PDF exists. Use the file.url to fetch/download the document. Read-only — documents are issued by the billing system, not via the API. Paginated (page/limit).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world. The description adds real behavioral context beyond them: results are filtered to documents that have a downloadable PDF, the response shape (file/receipt), and that documents are issued by the billing system and cannot be created via the API. This meaningfully reduces caller uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and included/excluded content, followed by response shape and read-only note. It is dense but every sentence carries information; the inline shape of `file` overlaps with the output schema, which is slightly redundant but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Safety is covered by annotations and the output schema exists, so return-value detail is technically optional. The description is nonetheless complete for correct invocation: scope, filter constraint, ordering, pagination, and read-only nature are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% – page, limit, context, max_pages, and auto_paginate are all documented in the schema. The description adds only the 'newest first' ordering and a nod to pagination (page/limit), leaving auto_paginate/max_pages entirely to the schema. Baseline 3 is appropriate given 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?
States a specific verb and resource with scope and content: 'List the workspace's financial documents (invoices and credit notes), newest first.' It clarifies exactly what is included, and no sibling tool covers invoicing/billing, so differentiation is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies usage by stating how to consume results ('Use the `file.url` to fetch/download the document') and that filtering is limited to docs with downloadable PDFs. However, it offers no explicit when-to-use/when-not guidance or routing to any alternative for related needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_foldersList foldersARead-onlyIdempotentInspect
List the workspace's signature folders, newest first, each with its id, name and signature_count (the signature templates it directly contains). Use it to find a folder id for update_folder, delete_folder or the folder_id of create_signature / update_signature, and to check for an existing folder before create_folder, since names need not be unique. It does not list the signatures inside a folder: use list_signatures and match each one's folder_id. A folder whose signature_count is above 0 cannot be deleted (delete_folder returns 409). Asset folders are not included. Read-only; needs the folders:read scope. Returns one page (default 50, max 100); set auto_paginate to fetch up to max_pages, and truncated: true means more remain.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses the required folders:read scope, the 409 behavior when deleting a folder whose signature_count is above 0, and pagination semantics (default 50, max 100, truncated: true means more remain). These are substantive operational facts the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: purpose and returned fields come first, then usage routing, then exclusions and pagination. Every clause carries actionable information 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?
An output schema exists, so return-value documentation is not required, and the description still covers scope, exclusions, pagination, failure mode (409), and sibling routing. Nothing needed to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning about the pagination parameters' interplay (auto_paginate up to max_pages, truncated signalling remaining pages) and clarifies what signature_count counts (directly contained templates only). It does not explain the required context parameter, but that is a platform-level field.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (list the workspace's signature folders), the ordering (newest first), and the exact fields returned (id, name, signature_count). It explicitly distinguishes itself from list_signatures and notes that asset folders are excluded, so an agent can separate it from both neighbors without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: find a folder id for update_folder/delete_folder, obtain the folder_id for create_signature/update_signature, and check existence before create_folder. It also states the when-not condition (it does not list signatures inside a folder) and names list_signatures as the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integration_entitiesList integration entitiesARead-onlyIdempotentInspect
List the workspace's directory org units / groups (from a teammates integration). Their uuids are what you pass to add_signature_recipient_entities to target a signature at a whole org unit. Paginated (page/limit).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds that entities originate from an external teammates integration and that results are paginated, but says nothing about what happens if the integration is not connected or how an empty/unavailable directory is signaled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the scope and immediately followed by the downstream rationale. 'Paginated (page/limit)' is mildly redundant with the schema but not wasteful enough to hurt 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?
For a paginated read tool with a full schema and an output schema, the description covers purpose, consuming tool, and pagination behavior. It is nearly complete, missing only edge-case behavior around unavailable integrations or empty results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all five parameters are documented there, including defaults for page and limit. The description only echoes 'Paginated (page/limit)' and adds no syntax or usage nuance beyond the schema, so the 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?
States a specific verb and resource ('List the workspace's directory org units / groups') and narrows the source ('from a teammates integration'), which distinguishes it from siblings like list_integrations and list_teammates. An agent can identify it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly ties the output to the downstream action: 'Their uuids are what you pass to add_signature_recipient_entities to target a signature at a whole org unit.' That is clear when-to-use context, though it offers no exclusions or mention of remove_signature_recipient_entities as the inverse path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_integrationsList active integrationsARead-onlyIdempotentInspect
List the workspace's active (set-up) integrations, including any currently failing. Each carries a status ("active" or "error") and, when erroring, an error_message + error_since so you can see which integrations are connected and debug what went wrong. Each also has a dashboard_url to manage or reconnect it — relay that link when an integration is in error (the API can't run OAuth). Integrations are connected and configured in the dashboard, not via the API — and connecting one (Google Workspace, Microsoft 365, Zoho Mail, …) must be done by a SUPER ADMIN of that third-party app (an Admin is enough in Zoho Mail), so guide the user rather than trying to act: use search_docs (e.g. 'connect Microsoft 365', 'Google Workspace setup') to fetch the step-by-step setup guide and walk them through it alongside the dashboard link. This is WORKSPACE-level health only — for per-email install state/errors (e.g. a recipient not found on Front) use list_signature_installations. Paginated (page/limit).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld, but the description adds substantial context beyond them: the status/error_message/error_since fields, the dashboard_url relay instruction, the fact that the API cannot run OAuth, and the SUPER ADMIN prerequisite for connecting third-party apps. This is a rich behavioral profile not derivable from structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and every clause is substantive, but the single dense paragraph stacks field descriptions, OAuth limits, admin prerequisites, and sibling routing together. Slightly long, though it avoids pure repetition 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?
With an output schema present, return values needn't be restated, yet the description still gives enough about status/error fields to interpret results. It covers the mutation-free read profile, the pagination model, and the correct alternative path for per-email issues.
Complex tools with many parameters or behaviors need more documentation. Simple 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 all five parameters documented, so the baseline is 3. The description only notes 'Paginated (page/limit)' without adding defaults, caps, or auto_paginate semantics beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the workspace's active/set-up integrations) and immediately scopes it: workspace-level health, including failing ones. It distinguishes itself from list_signature_installations and list_integration_entities, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative for a related-but-different need ('for per-email install state/errors use list_signature_installations') and routes setup questions to search_docs with example queries. It also states when NOT to act directly (connect via dashboard, not API, needs SUPER ADMIN), which is exactly the guidance an agent needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketing_campaignsList marketing campaignsARead-onlyIdempotentInspect
List the workspace's marketing campaigns, each with its status, targeting (smart_fields_conditions + signature_template_ids), and content (an ILayoutBlock block tree). Paginated (page/limit).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered without help. The description adds the paginated nature of the call and notes the retrieved shape includes targeting and a content block tree, but with an output schema present that return detail is partly redundant, and nothing is said about rate limits, auth, or result size limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence that front-loads the resource and appends the payload/pagination detail without filler. It is compact and every clause adds information, though the inline backticked field names make it denser than it needs to be for a list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, fully schema-documented list tool with an output schema, the description supplies the scope (workspace-wide), the returned content shape, and the pagination model — enough for correct invocation. The only real gap is the absence of guidance on when to choose it over sibling list tools or campaign-specific operations.
Complex tools with many parameters or behaviors need more documentation. Simple 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 every parameter (page, limit, max_pages, auto_paginate, context) is already documented at the schema level. The description only restates the page/limit pair without adding format or interaction semantics (e.g., how auto_paginate interacts with max_pages), so the 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?
States a specific verb (List) and resource (the workspace's marketing campaigns), and even enumerates the per-item payload (status, targeting, content block tree), which cleanly separates it from preview/pause/resume/schedule_campaign siblings. It does not explicitly contrast itself with other list_* siblings, so a 4 rather than a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb — an agent can infer this is the read path for campaigns versus create/update/delete/preview, but the description never states when to prefer it, when not to, or what condition would route the agent elsewhere. Pagination mechanics are mentioned but that is a parameter concern, not selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_signature_installationsList per-email signature installation stateARead-onlyIdempotentInspect
Where each signature actually IS (or failed to be) installed, per email: one row per email × signature × integration/email client with status (installed | failed | uninstalled) and, on failure, the error_code (e.g. user_not_found = the recipient has no account on that integration). Use this to answer 'is X's signature installed on ?' or 'which installs failed and why?' — list_integrations only reports workspace-level connection health. Filter by email_id or email_address, signature_template_id, integration_id, status.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| status | No | Restrict to one state: installed | failed | uninstalled. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| email_id | No | Restrict to one email (its UUID). | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). | |
| email_address | No | Restrict to one email address (exact match) — no need to resolve the UUID first. | |
| integration_id | No | Restrict to one integration (its UUID from list_integrations). | |
| signature_template_id | No | Restrict to one signature template (its UUID). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes further by disclosing the status enumeration and, notably, the semantics of error_code (user_not_found = the recipient has no account on that integration) — a field not present in the input schema, so this is genuine added context. It stops short of describing pagination behavior, which schema defaults cover anyway.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool returns before the routing guidance, and the parenthetical explanation of failure states is worth its length. It is dense — three distinct ideas packed into a few clauses — but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation isn't strictly required, yet the description adds the row shape and failure codes helpfully. Filters are enumerated and the sibling boundary is clear; only minor operational details (auto_paginate interaction with max_pages) are left entirely to the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every filter (page, limit, status, email_id, email_address, integration_id, signature_template_id) is already documented with type, enum, and bounds. The description only enumerates the filterable fields without adding format or syntax beyond the schema, so the 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?
States a specific verb+resource ('where each signature actually IS (or failed to be) installed, per email') and defines the row granularity (email × signature × integration/email client) plus the status field. It explicitly distinguishes itself from the nearby sibling list_integrations, which only reports workspace-level connection health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete triggering questions ('is X's signature installed on <integration>?', 'which installs failed and why?') and names the alternative tool plus the condition that rules it out. An agent can route correctly without opening any schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_signature_recipientsList a signature's recipientsARead-onlyIdempotentInspect
REQUIRES signature_id (a signature template UUID) — there is no workspace-wide form of this tool. Without one in hand, call list_signatures first and pass an id from it. List the emails a signature is assigned to — each with the sources explaining why (manual, smart_field, or an org unit) — plus the selection config (manual ids, targeted org units, smart-field conditions, and the assign-to-all-future flag). data is paginated; selection is the full rule config.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| signature_id | Yes | The signature template's UUID (the `id` from list_signatures). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| selection | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so safety and repeatability are covered. The description adds genuinely useful behavior not in the annotations: `data` is paginated while `selection` is returned as the full rule config, and it discloses that a sibling add/set call exists for the write side. It says nothing about auth scope, rate limits, or ordering, so it stays modest rather than 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 blocking requirement is front-loaded in the first words, which is exactly right for a tool that fails without signature_id. The rest is dense but each clause carries information (what sources mean, what selection contains, pagination vs. full-config behavior). Slightly long for a read-only list endpoint, but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent list tool with a full annotation profile, an output schema, and 100% schema coverage, the definition covers the only real failure mode (missing signature_id) and how to recover from it. It even previews the shape of the returned rule config, so nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so page, limit, context, max_pages, signature_id and auto_paginate are all already documented, which sets the baseline at 3. The description's signature_id note (a signature template UUID from list_signatures) largely restates the schema, and it never discusses auto_paginate/max_pages interaction; its extra detail (sources values, selection contents) explains the return payload rather than the inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the emails a signature is assigned to) and then details the payload shape (sources explanations plus the selection rule config). That scope is clearly distinct from list_signatures, which it names, and from the sibling mutators add/remove/set_signature_recipient*. An agent can pick this tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the prerequisite explicitly (REQUIRES signature_id, a template UUID), rules out the wrong assumption ("there is no workspace-wide form of this tool"), and routes the agent to the alternative that produces the needed id (list_signatures, pass an `id` from it). That is explicit when-to-use and how-to-unblock guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_signaturesList signaturesARead-onlyIdempotentInspect
List the workspace's email-signature templates. A Scribe 'signature' is a reusable template (the layout that gets deployed to teammates' mail clients); v1 returns the workspace's primary templates. Paginated (page/limit). The large content/draft_content block trees are omitted by default — pass include_content:true to fetch them.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). | |
| include_content | No | Include the full `content`/`draft_content` block trees. Default false: they are omitted to save tokens, but `has_content`/`has_draft_content` still tell you whether each exists. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description adds real behavior: content trees are omitted by default to save tokens and has_content/has_draft_content signals remain. It discloses the pagination model as well. It stops short of describing return shape, but that is minor given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then definition, then scope, then the content toggle. The definitional sentence earns its place because 'signature' is overloaded in this sibling set, though the description runs slightly long for a simple list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description covers purpose, scope, pagination, and the content-omission tradeoff. It is essentially complete for an agent to call the tool correctly, with only a missing explicit sibling-routing rule as a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents page, limit, include_content, auto_paginate, and max_pages in full. The description's mention of pagination and the include_content flag largely restates what the schema already says, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List the workspace's email-signature templates") and disambiguates the domain term by defining what a Scribe 'signature' is. The scope note ("v1 returns the workspace's primary templates") separates it from siblings like list_signature_variants and list_signature_installations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for when to call it and one concrete routing decision (pass include_content:true to fetch the block trees). It never names an explicit alternative or a when-not condition, but the scope clarification effectively frames its place among the many signature-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_signature_variantsList signature variantsARead-onlyIdempotentInspect
List a signature's reply and internal variants (always both entries). A variant is an alternate signature shown on reply emails (reply) or internal/same-domain emails (internal). Each entry reports its state (exists / activated / hidden / show_marketing_campaigns) and content. Also returns supported: variants require an active Microsoft 365 signatures integration, and writes return 409 variants_unavailable when it's false.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| signature_id | Yes | The primary signature's UUID (the `id` from list_signatures). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| supported | Yes | Whether this workspace can use variants (it has an active Microsoft 365 signatures integration). Writes return 409 variants_unavailable when false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only, idempotent, non-destructive profile, so the bar is lower. The description adds real behavioral value beyond that: it always returns both entries, enumerates the reported states, explains the `supported` flag, and discloses the 409 variants_unavailable behavior and the M365 integration dependency. It stops short of describing pagination or ordering, if any.
Agents need to know what a tool does to the 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 tightly focused sentences, front-loaded with the core action and backed by the variant definition and the `supported` caveat. Every sentence earns its place, though the variant definition is slightly expansive for a list tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return fields needn't be re-explained, yet the description still clarifies `supported` and the 409 edge case. Combined with 100% param coverage and full annotations, an agent has everything needed to call it correctly; only explicit sibling routing is absent.
Complex tools with many parameters or behaviors need more documentation. Simple 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 (signature_id and the analytics-only context field) are already fully documented. The description adds no parameter-level detail beyond the schema, so the 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 gives a specific verb (List) and a precisely scoped resource (a signature's reply and internal variants), then defines what a 'variant' is and its two sub-types. The resource is specific enough that an agent can distinguish it from siblings like list_signatures or get_signature_html without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides a useful prerequisite (variants require an active Microsoft 365 signatures integration) and the failure condition (writes return 409 variants_unavailable when unsupported), which is implied usage context. However, it never explicitly says when to call this versus update_signature_variant, delete_signature_variant, or preview_signature, leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_smart_fieldsList smart fieldsARead-onlyIdempotentInspect
List the workspace's smart-field definitions — the merge fields available to signature templates (e.g. first name, job position, custom fields). Each carries its kind, whether it's a default field, and an integration_id when its values are synced. The computed Email field is not exposed. Paginated (page/limit).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, non-destructive profile, so the bar is lower. The description adds real value beyond them: the computed Email field is deliberately not exposed, results are paginated, and returned fields carry kind/default/integration_id semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no waste, front-loaded with the verb and resource before the caveats (Email field excluded) and the pagination note. 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?
An output schema exists, so return values need not be spelled out, and a full 100% schema coverage plus read-only annotations mean the description only needs to add scope and exclusions. It does both, leaving nothing an agent needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including page/limit/auto_paginate/max_pages/context, so the schema carries parameter meaning. The description only restates pagination ('page/limit') and adds no format or default details beyond the schema; 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?
States a specific verb (List) and resource (smart-field definitions) and immediately clarifies what those are: the merge fields available to signature templates. The scope ('the workspace's') plus the examples (first name, job position, custom fields) distinguish it from sibling list_* tools and from create/update/delete_smart_field.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer you call this to discover available merge fields for signature templates, and the exclusion of the computed Email field is a useful boundary. But there is no explicit when-to-use/when-not or pointer to an alternative sibling, so it stays at minimum-viable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_teammatesList teammatesARead-onlyIdempotentInspect
List the workspace's teammates. A 'teammate' is a managed person whose email signature Scribe deploys; each carries their email addresses and smart-field values (the data merged into signature templates). Paginated (page/limit).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds genuine value on top: it discloses the payload contents (email addresses plus smart-field values merged into templates) and the paginated nature of the result. It stops short of describing auto-pagination behavior, which lives only 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 tight sentences, front-loaded with the action and scope, then the domain definition, then pagination. Every sentence earns its place, though the trailing "(page/limit)" is mildly redundant given the schema and could be dropped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is not required, and the description still volunteers what a teammate record contains. Combined with full annotation coverage and a 100%-documented schema, the definition gives an agent enough to call it correctly; only the distinction from sibling list tools is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all five parameters are documented there, so the schema carries the load. The description's parenthetical "(page/limit)" merely echoes two schema fields and says nothing about auto_paginate or max_pages, so it adds no meaning beyond the structured data. 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?
States a specific verb and resource ("List the workspace's teammates") and goes further by defining what a teammate is — a managed person whose signature Scribe deploys, carrying email addresses and smart-field values. That definition distinguishes it from near-neighbors like list_signature_recipients and list_signature_installations without the agent having to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the resource definition (listing teammates rather than recipients or installations), but the description never states when to reach for this tool versus list_signature_recipients, or how it relates to sync_teammates. It is adequate but leaves the routing inference entirely to the caller.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_visitorsList identified visitorsARead-onlyIdempotentInspect
The workspace's identified visitors — the customer's own end-users, described by their identify calls (NOT Scribe members/teammates). Each row: distinct_id, traits (PII lives here), first/last_seen_at, and first_touch (the signature click that drove their first visit). Filter by distinct_id (exact), a trait (trait_key + trait_value, e.g. plan=enterprise), identified_via, and first-seen date range. Newest first, paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page (default 1). | |
| limit | No | Page size, 1–100 (default 50). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| end_date | No | Only visitors first seen on/before this ISO date. | |
| max_pages | No | Page cap when auto_paginate is true (default 5). | |
| trait_key | No | Segment by a trait: the trait name (e.g. `plan`). Use with `trait_value`. | |
| start_date | No | Only visitors first seen on/after this ISO date. | |
| distinct_id | No | Find a visitor by their exact user id (distinct_id). | |
| trait_value | No | The trait value to match (e.g. `enterprise`). | |
| auto_paginate | No | Fetch multiple pages up to `max_pages` (default false). | |
| identified_via | No | Filter by acquisition channel: `browser` or `api`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| truncated | Yes | True when auto_paginate stopped at max_pages with more results remaining. |
| pagination | Yes | |
| pages_fetched | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the description only needs to add context. It does: default sort order ('Newest first'), pagination, and the important disclosure that PII lives in the traits column. It omits how auto_paginate/max_pages interact, but the added context is genuinely 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?
Four tightly packed sentences, front-loaded with what the rows are and who they are not before moving to filters. Nothing is wasted, though the middle sentence carries a heavy comma list that borders on density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 an 11-parameter list tool with a full output schema and complete annotation coverage, the description covers identity, contents, filters, ordering, and pagination. The pagination-control parameters are left to the schema, which is acceptable given 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?
Schema coverage is 100%, so every parameter is already documented, and the baseline is 3. The description reinforces a few semantics ('distinct_id (exact)', trait_key+trait_value with a plan=enterprise example, first-seen date range) but adds little beyond the schema's own examples. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 ('list the workspace's identified visitors') and immediately disambiguates the domain boundary: 'the customer's own end-users ... NOT Scribe members/teammates.' That single contrast separates it from list_teammates and get_visitor without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use (listing identified end-users, with the exact filters available) and explicitly excludes teammates. It never names when to prefer the sibling get_visitor or get_visitor_breakdown instead, so the routing guidance is clear but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pause_marketing_campaignPause a marketing campaignAInspect
Pause an active campaign — it stops applying to signatures. Only an active campaign can be paused (otherwise 409). Resume later with resume_marketing_campaign.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The campaign's UUID (the `id` from list_marketing_campaigns). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing the state precondition and the specific failure mode (409 on a non-active campaign), plus reversibility via resume. Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=false); the description usefully adds the operational constraint they do not express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler; the effect is front-loaded and the constraint plus escape hatch follow in the right order. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the precondition, error behavior, and reversal path. What is missing is minor: whether pausing preserves configuration for re-activation is implied but not stated.
Complex tools with many parameters or behaviors need more documentation. Simple 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 `id` and `context` parameters are already fully documented in the schema, including the cross-reference to list_marketing_campaigns. The description adds no parameter-level detail beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (pause) and resource (marketing campaign) plus the concrete effect: 'it stops applying to signatures.' This distinguishes it immediately from delete_marketing_campaign and update_marketing_campaign in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition ('Only an active campaign can be paused') and routes the agent to the follow-up action (resume_marketing_campaign). It stops short of naming the adjacent alternatives an agent might confuse this with, such as delete or schedule, so it is strong but not fully comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_marketing_campaignPreview a campaign (placeholder values)ARead-onlyIdempotentInspect
Render a marketing campaign's content block tree to HTML with PLACEHOLDER values — the same recipient-less, tracking-free render preview_signature does. Use it to VERIFY a banner's layout after create/update_marketing_campaign and BEFORE schedule_marketing_campaign: read the returned html, confirm it looks right, fix the content if not. An empty html means the campaign has no content yet.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The campaign's UUID (the `id` from list_marketing_campaigns). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds non-obvious behavior: values are placeholders, the render is recipient-less and tracking-free, and an empty `html` means the campaign has no content yet. The empty-result signal is exactly the kind of behavioral detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the core action, then the workflow, then the edge case. No filler, and the most decision-relevant information (what it renders, when to call it) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return shape need not be explained, yet the description still flags the one field that matters for interpretation (`html`) and what an empty value means. Nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `id` and `context` are already documented in the schema; the description adds no syntax or sourcing detail beyond what the schema states. Baseline 3 is appropriate when the schema carries the parameter 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?
Specific verb and resource: 'Render a marketing campaign's `content` block tree to HTML with PLACEHOLDER values'. It also explicitly anchors itself against a sibling ('the same recipient-less, tracking-free render preview_signature does'), so an agent can distinguish it from preview_signature without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow position: use it to VERIFY layout after create/update_marketing_campaign and BEFORE schedule_marketing_campaign. It also states the follow-up action (read `html`, fix content if wrong), leaving no ambiguity about when this tool is the right call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_signaturePreview a signature (placeholder values)ARead-onlyIdempotentInspect
Render a signature to HTML with PLACEHOLDER values (each smart field shows its label, like the editor canvas for an empty field) — no recipient needed. Use this to VERIFY layout and spacing after create_signature / update_signature and BEFORE publish_signature: read the returned html to confirm the result looks right (no overlapping lines, correct spacing), and fix the draft if not. Renders the draft by default; pass content:"published" for the live copy.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The signature's UUID (the `id` from list_signatures). | |
| content | No | Which tree to render: the working `draft` (default) or the live `published` content. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description still adds genuine context beyond that: smart fields render as placeholder labels (not resolved data), it works without a recipient, and it renders the draft tree unless content="published" is passed. That is meaningful disclosure for a preview tool, though it says nothing about rendering cost or 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?
Front-loads what the tool produces (placeholder HTML, no recipient) before the workflow guidance, and the parenthetical examples make the abstract claim concrete. It is dense and packed with em-dash clauses, slightly more than strictly needed, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be enumerated, yet the description usefully points the agent at the `html` field and tells it what to look for (overlapping lines, spacing). Combined with the placeholder semantics, the draft/published switch, and the confirmed absence of a recipient requirement, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, content, and context, including the draft default. The description only restates the default and glosses 'published' as 'the live copy', which adds little beyond the enum 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?
States a specific verb and resource (render a signature to HTML) and immediately qualifies it with the distinguishing trait: PLACEHOLDER values, each smart field showing its label, and no recipient required. This lets an agent tell it apart from get_signature_html (real rendered output) without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit workflow positioning: use it to verify layout/spacing after create_signature or update_signature and before publish_signature, and fix the draft if the result is wrong. The 'no recipient needed' clause implicitly scopes it against recipient-based rendering, but no alternative tool is named and no explicit when-not condition is stated, 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.
publish_signaturePublish a signatureADestructiveInspect
Publish a signature template: copy draft_content into the live content and, when the workspace can, trigger installation to connected mail clients. SIDE EFFECT: a successful publish also activates installation for the template (signature_installation_activated becomes true) — the signature goes live to its recipients' mail clients, not just in the API. Confirm with the user before publishing a signature that has recipients. Returns the updated template (with last_published_at set).
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The signature's UUID (the `id` from list_signatures). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds the key non-obvious trait: a successful publish activates installation so the signature goes live to recipients' mail clients, not just the API. It also discloses the returned template carries last_published_at. This is exactly the beyond-annotations context an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and the side-effect warning early. Slightly long at four sentences, with the 'live to recipients, not just in the API' clause partially restating the side-effect line, but every sentence carries useful signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need only minimal mention, yet the description still frames the mechanic, the installation side effect, and the confirmation caution. Nothing an agent needs to decide or safely invoke this destructive tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both `id` and the analytics `context` field are fully documented in the schema. The description mentions draft_content/content/last_published_at, which are template fields rather than input parameters, so it adds no syntactic or format 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?
States a specific verb+resource ('Publish a signature template') and then explains the mechanic (copy draft_content into live content, trigger installation). This distinguishes it from siblings like install_signature, publish_signature_variant, and update_signature, so an agent can route correctly without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear conditional guideline — 'Confirm with the user before publishing a signature that has recipients' — and notes installation fires 'when the workspace can.' It stops short of naming alternatives (e.g., publish_signature_variant for variants, install_signature for install-only), so context is clear but not fully disambiguated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_signature_variantPublish a signature variantADestructiveInspect
Publish a signature's reply/internal variant: copy its draft_content into the live content and redeploy through the primary signature. Returns the updated variant (with last_published_at set). Returns 409 if the variant hasn't been created yet (variant_not_created) or if the workspace lacks a Microsoft 365 signatures integration (variants_unavailable).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which variant to publish. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| signature_id | Yes | The primary signature's UUID (the `id` from list_signatures). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the safety profile is partly covered. The description adds real value beyond that by explaining exactly what gets overwritten (draft_content replaces live content) and enumerating the 409 failure modes with their codes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core action and mechanism, with the behavior and error details following in priority order. Dense but every sentence contributes; minor room to be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, yet the description still notes the key return marker (`last_published_at`). Combined with the safety annotations and the prerequisites/error cases enumerated, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema, and the enum for `kind` is explicit. The description only implies 'reply/internal' in prose and adds no format or syntax detail beyond the schema, so the 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?
States a specific verb (publish) plus resource (signature's reply/internal variant) and describes the exact mechanism: copying `draft_content` into live `content` and redeploying through the primary signature. This clearly distinguishes it from siblings like update_signature_variant and publish_signature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The error conditions (409 for variant_not_created, variants_unavailable) imply prerequisites, which helps an agent understand when the call is viable. However, it never explicitly says when to use this versus update_signature_variant or publish_signature, so the routing guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_docs_pageRead a help-center pageARead-onlyIdempotentInspect
Fetch the FULL content of one Scribe help-center page by its path (from a search_docs result). Use it when the search excerpt isn't enough — e.g. to walk a user step-by-step through an integration setup, DNS configuration, or the conversion-tracking install. Public documentation; needs no scope and touches no workspace data.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Docs page path from a search_docs result (its `Page:` line), e.g. 'en/conversion-tracking'. A leading '/' and the '.mdx' extension are added automatically when missing. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Normalized page path that was read, e.g. '/en/conversion-tracking.mdx'. |
| content | Yes | Full MDX content of the page. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and openWorld, so the safety profile is covered. The description still adds real context the annotations cannot: it is public documentation that 'needs no scope and touches no workspace data', which matters for an agent weighing auth and data-exposure concerns. Return shape is left to 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?
Three short sentences, front-loaded with purpose before usage and then the auth/data note. Nothing is redundant and 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 an output schema covering return values and annotations covering the safety profile, the description supplies exactly the missing pieces: when to escalate from search_docs and that no scope or workspace data is involved. Nothing an agent needs to call this correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple 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 both parameters — including the path format rules and the strict 'context' analytics constraint — are already fully documented in the schema. The description only restates that the path comes from a search_docs result, adding no syntax or format detail beyond it, so the 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 first sentence states a specific verb and resource ('Fetch the FULL content of one Scribe help-center page') plus the locating key ('by its path'). It explicitly ties itself to a sibling's output ('from a search_docs result'), so an agent can distinguish it from search_docs without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the selecting condition plainly — 'Use it when the search excerpt isn't enough' — and names the sibling that produces that excerpt. Concrete escalation examples (integration setup, DNS configuration, conversion-tracking install) make the trigger unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_signature_recipient_entitiesUntarget signature from org unitsADestructiveIdempotentInspect
Stop targeting a signature at a batch of directory org units / groups (by uuid). Manual and condition-based recipients are untouched. Returns the updated selection.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| signature_id | Yes | The signature template's UUID (the `id` from list_signatures). | |
| integration_entity_ids | Yes | Org-unit/group uuids to untarget (from list_integration_entities). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds useful behavioral context beyond the annotations: the operation is scoped to directory entity targets and explicitly leaves manual/condition-based recipients untouched, which is exactly the kind of side-effect boundary an agent needs before a destructive call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and resource. Every sentence earns its place: action, scope exclusion, and return statement, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive entity-removal tool with a full output schema and complete annotations, the description covers the operation, the untouched scope, and the return. Nothing an agent needs to call it correctly is missing, and the return value need not be spelled out given 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% and every parameter is documented there, so the schema carries the semantics. The description only adds '(by uuid)' and '(batch)', which the schema already conveys via the array of integration_entity_ids and its '(from list_integration_entities)' hint — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Stop targeting a signature at a batch of directory org units / groups') and scopes it by uuid. It implicitly distinguishes itself from the sibling remove_signature_recipients by specifying org units/groups, so an agent can route between entity-level and recipient-level removal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The clause 'Manual and condition-based recipients are untouched' clarifies the scope, telling the agent this tool only applies to directory entity targets. However, it never explicitly names an alternative tool or the condition that would select it, so the routing guidance is inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_signature_recipientsRemove manual signature recipientsADestructiveIdempotentInspect
Remove a batch of manual recipients (by email uuid) from a signature. Only manual assignment is affected — emails matched by a condition or org unit stay. Returns the updated selection.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| email_ids | Yes | Email uuids to unassign as manual recipients (removing a non-recipient is a no-op). | |
| signature_id | Yes | The signature template's UUID (the `id` from list_signatures). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds precise blast-radius information (manual recipients only; conditioned/org-unit recipients survive) and mentions that the updated selection is returned, which goes beyond the annotation set. It does not mention permission requirements or any draft/published-state constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action, followed by the scoping caveat and the return note. No filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the return value need not be explained further, and full annotation coverage handles the safety profile. The remaining minor gap is preconditions — nothing states whether the signature must be unpublished or which permissions are required for a destructive batch removal.
Complex tools with many parameters or behaviors need more documentation. Simple 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 (signature_id, email_ids, context) are already documented, including the no-op behavior for non-recipients. The description restates the uuid/batch nature of email_ids but adds no syntax or format detail beyond the schema — 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?
States a specific verb (remove), resource (manual signature recipients), and scope (batch, by email uuid). The clause 'Only manual assignment is affected — emails matched by a condition or org unit stay' distinguishes it from the similarly named remove_signature_recipient_entities sibling without the agent needing to open either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly signals the condition under which this tool applies — recipients that were manually assigned — and implicitly routes condition/org-unit recipients elsewhere. It stops short of naming the alternative tool explicitly, so the agent must infer that remove_signature_recipient_entities covers the other case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resume_marketing_campaignResume a marketing campaignAInspect
Resume a paused campaign — it becomes active again. Only a paused campaign with a future end time can be resumed (otherwise 409). Returns 403 if the workspace's plan does not include marketing campaigns.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The campaign's UUID (the `id` from list_marketing_campaigns). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond the annotations: the state transition (paused to active) and two specific failure modes (409 for invalid state, 403 for plan exclusion). Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description usefully layers on error semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the core state change front-loaded and preconditions following. Every sentence carries distinct information with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation; the description supplies the state change and error conditions, which is nearly complete. Only minor gaps remain, such as rate-limit or permission nuances beyond the plan check.
Complex tools with many parameters or behaviors need more documentation. Simple 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 (id and context) are already fully documented. The description adds no parameter-level detail beyond the schema, so the 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?
States a specific verb+resource ('Resume a paused campaign') and clarifies the resulting state ('it becomes active again'), making the transition unambiguous. It doesn't explicitly name contrastive siblings like pause_marketing_campaign or schedule_marketing_campaign, but the state-based framing makes the intent clear enough to distinguish it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions for use: the campaign must be paused and have a future end time, with the 409 outcome otherwise, plus a 403 plan restriction. This tells the agent when the call will succeed versus fail, though it doesn't explicitly route to alternative tools for the error cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schedule_marketing_campaignSchedule a marketing campaignAInspect
Launch a draft or paused marketing campaign on its own dates. If the campaign's start_time (set with create_ or update_marketing_campaign) has passed, it goes live at once and the targeted signatures Scribe pushes are reinstalled with the banner; otherwise its status becomes scheduled and it starts at start_time. Use it to launch a draft from create_marketing_campaign, after checking the banner with preview_marketing_campaign. To restart a paused campaign now, use resume_marketing_campaign, which ignores start_time; to stop one, pause_marketing_campaign; to change dates, update_marketing_campaign first. Not idempotent: a campaign that is not draft or paused, or whose end_time has passed, returns 409. Needs the marketing_campaigns:write scope; 403 if the plan lacks marketing campaigns.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The campaign's UUID (the `id` from list_marketing_campaigns). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing non-idempotency with a concrete 409 failure condition (not draft/paused, or end_time passed), the require write scope (marketing_campaigns:write) and the 403 plan-lacks-feature case, plus what happens to the campaign's status and installed Scribe pushes. This is rich behavioral context the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its branch behavior are front-loaded, followed by routing guidance and the failure/scope clauses. Dense but every sentence carries distinct, non-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 state-changing tool with an output schema present, the description covers precondition, branch outcomes, error semantics, and auth requirements. Nothing an agent needs in order to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters (id, context) are already documented in the schema, and the description adds little about them directly. It references start_time as a related field, but that is not an input parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('launch a draft or paused marketing campaign on its own dates') and immediately distinguishes it from resume_marketing_campaign, pause_marketing_campaign, and update_marketing_campaign. An agent can tell exactly what this does and what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it (launch a draft from create_marketing_campaign, after preview_marketing_campaign) and routes to the correct alternatives for restarting (resume), stopping (pause), and changing dates (update). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsSearch the Scribe help centerARead-onlyIdempotentInspect
Search the official Scribe help-center documentation (help.scribe-mail.com) and return matching excerpts with titles and links. ALWAYS use this before answering product/how-to questions from memory — how smart fields work, how the editor works, DNS configuration, connecting an integration (Google Workspace, Microsoft 365, Zoho Mail, Front, …), conversion-tracking setup, plans and billing — and before telling a user something isn't possible. Results are excerpts: to read a full guide, pass the page path from a result to read_docs_page. Public documentation; needs no scope and touches no workspace data.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | What to look up, e.g. 'how do smart fields work', 'connect Microsoft 365', 'DNS'. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| language | No | Docs language code (e.g. 'fr'). Defaults to 'en'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | Matching excerpts with titles, links, and a `Page:` path per result (pass that path to read_docs_page for the full guide), or a no-match notice. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/openWorld/non-destructive, but the description adds that it is 'Public documentation; needs no scope and touches no workspace data', which clarifies auth requirements not in annotations, and explains the excerpt nature of results. It stops short of describing result count 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?
Front-loaded with the core action and the routing instruction, then gives the trigger list and the excerpt caveat. The parenthetical example list (Google Workspace, Microsoft 365, Zoho Mail, Front, …) is slightly heavy but genuinely narrows the trigger scope.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be spelled out, yet the description still notes results carry 'titles and links'. Combined with the scope statement and the handoff to read_docs_page, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, context, and language are already fully documented in the schema. The description only marginally links results to the sibling's input ('pass the page path from a result to read_docs_page'), which is not a parameter of this tool, 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?
States a specific verb and resource ('Search the official Scribe help-center documentation') plus the exact domain, and clearly distinguishes itself from the sibling read_docs_page by characterizing output as excerpts versus a full guide.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 'ALWAYS use this before answering product/how-to questions from memory' and 'before telling a user something isn't possible', enumerating trigger topics and naming the alternative (read_docs_page) with the condition that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_feedbackSend feedback to the Scribe teamAInspect
Send a bug report, missing-capability request, or question straight to the Scribe team. When a tool fails unexpectedly, a capability the user needs is missing, or the docs can't answer their question, OFFER the user to report it — and only send after they agree (the report includes their workspace identity). Works with any valid API key, no extra scope. Returns { received: true } once accepted; the team reads every report.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| message | Yes | The feedback itself (max 5000 chars). Include what was attempted, what happened, and what was expected — enough for the team to act without this conversation. | |
| category | Yes | bug: a tool errored or behaved wrong. missing_capability: the user needed something the API/MCP can't do. question: unanswered product question. other: anything else. | |
| reporter | No | Who is reporting (e.g. the user's email), ONLY if the user agreed to share it. | |
| tool_name | No | The MCP tool or API endpoint the feedback is about, when applicable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-idempotent, open-world write, and the description adds substantial context beyond them: the report carries the workspace identity, consent is mandatory before sending, no extra auth scope is needed, and it returns {received: true}. That is exactly the extra behavioral detail annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose, then usage/consent, then operational facts. 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 single write tool with a full output schema, it covers purpose, triggers, consent workflow, identity disclosure, and auth scope. The return value explanation is bonus rather than a gap, 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?
Schema description coverage is 100%, so all five parameters (including the sensitive context field and the enum) are already fully documented in the schema. The description adds no parameter-level syntax or format detail beyond what structured data provides, so the 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?
States a specific verb (send) and resource (feedback) with the exact content types accepted: bug report, missing-capability request, or question. No sibling tool in the list covers this function, so an agent can identify it immediately without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly enumerates the triggering conditions (tool fails unexpectedly, capability missing, docs can't answer) and pairs them with the required consent step ('OFFER the user... only send after they agree'). This is precisely when-to-use plus a precondition, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_test_emailSend yourself a test of a signatureAInspect
Mail the user a test of a signature's DRAFT, to their own inbox and no one else's: what publish would install (the published design when the signature has no draft), with one email's real values and no tracking. To see a design in a real mail client (dark mode, Outlook, a phone) before anyone gets it: use it instead of copying, assigning, publishing or installing a signature to check it. There is no recipient to set: it goes to the signed-in user's own address (sent_to in the result), never a teammate's or anyone else's. email_id chooses whose values show; the user's own by default. Sent in the background, usually within a minute. 10 an hour per user: 429 rate_limited past that, say so and stop. 422 on email_id when the user has no address in the workspace (ask whose values to show), or on draft_content when the signature has no design yet. Unknown signature or email → 404.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| email_id | No | UUID of the email whose values (name, title, phone…) the test shows: the `id` from list_emails, e.g. a teammate's, to see their signature. Omit for the user's own address in the workspace. It only chooses the values: the mail still goes to the user alone. | |
| signature_id | Yes | UUID of the signature to test (from list_signatures). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present, it still adds substantial context: the send goes only to the signed-in user's address (surfaced as `sent_to`), runs in the background within a minute, and is capped at 10/hour with a 429 `rate_limited` response. It also enumerates 422 and 404 failure conditions, which annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, recipient constraint, and usage in the first two clauses, then attaches timing, rate limit, and error semantics. Dense but every sentence carries information; only the error enumeration borders on over-packed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and annotations cover the safety profile. The description still supplies recipient behavior, async timing, rate limits, and error codes, leaving nothing an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning: it clarifies `email_id` only selects whose values display (the user's own by default) while the mail still goes to the user alone, and ties a 422 to `email_id` when the user has no workspace address. This goes beyond the schema's field-level text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Mail the user a test of a signature's DRAFT') plus precise scope ('their own inbox and no one else's'). It explicitly frames what would be installed, cleanly separating it from preview_signature, publish_signature, and install_signature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when ('to see a design in a real mail client before anyone gets it') and names the alternatives it replaces ('instead of copying, assigning, publishing or installing a signature to check it'). Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_signature_recipient_rulesSet signature recipient rulesADestructiveIdempotentInspect
Set a signature's rule-based targeting: the smart-field conditions tree and/or the assign_to_all_future_emails flag (provide at least one). Replaces conditions wholesale; manual and org-unit targeting are untouched. An unknown field or bad operator fails with 422.
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| conditions | No | Replace the smart-field rule tree: an array of OR-groups, each an array of ANDed conditions. Pass [] to clear all conditions. | |
| signature_id | Yes | The signature template's UUID (the `id` from list_signatures). | |
| assign_to_all_future_emails | No | Whether the signature auto-assigns to newly-created emails. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds real specifics beyond that: conditions are replaced wholesale rather than merged, and invalid input fails with 422. Those details materially change how an agent should prepare the call. It does not cover rate limits or auth scoping, keeping it off a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler. The core capability and the at-least-one precondition are front-loaded, followed by the replacement semantics and the error behavior, in order of decision-relevance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. The description supplies the destructive-replacement nuance and the 422 failure mode, which are the main things an agent needs before calling. Only the absence of guidance on sourcing smart_field_id constraints (beyond the schema reference) keeps this from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple 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 every parameter (including the nested condition shape and the context field) is already documented in the schema. The description names the two meaningful inputs but adds no format or syntax detail beyond what the schema provides. Baseline 3 is correct when 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?
States a specific verb (Set) plus the resource (a signature's rule-based targeting) and enumerates exactly what is set: the `conditions` tree and/or the `assign_to_all_future_emails` flag. It also carves out what it does not touch (manual and org-unit targeting), which cleanly separates it from sibling tools like add_signature_recipients.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 the caller a precondition: provide at least one of conditions or assign_to_all_future_emails. The note that manual and org-unit targeting are untouched implies other tools handle those cases, but no sibling is named outright, so it falls short of a full when/when-not routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_teammatesSync teammates nowADestructiveInspect
Resync the workspace's team now, as the dashboard's Refresh does, instead of waiting for the daily sync: every activated teammates integration (a directory such as Google Workspace, Microsoft Entra ID or Zoho Mail) and smart fields integration (BambooHR, Okta, …) syncs, so new people, aliases and changed details (a job title) reach Scribe and their signatures. A teammates sync can add and remove teammates, a smart fields sync changes and clears their values; both install their signatures, and neither mails anyone. Takes no argument. The syncs run in the background: the result lists those started. An integration whose sync already runs, or that lost its access, is left out. 409 sync_already_running when every sync already runs, integration_access_lost when every integration must be reconnected first, no_integration_to_sync when none is connected (relay the dashboard link).
| Name | Required | Description | Default |
|---|---|---|---|
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=true, openWorldHint=true), the description discloses the real consequences: teammates syncs can add and remove people, smart fields syncs change and clear values, signatures get installed, no email is sent, execution is backgrounded, skipped integrations are left out, and it documents three distinct 409 error codes with remediation hints. This is exactly the kind of mutation-side-effect disclosure the annotations cannot carry.
Agents need to know what a tool does to the 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 definition is front-loaded with the core action and then layers consequences and error codes, with no filler sentences. It is dense and longer than typical, but the length is defensible for a destructive, background-executing bulk operation with three failure 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?
With an output schema present and annotations covering the safety profile, the description supplies the remaining context an agent needs: scope of what syncs, side effects, background execution, skip behavior, and every documented error code. Nothing material about invocation 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% and there is only one parameter (an analytics-only 'context' rationale), so the schema already carries the semantics; baseline 3 applies. 'Takes no argument' adds mild reassurance that no business input is needed, but it arguably sits in slight tension with a required 'context' field, so no bump is warranted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (resync) and resource (the workspace's team) and anchors it to a known mental model ('as the dashboard's Refresh does'), which separates it cleanly from list_teammates, create_teammate and update_teammate. It also enumerates exactly what gets synced (teammates integrations, smart fields integrations), so an agent knows this is a bulk refresh trigger, not a per-entity CRUD call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear use condition: call this to sync immediately 'instead of waiting for the daily sync'. That is actionable context. It does not, however, state a when-not case or point to a sibling alternative (e.g. list_integrations to check connectivity first), so it falls short of explicit routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_assetUpdate an assetADestructiveIdempotentInspect
Update an asset's metadata (name and/or role) by UUID. The image bytes can't be changed — create a new asset to replace them. An unknown role returns 422.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The asset's UUID (the `id` returned by list_assets). | |
| name | No | New display name. | |
| role | No | New role (company_logo / profile_picture / banner), or null to clear it. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (readOnlyHint=false, destructiveHint=true, idempotentHint=true, openWorldHint=true), so the bar is lower. The description still adds real value: it scopes the mutation to metadata only, states the immutability constraint on image bytes, and discloses the 422 error on an unknown role.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and its scope; the constraint and the error behavior follow in descending order of importance. 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?
An output schema exists, so return values need no explanation. The description covers scope, identity, immutability, and error behavior; the only omission is whether omitted fields are left untouched (which the idempotentHint and optional params largely imply).
Complex tools with many parameters or behaviors need more documentation. Simple 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 id, name, role and context, so baseline 3 applies. The description adds only 'by UUID' and the 422-on-unknown-role behavior, which is marginal beyond the schema's enum for role.
Input schemas describe structure but not intent. Descriptions should explain 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 (update), resource (asset), exact mutable surface (name and/or role), and the key identifier (UUID). It is clearly separable from create_asset, delete_asset, and list_assets without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not and names the alternative for the common mistaken case: image bytes cannot be changed, so use create_asset instead. It does not spell out what 'role' is for or when a caller should clear it versus assign it, but the routing guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_emailUpdate an email's addressADestructiveIdempotentInspect
Change an email's address (works for primary and alias addresses). Only available when the workspace manages its own team list — a directory integration returns a 409 conflict. The new address is validated → 422 on failure.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The email's UUID (the `id` returned by list_emails). | |
| address | Yes | The new email address. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the mutation profile (destructiveHint=true, idempotentHint=true, openWorldHint=true), so the description's job is to add context beyond them, which it does via the 409 conflict path and 422 validation failure on the new address. It stops short of saying what happens to the previous address or existing signature installations tied to 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 tight sentences that front-load the operation, then the availability constraint, then the failure modes. No filler and no repetition of 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?
An output schema exists, so return values need not be described, and the description covers the key operational constraints and error codes. It is nearly complete for a mutation tool, with the only gap being the side effects of replacing an address (e.g., downstream signature or teammate references).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds genuine meaning by noting the address is validated and that this applies to both primary and alias addresses, clarifying intent beyond the schema's plain "The new email address." The required `context` analytics parameter is only explained in the schema, not the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ("Change an email's address") and adds scope coverage for both primary and alias addresses. It is unambiguous against siblings like create_email or delete_email, though it never names a sibling explicitly to route the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition and an explicit exclusion condition: usable only when the workspace manages its own team list, and a directory integration produces a 409 conflict. An agent can decide up front whether this call is even legal in the current workspace.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_folderRename a folderADestructiveIdempotentInspect
Rename a signature folder by UUID. A blank name returns 422.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The folder's UUID (the `id` returned by list_folders). | |
| name | Yes | The new folder name. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true and openWorldHint=true, so the mutation/idempotency profile is known. The description contributes one genuinely new behavioral fact — a blank name returns 422 — which tells the agent a precondition and the failure mode.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler, with the action and target front-loaded and the error case trailing. Every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Return values needn't be explained because an output schema exists, and annotations carry the safety profile, leaving the description responsible mainly for purpose and edge cases — both covered. The only shortfall is the absent when-to-use context, which is minor for a single-purpose rename.
Complex tools with many parameters or behaviors need more documentation. 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 the baseline is 3, and the description adds a real constraint for the 'name' parameter (must be non-blank, else 422) plus reinforces that 'id' is a UUID. The 'context' parameter is left entirely to the schema, but the added validation meaning pushes this 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?
States a specific verb and resource ('Rename a signature folder') plus the identifier requirement ('by UUID'), and the verb choice cleanly separates it from create_folder, delete_folder and list_folders. It does not explicitly name or contrast those siblings, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus update_asset/update_email or versus delete_folder, and no prerequisites beyond the UUID mention. The blank-name clause is a validation rule, not usage direction, so an agent gets no routing help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_marketing_campaignUpdate a marketing campaignADestructiveIdempotentInspect
Update a marketing campaign by UUID. Only the fields you pass change (omit = leave as-is; content: null clears it). status is read-only — use schedule/pause/resume to change it. Invalid enums, unknown smart fields, or unknown signature templates return 422.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The campaign's UUID (the `id` from list_marketing_campaigns). | |
| name | No | ||
| content | No | Campaign block tree (ILayoutBlock): a `stack` root whose `children` are blocks. Strict-validated server-side. Omit to leave unchanged; null to clear. Every node (block AND token) needs an `id` that is a fresh LOWERCASE uuid — any other string, including an uppercase uuid, is rejected 422. Every numeric size is in PIXELS, never a CSS multiplier: `lineHeight` is a px line box (~1.3x fontSize, e.g. fontSize 14 -> 18), so 1.3 is rejected. Call get_content_schema for the full schema, every enum value, and a worked example. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| end_time | No | ISO-8601 end of the campaign window. | |
| behaviour | No | How the campaign content combines with the signature (replace or append). | |
| time_zone | No | IANA time zone, e.g. 'Europe/Paris'. | |
| send_email | No | ||
| start_time | No | ISO-8601 start of the campaign window. | |
| filter_kind | No | Which targeting dimension applies: by signature_templates or by smart_fields conditions. | |
| signature_template_ids | No | UUIDs of the signature templates to apply the campaign to (replaces the set; [] clears). | |
| smart_fields_conditions | No | Smart-field targeting: an array of OR-groups, each an array of AND-conditions { smart_field_id (uuid), operator, values }. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds genuine value beyond those: partial-update behavior, the null-clears convention, the read-only nature of status, and the 422 failure conditions for invalid enums/smart fields/signature templates. It stops short of disclosing what specifically gets destroyed or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, all front-loaded and information-dense. The partial-update rule and the status routing come first, followed by error behavior. 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 12-parameter mutation tool with a complex nested content tree, the description covers the critical behavioral points (partial update, clearing, status routing, error conditions) and points the agent to get_content_schema for the full block schema. Output schema exists, so return values need not be described. Minor gap: no explicit note on targeting interplay (filter_kind vs smart_fields/signature_template_ids).
Complex tools with many parameters or behaviors need more documentation. Simple 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 already 83%, so the baseline is 3. The description adds meaningful semantics on top — omit-vs-null behavior for content and the read-only nature of status — which is more than the schema states for those fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a marketing campaign by UUID'), and distinguishes itself from the status-change siblings by routing status changes to schedule/pause/resume. Clear enough that an agent can identify the operation without opening the schema, though it doesn't contrast with create/delete siblings directly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 partial-update semantics (omit = leave as-is; content: null clears) and explicitly names the alternative tools for status changes (schedule/pause/resume). No explicit when-not-this-tool guidance beyond status, but the context is well covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_signatureUpdate a signatureADestructiveIdempotentInspect
Update a signature template by UUID. Stages draft_content (the working copy) — the live content only changes when you publish_signature. Only the fields you pass change (omit = leave as-is; draft_content: null / folder_id: null clear them). When editing draft_content, call get_content_schema first for the block-tree schema, enum values (incl. the non-obvious icon names), and a worked example; an invalid tree returns 422 naming each offending field and its allowed values. Blocks are CLOSED: every key you add must exist in the schema, so build each block by adapting the schema's example rather than attaching extra keys to carry styling or smart-field values — an invented key fails the whole update with unknown_property.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The signature's UUID (the `id` from list_signatures). | |
| name | No | ||
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| priority | No | Ordering priority (lower = higher). | |
| folder_id | No | UUID of the folder to file the signature under; null detaches it. | |
| draft_content | No | Draft block tree (ILayoutBlock): a `stack` root whose `children` are blocks. Strict-validated server-side. Omit to leave unchanged; null to clear. Every node (block AND token) needs an `id` that is a fresh LOWERCASE uuid — any other string, including an uppercase uuid, is rejected 422. Every numeric size is in PIXELS, never a CSS multiplier: `lineHeight` is a px line box (~1.3x fontSize, e.g. fontSize 14 -> 18), so 1.3 is rejected. Call get_content_schema for the full schema, every enum value, and a worked example. | |
| signature_installation_activated | No | Whether installation is activated for this template. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (destructive, idempotent), yet the description adds genuinely non-derivable behavior: the draft-vs-live staging model, patch semantics ("Only the fields you pass change"), null-clearing via `draft_content: null` / `folder_id: null`, 422 responses naming offending fields, and the `unknown_property` failure mode for invented block keys. This is materially more than the annotations supply.
Agents need to know what a tool does to the 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 that are front-loaded with the core staging behavior before drilling into the block-tree hazard. It is dense but nearly every clause carries operational information; the final sentence overlaps somewhat with the earlier get_content_schema advice, so it is not perfectly tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with seven parameters, a rich nested schema, and an output schema, the description covers the staging lifecycle, error behavior, patch semantics, and the schema-discovery dependency. Nothing an agent needs in order to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 86%, so the baseline is 3; the description earns above that by defining partial-update semantics the schema never states (omit = leave as-is, null = clear) and by framing the block-tree constraints (closed keys, pixel units, fresh lowercase uuids). Some of this (uuid format, pixel lineHeight) duplicates the schema's own `draft_content` description, which caps it at 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ("Update a signature template by UUID") and immediately distinguishes its scope from siblings: it stages `draft_content` while "the live `content` only changes when you publish_signature." An agent can separate this from publish_signature, create_signature, and update_signature_variant without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit preconditions and sequencing — "When editing `draft_content`, call `get_content_schema` first" — and explains that publication is a separate step via publish_signature. It does not explicitly contrast with update_signature_variant or create_signature, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_signature_variantUpdate a signature variantADestructiveIdempotentInspect
Create or update a signature's reply/internal variant (upsert). Passing draft_content or activated: true creates the variant if it doesn't exist yet. draft_content stages the variant's working copy — publish_signature_variant copies it live. Also toggles activated (use a distinct variant vs. the primary), hidden (show no signature on this kind of email), and show_marketing_campaigns. Only the fields you pass change (omit = leave as-is; draft_content: null clears it). When editing draft_content, call get_content_schema first. Variants require an active Microsoft 365 signatures integration — otherwise 409 variants_unavailable.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which variant: reply (reply emails) or internal (same-domain emails). | |
| hidden | No | Hide any signature on this kind of email. | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| activated | No | Use a distinct variant on this kind of email (creates it if needed). | |
| signature_id | Yes | The primary signature's UUID (the `id` from list_signatures). | |
| draft_content | No | Variant draft block tree (ILayoutBlock): a `stack` root whose `children` are blocks. Strict-validated server-side. Setting it creates the variant if needed. Omit to leave unchanged; null to clear. Every node (block AND token) needs an `id` that is a fresh LOWERCASE uuid — any other string, including an uppercase uuid, is rejected 422. Every numeric size is in PIXELS, never a CSS multiplier: `lineHeight` is a px line box (~1.3x fontSize, e.g. fontSize 14 -> 18), so 1.3 is rejected. Call get_content_schema for the full schema, every enum value, and a worked example. | |
| show_marketing_campaigns | No | Append marketing campaigns on this kind of email. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/idempotent/openWorld, and the description layers on upsert semantics, partial-update behavior ('only the fields you pass change'), the null-clears rule, the staging-vs-live model, and a concrete failure mode (409 variants_unavailable). This is disclosure well beyond the structured 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?
Purpose leads, then creation triggers, then the toggles, then the editing rule and error case. Every sentence conveys a distinct behavioral fact with no filler, appropriate for a complex 7-parameter upsert.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 need not be described. The description covers creation conditions, partial-update semantics, clearing, the sibling to call for live publishing, the schema-discovery prerequisite, and the hard integration requirement, leaving no operational gap 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?
Schema coverage is 100%, so the baseline is 3; the description nonetheless adds real meaning by framing draft_content as a staged working copy, stating that null clears it and omission leaves it unchanged, and directing to get_content_schema. This is more than restating the schema, though the schema already carries most per-field 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?
States a specific verb and resource ('Create or update a signature's reply/internal variant (upsert)') and scopes it to the reply/internal kinds. An agent can immediately distinguish it from publish_signature_variant, delete_signature_variant, and list_signature_variants without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternatives and the conditions that select them: 'publish_signature_variant copies it live' and 'When editing draft_content, call get_content_schema first.' It also gives the prerequisite (active Microsoft 365 signatures integration, else 409 variants_unavailable) and the creation triggers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_smart_fieldUpdate a smart fieldADestructiveIdempotentInspect
Change an existing custom smart field's definition: its label, kind, required flag or integration binding. Only the fields you pass change, and the field keeps its id, so templates and campaign conditions that reference it still point to it. Use create_smart_field for a new field, delete_smart_field to remove one, and update_teammate to set a teammate's value (this tool never writes values directly). Binding a new integration or attribute queues a re-sync of the teammates' values from it (integrations never fill url fields); unlinking stops the sync. Overwrites the previous definition and returns the field. Needs the smart_fields:write scope; default fields are read-only (422), the computed Email field is not addressable (404), and a taken label, an invalid kind or an unknown integration returns 422.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The smart field's UUID (the `id` returned by list_smart_fields). | |
| kind | No | New field type. | |
| label | No | New display name. Must be unique in the workspace (422 `taken` otherwise). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| required | No | Whether teammates must fill this field. | |
| integration_id | No | UUID of a workspace integration to sync values from (a directory or HR/enrichment integration from list_integrations). Pass null to unlink, which also clears integration_attribute. Omit to leave unchanged. | |
| integration_attribute | No | The integration's attribute key (required when the field is bound to an integration; 422 without it). Changing it re-syncs the field's values. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give the safety profile (destructive/overwrite, idempotent, openWorld), and the description adds real context beyond them: it preserves `id` so references survive, only passed fields change, integration binding queues a re-sync, unlinking stops it, integrations never fill url fields, plus required scope and specific 422/404 failure conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose then layers siblings, mutation semantics, and error codes with no filler sentences. It is dense and the final sentence packs several error cases together, but each sentence carries distinct, useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema, the description covers everything else needed: permissions scope, id preservation, partial-update behavior, integration sync consequences, and the specific error codes. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: omission leaves a field unchanged, binding a new integration/attribute triggers a re-sync, and integrations cannot fill url fields (a kind/integration constraint not stated 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?
States a specific verb (Change) and resource (an existing custom smart field's definition) and enumerates the editable facets (label, kind, required flag, integration binding). It is immediately distinguishable from create_smart_field, delete_smart_field, and update_teammate, which it names 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?
Explicitly routes the agent: use create_smart_field for new fields, delete_smart_field to remove, and update_teammate to set a teammate's value, noting this tool 'never writes values directly.' This is a clear when-to-use/when-not with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_teammateUpdate a teammate's smart fieldsADestructiveIdempotentInspect
Set a teammate's smart-field values. Pass the teammate's UUID and an array of { smart_field_id, value }. Only manually-editable fields change — integration-synced and image fields in the payload are ignored. Email addresses are managed separately, not here.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The teammate's UUID (the `id` returned by list_teammates). | |
| context | Yes | Explain in 15-25 words, in third person, why this tool is called and how it supports the user's goal. For analytics only. You MUST describe only the abstract purpose of the tool call. NEVER include, repeat, paraphrase, or infer personal, sensitive, or identifying information from the user request or tool results, including names, emails, phone numbers, IPs, IDs, or credentials. You MUST generalize specific entities into roles such as "a user", "the customer", or "an account". Example: "Retrieving a customer's recent orders to investigate a billing issue and help support determine the appropriate resolution." | |
| smart_fields | Yes | Smart-field values to set, by smart_field_id (UUID). Fields synced from an integration (non-null integration_id) and image fields are skipped silently; an unknown id or a value invalid for its field type fails the whole update. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and idempotentHint, so the safety profile is partly covered. The description meaningfully adds behavior beyond that: only manually-editable fields change, integration-synced and image fields are skipped, and an unknown id or invalid value fails the whole update. It does not state that existing values are overwritten (the destructive aspect).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action, then the payload shape, then the important exclusion and skip rules. 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?
An output schema exists, so return values need no explanation, and the description covers the remaining gaps: what gets skipped, when the whole update fails, and that email is handled elsewhere. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents id, context, and the nested smart_fields item shape that the description restates. The description's parameter-level value is mostly a summary rather than new 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?
States a specific verb and resource ("Set a teammate's smart-field values") and scopes it by naming what is out of scope. An agent can distinguish this from update_smart_field (field definitions) and create_teammate (creation) without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not: "Email addresses are managed separately, not here," which stops the agent from attempting email edits through this tool. However, no alternative tool is named for email changes, and no prerequisites (e.g., needing field IDs from list_teammates) are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- Changed
add_signature_recipients1 field changed- changed
Input schema / properties / email_ids / descriptionPrevious value: -"Email uuids to assign as manual recipients (re-adding an existing one is a no-op)."New value: +"Email uuids to assign as manual recipients: the `id` from list_emails (or a teammate's `emails[].id` from list_teammates), not teammate ids. At least one is required (an empty list returns 422); if any uuid is unknown the whole batch fails with 422 and nothing is added. Duplicates and already-assigned emails are ignored."
- Changed
create_smart_field4 fields changed- changed
Input schema / properties / integration_attribute / descriptionPrevious value: -"The integration's attribute key to map (required when integration_id is set)."New value: +"The integration's attribute key to map (required when integration_id is set; 422 without it)." - changed
Input schema / properties / integration_id / descriptionPrevious value: -"UUID of a workspace integration to sync this field's values from (omit for a manual field)."New value: +"UUID of a workspace integration to sync this field's values from, from list_integrations. It must be a directory or HR/enrichment integration that supplies teammate data; any other returns 422. Omit for a manual field." - changed
Input schema / properties / label / descriptionPrevious value: -"Display name for the field (required)."New value: +"Display name for the field (required). Must be unique in the workspace: a label already in use returns 422 `taken`." - changed
Input schema / properties / required / descriptionPrevious value: -"Whether teammates must fill this field."New value: +"Whether teammates must fill this field (default true when omitted)."
- Changed
delete_signature1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"The signature's UUID (the `id` from list_signatures)."New value: +"The signature's UUID (the `id` from list_signatures). Only primary templates can be deleted: a reply or internal variant's id returns 404."
- Changed
list_analytics_events6 fields changed- changed
Input schema / properties / country / descriptionPrevious value: -"Filter to one country (ISO 3166-1 alpha-2)."New value: +"Filter to one country (ISO 3166-1 alpha-2, case-insensitive, e.g. FR)." - changed
Input schema / properties / distinct_id / descriptionPrevious value: -"Filter to one identified visitor (their user id) — their event history."New value: +"Filter to one identified visitor's event history: their user id, the `distinct_id` from list_visitors (exact match)." - changed
Input schema / properties / marketing_campaign_id / descriptionPrevious value: -"Filter to one marketing campaign (UUID)."New value: +"Filter to one marketing campaign (UUID from list_marketing_campaigns); unknown returns 404." - changed
Input schema / properties / signature_template_id / descriptionPrevious value: -"Filter to one signature template (UUID)."New value: +"Filter to one signature template (UUID from list_signatures); unknown returns 404." - changed
Input schema / properties / start_date / descriptionPrevious value: -"Range start (inclusive), ISO-8601 date YYYY-MM-DD."New value: +"Range start (inclusive), ISO-8601 date YYYY-MM-DD. Omit both dates for all time." - changed
Input schema / properties / teammate_id / descriptionPrevious value: -"Filter to one teammate (UUID)."New value: +"Filter to one teammate (UUID from list_teammates); unknown returns 404."
- Changed
list_emails1 field changed- changed
Input schema / properties / teammate_id / descriptionPrevious value: -"Filter to a single teammate's emails by their UUID (the teammate `id`)."New value: +"Filter to a single teammate's emails by their UUID (the `id` from list_teammates). An unknown id returns an empty list, not an error."
- Changed
update_smart_field3 fields changed- changed
Input schema / properties / integration_attribute / descriptionPrevious value: -"The integration's attribute key (required when integration_id is set)."New value: +"The integration's attribute key (required when the field is bound to an integration; 422 without it). Changing it re-syncs the field's values." - changed
Input schema / properties / integration_id / descriptionPrevious value: -"UUID of a workspace integration to sync values from; pass null to unlink. Omit to leave unchanged."New value: +"UUID of a workspace integration to sync values from (a directory or HR/enrichment integration from list_integrations). Pass null to unlink, which also clears integration_attribute. Omit to leave unchanged." - changed
Input schema / properties / label / descriptionPrevious value: -"New display name."New value: +"New display name. Must be unique in the workspace (422 `taken` otherwise)."
67 tool updates
- First observed
add_signature_recipient_entities - First observed
add_signature_recipients - First observed
create_asset - First observed
create_email - First observed
create_folder - First observed
create_marketing_campaign - First observed
create_signature - First observed
create_smart_field - First observed
create_teammate - First observed
delete_asset - First observed
delete_email - First observed
delete_folder - First observed
delete_marketing_campaign - First observed
delete_signature - First observed
delete_signature_variant - First observed
delete_smart_field - First observed
delete_teammate - First observed
duplicate_signature - First observed
get_analytics_clicks - First observed
get_analytics_events_summary - First observed
get_analytics_views - First observed
get_content_schema - First observed
get_more_tools - First observed
get_signature_html - First observed
get_visitor - First observed
get_visitor_breakdown - First observed
get_workspace - First observed
install_signature - First observed
install_signature_for_email - First observed
list_analytics_events - First observed
list_assets - First observed
list_emails - First observed
list_financial_documents - First observed
list_folders - First observed
list_integration_entities - First observed
list_integrations - First observed
list_marketing_campaigns - First observed
list_signature_installations - First observed
list_signature_recipients - First observed
list_signature_variants - First observed
list_signatures - First observed
list_smart_fields - First observed
list_teammates - First observed
list_visitors - First observed
pause_marketing_campaign - First observed
preview_marketing_campaign - First observed
preview_signature - First observed
publish_signature - First observed
publish_signature_variant - First observed
read_docs_page - First observed
remove_signature_recipient_entities - First observed
remove_signature_recipients - First observed
resume_marketing_campaign - First observed
schedule_marketing_campaign - First observed
search_docs - First observed
send_feedback - First observed
send_test_email - First observed
set_signature_recipient_rules - First observed
sync_teammates - First observed
update_asset - First observed
update_email - First observed
update_folder - First observed
update_marketing_campaign - First observed
update_signature - First observed
update_signature_variant - First observed
update_smart_field - First observed
update_teammate
Publisher details
- Operator
- Scribe SAS · Publisher source
- Operator website
- https://www.scribe-mail.com · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://help.scribe-mail.com/en/ai-agents · Publisher source
- Trust center
- https://security.scribe-mail.com · Publisher source
- Restrictions
- Requires a Scribe workspace on a Business or Enterprise plan, or an active 14-day trial; the Free plan has no API access. The signed-in user must be a workspace owner or admin. · Publisher source
Related MCP Connectors
The agentic email signature platform: one saved signature for your people and your AI agents.
Manage team email signatures: teammates, groups, templates, banner campaigns, click analytics.
E-signatures for contracts and NDAs. Draft with AI, review, and send for signature.
Audit and build email signatures that survive Gmail, Outlook desktop and Apple Mail.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceThe context layer for GTM teams — one source of truth for brand and company context, so your whole team produces consistent, on-brand content in any AI tool.-

PumpGTM MCP serverofficial
AlicenseNot gradedqualityBmaintenanceEnables AI agents to find intent-signaling buyers and run LinkedIn, email, and X outreach from connected accounts while respecting platform limits. Every reply is handed back to a human for approval or decision.2MIT- AlicenseNot gradedqualityDmaintenanceEnables automated Gmail lead nurturing campaigns with intelligent follow-ups, response tracking, and 24/7 operation. Supports CSV-based contact management, template personalization, and real-time monitoring for enterprise-scale email outreach.2MIT
- FlicenseNot gradedqualityAmaintenanceBYO email for your agents. A full-featured email (gmail, outlook, imap, icloud) mailroom for you and your agents with "oops" protections built in.5-
Glama MCP Gateway
Add one secure layer between your agents and this server.