Skip to main content
Glama

Server Details

Run B2B outreach from your AI agent: 250+ tools for campaigns, leads, LinkedIn and email workflows.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Available Tools

223 tools
campaignstack_accept_draft_checkupAInspect

Accept the pending draft checkup: applies the proposed text to its target (intent detail, playbook section, or offer context) through the same caps and version snapshots as a manual edit. Fails when the targeted text changed since the checkup ran; run a new checkup in that case.

ParametersJSON Schema
NameRequiredDescriptionDefault
checkupIdYesPending checkup id from campaignstack_get_draft_checkup
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare non-read-only, non-idempotent, non-destructive. The description adds substantial behavioral depth: the edit goes 'through the same caps and version snapshots as a manual edit' (versioning semantics), and it discloses a concrete failure condition — staleness when the targeted text changed since the checkup ran — plus a remediation path. No contradiction with annotations.

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

Conciseness5/5

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

Three short sentences, each earning its place: action with effect, behavioral equivalence to manual edits, then failure mode plus remediation. The core verb and resource are front-loaded and the target enumeration is parenthesized so it doesn't interrupt the main clause. Zero waste.

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

Completeness4/5

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

For a 2-parameter action tool with no output schema, the description covers what is applied, where it is applied, how it behaves relative to manual edits, when it fails, and what to do next. The only gap: it never states what a successful call returns or how the agent confirms the text was applied, which matters because there is no output schema to fall back on.

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

Parameters4/5

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

Schema coverage is 100%, so both parameters are already documented. The description adds one genuinely useful semantic beyond the schema: the checkupId becomes invalid if the target text changed after the checkup ran, which tells the agent that a freshly fetched id is required. Modest but real added meaning.

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

Purpose5/5

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

States a specific verb (accept) and resource (pending draft checkup), then defines the concrete effect: applies the proposed text to its target, enumerating the possible targets (intent detail, playbook section, or offer context). This clearly separates it from the sibling group get/run/reject_draft_checkup without needing to open any schema.

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

Usage Guidelines4/5

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

Provides clear trigger context: there must be a pending draft checkup, and it explicitly routes the stale-checkup case to 'run a new checkup in that case.' However, it never names the reject_draft_checkup alternative or states when declining is the right call, so the when-not-to-use guidance is incomplete.

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

campaignstack_add_leads_to_listA
Idempotent
Inspect

Add leads to an existing lead list. Idempotent -- leads already in the list are skipped. Each leadRef needs leadSource (default 'global') and leadId. Returns the count of newly added leads and already-present leads. Use campaignstack_list_lead_lists to find lead list IDs and campaignstack_search_leads to find lead IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadRefsYes
leadListIdYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already provide the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds genuine value beyond them: it details the idempotent skip behavior ('leads already in the list are skipped') and discloses the return payload (counts of newly added and already-present leads). This is useful behavioral context a schema cannot convey, and there is no contradiction with the annotations.

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

Conciseness5/5

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

Five sentences, each earning its place: purpose, idempotency behavior, parameter requirements, return value, and prerequisite tool routing. The core purpose is front-loaded in the first sentence and there is no filler or redundancy.

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

Completeness4/5

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

Strong completeness for a two-parameter mutation: the safety profile is covered by annotations, the return format is disclosed because no output schema exists, and prerequisite lookup tools are explicitly named despite a very large sibling set. The main remaining gap is the meaning of the leadSource enum values ('global' vs 'private') and error behavior for non-existent lists.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the burden for parameter meaning. It does restate the leadRef structure and the leadSource default ('global'), and it routes the agent to tools that produce valid IDs, which is helpful. However, it does not explain the semantic difference between 'global' and 'private' lead sources or what leadListId refers to beyond its name, leaving a real gap.

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

Purpose4/5

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

States a specific verb ('Add') and resource ('leads to an existing lead list'), making the operation unambiguous. The qualifier 'existing' implicitly distinguishes it from list-creation tools like campaignstack_create_lead_list. However, it does not explicitly differentiate from similar add-to-target siblings such as campaignstack_add_lead_to_external_list or campaignstack_queue_leads.

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

Usage Guidelines4/5

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

Gives clear workflow context by naming the exact prerequisite tools: campaignstack_list_lead_lists for lead list IDs and campaignstack_search_leads for lead IDs. This tells an agent how to assemble a valid call. It stops short of stating when NOT to use this tool or naming an alternative operation, so exclusions are left to inference.

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

campaignstack_add_lead_to_external_listA
Idempotent
Inspect

Add one lead to an external provider's lead list (provider-parameterized: instantly, hubspot or clay). For clay the target is a registered Clay table: the push goes to the table's webhook source fire-and-forget (no provider lead id comes back, a campaignstack_dedupe_key field rides along for table-side dedup) and leads with only a LinkedIn URL qualify. Otherwise the lead is created by email on the provider side. Neither starts any outreach, unlike campaignstack_add_lead_to_sequence: the contact just becomes available in the provider (e.g. to attach to a campaign later). Duplicate adds to the same list are idempotent successes (status already_present). Set skipIfInWorkspace to skip leads that already exist anywhere in the provider workspace. Free: no CampaignStack credits. Returns status: added, already_present, skipped_no_email (lead has no email), or error (e.g. INTEGRATION_NOT_CONNECTED, LEAD_NOT_FOUND). Use campaignstack_list_external_lead_lists for list ids. For CampaignStack's OWN lead lists use campaignstack_add_leads_to_list instead (inside a workflow, the integration:add_to_list node also accepts provider campaignstack).

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
listIdYesProvider-side lead list id (from campaignstack_list_external_lead_lists).
providerYesIntegration provider that owns the lead list.
leadSourceNoLead source table (default: global). Private leads are workspace-scoped CSV imports.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
skipIfInWorkspaceNoSkip the lead if its email already exists anywhere in the provider workspace, in any campaign or list.

TDQS

A4.8/5.0
Behavior5/5

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

The description provides extensive behavioral detail beyond annotations such as clay's fire-and-forget push semantics, the absence of a provider lead id, the campaignstack_dedupe_key behavior, idempotent duplicate handling via already_present, skipIfInWorkspace semantics, and free credit usage. It also enumerates return statuses and example errors, and does not contradict the annotations.

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

Conciseness4/5

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

The description is long, but it carries a high density of necessary edge-case and routing information that would otherwise be unavailable to the agent. It is front-loaded with the primary action and provider set, though it could benefit from structural separation such as bullets.

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

Completeness5/5

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

With no output schema, the description compensates by explicitly listing return statuses and error examples. It also covers provider differences, qualification rules, idempotence, free usage, and cross-tool references, making it complete enough for an agent to select and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is already high at 83%, but the description adds meaning beyond the schema by explaining provider-specific behavior for clay, clarifying that listId is a provider-side id from campaignstack_list_external_lead_lists, and detailing how skipIfInWorkspace behaves. The exact source or type of leadId is implied rather than explicitly clarified, so it does not receive a 5.

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

Purpose5/5

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

The description clearly states what the tool does: 'Add one lead to an external provider's lead list' with explicit providers instantly, hubspot, or clay. It also distinguishes itself from related tools by name, including campaignstack_add_lead_to_sequence and campaignstack_add_leads_to_list.

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

Usage Guidelines5/5

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

The description explicitly tells when to use this tool versus alternatives: it notes that unlike campaignstack_add_lead_to_sequence, adding to an external list does not start outreach, and it directs users to campaignstack_add_leads_to_list for CampaignStack's own lead lists. It also tells the agent to use campaignstack_list_external_lead_lists to obtain list ids.

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

campaignstack_add_lead_to_sequenceA
Idempotent
Inspect

Add one lead to an external provider's sequence (provider-parameterized: apollo sequences, instantly campaigns). The lead is resolved by email on the provider side (Apollo creates the contact in the tenant's account if it does not exist yet). Apollo also requires emailAccountId (a sending mailbox id). Duplicate adds are idempotent successes (status already_present). Set activateSequence to start an Apollo sequence after adding (best-effort: a sequence that is already active is left as is). Instantly handoffs are recorded so reply/bounce/unsubscribe state syncs back automatically. Free: no CampaignStack credits. Returns status: added, already_present, skipped_no_email (lead has no email), or error (e.g. INTEGRATION_NOT_CONNECTED, INTEGRATION_KEY_INSUFFICIENT_SCOPE when an Apollo key is not a master API key, LEAD_NOT_FOUND). Use campaignstack_list_external_sequences for sequence ids and campaignstack_list_external_email_accounts for Apollo mailbox ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
providerYesIntegration provider that owns the sequence.
campaignIdYesProvider-side sequence id (from campaignstack_list_external_sequences).
leadSourceNoLead source table (default: global). Private leads are workspace-scoped CSV imports.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
emailAccountIdNoProvider-side sending mailbox id. REQUIRED for apollo (from campaignstack_list_external_email_accounts); unused by instantly.
activateSequenceNoStart the sequence after adding if it is not running yet (best-effort). Apollo only.
skipIfInWorkspaceNoSkip the lead if its email already exists anywhere in the provider workspace, not just this sequence. Instantly only.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations (idempotentHint=true, readOnlyHint=false, destructiveHint=false) are consistent with the description, which goes well beyond them: Apollo auto-creates missing contacts, duplicate adds return already_present as an idempotent success, activateSequence is best-effort ('a sequence that is already active is left as is'), and Instantly handoffs trigger automatic reply/bounce/unsubscribe state sync. The 'Free: no CampaignStack credits' note is the kind of operational context that saves an agent from making wrong assumptions.

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

Conciseness4/5

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

The description is dense but disciplined: every sentence carries a distinct fact (resolution behavior, idempotency, best-effort activation, state sync, cost, return statuses, ID lookup routing). No filler or name-restating tautology. It runs long, but the length is justified by the provider-parameterized complexity and the absence of an output schema, which makes the status enumeration load-bearing.

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

Completeness5/5

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

For an 8-parameter, provider-parameterized mutation with no output schema, this is complete: it fully enumerates possible return statuses including example error codes with their causes (INTEGRATION_NOT_CONNECTED, INTEGRATION_KEY_INSUFFICIENT_SCOPE for non-master Apollo keys, LEAD_NOT_FOUND), explains provider differences, prerequisites, idempotency semantics, and cost implications. An agent has everything needed to decide, invoke, and interpret the result correctly.

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

Parameters4/5

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

Schema coverage is 88%, so the schema carries most parameter meaning. The description adds genuine value beyond it: it explains that leadId is resolved by email on the provider side (the only undocumented parameter), clarifies that campaignId is the provider-side sequence id, and reinforces that emailAccountId is a sending mailbox required only by Apollo. This compensates for the one uncovered parameter without redundant restatement.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Add one lead to an external provider's sequence,' immediately clarified as provider-parameterized ('apollo sequences, instantly campaigns'). This cleanly separates it from siblings like campaignstack_add_lead_to_external_list (lists vs. sequences) and campaignstack_sync_lead_to_hubspot (CRM sync vs. sequence enrollment) without needing to inspect either schema.

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

Usage Guidelines4/5

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

The description gives strong usage context: provider-specific prerequisites (Apollo requires emailAccountId, activateSequence is Apollo-only, skipIfInWorkspace is Instantly-only) and explicit pointers to sibling tools for ID lookups ('Use campaignstack_list_external_sequences for sequence ids and campaignstack_list_external_email_accounts for Apollo mailbox ids'). It does not explicitly state when NOT to use the tool versus the add-to-list siblings, relying on naming, which keeps it from a 5.

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

campaignstack_add_manual_exclusion_urlsAInspect

Add LinkedIn profile URLs to a manual exclusion entry. Each URL is validated and normalized. Duplicate URLs within the same exclusion are skipped and reported. Returns per-URL results indicating success or error. Use campaignstack_get_exclusions to find exclusionId values for manual exclusion entries. Use campaignstack_list_signal_agents to find signal agents.

ParametersJSON Schema
NameRequiredDescriptionDefault
exclusionIdYes
profileUrlsYesLinkedIn profile URLs to add to the exclusion list
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses that URLs are validated and normalized, that duplicates within the same exclusion are skipped and reported, and that per-URL results are returned. This goes well beyond the sparse annotations (readOnlyHint=false, destructiveHint=false) by describing actual runtime behavior and response shape. It does not claim any irreversible effects, consistent with annotations.

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

Conciseness5/5

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

Four sentences, all informative: action, validation/dedupe behavior, return format, and dependency lookups. No filler or repeated schema information; it front-loads the purpose and keeps related references at the end.

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

Completeness4/5

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

For a mutating tool with no output schema and minimal annotations, the description covers the key behaviors an agent needs: what is added, how input is handled, what the response reports, and where to find required identifiers. It could add a note on workspaceId behavior or invalid-exclusionId errors, but the schema and existing pointers largely cover those gaps.

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

Parameters4/5

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

Schema coverage is 67%, and the description compensates: it clarifies that profileUrls are validated/normalized and duplicates are handled, and it tells the agent where to obtain exclusionId (get_exclusions). The workspaceId behavior ('required for user keys; workspace keys are bound') is left to the schema, but the description adds enough extra meaning to the required parameters.

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

Purpose5/5

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

The description opens with a precise action: 'Add LinkedIn profile URLs to a manual exclusion entry.' It names the resource (manual exclusion entry) and object (URLs), and distinguishes itself from get_exclusions, list_manual_exclusion_urls, and remove_manual_exclusion_url by its add semantics. This is enough for an agent to select it for append operations.

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

Usage Guidelines4/5

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

It explicitly directs the agent to campaignstack_get_exclusions for finding exclusionId values and campaignstack_list_signal_agents for signal agents, covering prerequisite lookups. However, it does not explicitly contrast this with sibling tools like campaignstack_remove_manual_exclusion_url or campaignstack_list_manual_exclusion_urls, so the 'when not to use' guidance is only implied by the name rather than stated.

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

campaignstack_analyze_websiteA
Read-onlyIdempotent
Inspect

Analyze a website to extract structured company intelligence. Returns company name, description, services, target market, industry, team size, tech stack, and positioning. Results are cached for 7 days per domain. Use this to gather context about a lead's company before creating campaigns.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond those hints, specifically that results are cached for 7 days per domain, which is important for agents deciding whether to call again or expect fresh data. It does not mention potential external network latency or failure modes, but the annotations cover the safety profile.

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

Conciseness5/5

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

The description is three sentences, each earning its place: what the tool returns, the caching behavior, and when to use it. It is front-loaded with the core purpose and avoids any filler or repetition of schema details.

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

Completeness5/5

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

For a simple one-parameter read-only tool, the description is complete: it specifies inputs implicitly, enumerates the outputs, discloses caching behavior, and states the intended use case. The annotations cover safety and idempotence, so no critical behavioral information is missing.

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

Parameters3/5

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

Schema description coverage is 0%, and the description only implicitly refers to the URL parameter by saying 'Analyze a website' and mentioning 'per domain.' The single parameter is self-explanatory with format: uri, so the gap is less severe than with multiple parameters, but the description still does not clarify URL conventions such as whether a root domain is required or whether subpages are acceptable.

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

Purpose5/5

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

The description clearly states the verb ('Analyze a website') and the resource, then enumerates the specific output fields such as company name, services, target market, tech stack, and positioning. This makes it distinct from sibling tools like get_company or enrich_company_info, which operate on stored or enriched records rather than extracting fresh intelligence from a website URL.

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

Usage Guidelines4/5

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

The description provides clear context: 'Use this to gather context about a lead's company before creating campaigns.' It does not explicitly mention when not to use it or name alternatives, so it falls just short of a 5, but the stated use case gives an agent enough guidance for typical selection.

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

campaignstack_approve_content_postA
Idempotent
Inspect

Approves a content post that is 'pending_approval' and schedules it for publishing. Pass scheduledAt (Unix ms) for an exact time, or set autoSchedule:true (or omit scheduledAt) to auto-place it into the next valid slot. The response includes the resolved scheduledAt. Use campaignstack_reject_content_post to send it back to draft instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduledAtNoExact publish time. Omit (or set autoSchedule) for the next valid slot.
autoScheduleNoAuto-place into the next valid posting slot instead of an exact time. Default when scheduledAt is omitted.
contentPostIdYes

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already establish the operation is not read-only, not destructive, and idempotent. The description adds useful behavioral context: it transitions the post out of pending_approval, auto-schedules when no exact time is given, and reports the resolved scheduledAt in the response. It does not discuss failure modes or edge cases, but the safety profile is already covered by annotations.

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

Conciseness5/5

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

Three focused sentences: the main behavior, the scheduling options, and the sibling alternative. No filler, no repetition of schema details, and the most important information is front-loaded.

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

Completeness4/5

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

For a tool with one required parameter and no nested objects, the description is complete enough for an agent to call it correctly. It explains both scheduling modes and mentions the key response field. The absence of an output schema means more detail about the full response would be helpful, but the essential behavior is well covered.

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

Parameters4/5

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

Schema description coverage is 67%, and the description compensates well for the scheduledAt and autoSchedule parameters by explaining the exact-time path, the auto-scheduling path, and the 'omit scheduledAt' default. contentPostId gets no detailed semantics, but its role as the target post is clear from the surrounding text and schema.

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

Purpose5/5

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

The description states a specific action ('approves'), a specific resource ('content post'), and a clear precondition ('pending_approval'), plus its scheduling effect. It also names the directly related sibling campaignstack_reject_content_post, distinguishing approval from rejection unambiguously.

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

Usage Guidelines4/5

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

It clearly defines when to use the tool: when a content post is pending approval and the user wants to approve and schedule it. It also explicitly points to campaignstack_reject_content_post as the alternative for sending it back to draft. It does not mention exclusions like already-approved posts, so it falls just 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.

campaignstack_approve_reviewAInspect

Approve a pending review entry. For a draft parked at a review node, the lead advances via the 'approved' edge. For an escalated entry parked at the acting node itself (critic-flagged auto-send, agent escalation), approval RESUMES the withheld action: the runner action is re-dispatched with the approved text, or the draft is released through the node's delivery exit. Use campaignstack_list_pending_reviews to find entry IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

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

Description discloses that approval triggers edge traversal for drafts and resumes withheld actions for escalated entries, including re-dispatching runner actions or releasing the draft. This adds meaningful behavioral context beyond the raw annotations, which only state readOnly=false and idempotent=false.

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

Conciseness5/5

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

Four sentences all contribute: the first states the purpose, the next two detail the two modes, and the last gives a concrete discovery pointer. No filler or repetition of schema fields.

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

Completeness5/5

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

Covers the two complex execution paths fully, so an agent can predict side effects before calling. The lack of output-schema details is acceptable here since no output schema is provided and the action semantics are thoroughly specified.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by telling the agent to use campaignstack_list_pending_reviews to find entryId, giving the key parameter actionable meaning. workspaceId remains generic, but its name is self-explanatory and common across workspace-scoped tools.

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

Purpose5/5

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

States the verb 'Approve' and the resource 'pending review entry' with enough specificity to separate it from sibling approval tools for ad creatives and content posts. It also explains what approval means in two distinct workflow contexts, which goes beyond a generic one-liner.

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

Usage Guidelines4/5

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

Explicitly identifies the two situations where the tool applies (draft at a review node, escalated entry at the acting node) and directs the agent to campaignstack_list_pending_reviews for entry IDs. It does not explicitly mention alternatives such as reject_review or retry_review, so exclusions are left to the agent, but the contexts are clear.

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

campaignstack_archive_campaignA
DestructiveIdempotent
Inspect

Archive a campaign. WARNING: this STOPS the campaign's work, and the stop is one-way. Every workflow in the campaign is paused and every automation is disabled, including search watches. Unarchiving brings the campaign back but does NOT restart any of them - you have to re-enable each one deliberately. Confirm with the user before calling this. No data is deleted: leads already in flight stay parked rather than cancelled, and the campaign keeps its history. Use campaignstack_unarchive_campaign to bring it back, and campaignstack_list_campaigns with includeArchived to find archived campaigns. If the campaign is not found, use campaignstack_list_campaigns to find valid IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses the one-way stop, paused workflows, disabled automations, the fact that unarchiving does not restart anything, and the preservation of leads in flight and campaign history. It also explicitly warns to confirm with the user, which is critical for a destructive operation.

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

Conciseness5/5

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

The description is front-loaded with the core action and immediately states the most important warning. Every sentence adds necessary operational or safety information, and there is no filler or redundancy; the explicit guidance about related tools is efficient.

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

Completeness5/5

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

For a destructive, one-way action with a single parameter and no output schema, the description covers all essential context: the irreversible nature, what gets paused/disables, what happens to leads and history, how to reverse, and how to locate campaigns. Nothing an agent needs to call this safely is missing.

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

Parameters4/5

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

The schema has 0% description coverage and only provides campaignId as a required string, so the description carries the burden. It adds practical context by telling the agent to use campaignstack_list_campaigns to find valid IDs if the campaign is not found, which helps disambiguate the parameter and offers recovery guidance.

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

Purpose5/5

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

The description opens with a specific verb and resource, 'Archive a campaign,' and then clarifies what archiving does. It also differentiates from related operations by explicitly naming unarchive and noting that no data is deleted, distinguishing it from deletion tools in the sibling set.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: confirm with the user before calling, use campaignstack_unarchive_campaign to reverse, use campaignstack_list_campaigns with includeArchived to find archived campaigns, and use campaignstack_list_campaigns to find valid IDs when a campaign is not found. This clearly directs the agent to the right alternatives and gives preconditions.

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

campaignstack_build_search_urlA
Read-onlyIdempotent
Inspect

Build a LinkedIn People search URL from ICP (Ideal Customer Profile) criteria. Input ICP fields like titles, industries, locations, seniorities, company sizes, and keywords. Returns a ready-to-use LinkedIn search URL. Use campaignstack_list_icps to get ICP criteria for a campaign, then pass them here to generate a search URL. The resulting URL can be used with campaignstack_queue_leads to import search results.

ParametersJSON Schema
NameRequiredDescriptionDefault
titlesNo
keywordsNo
locationsNo
industriesNo
senioritiesNo
companySizesNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, and the description adds that this returns a 'ready-to-use LinkedIn search URL' rather than executing a search. The build-and-return framing makes the pure, side-effect-free nature clear without contradicting the annotations.

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

Conciseness5/5

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

Three short sentences front-load the purpose, then describe inputs, output, and surrounding workflow. Every sentence adds useful information and there is no filler.

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

Completeness4/5

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

For a pure URL-builder with safe annotations, the description explains the key pipeline context: where criteria come from, what is returned, and how to use the result. It is missing minor details like whether criteria are AND/OR combined and that all parameters are optional, but the schema and sibling workflow cover much of that.

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

Parameters3/5

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

Schema description coverage is 0%, so the description carries the parameter documentation burden. It does list all six ICP field groups ('titles, industries, locations, seniorities, company sizes, and keywords'), but it adds no formatting or semantics beyond the schema's property names, such as the structure of the location objects or constraints.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Build a LinkedIn People search URL from ICP criteria', then enumerates the input fields and the output. This clearly separates it from search, import, and creation siblings like campaignstack_search_leads and campaignstack_queue_leads.

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

Usage Guidelines4/5

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

It gives an explicit workflow: call campaignstack_list_icps to fetch ICP criteria, pass them here, then feed the URL to campaignstack_queue_leads. It does not explicitly state when not to use it or name alternatives, 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.

campaignstack_cancel_node_leadsA
DestructiveIdempotent
Inspect

Cancel the drainable leads at a workflow node (WAITING, WAITING_FOR_EVENT, PENDING_REVIEW entries are marked cancelled). PROCESSING leads have a live runner job and are left to finish on their own; the response reports how many remain. Use this to drain a node that campaignstack_update_workflow or a node deletion rejected with NODE_HAS_ACTIVE_LEADS, then retry the graph change. Use campaignstack_get_workflow to find node IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

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

The description adds meaningful behavior beyond the annotations: it explains which lead states get cancelled, which are left to finish, and that the response reports how many remain. With destructiveHint and idempotentHint already present, this nuanced partial-cancellation behavior is exactly the extra context an agent needs.

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

Conciseness5/5

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

Three dense sentences front-load the effect, then provide the exception, then give the trigger context and lookup pointer. There is no filler or repetition of schema/annotation information.

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

Completeness5/5

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

For a destructive operation with no output schema, the description covers what will be cancelled, what won't, what the response indicates, when to use it, and how to find required IDs. Nothing critical is missing for an agent to decide to call it and interpret the result.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It indirectly explains nodeId by describing workflow nodes and telling the agent to use campaignstack_get_workflow to find node IDs, but it never mentions workspaceId or how to obtain it, leaving one of the two required parameters only inferable from its name.

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

Purpose5/5

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

The description opens with a specific action and resource: 'Cancel the drainable leads at a workflow node', then defines which entries are affected (WAITING, WAITING_FOR_EVENT, PENDING_REVIEW) and which are not (PROCESSING). This distinguishes the tool from workflow-update/delete and node-inspection siblings, so an agent can identify when this tool applies.

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

Usage Guidelines5/5

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

It gives an explicit trigger: use it to drain a node when campaignstack_update_workflow or a node deletion fails with NODE_HAS_ACTIVE_LEADS, then retry the graph change. It also states what to expect for PROCESSING leads and points to campaignstack_get_workflow for finding node IDs, which is concrete routing guidance.

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

campaignstack_comment_on_postAInspect

Comment on a lead's most recent post with provided text. platform is required (currently "linkedin"). Target can be specified as a profileUrl (LinkedIn profile URL) or a leadId (resolved server-side). commentText is the pre-written comment (use campaignstack_craft_comment to generate one). If only one LinkedIn account is connected to the workspace it is used automatically; if multiple exist, specify accountId (use campaignstack_list_accounts to find it). Subject to daily post_comment budget and business hours gates unless bypassed. When true, bypasses ALL LinkedIn safety limits (daily budget, weekly caps, business hours, account status checks). ⚠️ WARNING: This disables all protections that prevent LinkedIn account restrictions. Use only when you understand the risks and accept that the account may be flagged or restricted by LinkedIn.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, it reveals that posting is subject to budget and business-hours gates, that bypassing removes all LinkedIn safety limits, and that this can lead to account flagging or restriction. It also explains automatic account selection, which is unobservable from annotations.

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

Conciseness5/5

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

The action is front-loaded, and every sentence adds necessary operational or safety context. The warning is repeated for emphasis but earns its place given the risk of disabling LinkedIn protections.

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

Completeness5/5

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

The description covers required context, parameter variants, conditional account selection, and safety implications—all essential for a side-effecting tool with no schema and no output schema. 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.

Parameters5/5

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

Despite an empty input schema, the description documents platform, target (profileUrl or leadId), commentText, accountId, and bypass behavior, including where to source accountId and commentText. The sole-source parameter documentation fully compensates for schema absence.

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

Purpose5/5

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

The opening sentence names a specific action and resource: commenting on a lead's most recent post with provided text. Combined with 'platform is required (currently LinkedIn)', it clearly distinguishes this from siblings like like_post, reply_to_comment, and send_message.

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

Usage Guidelines4/5

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

The description gives clear conditional usage: which target forms are accepted, when accountId must be provided, and that commentText can come from campaignstack_craft_comment. It lacks explicit exclusions or when-not-to-use guidance against sibling tools, but the context is unambiguous.

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

campaignstack_connect_apolloA
Idempotent
Inspect

Connect an Apollo.io account by providing an API key. Validates the key against the Apollo API and stores the integration. Returns success: true when the key is valid and the integration is connected. Returns success: false (with integrationId still created) when the key fails validation. Use campaignstack_list_apollo_sources after connecting to browse available contact lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.2/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description discloses important behavioral nuances: the key is validated against the Apollo API, the integration is stored, and a failed validation still creates an integrationId. This partial-failure behavior is exactly the kind of side-effect detail an agent needs and is not visible in the annotations or schema. It could have mentioned idempotency explicitly, but the disclosed state transitions provide solid transparency.

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

Conciseness5/5

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

The description is four sentences with no filler. Each sentence earns its place: connect purpose, validation behavior, success/failure return semantics, and a helpful next-step pointer. The most important information is front-loaded, and the structure is easy for an agent to scan.

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

Completeness4/5

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

The tool is simple enough that the description covers the key operational details: what it does, how validation behaves, what success/failure looks like, and the next recommended action. It does not explicitly explain what happens on reconnection or how idempotency manifests, but the annotations already signal idempotent behavior. The missing pieces are minor given the schema covers the workspaceId nuance.

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

Parameters3/5

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

Schema description coverage is 50%, with apiKey lacking a description and workspaceId already documented in the schema. The description adds meaning for apiKey by explaining it is the Apollo API key used for validation, but it does not elaborate further on key types or acquisition. It adds no new information about workspaceId, which the schema already covers. This partially compensates for the coverage gap, but not fully.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Connect an Apollo.io account by providing an API key.' It clearly identifies the tool as the Apollo-specific connection action, distinguishing it from sibling tools like campaignstack_connect_hubspot and campaignstack_connect_instantly. It also states the validation and storage behavior, leaving no ambiguity about what the tool accomplishes.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: when connecting an Apollo.io account via API key. It also provides a direct follow-up action ('Use campaignstack_list_apollo_sources after connecting'), which helps the agent sequence next steps. It does not explicitly name when not to use it or contrast it with other connect_* tools, but the domain-specific purpose is clear enough for correct selection.

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

campaignstack_connect_hubspotA
Idempotent
Inspect

Connect a HubSpot portal by providing a Private App access token (pat-na1-… or pat-eu1-…). Validates the token against the HubSpot CRM API (read ping + write-scope probe) and stores the integration. The private app must have crm.objects.contacts.read and crm.objects.contacts.write scopes; crm.objects.companies.read/write and crm.schemas.contacts.write are optional (company association + source tag). Returns success: true when the token is valid. On failure, errorCode is one of invalid_format, invalid_token, missing_scopes (errorDetail names the scopes), rate_limited, validation, unreachable. Note on missing_scopes: HubSpot reports subscription-tier gating with the same error, naming a scope the portal can never be granted (the Leads object needs Sales Hub Professional/Enterprise). If a scope is ticked in the private app UI but still reported missing, the portal tier is the cause, not the scope set. The token is never echoed back. HubSpot is in beta: it works, but not every path has been verified against a live portal yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.6/5.0
Behavior5/5

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

The description far exceeds what annotations provide. It discloses validation behavior, integration storage, a complete errorCode taxonomy, the subtle subscription-tier gating gotcha that mimics missing_scopes, the promise that the token is never echoed back, and beta-status limitations. These behavioral traits are genuinely additive and help the agent reason about outcomes; there is no contradiction with 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.

Conciseness4/5

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

The description is long, but every sentence earns its place: purpose, validation behavior, prerequisites, success contract, error taxonomy, a subtle failure-mode explanation, security reassurance, and caveat. It is front-loaded with the core action before diving into edge cases, and there is no redundant filler.

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

Completeness5/5

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

Despite having no output schema, the description covers the success return (success: true), all failure errorCodes, the trickiest failure nuance (tier gating masquerading as missing scopes), and beta-status expectations. For a connection tool with complex external failure modes, nothing critical 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.

Parameters4/5

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

With only 50% schema coverage, the description compensates meaningfully: it documents the apiKey token format (pat-na1-…/pat-eu1-…) and ties parameter semantics to behavioral consequences (scope requirements, validation, error codes). The workspaceId parameter is already described in the schema, so the description need not repeat it.

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

Purpose5/5

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

The description states a specific verb (connect) plus resource (HubSpot portal) and the precise mechanism (Private App access token). It separates itself from sibling connection tools like campaignstack_connect_apollo and campaignstack_connect_instantly by binding the action to HubSpot and describing the validation workflow, not just restating the name.

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

Usage Guidelines4/5

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

The description conveys clear usage context: it states the token format expected (pat-na1-… or pat-eu1-…), the mandatory scopes required, and what validation will occur (read ping + write-scope probe). It does not explicitly name alternatives or exclusion conditions, but the prerequisites effectively tell an agent whether it is in a position to call the tool successfully.

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

campaignstack_connect_instantlyA
Idempotent
Inspect

Connect an Instantly.ai account by providing an API key. Validates the key against the Instantly API and stores the integration. Returns success: true when the key is valid and the integration is connected. Returns success: false (with integrationId still created) when the key fails validation.

ParametersJSON Schema
NameRequiredDescriptionDefault
apiKeyYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true), the description discloses validation behavior, persistence of the integration, and the important partial-failure semantics where integrationId is still created even on failed validation. This adds meaningful runtime context not evident from annotations alone.

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

Conciseness5/5

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

The description is tightly structured in three sentences: what the tool does, what it validates and stores, and what the return semantic is. No sentence is wasted, and the most important action verb is front-loaded.

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

Completeness5/5

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

For a two-parameter integration connector with no output schema, the description sufficiently explains the inputs, the validation flow, the persistence side effect, and the success/failure return semantics. The surprising behavior of creating an integrationId even on failure is explicitly called out, which is exactly the kind of context an agent needs.

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

Parameters4/5

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

The description adds functional meaning for apiKey by explaining that it is validated against the Instantly API, going beyond the schema's type/minLength constraints. The workspaceId parameter is not described in the description, but the schema already provides a useful explanation for it, so the combined coverage is adequate.

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

Purpose5/5

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

The description states a specific action ('Connect an Instantly.ai account'), names the exact resource type, and clarifies the mechanism (API key validation and storage). It also distinguishes itself from sibling connector tools like campaignstack_connect_apollo and campaignstack_connect_hubspot through the explicit 'Instantly.ai' reference.

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

Usage Guidelines4/5

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

The description clearly implies this tool is for connecting an Instantly.ai account using an API key, which provides a clear context for when to use it versus other connector tools. However, it does not explicitly name alternatives or state when not to use this tool, so it falls short of fully explicit routing guidance.

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

campaignstack_count_pending_reviewsA
Read-onlyIdempotent
Inspect

Count pending workflow review actions in a workspace. Returns the total number of entries awaiting human approval.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond those annotations by specifying exactly what is counted ('entries awaiting human approval') and what the return value is (a total number). This is especially valuable because there is no output schema.

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

Conciseness5/5

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

The description is one efficient sentence with no filler. It front-loads the action ('Count'), states the resource, and immediately clarifies the return value. Every clause earns its place.

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

Completeness5/5

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

For a simple count operation with one parameter, the description is complete: it states the scope, the subject, and the return format. Annotations cover the safety profile, so no further behavioral caveats are necessary. The absence of an output schema is adequately compensated by explicitly stating the return value.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for the workspaceId parameter. The phrase 'in a workspace' does add some meaning by indicating that workspaceId scopes the count, but it does not explain where to obtain the ID or any additional constraints beyond the schema's minLength. The single self-explanatory parameter keeps this adequate but not strong.

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

Purpose5/5

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

The description uses a specific verb ('Count'), names a precise resource ('pending workflow review actions'), and scopes it to a workspace. It also states the exact return behavior ('Returns the total number of entries awaiting human approval'), which clearly distinguishes it from sibling tools like list_pending_reviews.

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

Usage Guidelines3/5

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

The intended use is implied by the verb and return value: call this when you need a count of pending review actions rather than a detailed list. However, there is no explicit mention of the natural alternative (campaignstack_list_pending_reviews) or any when-not-to-use guidance, so the agent must infer the distinction.

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

campaignstack_count_unread_notificationsA
Read-onlyIdempotent
Inspect

Count unread notifications for a workspace. Returns the total number of unread notifications (useful for badge counts). Use campaignstack_list_notifications to see the actual notifications.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive behavior. The description adds return semantics ('Returns the total number') and the intended use, which is valuable since there is no output schema. It does not discuss what happens when workspaceId is omitted or invalid, but for a simple count operation this is a minor gap.

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

Conciseness5/5

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

Two tight sentences: purpose, return value/use case, and routing to the sibling tool. No filler; the essential information is front-loaded.

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

Completeness4/5

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

For a simple count operation with strong annotations and a single self-explanatory parameter, the description covers the return value and points to the list alternative. The only notable omission is workspaceId behavior (optionality/default), which prevents a perfect score.

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

Parameters2/5

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

Schema description coverage is 0% and the description does not explain the workspaceId parameter beyond repeating that the count is 'for a workspace.' It does not clarify whether workspaceId is required, what format it should take, or what happens if it is omitted. The property name is self-explanatory, but the description adds no parameter-level meaning.

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

Purpose5/5

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

The description names a specific verb and resource ('Count unread notifications for a workspace') and states the exact return value ('total number of unread notifications'). It also explicitly contrasts with campaignstack_list_notifications, so the agent can distinguish count from list operations.

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

Usage Guidelines5/5

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

It gives a clear use case ('useful for badge counts') and an explicit alternative: when you need to see the actual notifications, use campaignstack_list_notifications. This tells the agent when to choose this tool and when to route elsewhere.

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

campaignstack_craft_commentA
Read-only
Inspect

Generate a relevant comment for a LinkedIn post using campaign context. Accepts the post content the agent captured from the browser, plus lead and campaign context. Uses AI to craft a thoughtful comment that builds rapport. Use for engaging with a lead's LinkedIn posts before or after connecting.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already establish that the operation is read-only and non-destructive, so the bar is lower. The description adds useful behavioral context by noting that the comment is AI-generated and aimed at building rapport. It does not disclose, however, whether the tool returns the comment text for approval or directly submits it, which is material for an agent.

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

Conciseness5/5

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

Three dense sentences, with the core purpose stated first. Every sentence contributes: what it generates, what inputs it uses, and when to use it. 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.

Completeness3/5

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

The description covers purpose, input context, and usage timing, and annotations cover safety. However, there is no output schema, and the description does not state the return value (e.g., a crafted comment string) or clarify that this tool only generates the comment and does not post it. Given the empty schema, an agent could be unsure how to call it or what to do with the result.

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

Parameters4/5

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

There are zero parameters in the schema, so the baseline is 4. The description adds conceptual meaning by naming the inputs the agent should make available: post content, lead context, and campaign context. It cannot score higher because the actual schema has no parameter fields, leaving how to pass these inputs unspecified.

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

Purpose4/5

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

The description states a specific verb and resource: 'Generate a relevant comment for a LinkedIn post.' It clearly communicates the tool's function and implies it is a drafting/generation tool rather than a posting action. It does not explicitly name or differentiate from sibling tools like campaignstack_comment_on_post or campaignstack_reply_to_comment, so it stops short of a 5.

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

Usage Guidelines4/5

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

The description gives a clear context for use: 'engaging with a lead's LinkedIn posts before or after connecting.' This tells the agent when the tool is appropriate. It lacks explicit when-not-to-use guidance or mentions of alternatives, such as using comment_on_post when the intent is to publish the comment.

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

campaignstack_craft_followupAInspect

Generate a contextual follow-up message that accounts for the full conversation history. Compares agent-provided messages with stored history to identify new messages, stores any new messages found, then uses AI to craft a reply. Also detects lead intent (interested, not_interested, asking_for_info, scheduling_call, other). Use for any message where prior conversation exists. For first messages, use campaignstack_craft_message.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only mark non-readOnly/non-idempotent/non-destructive, which is relatively uninformative. The description adds real behavioral detail: it compares agent messages with stored history, stores new messages as a side effect, and runs AI crafting plus lead-intent detection. This goes well beyond what the annotations convey.

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

Conciseness5/5

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

Four tightly packed sentences with no filler; the main purpose and primary differentiator are front-loaded, and the sibling routing is stated at the end. Every sentence adds information.

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

Completeness4/5

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

For a no-parameter tool with no output schema, it covers the workflow, side effects, intent detection, and where to use it. The one gap is that the return value (crafted reply and/or intent classification) is implied rather than explicitly stated.

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

Parameters4/5

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

The input schema has zero parameters and 100% schema coverage, so the baseline is 4. The description explains the data flow ('agent-provided messages', 'stored history') despite no schema fields, though it leaves slightly unclear how messages are supplied to a tool with an empty input schema.

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

Purpose5/5

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

The description opens with a specific verb and resource ('Generate a contextual follow-up message') and explains the underlying process. It explicitly differentiates from campaignstack_craft_message for first-contact messages, so an agent can tell them apart immediately.

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

Usage Guidelines5/5

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

Provides clear routing guidance: 'Use for any message where prior conversation exists' and explicitly directs first messages to campaignstack_craft_message. This leaves no ambiguity about when this tool is appropriate.

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

campaignstack_craft_messageA
Read-only
Inspect

Generate a personalized LinkedIn first message using full campaign context. Fetches lead profile, campaign goal, ICP, and persona data from Convex, then uses AI to craft a tailored message. Use only for first messages (no prior conversation). For follow-ups with conversation history, use campaignstack_craft_followup instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark this as readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by revealing that it fetches lead profile, campaign goal, ICP, and persona data from Convex and then uses AI to craft the message. It could go further by explicitly stating that it only returns a draft and does not send the message, but this is not a contradiction and the readOnly hint mitigates the gap.

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

Conciseness5/5

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

Two sentences, no filler. The main purpose is front-loaded, followed immediately by usage constraints and the alternative tool. Every sentence earns its place.

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

Completeness4/5

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

For a zero-parameter generation tool, this is largely complete: it describes the inputs it fetches, the output it produces, and when it should not be used. The only minor gaps are that it does not explicitly state how the target lead/campaign is resolved (since there are no parameters) and does not state the return format, but the readOnlyHint and 'craft a message' wording make these low-risk omissions.

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

Parameters4/5

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

The tool has zero parameters, so there is no parameter documentation burden on the description. The description still adds meaning by listing the contextual data sources (lead profile, campaign goal, ICP, persona) that shape the generated message, which helps the agent understand what information influences the output.

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

Purpose5/5

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

The description states a specific verb ('Generate'), a clear resource ('personalized LinkedIn first message'), and the context used ('full campaign context'). It also names the exact sibling alternative, campaignstack_craft_followup, so the tool is easy to distinguish from nearby craft tools.

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

Usage Guidelines5/5

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

Explicitly says 'Use only for first messages (no prior conversation)' and routes follow-ups to campaignstack_craft_followup. This gives the agent a clear decision rule for when to select this tool versus its sibling.

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

campaignstack_craft_noteA
Read-only
Inspect

Generate a personalized LinkedIn connection note (max 300 characters). Fetches lead profile, campaign goal, ICP, and persona data from Convex, then uses AI to craft a short, compelling connection note. Use for connection requests. For first messages after connecting, use campaignstack_craft_message.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context beyond annotations: it fetches lead profile, campaign goal, ICP, and persona data from Convex, and uses AI to generate the note. It also clarifies the tool only generates text rather than sending the connection request, which is valuable.

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

Conciseness5/5

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

The description is compact, front-loads the key purpose and character limit, and devotes its second sentence to routing the agent to the correct sibling. Every sentence earns its place without unnecessary detail.

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

Completeness4/5

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

For a zero-parameter generation tool, the description explains what it produces, the data sources it uses, the length limit, and when to use it vs. an alternative. It could be slightly clearer about how the target lead/campaign is selected given no explicit parameters, but overall it is sufficient for correct invocation.

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

Parameters4/5

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

The tool has zero parameters, so the schema carries no burden. The description adds meaning by explaining that the tool automatically draws on lead profile, campaign goal, ICP, and persona data from Convex, effectively clarifying how input context is resolved despite the empty parameter list.

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

Purpose5/5

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

Description clearly states the specific action ('Generate'), the resource ('personalized LinkedIn connection note'), and the explicit constraint ('max 300 characters'). It also differentiates from nearby siblings by naming the alternative use case for first messages via campaignstack_craft_message.

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

Usage Guidelines5/5

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

Explicitly says 'Use for connection requests' and gives the when-not-to-use condition: 'For first messages after connecting, use campaignstack_craft_message.' This provides clear exclusions and routes to the correct sibling, leaving no inference needed.

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

campaignstack_create_campaignAInspect

Create a new campaign in a workspace. Returns the new campaign ID and title. Creates a new campaign ready for configuration.

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYes
titleYes
descriptionNo
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already indicate this is not read-only, not idempotent, and not destructive; the description aligns by making the creation side effect explicit. It adds meaningful context by stating the campaign is returned 'ready for configuration' and that the response includes the new ID and title. No contradiction with the annotations exists.

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

Conciseness4/5

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

At about 22 words, the description is compact and front-loaded with the primary action. However, 'Create a new campaign' is expressed twice, creating slight redundancy; the second sentence about return values and the third about configuration state do add useful information. Overall, it is concise without being sparse.

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

Completeness3/5

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

For a simple creation tool, the description covers the core purpose and return value, and required parameters are listed in the schema. But it does not explain the meaning of 'goal', optional parameters, or the output shape beyond ID and title, and there is no output schema to fill that gap. Given the low schema coverage, the definition is adequate but not fully complete.

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

Parameters2/5

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

Schema description coverage is only 25%, with only workspaceId having a description, so the tool description carries the burden of clarifying title and goal. It does not explain what 'goal' means, whether a title must be unique, or how workspaceId interacts with key types. The description adds almost no parameter-level meaning beyond what the schema already provides.

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

Purpose5/5

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

The description clearly states the action ('Create a new campaign in a workspace') with a specific verb and resource. The word 'new' distinguishes it from campaign update, delete, archive, and list operations, even without naming a sibling explicitly. It also specifies what is returned (new campaign ID and title), reinforcing the tool's purpose.

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

Usage Guidelines3/5

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

The description implies this tool is used when creating a new campaign, and 'ready for configuration' hints at a follow-up configuration step. However, it does not explicitly mention when not to use it, such as when an existing campaign should be updated via update_campaign, or when listing existing campaigns is more appropriate. Guidance is implied rather than explicit.

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

campaignstack_create_company_employee_watchA
Idempotent
Inspect

Watch a company for NEW employees: the first run snapshots the company's employee set (via campaignstack_extract_company_employees mechanics), then weekly re-reads diff against it and emit a company_employee_joined signal for each genuinely new person (scored against campaigns like any other signal). Idempotent; active watches are capped per workspace. Distinct from campaignstack_create_signal_watch (which watches one PERSON's profile).

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYes
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses meaningful behavior beyond the annotations: first-run snapshot, weekly re-read/diff, emitted company_employee_joined signal, idempotency, and per-workspace caps. It does not detail permission requirements or failure modes, but the annotations already cover safety traits like readOnly and destructive hints.

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

Conciseness5/5

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

Two dense sentences carry all key information: purpose, mechanics, cadence, side effect, idempotency, cap, and sibling distinction. Nothing is wasted and the core action is front-loaded.

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

Completeness4/5

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

For a two-parameter creation tool with no output schema, the description covers the essential operational details: what the watch does, when it runs, what it emits, and its limits. It could mention how to list, pause, or remove the watch, but those are covered by sibling tools and do not block correct invocation.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It references 'company' and 'workspace' enough to imply what companyId and workspaceId mean, but it does not explicitly define the format, source, or validation of these IDs. The parameter names are self-explanatory, but the description could be more direct.

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

Purpose5/5

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

The description states a specific verb and resource: 'Watch a company for NEW employees' and explains the signal it emits. It also explicitly distinguishes itself from campaignstack_create_signal_watch, so an agent can tell these sibling tools apart.

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

Usage Guidelines5/5

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

It clearly explains the intended use case (tracking new employees at a company) and names the closest alternative, campaignstack_create_signal_watch, with the deciding condition: company-level vs person-level watching. The lifecycle (first snapshot then weekly diffs) also clarifies when ongoing behavior kicks in.

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

campaignstack_create_competitor_watchAInspect

Creates a new competitor watch to monitor a LinkedIn company page or influencer profile. Automatically deduplicates by normalized LinkedIn URL within the workspace. Use campaignstack_list_competitor_watches to see existing watches.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
accountIdsNoOptional LinkedIn account IDs the watch reads and acts with. Defaults to a single automatically chosen account, never all workspace accounts. Change later with campaignstack_update_competitor_watch_accounts.
entityTypeYes
profileUrlYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.4/5.0
Behavior4/5

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 description only needs to add non-obvious behavior. It does so by disclosing automatic deduplication by normalized LinkedIn URL within the workspace, which is valuable operational context beyond the structured annotations.

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

Conciseness5/5

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

Three short sentences, each earning its place: the creation purpose, the deduplication behavior, and the pointer to list existing watches. There is no filler, repetition of schema fields, or tangential information.

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

Completeness4/5

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

The description plus schema covers the tool's intent, key parameters, deduplication behavior, and how to inspect existing watches. With no output schema, a note about the return value would be helpful, but this is a minor gap rather than a critical omission.

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

Parameters4/5

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

Although schema description coverage is only 40%, the description compensates for key required parameters: 'LinkedIn company page or influencer profile' maps naturally to profileUrl and entityType, and 'normalized LinkedIn URL' clarifies what profileUrl should contain. The optional accountIds and workspaceId already have schema descriptions, and name is self-explanatory.

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

Purpose5/5

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

The description opens with a specific verb and resource—'Creates a new competitor watch'—and immediately states its function: monitoring a LinkedIn company page or influencer profile. This clearly establishes what the tool does and distinguishes it from the broader set of watch-creation siblings.

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

Usage Guidelines4/5

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

It provides clear usage context and points the agent to campaignstack_list_competitor_watches for viewing existing watches, which is directly relevant to avoiding duplicate creation. It does not explicitly contrast this tool with sibling watch creators like create_search_watch or create_signal_watch, but the competitor-watch scope is specific enough that the intended use is clear.

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

campaignstack_create_connection_watch_agentAInspect

Create a connection-watch signal agent for a LinkedIn account. The agent monitors the account's newly accepted connections (from activation onward, no backfill) and routes each new connection into an auto-generated welcome workflow (AI-crafted DM → human review → send, plus follow-up rounds). Only one connection watcher may exist per LinkedIn account across all workspaces. The agent is created paused. Use campaignstack_resume_signal_agent to activate it. Advanced path: prefer campaignstack_set_account_watcher, which creates on first enable and pauses or resumes afterwards. Use campaignstack_list_accounts to find account IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo
linkedinAccountIdYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the generic annotations, the description discloses crucial behavioral details: no backfill, only one watcher allowed per LinkedIn account across workspaces, the agent is created paused, and the workflow includes AI-crafted DM, human review, send, and follow-up rounds. These are exactly the non-obvious behaviors an agent needs to set correct expectations.

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

Conciseness5/5

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

Every sentence earns its place: purpose, behavior, constraint, paused state, activation path, advanced alternative, and ID lookup are all packed into a compact, front-loaded description. There is no filler or repetition of schema/annotation details.

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

Completeness5/5

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

For a creation tool with only two simple parameters and no output schema, the description is remarkably complete. It covers what is created, how it behaves, its lifecycle state, uniqueness constraint, activation requirement, and a preferred alternative. The only minor omission is workspaceId semantics, which does not meaningfully undermine an agent's ability to call the tool.

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

Parameters3/5

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

The schema has zero property descriptions, and the description compensates only partially. It explains how to find linkedinAccountId (use campaignstack_list_accounts), but it never explains workspaceId, its optional role, or how workspace scoping interacts with the one-watcher-per-account rule. The parameter names are fairly self-explanatory, but the description does not fully carry the semantic burden.

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

Purpose5/5

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

The description opens with a clear verb and resource: 'Create a connection-watch signal agent for a LinkedIn account.' It then defines exactly what the agent does (monitors newly accepted connections, routes them into a welcome workflow) and differentiates the tool from siblings like campaignstack_set_account_watcher and generic signal-agent creators.

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

Usage Guidelines5/5

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

The description gives explicit usage context: the agent starts paused, must be resumed via campaignstack_resume_signal_agent, and account IDs can be found via campaignstack_list_accounts. It also names an advanced alternative (campaignstack_set_account_watcher) and states when it is preferred, which makes tool selection unambiguous.

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

campaignstack_create_content_postAInspect

Creates a draft content post for a LinkedIn account. Returns the new post ID. Use campaignstack_get_content_post to retrieve the full post. postType is auto-inferred from media if not provided (no media = text, image/* = image, video/* = video, pdf/pptx = document). Optional tags array for categorization (system tags: ai-generated, weekly-suggestion, on-demand, competitor-inspired; or freeform user tags).

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYes
tagsNo
mediaIdsNo
platformYes
postTypeNo
scheduledAtNoSchedule the post at this exact time after creating it.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
autoScheduleNoCreate the post and auto-place it into the next valid posting slot (respects the account's daily LinkedIn limit). Use this to queue many posts without picking times.
authorAccountIdYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already indicate this is a non-readonly, non-idempotent write, so the description doesn't need to restate that. It adds useful context by clarifying the result is a draft and that postType is auto-inferred, but it doesn't disclose related behavior like how draft posts enter the approval/publishing flow or any limits beyond what annotations convey.

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

Conciseness5/5

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

Three dense sentences with no filler. The core action, return value, retrieval alternative, postType behavior, and tag semantics are all present and front-loaded, making the description easy to scan.

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

Completeness4/5

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

For a creation tool with no output schema, the description covers the key outcome (new post ID), the draft nature, the companion retrieval tool, scheduling options, tag constraints, and media-based postType inference. It could mention how to obtain mediaIds or follow approval/scheduling next steps, but the description is largely sufficient for correct invocation.

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

Parameters4/5

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

Schema coverage is only 33%, so the description carries a real burden here. It compensates well by explaining the media-to-postType inference rule and differentiating system tags from freeform user tags. It does not describe mediaIds sourcing or authorAccountId semantics, but the names and schema constraints plus the inference rule cover the most non-obvious parts.

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

Purpose5/5

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

The description states a specific verb and resource: it creates a draft content post for a LinkedIn account and returns the new post ID. The 'draft' qualifier and the pointer to campaignstack_get_content_post clearly separate it from retrieval, list, approval, and scheduling siblings.

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

Usage Guidelines4/5

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

It explicitly tells the agent to use this tool to create a draft and directs to campaignstack_get_content_post for retrieval. It does not explicitly rule out schedule/approve siblings, but the draft semantics plus the scheduledAt/autoSchedule parameters make the intended workflow reasonably clear.

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

campaignstack_create_icpAInspect

Create a new ICP (Ideal Customer Profile) for a campaign. Specify target criteria: titles, industries, seniorities, company sizes, and keywords. After creation, use campaignstack_trigger_icp_scoring to score leads against the new ICP. Use campaignstack_list_campaigns to find valid campaignId values.

ParametersJSON Schema
NameRequiredDescriptionDefault
titlesNo
keywordsNo
campaignIdYes
industriesNo
senioritiesNo
companySizesNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, covering the safety profile. The description adds that a new ICP is created and made available for later scoring, but it does not disclose return values or duplicate-creation behavior—modest gaps given existing annotation coverage.

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

Conciseness5/5

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

The description is four short, logically ordered sentences: what the tool does, the criteria it accepts, the recommended follow-up action, and how to obtain a required value. Every sentence earns its place, with no filler or unnecessary repetition.

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

Completeness4/5

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

For a 6-parameter creation tool with no output schema, the description covers all parameters at a useful summary level and names the follow-up scoring tool. It omits edge details such as whether at least one criterion is required or what the response looks like, but an agent has enough context to select and invoke the tool correctly.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the burden. It enumerates the five optional criteria parameters and connects campaignId to the campaign concept, even telling the agent how to source valid campaignId values. It does not define value conventions for individual criteria, but the parameter names are largely self-explanatory.

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

Purpose4/5

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

The description clearly states the verb ('Create') and resource ('new ICP (Ideal Customer Profile)') and lists the concrete target dimensions: titles, industries, seniorities, company sizes, and keywords. It is distinguishable from get/list tools, though it does not explicitly contrast with the sibling create_persona or update_icp tools.

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

Usage Guidelines4/5

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

The description gives explicit workflow guidance: after creating the ICP, use campaignstack_trigger_icp_scoring to score leads against it, and use campaignstack_list_campaigns to find valid campaignId values. It does not spell out when-not-to-use or name alternatives like create_persona, but the sequencing context is concrete and useful.

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

campaignstack_create_lead_listAInspect

Create a new static lead list in a campaign. Optionally add leads by providing leadRefs. Each leadRef needs leadSource (default 'global') and leadId. Use campaignstack_list_campaigns to find valid campaign IDs and campaignstack_search_leads to find lead IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
leadRefsNo
campaignIdYes

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already mark this as a non-read-only, non-idempotent mutation, and the description adds that it creates a new static list and can optionally add leads. However, it does not disclose uniqueness, response shape, or failure behavior, though the annotations lower the bar.

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

Conciseness5/5

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

Three sentences, action-first, with no filler. Each sentence adds distinct value: the core action, optional lead addition, and prerequisite ID lookups.

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

Completeness4/5

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

The description is complete enough for selecting and invoking the tool: it covers the required campaign scope, optional leadRefs, and ID sourcing. It could mention the response/return value or point to add_leads_to_list for existing lists, but these are not blockers.

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

Parameters4/5

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

With 0% schema description coverage, the description compensates by explaining leadRefs structure (leadSource default 'global' and leadId) and how to obtain campaign and lead IDs. It slightly overstates leadSource as 'needs' when the schema makes it optional with a default, so it is not perfect.

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

Purpose5/5

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

The description states a specific action and resource: 'Create a new static lead list in a campaign.' The word 'static' also distinguishes it from the sibling campaignstack_create_query_lead_list, so the agent can identify the correct tool immediately.

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

Usage Guidelines4/5

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

It provides clear context for when to use the tool (creating a new static list) and gives concrete lookup guidance: use campaignstack_list_campaigns for valid campaign IDs and campaignstack_search_leads for lead IDs. It does not explicitly contrast with add_leads_to_list or create_query_lead_list, but 'new' and 'static' make the primary use condition clear.

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

campaignstack_create_personaAInspect

Create a new persona in a campaign. Personas represent buyer archetypes with their pain points, goals, and objections. Use campaignstack_list_campaigns to find campaign IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
goalsNoGoals this persona is trying to achieve
campaignIdYes
objectionsNoCommon objections from this persona
painPointsNoPain points this persona experiences
descriptionNo

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already indicate this is a non-read-only, non-idempotent, non-destructive mutation. The description's 'Create a new persona' aligns with that and adds no dangerous side-effect information. It does not disclose duplicate behavior, authorization needs, or downstream effects, but the annotation coverage partially mitigates this.

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

Conciseness5/5

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

Three short sentences with no filler: the action is stated first, the concept is clarified second, and the prerequisite lookup is given third. Every sentence earns its place.

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

Completeness4/5

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

The description is sufficient for an agent to understand what to create, which campaign context is required, and how to obtain the campaign ID. There is no output schema and the return value is not described, but for a straightforward create operation this is a minor gap rather than a blocking one.

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

Parameters3/5

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

With 50% schema description coverage, the description adds some meaning by explaining that personas have pain points, goals, and objections, and by pointing to campaignstack_list_campaigns for campaignId. However, it does not explain the name or description parameters, and it mostly restates what the schema already describes for the array fields.

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

Purpose4/5

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

The description clearly states the verb ('Create') and resource ('a new persona in a campaign'), and adds conceptual context about personas representing buyer archetypes. However, it does not explicitly differentiate this from sibling tools like create_icp or update_persona, so it stops short of full sibling differentiation.

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

Usage Guidelines4/5

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

The instruction to use campaignstack_list_campaigns to find campaign IDs provides a concrete prerequisite and helps the agent gather the required campaignId. There are no explicit when-not-to-use conditions or alternative tool mentions, but the context is clear enough.

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

campaignstack_create_phaseAInspect

Create a new campaign phase (roadmap milestone). Phases organize a campaign into sequential steps with objectives. The order field controls phase sequencing. Use campaignstack_list_campaigns to find campaign IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
orderYes
phaseTypeNoOptional phase classification
campaignIdYes
objectivesYes
descriptionYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate this is a mutating, non-idempotent operation (readOnlyHint=false, idempotentHint=false). The description adds useful domain context, especially that 'the order field controls phase sequencing,' but it does not disclose potential side effects, failure modes, or whether creation requires an existing campaign beyond supplying an ID.

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

Conciseness5/5

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

The description is three tight sentences with no filler. It front-loads the core purpose, then explains phase organization and the key order-field behavior, and ends with a practical lookup tip. Every sentence earns its place.

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

Completeness3/5

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

The description provides enough orientation for a straightforward create operation: what a phase is, that order matters, and how to obtain campaign IDs. It lacks guidance on what happens after creation, how objectives map to the phase structure, or how ordering interacts with existing phases, though the schema and mutation annotations cover some of this burden.

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

Parameters3/5

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

Schema description coverage is only 17%, so the description needs to compensate. It explains the purpose of the order field and points to campaignstack_list_campaigns for campaignId. However, it does not add meaning for objectives, name, or description beyond their obvious names, and phaseType is only covered by the schema.

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

Purpose4/5

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

The description states a specific action and resource: 'Create a new campaign phase (roadmap milestone).' It also clarifies that phases organize a campaign into sequential steps with objectives. It does not explicitly differentiate itself from siblings like update_phase or list_phases, but the 'create' and 'new' language makes the intent clear.

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

Usage Guidelines3/5

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

The description implies when to use the tool—when creating a new phase for a campaign—and provides one useful related instruction: use campaignstack_list_campaigns to find campaign IDs. However, it does not state when not to use this tool or compare it with alternatives such as update_phase or create_campaign.

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

campaignstack_create_query_lead_listAInspect

Create a dynamic query-type lead list in a campaign. Query lists dynamically resolve their members from included/excluded lists and filter rules. Use campaignstack_list_campaigns to find campaign IDs and campaignstack_list_lead_lists to find lead list IDs for include/exclude refs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
queryYes
campaignIdYes

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses the key behavioral trait that query lists resolve members dynamically from included/excluded lists and filter rules, which goes beyond the annotations. The readOnlyHint=false already signals mutation, and the description adds useful nuance about how the list behaves.

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

Conciseness5/5

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

Two sentences, no filler. The primary purpose is front-loaded, and the follow-up sentence provides actionable lookup context. Every clause earns its place.

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

Completeness2/5

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

Given the complex nested query schema and the absence of both an output schema and any field descriptions, the description leaves substantial gaps. An agent still lacks enough information to correctly construct the query.filter, query.logic, and query.excludedLeadIds fields. The ID lookup pointers help but do not complete the picture.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It clarifies that campaignId and include/exclude leadListIds can be discovered via list tools, but it says nothing about the query.logic enum, the filter array structure, or excludedLeadIds. This is insufficient for a nested query object with undocumented fields.

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

Purpose5/5

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

The description clearly states the specific operation: creating a dynamic query-type lead list within a campaign. It distinguishes this from the static create_lead_list sibling by emphasizing the 'query-type' nature and how members are resolved dynamically.

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

Usage Guidelines4/5

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

It provides concrete lookup guidance: use campaignstack_list_campaigns for campaign IDs and campaignstack_list_lead_lists for include/exclude refs. However, it does not explicitly contrast this tool with the static create_lead_list or update_lead_list, so the when-not-to-use guidance is only implicit.

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

campaignstack_create_search_watchAInspect

Set up a LinkedIn search watch that automatically discovers new leads for a campaign. A search watch monitors a topic keyword on LinkedIn content search (past 24h, relevance-sorted) every ~6 hours, extracting post authors and feeding them into the campaign as new leads. Only one search watch per topic is active across all campaigns in a workspace at a time. if another campaign already watches this topic, the new watch is created but starts disabled (ownership transfers automatically when the other campaign is archived). Use campaignstack_list_search_topics to see what topics are already watched, and campaignstack_get_campaign_topics to see topics already on the target campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicIdYesID of the topic to watch. Use campaignstack_get_campaign_topics to see topics already on a campaign, or list taxonomy topics via campaignstack_list_search_topics.
accountIdsNoOptional list of LinkedIn account IDs to scope the search watch to. When omitted, the watch runs on any available account.
campaignIdYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations are all false and offer essentially no safety profile, so the description carries the full burden — and it delivers richly. It discloses the ~6-hour polling cadence, the past-24h relevance-sorted scope, the workspace-level uniqueness constraint, the fact that a conflicting watch is created but starts disabled, and the automatic ownership transfer on archival. This is exactly the kind of non-obvious runtime behavior an agent needs and could never infer from the schema or annotations.

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

Conciseness4/5

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

The description is longer than average but information-dense, with zero filler. It is logically structured: what the tool does, how the watch operates mechanically, the uniqueness constraint, the conflict edge case, and the pre-flight lookups. It is front-loaded with the core purpose, though the dense single paragraph without breaks is slightly harder to parse than it could be.

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

Completeness4/5

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

For a tool with this much behavioral complexity — background scheduling, uniqueness semantics, disabled states, ownership transfer — the description covers the operational landscape impressively. The only notable gap is return value: with no output schema present, an agent is left uncertain whether the call returns a watch ID, a status, or the lead-feed behavior confirmation.

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

Parameters4/5

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

Schema coverage is 67%: topicId and accountIds are documented in the schema, but campaignId has no schema description. The main description compensates by establishing campaignId's role as the target campaign receiving extracted leads, and it adds conceptual meaning to topicId (a keyword monitored on LinkedIn content search, relevance-sorted) that the schema's terse "ID of the topic to watch" lacks.

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

Purpose5/5

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

The opening sentence states a specific verb and resource — "Set up a LinkedIn search watch that automatically discovers new leads for a campaign" — then precisely defines what a search watch is (monitors a topic keyword on LinkedIn content search, extracts post authors, feeds them as leads). This clearly differentiates it from sibling tools like create_competitor_watch, create_company_employee_watch, and create_signal_watch, which are all different watch types.

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

Usage Guidelines4/5

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

The description gives explicit pre-flight workflow guidance: it names campaignstack_list_search_topics for checking already-watched topics and campaignstack_get_campaign_topics for topics on the target campaign, and explains the one-watch-per-topic constraint and the disabled-start fallback. It does not explicitly state when to choose this tool over the other watch-creating siblings, but the precise definition of what a search watch is makes the selection criteria reasonably inferable.

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

campaignstack_create_signal_agentAInspect

Create a new signal agent that monitors a LinkedIn profile, company feed, group, or post for engagements. Auto-generates a template workflow and lead list. target specifies what to watch: { platform: 'linkedin', kind: 'profile', urn: '...' } for profile/company feeds, { platform: 'linkedin', kind: 'group', url: '...', groupId: '...' } for groups, or { platform: 'linkedin', kind: 'post', url: '...', activityId: '...' } for specific posts. accountIds are the accounts that observe the feed; actAccountIds are the accounts that act on signals. Use campaignstack_list_accounts to find account IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
typeYes
targetYes
accountIdsYes
targetNameYes
workspaceIdNo
responseModeYes
silenceHoursNo
actAccountIdsYes
publicReplyConfigNo
followUpDelaysHoursNo

TDQS

A4.4/5.0
Behavior4/5

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

The description adds meaningful behavioral detail beyond the annotations, particularly that creating the agent also auto-generates a template workflow and lead list, and that accountIds observe while actAccountIds act on signals. It does not contradict the annotations, and the mutation implication of 'create' aligns with readOnlyHint=false.

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

Conciseness5/5

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

The description is compact yet information-dense, front-loading the primary purpose before detailing target variants and account roles. Every sentence contributes value, with no repetition of schema constraints or filler.

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

Completeness4/5

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

Given the complexity of the nested target object and 11 parameters, the description covers the essential decision points: what to monitor, how the target object differs by kind, and how accountIds/actAccountIds are used. It does not mention what the tool returns, but since no output schema exists and the description already explains the core creation behavior, this is a minor gap rather than a blocking one.

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

Parameters4/5

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

With schema description coverage at 0%, the description carries the burden for parameter meaning and does so for the most complex fields: target shapes and the observer/actor distinction between accountIds and actAccountIds. It does not explain optional parameters like silenceHours, followUpDelaysHours, or publicReplyConfig, but the core required parameters are sufficiently clarified for correct invocation.

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

Purpose5/5

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

The description clearly states the action ('Create a new signal agent'), the resource type, and the scope: monitoring a LinkedIn profile, company feed, group, or post for engagements. It also distinguishes this from similar watch tools by noting it auto-generates a template workflow and lead list, making the tool's purpose specific and actionable.

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

Usage Guidelines4/5

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

The description gives clear context on what the tool is for and includes an explicit pointer to campaignstack_list_accounts for finding account IDs. However, it does not explicitly contrast this tool with sibling tools like create_signal_watch or create_search_watch, so an agent must infer when this signal-agent variant is preferred.

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

campaignstack_create_signal_watchA
Idempotent
Inspect

Watch a lead for profile signal changes: the system refreshes their profile daily and the workspace gets an alert (in-app + email) when a monitored field changes (title, company, seniority, headline, location). Idempotent: watching an already-watched lead returns the existing watch. Active watches are capped per workspace. Use campaignstack_search_leads to find lead IDs and campaignstack_list_signal_watches to see current watches.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
leadSourceNoglobal
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

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

The description significantly expands on the annotations by disclosing the daily refresh cadence, alert channels, monitored fields, idempotent return behavior, and the per-workspace cap on active watches. No contradiction with annotations exists.

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

Conciseness5/5

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

The description is compact, front-loaded with the core behavior, and every sentence adds value: monitoring behavior, idempotence, cap, and prerequisite tools. No filler or redundancy.

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

Completeness4/5

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

The description covers the purpose, monitoring behavior, idempotence, cap, and discovery workflow, which is strong for a tool without an output schema. The main omission is leadSource semantics and perhaps explicit cleanup/removal guidance, so it falls just short of fully complete.

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

Parameters2/5

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

Schema description coverage is 0%, and the description does not explain the leadSource parameter at all. While leadId and workspaceId are inferable from context, leadSource values ('global'/'private') remain undefined, leaving a real gap for correct invocation.

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

Purpose5/5

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

The description states a specific verb and resource: watch a lead for profile signal changes. It explains exactly what happens (daily refresh, alerts on title, company, seniority, headline, location), which distinguishes it from related watch/agent tools.

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

Usage Guidelines4/5

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

The description provides clear workflow context by pointing to campaignstack_search_leads for finding lead IDs and campaignstack_list_signal_watches for current watches. It does not explicitly compare to alternative watch tools, but the usage context is clear enough.

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

campaignstack_create_workflowAInspect

Create a new workflow from a graph you author. The graph defines automation nodes (e.g. linkedin:profile_view, linkedin:connection_request, flow:wait) and directed edges. Use campaignstack_get_workflow_node_types first to discover valid node types, their configHint shapes, and the required graph format. Returns { workflowId, nodeCount } on success. sourceConfig is optional. Omit it to get a default campaign_pool source with icpScoreMin 50. Signal-intake graphs (lead-list-based source providers) are not supported by this tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
graphYesWorkflow graph: nodes (nodeType, label, config) + edges (sourceIndex, targetIndex). Use campaignstack_get_workflow_node_types to discover valid node types.
campaignIdNoAssociate this workflow with a campaign
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
sourceConfigNoSource node configuration (providers format only). Omit to use the default: a single campaign_pool provider with icpScoreMin 50. Signal-intake graphs using lead-list-based sources are not supported by this tool.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already indicate this is not read-only and not idempotent, so a mutation is expected. The description adds value by stating the success return shape ({ workflowId, nodeCount }), the default source behavior when sourceConfig is omitted, and the unsupported graph category. It does not cover failure modes or rate limits, but for a create operation these are reasonable gaps given the annotations and the explicit return contract.

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

Conciseness5/5

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

The description is tight and information-dense: purpose, graph structure, prerequisite discovery call, success return, default source behavior, and an explicit unsupported case. Every sentence earns its place, and the core 'Create a new workflow' directive is front-loaded. There is no filler or repetition of schema details.

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

Completeness5/5

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

This is a complex tool with nested graph and sourceConfig objects and no output schema. The description compensates well by describing the return contract, directing the agent to the authoritative node-type discovery tool, explaining the default sourceConfig, and capping applicability with the signal-intake exclusion. Combined with the 80% schema coverage, the agent has enough to invoke this correctly.

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

Parameters4/5

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

Schema description coverage is high at 80%, so the schema already documents name, graph, campaignId, workspaceId, and sourceConfig. The description adds meaningful parameter-level guidance beyond that: it explains that graph nodes are automation nodes with examples, that get_workflow_node_types should drive valid node configs, and that sourceConfig is optional with a concrete default. This pushes the value beyond the schema baseline.

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

Purpose5/5

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

The description opens with the specific verb 'Create' and the target resource 'a new workflow', then clarifies what a workflow is: a graph of automation nodes and directed edges. It distinguishes itself from the many sibling tools by focusing on graph authoring and explicitly excluding signal-intake graphs. An agent can immediately tell this is the workflow-creation tool.

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

Usage Guidelines5/5

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

The description gives explicit sequencing guidance: call campaignstack_get_workflow_node_types first to learn valid node types, configHint shapes, and the graph format. It also states a clear when-not case: signal-intake graphs with lead-list-based sources are not supported. The optional sourceConfig default behavior is spelled out, so the agent knows what happens if it omits the parameter.

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

campaignstack_decide_playbook_proposalAInspect

Accept or reject the pending playbook proposal. Accept applies every change in one transaction through the same caps, version snapshot and user-authored reconciliation as a manual edit; it fails when a targeted text changed since the proposal was made, in which case propose again. Reject applies nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
decisionYes
proposalIdYesPending proposal id from campaignstack_get_playbook_proposal
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.7/5.0
Behavior5/5

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

The description reveals meaningful behavior beyond the annotations: accept is transactional, applies all changes through the same safeguards as a manual edit, and fails entirely if the target text changed. Reject is clearly described as applying nothing. This fully compensates for the uninformative false annotations.

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

Conciseness5/5

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

Two dense sentences with no filler. The core action is front-loaded, and each clause adds necessary information: transaction semantics, failure mode, and the no-op reject behavior.

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

Completeness5/5

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

For a state-changing tool with no output schema, the description covers what the operation does, how it fails, and what reject does. The schema covers parameter provenance and workspace requirements, so an agent has everything needed to invoke it correctly.

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

Parameters4/5

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

The schema documents proposalId and workspaceId, while the decision enum lacks a description. The description compensates by explaining what accept and reject do, giving the decision parameter practical meaning. It adds value beyond the schema without needing to restate schema details.

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

Purpose5/5

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

The description opens with a precise verb and resource: "Accept or reject the pending playbook proposal." It clearly distinguishes this tool from siblings like campaignstack_propose_playbook_change and campaignstack_get_playbook_proposal by focusing on the decision action.

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

Usage Guidelines4/5

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

It gives explicit guidance for the accept path, including the failure condition and the instruction to propose again when targeted text changed. It does not explicitly contrast with propose/revert siblings, but the decision-oriented guidance is strong enough for correct selection.

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

campaignstack_delete_campaignA
Destructive
Inspect

PERMANENTLY delete a campaign and cascade-delete all associated data: workflows (nodes, edges, lead contexts, webhook tokens), lead lists and entries, ICPs and lead scores, personas, phases, metrics, signal weights, topics, conversations, search cursors, scheduled automations, and enrichment queue items. This action is irreversible. Use campaignstack_archive_campaign instead to preserve data. If the campaign is not found, use campaignstack_list_campaigns to find valid IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations say destructiveHint=true, but the description goes further by naming every data class destroyed and stating 'This action is irreversible.' This is exactly the context agents need beyond the flag.

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

Conciseness5/5

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

The high-stakes warning is front-loaded, the cascade list is dense but purposeful, and all three sentences contribute distinct guidance (action, irreversibility, alternatives). No filler.

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

Completeness5/5

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

With one self-explanatory parameter and destructive annotations already present, the description covers operation scope, irreversibility, and both failure and alternative routes. Nothing needed for correct invocation is missing.

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

Parameters4/5

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

The schema's single campaignId parameter has no description, but the tool name and cascade language make its meaning clear. The fallback guidance to list_campaigns for valid IDs adds semantic value about the expected value domain.

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

Purpose5/5

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

States the operation with a specific verb ('PERMANENTLY delete') and resource ('a campaign'), then enumerates the exact cascade scope. Clearly distinct from archive_campaign and other campaign tools.

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

Usage Guidelines5/5

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

Explicitly tells when to use archive_campaign instead ('to preserve data') and how to recover from a bad campaignId via list_campaigns. This is textbook routing between siblings.

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

campaignstack_delete_competitor_watchA
Destructive
Inspect

Deletes a competitor watch and disables its associated automations. This action is irreversible. Use campaignstack_pause_competitor_watch to temporarily stop monitoring instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already carry the destructive profile (destructiveHint=true), so the bar is lower. The description adds value beyond that by specifying what gets destroyed — the watch plus its associated automations — and by clarifying permanence ('This action is irreversible'), which is more specific than a generic destructive flag.

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

Conciseness5/5

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

Three short sentences, each earning its place: core action plus side effect, irreversibility warning, and alternative routing. The core behavior is front-loaded with zero filler.

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

Completeness4/5

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

For a one-parameter destructive tool with annotations already covering the safety profile, the description covers purpose, side effects, permanence, and the key alternative. It is missing only minor details such as behavior on a nonexistent watchId or the expected response, which are not critical for a simple delete.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. Although watchId is not explicitly documented, 'Deletes a competitor watch' makes the parameter's semantic role unambiguous: watchId identifies which competitor watch to delete. For a single, trivially inferable string parameter this is sufficient compensation.

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

Purpose5/5

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

The description uses a specific verb and resource ('Deletes a competitor watch') and discloses the key side effect ('disables its associated automations'). It also names the sibling that does something different (pause), so an agent can distinguish delete from pause without inspecting schemas.

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

Usage Guidelines5/5

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

It explicitly routes the agent: 'Use campaignstack_pause_competitor_watch to temporarily stop monitoring instead,' establishing when-not (temporary cases) and naming the exact alternative. The contrast with the pause sibling makes the permanent-deletion use case unambiguous.

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

campaignstack_delete_content_postA
Destructive
Inspect

Deletes a content post. Only posts in 'draft' or 'failed' status can be deleted. Use campaignstack_get_content_post to check status before deleting.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentPostIdYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false. The description adds valuable behavioral context beyond the annotations: deletion is restricted to draft/failed posts, implying failed attempts for other statuses. It doesn't describe error behavior or side effects, but the key extra constraint is disclosed.

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

Conciseness5/5

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

Two short sentences with no filler. The action is front-loaded, the precondition follows immediately, and the helper reference is placed at the end. Every sentence earns its place.

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

Completeness5/5

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

For a simple one-parameter destructive operation, this is complete. The description covers what it deletes, when deletion is valid, and how to verify before calling. No output schema exists, so not describing return values is appropriate.

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

Parameters4/5

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

Schema coverage is 0%, but the only parameter, contentPostId, is self-explanatory from its name. The description adds meaning by indicating that the ID must reference a post in draft or failed status, and it points to a getter for verification. This compensates for the sparse schema.

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

Purpose5/5

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

The description uses a specific verb ('Deletes') and resource ('a content post'), and adds a precise status constraint. This clearly distinguishes it from other delete_* siblings and identifies the object of the operation.

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

Usage Guidelines5/5

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

It explicitly states when deletion is allowed (draft or failed status) and tells the agent to use campaignstack_get_content_post to check status first. This gives both a precondition and a concrete alternative/helper step.

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

campaignstack_delete_icpA
DestructiveIdempotent
Inspect

Permanently delete an ICP and its associated scoring data. This action is irreversible. Use campaignstack_list_icps to find ICP IDs before deleting.

ParametersJSON Schema
NameRequiredDescriptionDefault
icpIdYes

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already mark the tool as destructive and not read-only, but the description adds important context: the deletion is permanent, irreversible, and cascades to associated scoring data. This goes beyond the annotation flags and helps the agent warn users appropriately.

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

Conciseness5/5

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

Two concise sentences: the first states the action and key consequence, the second gives the prerequisite lookup step. Every sentence earns its place, with no redundant filler.

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

Completeness5/5

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

For a single-parameter destructive tool with annotations covering read-only/destructive/idempotent hints, the description is complete. It covers what is deleted, the irreversibility, the cascading data removal, and how to obtain the required ID.

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

Parameters3/5

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

The schema has one parameter, icpId, with 0% description coverage. The description tells the agent to find ICP IDs via campaignstack_list_icps, which provides practical sourcing guidance, but it does not clarify expected format, examples, or any nuance about the ID beyond its name.

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

Purpose5/5

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

The description states a specific verb ('delete'), a clear resource ('an ICP'), and the extended scope ('its associated scoring data'). It clearly distinguishes this tool from related siblings like create_icp, update_icp, get_icp_scores, and list_icps.

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

Usage Guidelines4/5

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

The description explicitly directs the agent to use campaignstack_list_icps to find ICP IDs before deleting, which is a concrete prerequisite. It does not explicitly state when not to use this tool, but for a deletion operation the guidance is reasonably clear.

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

campaignstack_delete_personaA
Destructive
Inspect

Permanently delete a persona. This action cannot be undone. Use campaignstack_list_personas to confirm the persona ID before deleting.

ParametersJSON Schema
NameRequiredDescriptionDefault
personaIdYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already include destructiveHint=true, so the destructive nature is known. The description adds value by stating the deletion is permanent and cannot be undone, which goes beyond the annotation's generic destructiveness signal and warns the agent about irreversibility.

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

Conciseness5/5

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

The description is only two sentences, with the core action front-loaded first, followed by the critical irreversibility warning and a targeted prerequisite instruction. Every clause earns its place.

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

Completeness5/5

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

For a simple single-parameter destructive tool, the description provides the necessary action, permanence warning, and a safe invocation pattern. No output schema is needed for the agent to understand that the deletion result is all-or-nothing.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the burden of explaining the personaId parameter. While it does not directly define 'personaId,' instructing the agent to confirm the ID via campaignstack_list_personas adds meaning about how to obtain a valid value before calling the tool.

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

Purpose5/5

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

The description states a specific verb and resource: 'Permanently delete a persona.' This immediately distinguishes it from create, update, get, and list persona tools, and it explicitly notes that deletion is permanent.

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

Usage Guidelines4/5

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

It provides clear pre-use guidance: 'Use campaignstack_list_personas to confirm the persona ID before deleting.' This is practical and context-rich, though it does not enumerate explicit when-not-to-use scenarios or mention alternative deletion-related tools.

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

campaignstack_delete_phaseA
Destructive
Inspect

Permanently delete a campaign phase. This action cannot be undone. Use campaignstack_list_phases to confirm the phase ID before deleting.

ParametersJSON Schema
NameRequiredDescriptionDefault
phaseIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, but the description adds a crucial behavioral detail beyond that: 'This action cannot be undone.' This clarifies irreversibility and reinforces the need for caution, providing value beyond the structured annotation.

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

Conciseness5/5

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

Two short sentences carry all essential information: the action, its irreversibility, and a safety step. There is no filler, and the most important information is front-loaded.

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

Completeness4/5

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

For a one-parameter destructive action without an output schema, the description is largely complete. It explains the operation, the irreversibility, and how to safely obtain the required ID. It does not describe cascading effects on related campaign data, but this is a minor gap given the simplicity of the tool.

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

Parameters4/5

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

Schema coverage is 0% and phaseId is only described as a string. The description compensates by identifying the parameter as a campaign phase ID and instructing the agent to confirm it via campaignstack_list_phases, which gives practical sourcing semantics beyond the bare schema.

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

Purpose5/5

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

The description opens with a clear verb and resource: 'Permanently delete a campaign phase.' It unambiguously distinguishes this from sibling tools like campaignstack_update_phase, campaignstack_get_phase, and campaignstack_list_phases by emphasizing permanence and deletion.

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

Usage Guidelines4/5

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

The description provides explicit pre-use guidance: use campaignstack_list_phases to confirm the phase ID before deleting. This tells the agent exactly what to do before invoking the tool, though it does not explicitly cover when-not-to-use scenarios or alternative non-destructive actions.

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

campaignstack_delete_signal_agentA
DestructiveIdempotent
Inspect

Archive (soft-delete) a signal agent. Stops polling, pauses the linked workflow, disables all watched posts, and clears competitor watch linkage. Data (signals, leads, posts) is preserved for audit. Use campaignstack_list_signal_agents to find agent IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already indicate destructive and idempotent behavior; the description adds valuable detail by explaining exactly what gets disabled, that it is a soft-delete, and that data is preserved for audit. This goes well beyond the structured annotations.

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

Conciseness5/5

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

Four ideas packed into three tight sentences with the main action front-loaded. There is no filler, and every sentence contributes either to identifying the behavior, its consequences, or how to obtain the required parameter.

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

Completeness4/5

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

The description covers the operation, side effects, data preservation, and ID lookup, which is strong for a one-parameter tool. It stops short of stating whether the archive action is reversible or if a new agent must be created to restore functionality, which would be useful context for a destructive operation.

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

Parameters4/5

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

The schema provides no description for agentId, but the description compensates by naming the resource as a signal agent and telling the agent where to find valid IDs via campaignstack_list_signal_agents. For a single simple string parameter, this is adequate guidance.

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

Purpose5/5

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

States a precise action: 'Archive (soft-delete) a signal agent.' The side effects listed (stops polling, pauses workflow, disables watched posts, clears competitor linkage) clearly distinguish it from generic delete operations and from pause/resume sibling tools.

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

Usage Guidelines4/5

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

Provides clear operational context and explicitly instructs the agent to use campaignstack_list_signal_agents to find valid agent IDs. It does not explicitly name alternatives like pause_signal_agent or state when not to use this tool, but the archiving semantics are clear enough to guide selection.

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

campaignstack_delete_workflowA
Destructive
Inspect

Permanently delete a workflow and all associated data. This action is irreversible and cascades to: workflow nodes, edges, lead-list source providers, node lead-list entries (lead progress), per-lead workflow contexts, and webhook tokens tied to this workflow. Use campaignstack_list_workflows to find workflow IDs. If you want to stop a workflow without deleting it, use campaignstack_update_workflow_status instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflowIdYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark the operation as destructive, but the description adds valuable specifics: the deletion is irreversible and cascades through workflow nodes, edges, lead-list source providers, lead progress entries, per-lead contexts, and webhook tokens. This goes well beyond the annotation and accurately discloses the full destructive footprint.

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

Conciseness5/5

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

The description is three sentences with no filler. The irreversible action and cascade scope are front-loaded, followed immediately by actionable lookup guidance and the safe alternative. Every sentence serves a distinct purpose.

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

Completeness5/5

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

For a one-parameter destructive tool with no output schema, this description is complete: it states the action, the irreversible consequences, the full cascade of affected data, how to obtain the required ID, and the non-destructive alternative. An agent has everything needed to invoke this tool correctly and avoid harmful mistakes.

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

Parameters4/5

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

The input schema only defines workflowId as a required string with no description, so schema description coverage is 0%. The description compensates by telling the agent to use campaignstack_list_workflows to find workflow IDs, clarifying where the parameter value comes from. It does not elaborate further on the parameter's meaning, but the parameter name and this guidance are sufficient for such a simple tool.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Permanently delete a workflow and all associated data.' It immediately distinguishes this from non-destructive workflow operations and clearly defines the scope of the deletion, making the tool's purpose unmistakable.

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

Usage Guidelines5/5

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

The description explicitly tells the agent how to find the required workflow ID using campaignstack_list_workflows, and explicitly names the alternative when deletion is not intended: campaignstack_update_workflow_status. This gives clear when-to-use and when-not-to-use guidance.

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

campaignstack_diagnose_lead_sourcingA
Read-onlyIdempotent
Inspect

Diagnose why a specific lead was or wasn't sourced into a workflow. Accepts a workflowId plus either a leadId or profileUrl (LinkedIn URL). Returns a diagnostic report covering: lead existence, ICP score, score threshold checks, dedup status (same-workflow and cross-workflow), exclusion list matches, per-provider filter evaluation, and a human-readable verdict explaining the sourcing outcome. Use campaignstack_list_workflows to find valid workflowId values. Use campaignstack_search_leads to find valid leadId values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds a detailed account of what the diagnostic report covers: lead existence, ICP score, threshold checks, dedup status, exclusions, per-provider filters, and a verdict. This goes well beyond the annotation hints and makes side-effect expectations explicit.

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

Conciseness4/5

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

The description is lengthy but every clause adds information: purpose, accepted inputs, report contents, and lookup helpers. It is front-loaded and avoids filler, though the list of report categories makes it denser than necessary.

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

Completeness4/5

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

For a complex diagnostic tool with no output schema, the description covers inputs, the full scope of the report, and how to obtain valid identifiers. The main gap is the mismatch between the described parameters and the empty input schema, which leaves the actual call contract ambiguous.

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

Parameters4/5

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

The input schema has zero properties, so the description is the only source of parameter meaning. It clearly names workflowId and the leadId-or-profileUrl choice and notes that profileUrl is a LinkedIn URL. It loses a point because it omits types for workflowId and leadId and because the described parameters are absent from the structured schema, which could confuse invocation.

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

Purpose5/5

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

The description opens with a specific verb and object: 'Diagnose why a specific lead was or wasn't sourced into a workflow.' It then enumerates the report contents, making the tool's purpose unmistakable and distinguishing it from lookups like search_leads or get_lead_history.

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

Usage Guidelines4/5

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

It names the two lookup tools to call for valid workflowId and leadId values and states the accepted identifier combination. It doesn't explicitly contrast with alternative diagnostic tools, but the context of sourcing diagnosis is clear.

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

campaignstack_disconnect_integrationA
Destructive
Inspect

Disconnect (remove) an integration by provider. Permanently deletes the integration record and its stored credentials. Valid providers: apollo, instantly, clay. Use campaignstack_list_integrations to see which integrations are connected.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesIntegration provider to disconnect
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true, idempotentHint=false), the description discloses what actually gets destroyed — 'the integration record and its stored credentials' — and that the deletion is permanent. This tells the agent the action is irreversible and that reconnecting would require fresh authentication, which is precisely the behavioral context 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.

Conciseness4/5

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

Four short sentences, each earning its place: the action, the irreversible consequence, the provider set, and the pre-check pointer. It is front-loaded with the core action and consequence. The provider sentence is partly redundant with the schema enum, which keeps this from a 5.

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

Completeness4/5

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

For a 2-parameter destructive tool with annotations, a 100%-covered schema, and no output schema, the description covers action, consequence, provider set, and pre-check guidance. The notable gaps are the unresolved hubspot discrepancy between description and schema enum, and no statement of behavior when the provider isn't connected — minor for a tool this simple.

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

Parameters3/5

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

Schema description coverage is 100%: both provider (with enum) and workspaceId (with user-key vs workspace-key semantics) are already documented, so the baseline of 3 applies. The description's provider list 'apollo, instantly, clay' is redundant with the schema enum and conflicts with it by omitting hubspot, creating ambiguity about whether hubspot can be disconnected. No additional meaning is added for workspaceId.

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

Purpose5/5

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

The description names a specific verb and resource — 'Disconnect (remove) an integration by provider' — and specifies the full consequence: 'Permanently deletes the integration record and its stored credentials.' It clearly inverts the sibling connect tools (campaignstack_connect_apollo, campaignstack_connect_instantly, campaignstack_connect_hubspot) and can't be confused with the list or get tools.

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

Usage Guidelines4/5

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

It gives an explicit precondition pointer: 'Use campaignstack_list_integrations to see which integrations are connected,' which is exactly the right pre-check before a destructive call. It doesn't state when not to use the tool or explicitly contrast it with the many remove_* siblings, but the inverse relationship to the connect tools makes the usage context reasonably clear.

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

campaignstack_duplicate_content_postAInspect

Duplicates an existing content post as a new draft, copying body, platform, author, and media. All lifecycle fields are cleared (no schedule, no approval). Returns the new post ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentPostIdYes

TDQS

A4.1/5.0
Behavior4/5

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

The description adds useful behavioral detail beyond the annotations: it states that body, platform, author, and media are copied, lifecycle fields are cleared, and a new post ID is returned. Since the annotations already indicate this is a mutating, non-idempotent, non-destructive operation, this is sufficient context.

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

Conciseness5/5

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

Two concise sentences convey the operation, copied fields, cleared lifecycle fields, and return value with 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.

Completeness5/5

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

For a single-parameter operation with no output schema, this description is complete: it explains what happens, what is inherited, what is reset, and what the caller receives. No critical operational detail appears to be missing.

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

Parameters3/5

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

The input schema has no description for contentPostId and schema coverage is 0%, so the description must compensate. The phrase 'existing content post' makes it clear that contentPostId refers to the post being duplicated, but the parameter itself is never explicitly documented or connected to a source.

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

Purpose5/5

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

The description uses a specific verb ('Duplicates') and identifies the exact resource ('an existing content post') and outcome ('as a new draft'). It also names what is copied and what is cleared, making its role clear against siblings like create_content_post or update_content_post.

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

Usage Guidelines3/5

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

The intended use is strongly implied: use this when you need a clean draft copy of an existing content post. However, the description does not explicitly state when to choose this over create_content_post or update_content_post, nor does it offer any exclusions or alternative guidance.

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

campaignstack_edit_and_approve_reviewAInspect

Edit the AI-generated content and approve the review entry. The original content is preserved for audit trail. Draft parked at a review node: the lead advances via the 'approved' edge. Escalated entry parked at the acting node: the withheld action is resumed with your edited text (re-dispatched or released through the delivery exit).

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes
updatedContentYes

TDQS

A3.7/5.0
Behavior4/5

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

Beyond the annotations, which only indicate the operation is not read-only and not idempotent, the description adds meaningful behavioral detail: the original content is preserved for audit trail, the lead advances via the 'approved' edge, and escalated actions are resumed with the edited text. This gives the agent a clearer picture of side effects and workflow impact.

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

Conciseness5/5

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

The description is compact and front-loaded, with the core action in the first sentence and supporting workflow details in the next two sentences. Every sentence provides useful information, and there is no filler or repeated schema content.

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

Completeness3/5

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

The description explains the two workflow scenarios and their outcomes well, which is helpful for tool selection. However, it lacks parameter-level guidance and does not describe the expected shape of updatedContent or what the caller should provide beyond 'edited text,' leaving some invocation ambiguity.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the lack of parameter documentation. It only hints at updatedContent through 'your edited text' and never explains the meaning or expected structure of entryId, workspaceId, or updatedContent. The agent is left to infer parameter roles from names alone.

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

Purpose4/5

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

The description clearly states the tool's function: edit AI-generated content and approve a review entry. It implicitly differentiates itself from related siblings like approve_review by adding the editing step, but it does not explicitly name any sibling or contrast itself with them.

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

Usage Guidelines4/5

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

The description provides clear contextual usage by describing two distinct workflow states: a draft parked at a review node and an escalated entry parked at the acting node. It does not explicitly say when not to use the tool or name alternative tools such as approve_review or reject_review, but the context is clearly scoped.

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

campaignstack_edit_scheduled_messageA
Idempotent
Inspect

Change the text of an approved message that is still waiting at its send node, keeping its scheduled slot. Pass the same content shape as campaignstack_edit_and_approve_review (e.g. { messageText }). Refuses with DRAFT_ALREADY_DISPATCHING once the send is in flight and with DRAFT_NOT_SCHEDULED for an entry that is not waiting to send. Scheduled entries come from the inbox scheduled mode or campaignstack_list_leads_at_node.

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes
updatedContentYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish this as a non-read-only, non-destructive, idempotent operation. The description adds useful behavioral context: the scheduled slot is preserved, in-flight sends are refused with DRAFT_ALREADY_DISPATCHING, and non-scheduled entries are refused with DRAFT_NOT_SCHEDULED. No contradiction with annotations appears.

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

Conciseness5/5

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

Three sentences with no filler: the first states the operation and key preservation guarantee, the second explains content shape, and the third covers failure modes and source of valid entries. Everything earns its place.

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

Completeness4/5

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

For a mutation tool, the description covers what is edited, what is preserved, when it fails, and how to locate eligible entries. There is no output schema, but the success path is simple enough not to require a return-value breakdown. A minor gap is not describing a success response or exact contents of updatedContent beyond { messageText }.

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

Parameters4/5

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

The input schema has zero descriptions, but the description clarifies the otherwise-opaque updatedContent object by referencing the content shape of campaignstack_edit_and_approve_review and giving { messageText } as an example. entryId and workspaceId are left to be inferred from their names and the description context, which is acceptable though not explicit.

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

Purpose5/5

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

States a specific verb and resource: 'Change the text of an approved message that is still waiting at its send node, keeping its scheduled slot.' It clearly distinguishes this from related tools like campaignstack_edit_and_approve_review by emphasizing the scheduled, already-approved state and slot preservation.

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

Usage Guidelines5/5

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

Gives explicit applicability conditions: the message must be approved and still waiting at its send node. It names the content-shape reference tool, describes when the tool refuses (in-flight send or non-scheduled entry), and points to where valid entries come from, giving an agent clear routing information.

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

campaignstack_enrich_company_infoAInspect

Enrich a company's firmographics (industry, employee count, founding year, description, website, phone, location) through a connected enrichment provider (provider-parameterized, default apollo; clay runs the routine named by clayRoutineId and polls for the result). Single company. Company data is shared across the platform, so the lookup fills only the fields that are still empty and never overwrites first-party data. Free: the tenant pays the provider directly, so no CampaignStack credits are charged. Returns status: enriched (with fieldsWritten), not_found (no provider match), or error (e.g. INTEGRATION_NOT_CONNECTED, INTEGRATION_KEY_INVALID, INTEGRATION_RATE_LIMITED, COMPANY_NOT_FOUND). Requires a connected integration for the provider — use campaignstack_connect_apollo first.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerNoEnrichment provider (default: apollo). clay runs the routine given in clayRoutineId and polls for the result.
companyIdYesCompany ID to enrich (from campaignstack_get_lead or campaignstack_list_companies).
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
clayRoutineIdNoClay only, required with provider clay: the Clay routine id to run.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations, the description adds valuable behavioral detail: it never overwrites first-party data and only fills empty fields, it charges no CampaignStack credits, it polls for the provider result in the clay path, and it enumerates the possible return statuses and error codes. This fully discloses side effects and external dependencies.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: fields, provider behavior, overwrite semantics, pricing, return contract, and prerequisite are all covered without repetition. It is front-loaded with the core purpose.

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

Completeness5/5

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

With no output schema, the description carries the full burden of explaining what the caller receives, and it does so thoroughly: status values, fieldsWritten, not_found, error categories, and prerequisite integration failures. Combined with the side-effect and pricing details, an agent has enough context to invoke and interpret the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by clarifying the default provider, how clay consumes clayRoutineId, the polling behavior, and the prerequisite of a connected integration. It does not add much for workspaceId, but the schema already describes it adequately.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Enrich a company's firmographics' and lists the exact fields addressed, distinguishing it from the sibling campaignstack_enrich_lead_contact_info. It also clarifies scope with 'Single company' and names the provider param, so an agent can select it accurately.

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

Usage Guidelines4/5

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

The description gives clear usage context: it requires a connected integration, names the prerequisite tool explicitly ('use campaignstack_connect_apollo first'), and explains provider choices. It does not explicitly contrast with sibling enrichment tools, but the 'Single company' and firmographics focus make the intended use obvious.

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

campaignstack_enrich_lead_contact_infoAInspect

Resolve a lead's work email through the CampaignStack Contact Finder (the default) or a connected enrichment provider (provider-parameterized: bettercontact, apollo, instantly or clay). Single lead. Writes the email onto the lead following the enrichment write-back rules (fill-empty; a guessed email never overwrites an existing one; upgrade-to-verified allowed) and charges CampaignStack enrichment credits only on success. bettercontact is the CampaignStack Contact Finder: no integration needed, it charges 10 credits per email found and 50 per phone found (revealPhone: true), nothing when not found; credits are reserved at request time and refunded for anything not found. It is asynchronous: the tool returns status pending with a requestId and creditsReserved, then poll campaignstack_get_contact_finder_request (or campaignstack_list_contact_finder_requests) until the request is completed or failed; a lead that already has the requested data returns enriched with alreadyPresent: true. instantly runs SuperSearch enrichment (billed in the tenant's Instantly credits; pick types via instantlyEnrichments - work_email and/or profile, where profile fills headline/summary/title/company from the lead's LinkedIn URL) and may return status pending when still running (re-run in a minute). clay runs the routine named by clayRoutineId (required with provider clay; Clay's API cannot list routines, the user copies the id from their Clay workspace) and may also return status pending. Returns status: enriched (email and/or profileWritten), pending (bettercontact, instantly, clay), not_found (no provider match, free), or error (e.g. INTEGRATION_NOT_CONNECTED, INTEGRATION_KEY_INVALID, INTEGRATION_RATE_LIMITED, CREDITS_EXHAUSTED, WORKSPACE_LOCKED). Masked/placeholder emails are never returned as data. apollo, instantly and clay require a connected integration for the provider (campaignstack_connect_apollo / campaignstack_connect_instantly first); bettercontact never does.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
providerNoEnrichment provider (default: bettercontact). bettercontact is the CampaignStack Contact Finder: no integration to connect, 10 CampaignStack credits per email found and 50 per phone found, nothing when not found; it returns status pending with a requestId to poll via campaignstack_get_contact_finder_request. apollo uses the workspace's own connected Apollo key (no CampaignStack credits). instantly runs SuperSearch enrichment billed in the tenant's Instantly credits and may return status pending (re-run in a minute). clay runs the routine given in clayRoutineId (billed in the tenant's Clay credits) and may also return status pending.
leadSourceNoLead source table (default: global). Private leads are workspace-scoped CSV imports.
revealPhoneNobettercontact only: also look up the lead's phone number. 50 CampaignStack credits per phone found (reserved at request time, refunded when not found). Ignored for other providers.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
clayRoutineIdNoClay only, required with provider clay: the Clay routine id to run. Clay's API cannot list routines; the user copies the id from their Clay workspace.
instantlyEnrichmentsNoInstantly only (default ["work_email"]): "work_email" finds the work email (1.5 Instantly credits); "profile" fills headline/summary/title/company details from the lead's LinkedIn URL (0.5 credits; requires the lead to have a LinkedIn URL).

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing asynchronous behavior (status pending with requestId), credit reservation/refund mechanics, write-back rules (fill-empty, never overwrite, upgrade-to-verified), the masked-email policy, and specific error codes. This is high-value behavioral context for a mutation tool.

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

Conciseness4/5

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

The description is long and dense but every sentence carries decision-relevant information for a complex provider-parameterized, asynchronous, credit-billed operation. It is front-loaded with the core action and write-back rules. A structured bullet layout would improve scannability, but there is no real waste.

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

Completeness5/5

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

With no output schema and seven parameters including provider-specific variants, the description covers the full lifecycle: request, pending, success, not-found, and error states, plus polling routes and integration prerequisites. An agent has enough context to invoke the tool correctly and handle asynchronous results.

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

Parameters5/5

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

Although schema coverage is 86%, the description adds substantial meaning beyond the schema: provider-specific credit costs, defaults for provider and instantlyEnrichments, the fact that revealPhone is ignored for non-bettercontact providers, clayRoutineId's requirement and sourcing, and provider-specific async behavior. It transforms parameter names into actionable decisions.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Resolve a lead's work email' via named providers, and clarifies it operates on a single lead. It also distinguishes itself from related tools by stating the write-back behavior and credit implications, so an agent can differentiate it from enrichment and lead-update siblings.

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

Usage Guidelines4/5

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

The description gives clear provider-selection guidance: bettercontact needs no integration, while apollo, instantly, and clay require connected integrations. It also names the polling tools to use after a pending result. It does not explicitly contrast itself with nearby alternatives like update_lead_contact_info or priority_enrich, but the intended use context is strongly implied.

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

campaignstack_export_craft_auditA
Read-onlyIdempotent
Inspect

Export craft audit log rows for a workspace: one row per accepted AI craft (messages, notes, comments, replies, critic passes) with the exact system/user prompts, raw model output, final text, attempt count, and refs (workflow, node, lead, aiUsage cost row). Newest first, paginated via cursor. Use it to diagnose a bad draft from what the model was actually shown, or to assemble a grading set.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoInclusive createdAt upper bound (Unix ms).
fromNoInclusive createdAt lower bound (Unix ms).
limitNoRows per page (default 50).
cursorNoContinuation cursor from a previous call.
workspaceIdNoWorkspace to export from. Workspace ID (required for user keys; workspace keys are bound).

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds meaningful behavioral detail beyond that: one row per accepted AI craft, precise field contents, newest-first ordering, and cursor-based pagination. This gives the agent a strong model of what the call returns and how it behaves.

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

Conciseness5/5

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

Two dense sentences with no filler. The first sentence states the resource and row contents; the second gives concrete use cases. Everything earns its place and important details are front-loaded.

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

Completeness5/5

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

For an export tool with no output schema, the description clearly defines what rows are returned and what fields they contain. Combined with fully documented parameters and annotations covering the safety profile, an agent has enough information to invoke this tool correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters are already documented. The description adds ordering and pagination context that relates to limit/cursor, but doesn't need to and doesn't attempt to redefine parameter semantics. Baseline 3 is appropriate because the schema carries the parameter documentation burden.

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

Purpose5/5

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

The description begins with a specific verb and resource: 'Export craft audit log rows for a workspace', then enumerates the exact row contents (prompts, model output, final text, attempt count, refs). This clearly distinguishes the tool from the many sibling list/get/export tools and is far from tautological.

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

Usage Guidelines4/5

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

The description gives explicit use cases: 'diagnose a bad draft from what the model was actually shown, or to assemble a grading set.' It does not name specific alternative tools or state when not to use it, but the context is clear enough for an agent to route appropriately.

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

campaignstack_extract_company_employeesAInspect

Extract a company's employees from its LinkedIn People page (up to 1000, LinkedIn's display ceiling; optionally filtered by job titles). Employees land as shared leads tied to the company - re-running updates them, never duplicates. They are NOT added to any lead list; read them with campaignstack_list_company_employees and act with campaignstack_add_leads_to_list. The job runs in the background; one extraction per company at a time. Use campaignstack_list_companies to find company IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYes
maxResultsNo
workspaceIdYes
positionFilterNoJob-title keywords separated by " OR ", at most 6 terms

TDQS

A4.3/5.0
Behavior5/5

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

Annotations carry no safety hints, but the description discloses critical behavior: the job runs in the background, only one extraction per company runs at a time, re-running updates existing leads without duplicating them, and extraction is capped at LinkedIn's 1000-result ceiling. This materially shapes how an agent should invoke and monitor the tool.

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

Conciseness5/5

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

Four tight, front-loaded sentences with no wasted words. Every sentence adds operational value: what it extracts, cap/filter behavior, downstream read/act tools, background execution, and company ID lookup.

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

Completeness3/5

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

For an async tool with no output schema, the description explains where employees land and how to retrieve/act on them, which is helpful. However, it does not say what the call itself returns or how to check job completion/status, leaving the agent uncertain whether to poll and what a successful invocation looks like.

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

Parameters3/5

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

Schema coverage is only 25%, so the description must compensate. It adds useful cross-reference for companyId (use campaignstack_list_companies) and gives the LinkedIn ceiling context for maxResults, but it says nothing about workspaceId and does not clarify the default behavior when maxResults is omitted. It partially compensates but leaves gaps.

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

Purpose5/5

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

States a specific verb and resource: extract a company's employees from its LinkedIn People page, with an explicit cap and optional job-title filter. It also names distinct downstream tools (list_company_employees, add_leads_to_list), so an agent can tell extraction apart from reading or adding leads.

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

Usage Guidelines4/5

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

Provides a clear workflow: find company IDs with campaignstack_list_companies, extract here, then read with campaignstack_list_company_employees and act with campaignstack_add_leads_to_list. It also states an important exclusion ('They are NOT added to any lead list'). It does not explicitly contrast with campaignstack_create_company_employee_watch for ongoing monitoring, 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.

campaignstack_extract_conversation_voiceAInspect

Run voice extraction for a LinkedIn account from its stored message history. Needs at least 50 usable human-written messages (backfill runs first when the account connects). The result is saved as a DRAFT profile a human approves before it touches any message. Charges voice_extraction credits, refunded on failure.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
linkedinAccountIdYesLinkedIn account id
analysisMessageCountNoHow many stored messages the extraction analyzes (default 200)

TDQS

A4.4/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing concrete behavioral and side-effect details: the result is saved as a DRAFT profile, a human must approve it before it touches messages, and it charges voice_extraction credits refunded on failure. This gives the agent a clear picture of persistence, safety, and cost implications.

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

Conciseness5/5

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

Three tight sentences deliver purpose, prerequisites, workflow outcome, and cost behavior with no filler. The most important action is front-loaded, and every sentence adds value.

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

Completeness4/5

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

The description covers prerequisites, the draft/approval lifecycle, and credit side effects, which is strong. However, since there is no output schema, explicitly stating what the tool returns (e.g., a draft profile ID or confirmation) would make it fully complete for an agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already explains each parameter adequately. The description adds some useful context by noting the 50-message minimum, which aligns with analysisMessageCount's minimum, but does not materially expand parameter meaning beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'Run voice extraction for a LinkedIn account from its stored message history.' It clearly differentiates this generative/extraction action from sibling tools like get_conversation_voice or update_conversation_voice by emphasizing the extraction and DRAFT-approval workflow.

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

Usage Guidelines4/5

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

It gives clear context on when the tool is appropriate: when voice extraction is needed from stored message history, with the prerequisite of at least 50 usable human-written messages and automatic backfill. It does not explicitly name alternative tools or exclusion criteria, but the context is strong enough for an agent to pick this over read/update voice tools.

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

campaignstack_fetch_mutual_connectionsAInspect

Scrape the people a lead shares with one of the workspace's LinkedIn accounts, and record them as person-to-person connection edges. This is what turns the relationship graph from a set of spokes around your own accounts into an actual network, so paths and introductions become answerable. Costs one LinkedIn search (10/day on the free tier), so call it for leads that matter rather than in bulk. Requires the lead to have a LinkedIn member id: enrich it first if this returns skipped.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
leadSourceNoglobal
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description adds valuable behavioral context: it records edges, consumes one LinkedIn search per call, has a daily quota on the free tier, and may return skipped when the lead lacks a member id. This helps an agent anticipate side effects and constraints that annotations alone do not convey.

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

Conciseness4/5

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

The description is concise and front-loaded: the core action appears in the first sentence, followed by the value proposition, cost constraint, and prerequisite. Each sentence earns its place, though the middle sentence about turning the graph into an actual network is slightly rhetorical. Overall it is well-structured and not padded.

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

Completeness3/5

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

With no output schema, the description should carry return-value and failure semantics, and it partially does by mentioning the 'skipped' outcome. However, it does not describe what a successful response contains, how edges are returned or acknowledged, or what happens on repeated calls. The leadSource parameter is also absent, leaving a meaningful gap in the overall context.

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

Parameters2/5

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

The schema has 0% description coverage, so the description must compensate. It contextualizes workspaceId ('the workspace's LinkedIn accounts') and leadId ('a lead shares'), but leadSource is never mentioned, and the meaning of 'global' vs 'private' remains unexplained. With three parameters and one entirely unaddressed, the description only partially compensates for the schema's lack of parameter documentation.

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

Purpose5/5

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

The description uses a specific verb ('Scrape') and names the exact resource and outcome: the people a lead shares with one of the workspace's LinkedIn accounts, recorded as person-to-person connection edges. It clearly differentiates this from read-only graph tools by emphasizing that it builds the network graph, making it distinct from siblings like get_lead_connections.

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

Usage Guidelines4/5

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

The description gives concrete when-to-use guidance: it consumes a LinkedIn search quota, so it should be called for 'leads that matter rather than in bulk.' It also states an explicit prerequisite: the lead must have a LinkedIn member id, and instructs the agent to enrich first if the call returns skipped. It does not name specific alternative tools, but the usage context is clear.

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

campaignstack_find_warm_pathsA
Read-onlyIdempotent
Inspect

Check which of a workspace's LinkedIn accounts can already reach a lead. A 1st-degree result means that account can message the person right now, with no connection request and no waiting. Call this before queueing outreach: sending from an account that already knows someone skips days of waiting and spends no connection budget, which is the scarcest budget in the system.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
leadSourceNoglobal
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds useful behavioral context: 1st-degree results mean immediate messaging potential, no connection request is needed, and no connection budget is spent. It does not describe the exact output envelope or pagination, but that is not a serious omission here.

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

Conciseness5/5

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

The description is three purposeful sentences: the core operation, the result interpretation, and the usage recommendation. It is front-loaded, free of redundancy, and every sentence adds value.

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

Completeness4/5

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

For a read-only lookup with no output schema, the description gives enough to understand what the tool does, what a result means, and when to call it. The only meaningful gap is the undocumented leadSource parameter, which is optional and has a default.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It indirectly clarifies workspaceId and leadId by referencing a workspace's accounts and a lead, but it gives no explanation of the leadSource enum values 'global' vs 'private'. Since leadSource has a default and is optional, the gap is moderate rather than severe.

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

Purpose5/5

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

The description states a specific operation: checking which of a workspace's LinkedIn accounts can already reach a given lead. It also clarifies what a 1st-degree result means, which distinguishes this lookup from sending or queuing actions like send_connection_request or queue_leads.

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

Usage Guidelines4/5

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

It explicitly tells the agent to call this before queueing outreach and explains the benefit: using an existing connection avoids waiting and spends no connection budget. It does not mention when not to use it or name an alternative tool, so it stops short of a 5.

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

campaignstack_follow_profileA
Idempotent
Inspect

Follow a profile to stay updated on their posts and activity (a "follow" on every network). platform is required (currently "linkedin"). Target can be specified as a profileUrl (LinkedIn profile URL) or a leadId (resolved server-side). If only one LinkedIn account is connected to the workspace it is used automatically; if multiple exist, specify accountId (use campaignstack_list_accounts to find it). Subject to daily profile_follow budget and business hours gates unless bypassed. When true, bypasses ALL LinkedIn safety limits (daily budget, weekly caps, business hours, account status checks). ⚠️ WARNING: This disables all protections that prevent LinkedIn account restrictions. Use only when you understand the risks and accept that the account may be flagged or restricted by LinkedIn.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond the annotations by disclosing that this action is subject to daily profile_follow budgets and business hours gates, and that a bypass disables ALL LinkedIn safety limits. It also warns that the account may be flagged or restricted, which is critical behavioral risk information not present in the structured fields.

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

Conciseness4/5

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

The description is somewhat long but every section earns its place, especially the safety warning. It front-loads the core purpose and then flows naturally into target resolution, account selection, and risk disclosure. The 'When true' clause is slightly vague, but the overall structure is informative and not padded.

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

Completeness4/5

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

For a tool with zero declared schema parameters and no output schema, the description does a strong job of covering how to identify the target, how to handle multiple accounts, and what risk the action carries. It falls just short of fully complete because the bypass parameter is not named and no return or success indication is described, but an agent has enough to invoke it correctly in common cases.

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

Parameters4/5

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

The input schema declares zero properties, so the description carries the full burden of documenting parameters. It explains platform, profileUrl, leadId, accountId, and the existence of a bypass flag. However, the bypass flag is referred to only as 'When true' without a parameter name, and the description does not specify the expected argument format precisely, leaving some ambiguity.

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

Purpose5/5

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

The description names a specific verb ('Follow') and a specific resource ('a profile') and clarifies the semantics as the network-level follow action. It distinguishes this from related engagement actions like liking or commenting, and from connection requests, so an agent can select it confidently.

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

Usage Guidelines4/5

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

The description gives concrete usage context: platform is required, target can be either a profileUrl or leadId, and accountId is needed only when multiple LinkedIn accounts exist, explicitly pointing to campaignstack_list_accounts as the discovery method. It does not explicitly contrast with alternative tools, but there is no obvious sibling for following profiles, so the provided guidance is sufficient.

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

campaignstack_get_accountA
Read-onlyIdempotent
Inspect

Get detailed account health info including status, budget usage per action type, ramp-up state, and last activity timestamps. Requires platform ('linkedin' or 'google') and accountId. Use campaignstack_list_accounts to find valid accountId values.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesPlatform of the account to retrieve
accountIdYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful context about what data is returned but does not disclose edge-case behavior (e.g., not-found behavior, staleness, or timing). No contradiction exists.

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

Conciseness5/5

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

Three sentences with no filler: the first states what the tool returns, the second states requirements, and the third gives lookup guidance. The most important information is front-loaded.

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

Completeness5/5

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

For a two-parameter, read-only getter with no output schema, this description is complete: it explains the purpose, required parameters, and how to source the non-obvious accountId. No critical context is missing.

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

Parameters4/5

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

Schema coverage is only 50% because accountId lacks a description, and the description compensates by identifying list_accounts as the source for valid accountId values. It also confirms the platform enum values. It could add more about the expected form of accountId, but the added guidance is materially useful.

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

Purpose5/5

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

The description opens with a specific verb ('Get') and a well-scoped resource: 'detailed account health info,' and enumerates concrete contents (status, budget usage per action type, ramp-up state, last activity timestamps). This clearly separates it from list_accounts and other account-adjacent tools without needing to inspect schemas.

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

Usage Guidelines4/5

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

The description states required inputs (platform and accountId) and tells the agent to use campaignstack_list_accounts to discover valid accountId values, which is practical selection guidance. It does not explicitly name alternatives or exclusion cases, such as when to use get_account_maintenance instead, 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.

campaignstack_get_account_maintenanceA
Read-onlyIdempotent
Inspect

Per-account housekeeping state for a LinkedIn account: invitation hygiene (on or off, last pending count, last sweep), the connection watcher and the message watcher (status, auto-pause reason, workflow id, auto-accept settings) and the owning workspace that pays for them and for hand-written inbox sends (owner). A watcher owned by another workspace reads as isSameWorkspace false with no details. Use campaignstack_list_accounts to find account IDs and campaignstack_set_account_watcher to change a watcher.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo
linkedinAccountIdYes

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false. The description adds meaningful behavioral context beyond those: cross-workspace watchers are redacted to isSameWorkspace false with no details, and the owner workspace is the one that pays for watchers and inbox sends. This is exactly the kind of hidden behavior an agent needs to know.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and then provides a structured inventory of returned fields. It is a bit dense and the owner clause is convoluted, but there is no filler and the closing sentence adds useful navigational guidance.

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

Completeness4/5

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

With no output schema, the description compensates by enumerating the main returned categories and the important cross-workspace visibility rule. It is complete enough for an agent to call the tool correctly, though it leaves workspaceId semantics underspecified and does not describe the exact response shape.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden of explaining both parameters. It indirectly references linkedinAccountId via 'for a LinkedIn account' and 'use campaignstack_list_accounts to find account IDs,' but it never names workspaceId, never states that linkedinAccountId is required, and does not explain how workspaceId affects the result. This is a meaningful gap.

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

Purpose5/5

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

The description states a clear verb and resource: it reads per-account housekeeping state for a LinkedIn account. It enumerates the specific state groups returned (invitation hygiene, connection watcher, message watcher, owner) and distinguishes itself from related siblings by pointing to campaignstack_list_accounts and campaignstack_set_account_watcher.

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

Usage Guidelines4/5

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

The description gives concrete guidance on how to find account IDs (campaignstack_list_accounts) and how to change a watcher (campaignstack_set_account_watcher), which helps an agent select the right sibling. It implies when to use this tool by defining it as the read of maintenance state, but it does not explicitly contrast it with other get_* tools or state when workspaceId should be supplied.

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

campaignstack_get_apollo_import_progressA
Read-onlyIdempotent
Inspect

Get the progress of an in-flight or recently completed Apollo list import. Returns processedCount, importedCount, totalCount, status (in_progress / completed / failed), and any error message. Poll this after campaignstack_import_apollo_list to track large imports. Use the same listId you passed to import_apollo_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
listIdYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds useful lifecycle context ('in-flight or recently completed'), a status vocabulary, and the presence of an error message, supplementing the annotations without contradicting them.

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

Conciseness5/5

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

Three concise sentences front-load the purpose, then state the return payload, then give sequencing and parameter linkage. No redundant or filler content.

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

Completeness5/5

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

For a simple read-only polling tool with no output schema, the description covers invocation timing, required parameter correlation, return fields, statuses, and error behavior. An agent has everything needed to call and interpret the tool correctly.

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

Parameters4/5

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

The schema only describes workspaceId, so schema coverage is 50%; the description compensates for the required listId parameter by saying to use the same listId passed to import_apollo_list. This is the most important semantic for correct invocation, although workspaceId receives no additional description here.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Get the progress of an in-flight or recently completed Apollo list import.' It enumerates the exact returned fields and statuses, which clearly separates it from the import action and from external-import progress tools.

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

Usage Guidelines5/5

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

It explicitly tells the agent to poll this after campaignstack_import_apollo_list, frames it as tracking large imports, and instructs reuse of the same listId. This is direct, actionable when-to-use guidance.

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

campaignstack_get_automation_jobsA
Read-onlyIdempotent
Inspect

Get recent job execution history for a scheduled automation. Returns the last 10 jobs with status, timestamps, and results.

ParametersJSON Schema
NameRequiredDescriptionDefault
automationIdYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is known. The description adds beyond annotations by disclosing the bounded result set ('last 10 jobs') and the included fields ('status, timestamps, and results'). No contradiction exists.

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

Conciseness5/5

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

Two short sentences with no filler: the first states the operation and resource, the second specifies the output. Everything included earns its place, and nothing redundant repeats annotation data.

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

Completeness4/5

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

For a single-parameter read-only query with no output schema, the description adequately covers what the tool does and what it returns, including the result limit and fields. Minor ambiguity about what counts as 'scheduled' is acceptable and does not impede correct usage.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must add meaning. It does so by linking automationId to 'a scheduled automation' and explaining what the returned history contains, making the parameter's role clear despite the bare schema.

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

Purpose5/5

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

The description states a specific verb ('Get'), resource ('job execution history'), and scope ('for a scheduled automation'), and specifies the output ('last 10 jobs with status, timestamps, and results'). This clearly distinguishes it from sibling tools like list_automations or get_workflow_stats.

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

Usage Guidelines4/5

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

The description makes the tool's context clear: use it when you need the recent execution history of a specific scheduled automation. It does not explicitly name alternatives or state when not to use it, but the intended use case is unambiguous against the sibling list.

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

campaignstack_get_campaignA
Read-onlyIdempotent
Inspect

Get a campaign by ID with lead list count, workflow count, and ICP summary. If the campaign is not found, use campaignstack_list_campaigns to find valid campaign IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about the not-found fallback and the specific aggregates returned, but it does not describe the error/response shape or any potential pagination limits.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and contains no filler. The fallback guidance is placed efficiently after the primary action.

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

Completeness5/5

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

For a simple single-parameter read-only getter, this description is complete: it states what is returned, includes the not-found recovery path, and the annotations already cover the safety and idempotency profile. An agent has enough information to select and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate. It clarifies that campaignId is a campaign identifier and tells the agent where to obtain valid IDs when the provided one is invalid. This adds practical meaning beyond the bare string schema.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Get a campaign by ID', and further specifies the returned data (lead list count, workflow count, ICP summary). This clearly distinguishes it from broader list tools like campaignstack_list_campaigns and other campaign getters such as get_campaign_metrics or get_campaign_topics.

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

Usage Guidelines4/5

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

It gives explicit guidance for the not-found case, directing the agent to campaignstack_list_campaigns to find valid campaign IDs. It does not discuss when to prefer this over other campaign-related getters, but the primary usage is clear from the purpose.

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

campaignstack_get_campaign_metricsA
Read-onlyIdempotent
Inspect

Get per-campaign metrics: latest snapshot plus a time-series for the requested date range. Includes leads contacted, responded, converted, failed, total leads, and average ICP match score. Use campaignstack_list_campaigns to find valid campaign IDs. The campaign must belong to your API key's workspace; metrics for campaigns in other workspaces are not returned. Use campaignstack_get_workspace_metrics for a workspace-level summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of calendar days to include in the range (default 30, max 90)
campaignIdYes

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses an important scoping behavior: campaigns outside the API key's workspace are not returned. It also clarifies that the call returns a snapshot and time-series, which is useful context given there is no output schema.

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

Conciseness5/5

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

Four purposeful sentences: the first identifies the core operation and output, the second enumerates returned metrics, the third covers ID lookup, and the fourth covers workspace scoping and the sibling alternative. No filler or redundant restatement.

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

Completeness5/5

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

For a two-parameter read-only tool with no output schema, the description is sufficient: it states what is returned, how to obtain valid IDs, the workspace constraint, and the sibling for aggregated metrics. An agent can select and invoke this tool without missing critical context.

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

Parameters4/5

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

The schema documents `days` with default/min/max, and the description provides meaning for the undocumented `campaignId` by saying valid IDs come from campaignstack_list_campaigns. It also frames `days` as the requested date range for the time-series, adding a little context beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: get per-campaign metrics, and specifies the exact output shape (latest snapshot plus a time-series). It clearly differentiates from sibling tools like campaignstack_get_workspace_metrics and campaignstack_get_campaign by naming the workspace-level alternative.

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

Usage Guidelines5/5

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

It explicitly tells the agent to use campaignstack_list_campaigns to find valid campaign IDs before calling, and directs workspace-level needs to campaignstack_get_workspace_metrics. This gives clear when-to-use and when-not-to-use guidance for the most likely sibling alternatives.

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

campaignstack_get_campaign_topicsA
Read-onlyIdempotent
Inspect

Get all topics assigned to a campaign along with their weight (0–1). Topics with weight > 0.8 have active LinkedIn search watch automations. Returns topic metadata (id, name, displayName, category) and weight for each entry. If the campaign is not found, use campaignstack_list_campaigns to find valid campaign IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds useful behavioral context: weight range (0–1), the meaning of weights above 0.8, the shape of returned entries, and guidance for invalid campaign IDs. This goes beyond the annotations without contradicting them.

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

Conciseness5/5

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

Three efficient sentences: primary purpose, key weighted-topic semantics, and an error-recovery pointer. No filler or redundant restatement of the tool name, and the most important information is front-loaded.

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

Completeness5/5

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

For a simple read-only tool with one parameter and no output schema, the description is complete. It tells the agent what the tool does, what data it returns, what a notable weight threshold means, and how to recover if the campaign ID is invalid.

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

Parameters3/5

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

Schema coverage is 0%, so the description carries the burden. It does not explicitly define campaignId, but the repeated references to 'campaign' and the fallback to campaignstack_list_campaigns imply its role. For a single, self-explanatory parameter this is adequate, though a direct statement like 'campaignId identifies the target campaign' would have been clearer.

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

Purpose5/5

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

The description clearly states the specific action ('Get all topics assigned to a campaign') and the resource ('topics ... along with their weight (0–1)'). It also details the returned metadata (id, name, displayName, category) and weight, making it distinguishable from related campaign getters such as get_campaign_weights or list_search_topics.

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

Usage Guidelines4/5

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

The description provides concrete guidance for a common failure scenario: if the campaign is not found, use campaignstack_list_campaigns to find valid campaign IDs. It does not explicitly enumerate when to prefer this tool over sibling getters, but the context is clear enough for typical use.

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

campaignstack_get_campaign_weightsA
Read-onlyIdempotent
Inspect

Get signal weight configuration for a campaign. Shows all signal types with their score impact, whether they're enabled, and whether the weight is custom or default. Use with campaignstack_update_campaign_weight to tune scoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds output content (signal types, score impact, enabled, custom/default) but no additional behavioral context such as rate limits, auth, or side effects. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences, front-loaded with the main purpose, with details and usage pairing in the second sentence. No wasted words.

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

Completeness4/5

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

For a simple read-only getter with one obvious parameter and full safety annotations, the description covers what it returns and gives a usage pointer. It could state campaignId explicitly, but overall it's sufficient.

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

Parameters3/5

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

There is one required parameter, campaignId, with 0% schema description coverage. The description implies the campaign context but never explicitly defines campaignId or where to get it. It partially compensates by saying 'for a campaign,' but leaves parameter semantics mostly to inference from the name.

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

Purpose5/5

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

The description begins with a specific verb+resource: 'Get signal weight configuration for a campaign.' It enumerates what is shown (signal types, score impact, enabled status, custom/default), making it distinct from generic campaign getters and clearly aligned with its update counterpart.

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

Usage Guidelines4/5

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

It provides clear usage context by connecting this read tool to its write counterpart: 'Use with campaignstack_update_campaign_weight to tune scoring.' It doesn't explicitly exclude alternatives, but the pairing implies this is the pre-tuning read step.

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

campaignstack_get_companyA
Read-onlyIdempotent
Inspect

Get a company by ID. Accepts a shared (global) company id or an imported workspace-scoped company id; the response's companySource field says which one matched. Returns industry, employee range, and contact info. Platform presence (LinkedIn URL, follower/staff counts, tagline) is under the profiles key (e.g. profiles.linkedin.url); top-level LinkedIn fields are legacy aliases. The watch key carries the workspace's intelligence post watch on this company (id, status, post count) when one exists. If the company is not found, use campaignstack_list_companies to find valid company IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYes
workspaceIdNoOnly needed for imported (workspace-scoped) companies. Workspace ID (required for user keys; workspace keys are bound)

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly/idempotent annotations, the description discloses response semantics: companySource indicates which ID matched, profiles contains platform presence with legacy top-level LinkedIn aliases, and watch carries workspace intelligence when present. This gives the agent accurate expectations about response shape and legacy behavior without relying solely on schema.

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

Conciseness5/5

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

The description is dense but each sentence earns its place: primary action, ID variants, response content, nested structure caveat, watch key semantics, and fallback. Important usage constraints are front-loaded before detailed response notes.

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

Completeness5/5

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

With no output schema, the description does sufficient work by enumerating return categories, explaining the profiles nesting and legacy aliases, and noting conditional watch content. The workspaceId qualification and fallback make the tool callably complete for an agent.

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

Parameters4/5

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

Schema coverage is only 50% and companyId has no schema description, but the tool description compensates by explaining that companyId may be a shared/global ID or an imported workspace-scoped ID. It also clarifies that workspaceId is only necessary for imported companies, adding meaning beyond the raw schema.

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

Purpose5/5

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

States a specific verb ('Get') and resource ('a company by ID'), and immediately clarifies the two ID forms it accepts (shared global vs imported workspace-scoped). It also distinguishes the lookup responsibility by pointing to campaignstack_list_companies as the fallback, so an agent can tell this get-by-id tool apart from sibling list/enrich tools.

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

Usage Guidelines4/5

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

The description explains that workspaceId is only needed for imported workspace-scoped companies and explicitly directs the agent to campaignstack_list_companies when the company is not found. It does not fully contrast with enrichment or search siblings, but the get-by-id context plus the fallback instruction provides clear usage guidance.

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

campaignstack_get_competitor_watchA
Read-onlyIdempotent
Inspect

Returns a competitor watch with post count and the 5 latest posts. Use campaignstack_list_competitor_watches to find valid watch IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds value by disclosing the exact return contents: the watch with post count and the 5 latest posts. It doesn't discuss error behavior for invalid IDs, but this is a minor gap given the simple retrieval semantics.

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

Conciseness5/5

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

Two concise sentences with no filler. The primary return behavior is front-loaded, and the ID-discovery hint is placed immediately after, making the description efficient and easy to parse.

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

Completeness5/5

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

For a one-parameter read-only getter, this description is complete: it states what is returned, how to get a valid ID, and the annotations cover safety. No output schema is needed because the return contents are described directly.

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

Parameters4/5

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

Schema coverage is 0%, so the description carries the burden for parameter meaning. It clarifies that watchId is the identifier of a competitor watch and tells the agent where to obtain valid IDs, adding meaningful context beyond the schema's bare minLength string.

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

Purpose5/5

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

The description states a specific verb ('Returns') and resource ('competitor watch'), and specifies what it includes (post count and the 5 latest posts). This clearly distinguishes it from the many list and mutation sibling tools.

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

Usage Guidelines4/5

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

It explicitly directs the agent to campaignstack_list_competitor_watches to find valid watch IDs, which is the main prerequisite. It doesn't specify when not to use this tool, but for a simple get-by-ID operation the guidance is clear and sufficient.

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

campaignstack_get_contact_finder_requestA
Read-onlyIdempotent
Inspect

Get one built-in Contact Finder request by id. Returns its status (queued, linked, submitted, completed, failed), what was wanted (wantEmail, wantPhone), creditsReserved at enqueue, creditsCharged once settled (reserved minus refunds, i.e. only data that was found), the result (emailFound, emailStatus, phoneFound, emailWritten, phoneWritten) and errorCode on failure. Poll it after campaignstack_enrich_lead_contact_info returned status pending with provider bettercontact; a request usually completes within minutes and never later than about an hour. Found data is already written on the lead (campaignstack_get_lead), this tool never returns the email or phone itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdYesRequest id returned by campaignstack_enrich_lead_contact_info (provider bettercontact).
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, but the description adds substantial behavioral context beyond them: the status lifecycle, credit reservation and refund semantics, result fields, errorCode on failure, polling expectation, and the side effect that found data is already written to the lead. No contradiction exists between description and annotations.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: it states the purpose and return fields first, then the polling trigger and timing, then the crucial caveat about data already being written elsewhere. There is no filler or redundant repetition of schema or annotation information.

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

Completeness5/5

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

For a simple two-parameter read-only polling tool with no output schema, the description fully compensates: it names all key response categories, explains settlement semantics, discloses the failure field, gives timing boundaries, and tells the agent where to find the actual data. Nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents requestId and workspaceId adequately. The description reinforces that requestId comes from campaignstack_enrich_lead_contact_info, but this is also stated in the schema. It adds no new parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get one built-in Contact Finder request by id.' It clearly distinguishes this single-item retrieval tool from the sibling list_contact_finder_requests by emphasizing 'one' and 'by id.' It further enumerates the meaningful response fields, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use it: 'Poll it after campaignstack_enrich_lead_contact_info returned status pending with provider bettercontact.' It also gives a practical expectation for completion time and warns that the tool never returns the email or phone itself since found data is already written on the lead, guiding the agent toward campaignstack_get_lead for that data.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_content_analyticsA
Read-onlyIdempotent
Inspect

Get analytics for a workspace's own published LinkedIn content. Returns engagement metrics (reactions, comments, reposts), trend vs previous period, and top-performing posts. Use fromMs/toMs as Unix timestamps (milliseconds) to define the date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
toMsYes
fromMsYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds useful behavioral context by listing the returned data: engagement metrics, trend vs previous period, and top-performing posts, which goes beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose, followed by return-value summary and parameter guidance. Every sentence contributes meaningful information with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only analytics tool with two required parameters, the description is complete: it explains scope, inputs, and key outputs. Although there is no output schema, the description provides enough detail about the return content for an agent to know what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, but the description directly compensates by explaining that fromMs/toMs are Unix timestamps in milliseconds used to define the date range. The optional workspaceId is already described in the schema with its key-scoping nuance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Get analytics') and a specific resource ('a workspace's own published LinkedIn content'), making it clear what the tool operates on. This also distinguishes it from sibling analytics tools like campaign metrics or overall workspace metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly states the target scope ('workspace's own published LinkedIn content') and explains the date range mechanism using fromMs/toMs. It does not name alternatives or explicitly exclude other tools, but the context is clear enough for an agent to select this tool appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_content_postA
Read-onlyIdempotent
Inspect

Returns a single content post with its LinkedIn extension data and media URLs. Use campaignstack_list_content_posts to find valid post IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentPostIdYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior, so the description only adds return-content context rather than new behavioral constraints. There is no contradiction, but no extra side-effect, auth, or error context is provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, with the core purpose first and the ID-sourcing tip second. There is 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only retrieval tool with safety annotations, this is complete: it states what is returned, what input is needed, and where to obtain a valid input. No output schema exists, but the description gives enough return context to select and invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only provides the parameter name and minLength, but the description adds meaning by explaining that contentPostId is a valid post ID obtainable via list_content_posts. This compensates for the 0% schema description coverage on the single parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Returns a single content post' with its LinkedIn extension data and media URLs. This clearly distinguishes the tool from list_content_posts and other content-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete guidance for obtaining the required ID: 'Use campaignstack_list_content_posts to find valid post IDs.' This tells the agent how to prepare a valid call. It does not explicitly rule out alternative content getters, but the single-vs-list distinction is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_conversationA
Read-onlyIdempotent
Inspect

Get a conversation with its full message history. Takes a conversationRef { platform, id } from campaignstack_list_inbox_conversations. Returns all participants, messages (oldest first in the messages array - the last element is the most recent), read state, account info, and associated lead details. If needsFetch is true, messages have not been loaded yet. Use campaignstack_refresh_inbox to populate them. Use campaignstack_list_inbox_conversations to find conversation refs.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversationRefYes

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description discloses return contents, message ordering ('oldest first ... last element is the most recent'), read state, account info, lead details, and the needsFetch condition. This is substantial behavioral context that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: purpose, parameter source, return details and ordering, and conditional follow-up. The most important information is front-loaded, and there is no filler or repetition of schema contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with no output schema, the description is thorough: it explains input provenance, output contents, message ordering, the needsFetch flag, and the exact sibling tools for refresh and ref-finding. Nothing critical for invoking it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the full burden. It defines the single parameter's shape ('conversationRef { platform, id }') and, more importantly, tells the agent that refs come from campaignstack_list_inbox_conversations. That provenance adds meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get a conversation with its full message history.' It clearly distinguishes this from list_inbox_conversations by emphasizing full history and names the source of the conversationRef, so an agent can tell it apart from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent where to obtain the required parameter ('from campaignstack_list_inbox_conversations') and what to do when messages are not loaded ('Use campaignstack_refresh_inbox to populate them'). This gives clear context and names the relevant alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_conversation_voiceA
Read-onlyIdempotent
Inspect

Get a LinkedIn account's conversation voice profile: status (draft or approved), version, the readable style summary, corpus stats, the structured profile, and the history backfill state. Returns voice: null when no profile has been extracted yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
linkedinAccountIdYesLinkedIn account id

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety behavior is covered. The description adds useful behavioral detail: the exact set of returned fields, the status values (draft or approved), and the explicit null behavior when no profile exists. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one substantive sentence plus a short null-behavior sentence; there is no filler or repetition of the tool name. The main purpose and return contents are front-loaded, though the long enumerative list could have been slightly more scannable with a list format.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the burden of explaining the return value, and it does so by enumerating status, version, style summary, corpus stats, structured profile, and backfill state, plus the null case. For a simple getter with annotations covering safety, this is nearly complete; only minor details like the shape of "corpus stats" or "structured profile" are left unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents linkedinAccountId as "LinkedIn account id" and workspaceId with its user-key versus workspace-key distinction. The description only reinforces that this is account-scoped and does not add new parameter-level meaning beyond what the schema already provides, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Get a LinkedIn account's conversation voice profile". It then enumerates exactly what is returned, and the final sentence clarifies the null case. The account-level scope distinguishes it from the workspace-level sibling get_workspace_voice, so an agent can pick the right tool from the large sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes it clear this is a read/retrieval operation for an existing conversation voice profile, but it does not explicitly say when to use this instead of campaignstack_extract_conversation_voice or campaignstack_update_conversation_voice. The "Returns voice: null when no profile has been extracted yet" statement implies extraction may be needed first, but that guidance is not stated directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_credit_balanceA
Read-onlyIdempotent
Inspect

Get the current AI credit balance for a workspace. Returns monthly usage, included credits, rolled-over credits, pack balance, overage used, total pool size, remaining credits, percent used, and plan type.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the operation's safety profile is covered. The description adds value by enumerating the returned fields and clarifying the scope ('for a workspace'), which is useful behavioral context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The primary action is front-loaded, and the second sentence efficiently lists the response fields, providing necessary information without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity, one optional parameter, and strong annotations, the description is complete. It explains what the tool does and exactly what values are returned, which is especially important because no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single workspaceId parameter is already described with the important detail about user keys vs. bound workspace keys. The tool description does not add additional parameter semantics 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get the current AI credit balance for a workspace.' It clearly identifies what the tool returns and is readily distinguishable from siblings like get_workspace_billing or get_account because it focuses specifically on AI credit balance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: call this when you need the current AI credit balance for a workspace. However, it does not explicitly mention alternatives or when not to use it, so an agent is left to infer the boundary against similarly named get_* billing or account tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_draft_checkupA
Read-onlyIdempotent
Inspect

Get the workspace's open draft checkup proposal, or null when none is pending. A checkup analyzes recent AI drafts plus review decisions (edits and rejections) and proposes ONE change to the workspace's craft data: an outreach-intent detail, a playbook section, or the offer context. The result carries the named findings with evidence, the current vs proposed text, and before/after replays of real drafts under the proposed text. Nothing is applied until campaignstack_accept_draft_checkup.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, and the description adds substantial behavior beyond them: it returns null when none is pending, describes the analysis inputs, the single-change proposal, the result contents (findings with evidence, current vs proposed text, before/after replays), and explicitly states nothing is applied. This is rich, non-obvious behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is four sentences with no filler. It front-loads the core action and null behavior, then adds necessary context about what a checkup is and what the result contains. Every sentence contributes distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple single-parameter schema, rich annotations, and no output schema, the description is complete enough for an agent to call this correctly. It explains the return value, the null case, the result shape, and the non-applying behavior, so no critical operational information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, workspaceId, is fully described in the input schema, including the user-key vs workspace-key nuance. The description does not add new parameter-level details, so the schema carries the semantic weight; therefore baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Get the workspace's open draft checkup proposal,' and adds the null-when-pending behavior. It clearly distinguishes this from accept/run/reject siblings by describing what the checkup is and noting that nothing is applied until campaignstack_accept_draft_checkup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes clear this is the read-only retrieval counterpart and explicitly references accept_draft_checkup as the mutating follow-up. It does not fully enumerate when to prefer this over run_draft_checkup or reject_draft_checkup, but the read-only framing plus 'open draft checkup proposal' provides strong contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_enrichment_statusA
Read-onlyIdempotent
Inspect

Get the current enrichment queue status for a workspace. Shows counts of pending, processing, completed, and failed items, plus creditsExhausted (pending items deferred because the workspace is out of credits) and accountGates: the live dispatch verdict per account with pending work (allowed, immediateOnly, and the block reason such as outside_business_hours or budget_exhausted). Use accountGates to explain why pending items are not moving. Optionally filter by campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNo
campaignIdNo
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this readOnly, idempotent, and non-destructive. The description adds material behavioral context by explaining creditsExhausted, accountGates verdicts (allowed, immediateOnly), and block reasons such as outside_business_hours or budget_exhausted. No annotation contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with the main purpose front-loaded, followed by concrete return-field details and a usage tip. No redundant wording, and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description fully carries the burden of explaining return semantics: item counts, creditsExhausted, accountGates, allowed/immediateOnly, and block reasons. For a read-only status tool, this is sufficient for an agent to call it and interpret results correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning for workspaceId ('for a workspace') and campaignId ('Optionally filter by campaign'), though it does not name the parameters explicitly or mention the platform const. The const nature of platform reduces the need for explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get the current enrichment queue status for a workspace.' It enumerates distinct return fields (pending, processing, completed, failed, creditsExhausted, accountGates), which clearly separates it from related sibling tools like import-progress or contact-finder status tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational guidance: 'Use accountGates to explain why pending items are not moving' and notes that campaign filtering is optional. It lacks an explicit when-not-to-use or named alternative, so it does not reach a 5, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_exclusionsA
Read-onlyIdempotent
Inspect

Get who a workspace may never contact. Exclusions have two levels and combine by union: level 0 is the workspace list every campaign and signal agent honours, level 1 is a per-consumer extra that can only add to it. level=workspace (default) returns the level-0 entries with their enabled status and config. level=effective, with signalAgentId or workflowId, returns level 0 merged with that consumer's own entries, which is the set the pipeline applies. Read that one to explain why a lead was skipped. Use exclusionId values with campaignstack_list_manual_exclusion_urls, campaignstack_add_manual_exclusion_urls, campaignstack_remove_manual_exclusion_url, or campaignstack_toggle_exclusion. Use campaignstack_list_signal_agents to find signal agents for context.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelNoworkspace (default) returns the level-0 list alone. effective returns level 0 merged with the level-1 extras of the consumer named by signalAgentId or workflowId, which is what the pipeline applies.
workflowIdNoWith level=effective, merge this workflow source node's own exclusions
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
signalAgentIdNoWith level=effective, merge this signal agent's own exclusions

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description goes beyond this by explaining the union semantics of the two levels, that level 1 can only add to level 0, and that the effective set is what the pipeline applies. It also notes the workspace-level response includes enabled status and config. Minor omissions like pagination or error behavior are acceptable given the strong annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-organized: purpose first, then level semantics, parameter behavior, and related tools. Every sentence contributes useful information, and the cross-reference list of sibling tools, while long, is directly actionable. It is long for a description but earns its length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 4 optional parameters and no output schema, the description covers the key semantic complexity well. A small gap remains: it does not explicitly state whether level=effective requires exactly one of signalAgentId or workflowId, and what happens if both are provided. workspaceId is also only documented in the schema, not the description, though schema coverage mitigates this.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds value beyond the schema by clarifying the relationship between level, signalAgentId, and workflowId, the union combination, and the default behavior. It largely reinforces the schema rather than compensating for gaps, but the added semantic context about 'per-consumer extra' and 'combined by union' justifies a 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get who a workspace may never contact.' It clearly distinguishes the two exclusion levels and what each parameterized call returns, so an agent can tell this getter apart from sibling tools like add_manual_exclusion_urls or toggle_exclusion without inspecting their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use workspace vs effective levels, notes the default, and gives a concrete use case ('Read that one to explain why a lead was skipped'). It also cross-references sibling tools for exclusionId values and finding signal agents, providing clear routing between alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_external_import_progressA
Read-onlyIdempotent
Inspect

Read the progress of a campaignstack_import_external_leads run: processed / imported counts, status (in_progress, completed, failed) and error message. Returns null when no import was ever started for that provider source.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesIntegration provider of the import.
sourceIdYesProvider-side source id the import was started with.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive, so the baseline is high. The description adds valuable behavioral details: the exact status values (in_progress, completed, failed), that an error message is included, and the null result when no import was ever started for that provider source.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The first sentence front-loads the action, target run, and return fields; the second sentence covers the null edge case. Every word contributes to operational understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description effectively explains the return values: counts, status, error message, and null behavior. For a simple read-only status getter, this is sufficient for an agent to invoke and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents provider, sourceId, and workspaceId with useful descriptions. The tool description does not add additional parameter-level meaning beyond referring to "provider source," which is already captured by the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb "Read" and the exact resource: the progress of a campaignstack_import_external_leads run. It specifies the returned data (processed/imported counts, status, error message) and the null edge case, making it easy to distinguish from similar progress-checking siblings like get_apollo_import_progress.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: this tool reads progress for a campaignstack_import_external_leads run, which implies use after initiating that import. It does not explicitly state when not to use it or name alternatives, but the context is unambiguous enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_icp_scoresA
Read-onlyIdempotent
Inspect

Get ICP match scores for leads. Filter by minimum score to find top matches. Returns paginated array of { leadId, leadName, icpMatchScore, matchedFields } sorted by score descending. Use campaignstack_list_icps to find ICP IDs. High-scoring leads can be added to lists via campaignstack_add_leads_to_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
icpIdYes
limitNo
cursorNo
minScoreNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds value by disclosing the paginated response shape, the exact fields returned, and descending sort order, which are not available in structured metadata. No behavioral trait contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each carrying distinct information: action, filtering, output format/order, and related tools. There is no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only paginated list with no output schema, the description covers the return fields, ordering, pagination, minimum-score filtering, and prerequisite tool for the required parameter. It could mention that scores may need to be generated first via trigger_icp_scoring, but this is not essential to invoking the operation correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates partially: it maps minScore to the filtering concept, implies limit/cursor through pagination, and directs the agent to list_icps for icpId. It does not explain cursor semantics, limit bounds, or the default value, relying on the schema for those numeric constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('ICP match scores for leads'), states the output shape and ordering, and references the related list_icps tool for obtaining ICP IDs. This distinguishes it from nearby siblings like get_lead_score_breakdown and trigger_icp_scoring by focusing on the match-score read operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It embeds workflow context by telling the agent to use campaignstack_list_icps to find ICP IDs and campaignstack_add_leads_to_list for high-scoring leads. It does not explicitly state when not to use it or compare it with alternatives, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_inbox_unread_countA
Read-onlyIdempotent
Inspect

Get the total number of unread conversations across all LinkedIn accounts in the workspace. Returns { total, accountCount } where total is the sum of unread conversation counts, accountCount is the number of active LinkedIn accounts in the workspace. Uses denormalized counters for efficiency (no conversation table scan).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint, idempotentHint, and non-destructive behavior. The description adds meaningful behavioral context: it returns a specific shape, defines accountCount as active accounts, and explains the use of denormalized counters for efficiency with no conversation table scan. This helps the agent understand performance and semantics 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The main action is front-loaded, the return contract is stated precisely in the second sentence, and the efficiency note in the third sentence is a useful, non-redundant addition. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The return value is fully described even though no output schema exists, and the workspace-scoped aggregation is clear. For a simple, read-only counter tool with strong annotations and one obvious parameter, this is nearly complete; the only minor gap is explicit parameter-level guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has only one parameter, workspaceId, but no schema-level description (0% coverage), so the tool description carries the burden. The phrase 'in the workspace' connects the parameter to the count's scope but does not explicitly name workspaceId, explain its role, or clarify whether it is required. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get the total number of unread conversations across all LinkedIn accounts in the workspace.' It clearly states the aggregated scope and distinguishes this aggregate-count tool from sibling tools like list_inbox_conversations or count_unread_notifications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The implied use case is clear: use this when the agent needs an aggregate unread-conversation count across all accounts rather than a list of conversations. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named to help disambiguate from nearby list/count tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_leadA
Read-onlyIdempotent
Inspect

Get a lead by ID with full details including company information and ICP scores. Accepts shared lead IDs and private (workspace-scoped, CSV-imported) lead IDs; the response's leadSource field says which one was found. Platform presence is under the profiles key (e.g. profiles.linkedin.url, followerCount, bio); top-level fields like linkedInUrl are legacy aliases. The watch key carries the workspace's intelligence post watch on this lead (id, status, post count) when one exists. If the lead is not found, use campaignstack_search_leads to find valid lead IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already mark the operation as read-only and idempotent, the description adds substantial behavioral detail: the leadSource field disambiguates shared vs private leads, platform presence lives under the profiles key with legacy aliases at top level, and the watch key conditionally appears. This goes well beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the purpose, then adds response-shape guidance and a fallback instruction. Every sentence earns its place, and the structure flows from core meaning to important nuances.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description adequately covers what the agent will receive: company info, ICP scores, profiles structure, legacy aliases, watch information, and leadSource. It also covers the not-found case with a clear alternative. This is complete enough for an agent to invoke and interpret the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only defines leadId as a required string with 0% description coverage, so the description carries the semantic burden. It helps by explaining that the ID can be a shared or private workspace-scoped CSV-imported ID, and that leadSource indicates which was found. It doesn't provide exact ID formats, but it gives enough context for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get a lead by ID with full details including company information and ICP scores.' This clearly distinguishes the tool from search-based and list-based siblings by emphasizing ID-based lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool and when not to: if the lead is not found, it directs the agent to campaignstack_search_leads. It also clarifies that both shared and private lead IDs are accepted, removing ambiguity about which ID types can be passed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_lead_connectionsA
Read-onlyIdempotent
Inspect

List the people a lead is known to be connected to on LinkedIn, with the degree of each relationship and how it was discovered. Use it to find who could introduce you, or to see how embedded a lead is in a network you already reach. Absence of an edge means we have not observed one, not that the two are strangers.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
degreeNo
leadIdYes
leadSourceNoglobal

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent annotations, the description adds a meaningful data-completeness caveat: 'Absence of an edge means we have not observed one, not that the two are strangers.' This prevents the agent from misinterpreting missing results and adds real behavioral context about data provenance.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: function statement, use cases, and an important interpretative caveat. The most important information is front-loaded, with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the return content in prose and includes a useful caveat, which is good given there is no output schema. However, it omits guidance on optional parameters like degree filtering and leadSource, which could materially affect results. The basic required-parameter call is clear, but full usage is not fully specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the four parameters. It only implicitly references leadId and the concept of degree, but does not explain the degree filter, leadSource enum, or limit parameter. This leaves meaningful parameter semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'List the people a lead is known to be connected to on LinkedIn', including the degree of each relationship and discovery method. This clearly distinguishes it from related tools like fetch_mutual_connections or find_warm_paths by describing exactly what data it returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit use cases: 'find who could introduce you' and 'see how embedded a lead is in a network you already reach.' It gives clear context for when to use the tool, though it does not explicitly name alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_lead_historyA
Read-onlyIdempotent
Inspect

Get everything this workspace has done to one lead, across every workflow and campaign, newest first. Each entry carries the workflow name, the node label, the status, and the payload, so crafted messages, connection notes and the comments an autonomous node published on the lead's posts are readable after the fact. Use this instead of campaignstack_get_node_activity when the question is about a person rather than about one node: node activity is scoped to a single node, so a lead waiting at a later step looks untouched there.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
leadIdYes
leadSourceNoglobal
workspaceIdNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive behavior. The description adds useful behavioral detail beyond that: entries are returned newest first and each carries workflow name, node label, status, and payload, with concrete examples of readable content. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler; the core function and ordering are front-loaded, the payload detail earns its place, and the sibling comparison is packed into the final sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only history tool with no output schema, the description covers the key return contents and ordering. It stops short of explaining optional parameters like leadSource and workspaceId or pagination behavior, but the core invocation path (required leadId) is clear enough that an agent can call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description needed to explain parameter roles, but it only alludes to 'one lead' and 'this workspace' without mapping to leadId, leadSource, workspaceId, or limit. The schema's types/defaults are visible, but the description adds almost no parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get everything this workspace has done to one lead, across every workflow and campaign, newest first.' It also explicitly differentiates from campaignstack_get_node_activity, so an agent can tell them apart immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing guidance: 'Use this instead of campaignstack_get_node_activity when the question is about a person rather than about one node,' and explains why node activity is insufficient ('a lead waiting at a later step looks untouched there'). This is clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_lead_listA
Read-onlyIdempotent
Inspect

Get a lead list by ID with details and optionally paginated leads. Set includeLeads to true to get the leads in the list. If the lead list is not found, use campaignstack_list_lead_lists to find valid IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
leadListIdYes
includeLeadsNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context: includeLeads controls whether leads are returned, pagination is optional, and a not-found case routes to list_lead_lists. It does not detail response format or pagination mechanics, but the annotation coverage lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The main purpose is front-loaded, usage guidance follows, and the fallback instruction is clearly separated. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a relatively simple read tool with annotations covering safety, the description covers the core parameters and error recovery. However, it leaves 'details' vague and does not describe pagination cursor behavior or output shape, and there is no output schema. Still, an agent can likely call the tool correctly with the provided guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explicitly explains includeLeads and implies limit/cursor through 'paginated leads,' but it does not clarify cursor semantics, limit bounds/defaults, or the relationship between includeLeads and pagination. The parameter names are self-explanatory, but the description only partially fills the gap left by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: 'Get a lead list by ID with details and optionally paginated leads.' This names the specific resource (lead list), the retrieval action, and the optional data scope, making it easy to distinguish from list/create/update siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete guidance: set includeLeads to true to retrieve leads, and use campaignstack_list_lead_lists if the ID is not found. It does not enumerate all alternative tools or when-not-to-use conditions, but the fallback instruction provides clear routing in the most likely failure case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_lead_score_breakdownA
Read-onlyIdempotent
Inspect

Get a detailed breakdown of a lead's score in a campaign. Shows ICP score, individual signal contributions with all multipliers (time decay, recency bonus, intent, topic alignment, connection degree), and the total computed score. Use this to understand why a lead scored high or low.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYes
campaignIdYes
leadSourceNoglobal

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description's wording aligns with that safety profile. The description adds useful context about the returned contents — ICP score, multiplier contributions, total score — but does not disclose caveats like data freshness, source-specific behavior, or potential absence of signals.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: first states the action and scope, second lists what the breakdown shows, third gives the practical use case. Every sentence earns its place; no filler or repetition exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with no output schema, the description does a good job conveying what the agent will receive and why it matters. The only notable gap is the unexplained leadSource parameter, which prevents the description from being fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It only indirectly identifies campaignId and leadId through the phrase 'a lead's score in a campaign,' and it entirely fails to explain leadSource, whose 'global' vs 'private' distinction remains ambiguous. The schema's enum and default provide limited structure but not semantic meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get a detailed breakdown of a lead's score in a campaign.' It then enumerates concrete output components (ICP score, signal contributions, multipliers, total score), which makes the tool's purpose unmistakable and distinct from siblings like get_lead or get_icp_scores.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The final sentence gives a clear usage context: 'Use this to understand why a lead scored high or low.' It does not name alternative tools or explicitly say when not to use it, but the intended scenario is specific enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_node_activityA
Read-onlyIdempotent
Inspect

Get recent activity for a specific workflow node. Returns entries sorted by most recent, with per-status counts. Useful for monitoring execution progress and identifying failures. 'cancelled' entries carry a cancelReason explaining why the lead router terminated them (e.g. superseded_by_reply = the lead replied before the queued touch was sent).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
nodeIdYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations that already mark this as read-only/idempotent, the description discloses sort order, per-status counts, and the cancelReason field semantics with a concrete example. This tells the agent what kind of data to expect without needing an 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a distinct purpose: action/result, use case, and a helpful detail about cancelled entries. It is appropriately sized and front-loads the core behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description provides the essential return semantics (sorted entries, counts, cancelReason). It does not enumerate all entry fields or explain pagination, but for a simple node-activity read with annotations covering safety, the remaining gaps are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies that nodeId targets a specific workflow node, but it never mentions the limit parameter, its default, or how it controls returned entries. The schema's self-descriptive 'limit' and default value keep this from being a lower score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Get recent activity') and resource ('specific workflow node'), and adds return-shape details like sorted entries and per-status counts. It does not explicitly differentiate this tool from sibling workflow tools such as get_workflow_stats or list_leads_at_node, so it falls one step short of a full 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for monitoring execution progress and identifying failures' gives concrete when-to-use context. It does not provide exclusions or name alternative tools, so it is not a complete routing guide.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_notification_preferencesA
Read-onlyIdempotent
Inspect

Get the calling user's notification email preferences: the per-category email delivery matrix (global defaults + per-workspace overrides with inherited markers) and the weekly report opt-in. Requires a USER API key (csu_). Workspace keys have no user identity. Use campaignstack_update_notification_preferences to change values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds meaningful behavioral context beyond this by specifying the calling-user scope, the auth-key requirement, and the structure of the returned data (delivery matrix + weekly report opt-in). It does not detail the exact return schema, but the described contents are sufficient for a zero-parameter read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, then adds only high-value context: the exact returned components, the required API key type, and the update alternative. No filler or redundant phrasing exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only getter, the description is complete: it names the resource, the return contents, the auth constraint, and the sibling tool for mutations. Annotations cover side-effect safety, so no additional behavioral disclosure is necessary. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema reflects this with an empty properties object, so there is nothing for the description to clarify. The baseline for 0-parameter tools is 4, and the description appropriately focuses on the implicit user identity rather than parameter details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and names the exact resource: the calling user's notification email preferences. It further details the resource as the per-category email delivery matrix with global defaults, per-workspace overrides, inherited markers, and the weekly report opt-in, distinguishing it from notification-list tools like list_notifications.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the auth prerequisite: a USER API key (csu_) is required, and workspace keys have no user identity, so the tool cannot be used with them. It also names the update counterpart, campaignstack_update_notification_preferences, for changing values, making the when-to-use vs. when-not-to-use guidance explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_personaA
Read-onlyIdempotent
Inspect

Get a persona by ID. Returns the full persona record including pain points, goals, and objections. If not found, use campaignstack_list_personas with a valid campaignId.

ParametersJSON Schema
NameRequiredDescriptionDefault
personaIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as read-only, idempotent, and non-destructive. The description adds useful behavioral context by specifying the returned fields and providing a not-found fallback. No contradiction with annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with no wasted words. The primary action is front-loaded, followed by return-value details and a fallback instruction, making the description easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read operation, the description covers the return payload and even offers recovery guidance for not-found cases. It could be slightly more explicit about how to obtain a valid personaId, but overall it is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, personaId, has 0% schema description coverage. The description merely says 'by ID' and does not explain where the personaId comes from, whether it is scoped to a campaign, or what format or constraints apply beyond the schema's type and minLength.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Get a persona by ID') and clearly states what is returned: the full persona record including pain points, goals, and objections. This separates it from creation, update, deletion, and listing sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: this tool fetches a persona by ID, and if not found, the agent should use campaignstack_list_personas with a valid campaignId. This names an alternative and a condition, though it does not explicitly explain when to choose this tool over listing from the outset.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_phaseA
Read-onlyIdempotent
Inspect

Get a campaign phase by ID. Returns the full phase record including objectives, phase type, and order. If not found, use campaignstack_list_phases with a valid campaignId.

ParametersJSON Schema
NameRequiredDescriptionDefault
phaseIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a safe, idempotent read. The description adds non-obvious behavior: it returns the full phase record with specific fields and provides a not-found fallback, which goes beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler: the main action is front-loaded, the return summary earns its place, and the fallback guidance is a single clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema, the description covers purpose, return contents, and the not-found path. It doesn't specify exact error or empty-result behavior, but this is a minor gap for such a simple operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines phaseId as a minLength string with no description; the tool description's 'by ID' confirms the parameter's role but doesn't explain where to obtain the phaseId or its expected format. The single, self-explanatory parameter makes this acceptable but not strongly documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get a campaign phase by ID.' It also lists the returned content (objectives, phase type, order) and the fallback to list_phases, which distinguishes this single-record getter from the enumeration sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit conditional: if not found, use campaignstack_list_phases with a valid campaignId. This is useful routing guidance, though it doesn't spell out broader when-to-use/when-not-to-use alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_platform_capabilitiesA
Read-onlyIdempotent
Inspect

Lists every platform action (like_post, comment_on_post, follow_profile, send_message, send_connection_request, send_inmail, extract_post_engagements) with the platforms it supports and, per platform, the accepted target fields and optional params. Also returns which platforms this workspace has connected accounts for. Call this when an action tool returns wrong_target_for_platform or unsupported_capability.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the call as readOnly, idempotent, and non-destructive; the description adds meaningful behavioral detail by specifying what the response contains: supported platforms, accepted target fields, optional params, and connected accounts. It doesn't contradict the annotations and goes beyond simply saying it's a read-only operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The main purpose is front-loaded, the action examples are useful, and the invocation trigger is placed at the end for clarity. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes responsibility for explaining return content, and it does so well: actions, platforms, target fields, optional params, and connected accounts. It also gives a clear usage trigger. The main gap is workspaceId handling, but for a simple one-parameter introspection tool this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one optional workspaceId with no description, and the description never explains how workspaceId is used or what happens when it is omitted. The phrase 'this workspace' hints at the parameter but doesn't clarify its semantics, which matters because the schema description coverage is 0%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists platform actions (with concrete examples), the platforms each supports, per-platform target fields and optional params, and connected accounts. This is a specific verb+resource description that distinguishes it from the many sibling tools as a capabilities/introspection endpoint.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit, actionable trigger: 'Call this when an action tool returns wrong_target_for_platform or unsupported_capability.' This tells the agent exactly when to use this tool and for what purpose, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_playbookA
Read-onlyIdempotent
Inspect

Get the workspace's playbook as playbookSections, one field per section: identity (sent on every message), voice (sent on every message), boundaries (sent on every message), angles (sent on messages we send first), objections (sent on replies, after they have written back). Also returns offerContext, the factual company/offer grounding injected into every AI craft regardless of playbook resolution, and capabilities, the description of what the system behind the workspace can detect and do that is injected into reply crafts only. All three are editable via campaignstack_update_workspace. Returns null if the workspace does not exist; an unwritten playbook comes back as an empty object. Use campaignstack_regenerate_playbook to create or refresh it.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/idempotent/non-destructive annotations, the description discloses meaningful return behavior: null for nonexistent workspaces, empty object for unwritten playbooks, and the precise semantic role of offerContext and capabilities in message crafting. This gives the agent the behavioral expectations it needs without an 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence carries operationally relevant information: return shape, field semantics, edit path, edge cases, and regeneration alternative. The main verb and resource appear first, so the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the full burden of explaining return values, and it does so comprehensively: each section, the special offerContext/capabilities behavior, null handling, empty-object handling, and how to modify or create the playbook. Nothing material is missing for a single-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single workspaceId parameter is already documented in the schema. The description adds little about parameter mechanics beyond referring to 'the workspace', which aligns with the schema's own wording. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair, 'Get the workspace's playbook', and enumerates the exact fields returned (playbookSections, offerContext, capabilities) with their injection contexts. It also distinguishes itself from related operations by naming campaignstack_update_workspace and campaignstack_regenerate_playbook as the edit/create counterparts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states what this tool returns and gives explicit pointer to campaignstack_regenerate_playbook for creating/refreshing and campaignstack_update_workspace for editing. It does not enumerate when to choose this over closer read siblings like campaignstack_get_workspace_voice or campaignstack_get_platform_capabilities, so it stops short of a full exclusion list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_playbook_proposalA
Read-onlyIdempotent
Inspect

Get the workspace's pending playbook proposal, or null when none is waiting. Carries the request it answers, the assistant's message, and one to three changes, each with the target (playbook section, intent detail, or offer context), the current text and the proposed full replacement. Nothing is applied until campaignstack_decide_playbook_proposal.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark read-only, idempotent, and non-destructive, and the description adds meaningful behavioral details: it can return null, it carries a specific payload structure, and it applies no changes. The explicit 'Nothing is applied until...' statement reinforces the side-effect boundary beyond what annotations alone state.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: purpose and null case are front-loaded, the payload is summarized in one sentence, and the companion decision tool is referenced in the final sentence. Every sentence contributes distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by detailing what the response contains: request, assistant message, and one to three changes with target/current/proposed replacement. It also covers the null case and the no-application guarantee, leaving an agent with the information needed to decide whether to call this and then campaignstack_decide_playbook_proposal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the single workspaceId parameter, including the distinction between user keys and bound workspace keys, so the description does not need to compensate. The tool description adds no parameter-level meaning, matching the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific verb and resource: getting the workspace's pending playbook proposal, with an explicit null result when none exists. It distinguishes from siblings like campaignstack_get_playbook by focusing on the pending proposal and from campaignstack_decide_playbook_proposal by being a read-only retrieval.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clarifies that this tool retrieves the pending proposal and that nothing is applied until campaignstack_decide_playbook_proposal is called, implying the correct workflow order. It does not explicitly list when-not-to-use or compare against related get/propose/revert siblings, so it stops short of exhaustive routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_signal_agentA
Read-onlyIdempotent
Inspect

Get a single signal agent with full details including status, target info, account assignments, response mode, and counters (posts watched, signals total). Use campaignstack_list_signal_agents to find agent IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful return-content context by listing exactly what full details include, which helps the agent set expectations without an output schema. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The primary function is stated first, followed by the essential ID-lookup pointer. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-id tool, the description covers what is returned, how to find the ID, and the single-resource scope. Annotations cover safety and idempotency, so nothing critical is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and agentId only has minLength, so the description must compensate. It does so by telling the agent how to source the ID via campaignstack_list_signal_agents, which adds meaningful semantic guidance beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get a single signal agent with full details...' and enumerates the included fields (status, target info, account assignments, response mode, counters). This clearly distinguishes it from list_signal_agents and get_signal_agent_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to use campaignstack_list_signal_agents to find agent IDs, which is a clear usage prerequisite. It does not fully distinguish when to prefer this over get_signal_agent_stats, but the primary routing guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_signal_agent_statsA
Read-onlyIdempotent
Inspect

Get dashboard metrics for a signal agent: total signals, signals in the last 24h, leads created, posts watched, and breakdown by priority (P0/P1/P2). Message and connection watch agents also return a watcherActivity block with real 7-day and 24h inbound/outbound activity (inbox messages received/replies sent, or connections accepted), since those agent kinds produce no signal events. Use campaignstack_list_signal_agents to find agent IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and idempotentHint, covering the safety profile. The description adds useful behavioral nuance by disclosing that message and connection watch agents return a watcherActivity block because they produce no signal events. This explains conditional output behavior beyond what annotations provide, though it does not cover potential staleness, authentication, 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The main metric list is front-loaded, the conditional watcherActivity explanation earns its place, and the pointer to list_signal_agents is a practical final sentence. Every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only metrics tool, the description is largely complete: it identifies the resource, enumerates return metrics, explains a conditional output block, and tells how to obtain valid agent IDs. It stops short of describing pagination, timezone behavior, or explicit handling for non-watch agent types, but those are minor given the simple scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It explains that the only parameter, agentId, refers to a signal agent and directs the user to campaignstack_list_signal_agents to find valid IDs. This adds meaningful context beyond the raw schema definition (string, minLength 1), but it does not elaborate on ID format or any edge cases.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Get dashboard metrics for a signal agent' and enumerates specific metrics (total signals, last-24h signals, leads created, posts watched, priority breakdown). This is a precise verb+resource statement and the metric list clearly distinguishes it from related tools like campaignstack_get_signal_agent or campaignstack_list_signal_agents.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool (when dashboard metrics for a signal agent are needed) and gives an explicit cross-reference: 'Use campaignstack_list_signal_agents to find agent IDs.' However, it does not explicitly state alternatives or exclusions relative to other 'get' tools, such as when not to use it vs campaignstack_get_signal_agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workflowA
Read-onlyIdempotent
Inspect

Get a workflow by ID with all nodes (type, label, config, position, execution target) and edges, plus a sequence projection: lanes of the steps the user sees (Connect, First message, Follow-up N, Email N) with their knobs and memberNodeIds, computed from the graph. Use it to describe the workflow the way the user reads it and to find which node ids a step owns; residualNodeIds lists nodes that belong to no known step. If the workflow is not found, use campaignstack_list_workflows to find valid workflow IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflowIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond annotations by disclosing that the sequence projection is 'computed from the graph', explaining the residualNodeIds semantics, and signaling not-found behavior rather than an exception.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences with zero waste: the first front-loads the core action and return shape, the second gives usage scenarios, and the third handles the error case. Every sentence earns its place and the most important information comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema, the description compensates by enumerating the return contents (nodes with their fields, edges, lanes, knobs, memberNodeIds, residualNodeIds) and the not-found fallback. Safety is covered by annotations. Minor gaps remain, such as ID format and whether residualNodeIds is always present, but for a single-parameter read tool this is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does clarify that workflowId identifies the workflow being fetched and directs the agent to campaignstack_list_workflows as a source of valid IDs. However, the parameter meaning is largely self-evident from its name and the first sentence, and no format, scope, or validity detail about the ID is added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Get a workflow by ID') and enumerates exactly what is returned: nodes with fields (type, label, config, position, execution target), edges, and a computed sequence projection with lanes, knobs, and memberNodeIds. This rich detail clearly distinguishes it from siblings like campaignstack_get_workflow_stats and campaignstack_get_workflow_node_types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states explicit use cases ('Use it to describe the workflow the way the user reads it and to find which node ids a step owns') and gives a named alternative with a triggering condition ('If the workflow is not found, use campaignstack_list_workflows to find valid workflow IDs'). The agent knows exactly when to call this tool and how to recover from failure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workflow_node_typesA
Read-onlyIdempotent
Inspect

Returns the complete vocabulary of workflow node types available for building automation graphs. For each node type includes: nodeType key, label, description, configHint (exact TypeScript-style config shape), a concrete example node, exit handles for branching nodes, and credit cost per execution. Also returns graphShape documentation (how to structure nodes/edges) and a minimal end-to-end example graph. Use this before calling campaignstack_create_workflow to ensure you author a valid graph.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is read-only, idempotent, and non-destructive. The description adds useful behavioral context by disclosing that the tool returns graphShape documentation, node type details, config hints, example graphs, and credit costs, and by framing it as a prerequisite for authoring valid workflows. No hidden side effects or contradictions are present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. The first sentence states the core purpose, the second enumerates the returned data in a compact list-like structure, and the third gives a concrete usage directive. Every sentence earns its place and the most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter reference tool with no output schema, the description is remarkably complete: it explains what is returned, names the main fields, describes graphShape documentation, and ties the tool to the downstream create_workflow operation. An agent has enough information to invoke it correctly and interpret its purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, so the description does not need to explain parameter meanings. The baseline for a zero-parameter tool is 4, and the description appropriately focuses on the output rather than inventing parameter semantics that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it 'returns the complete vocabulary of workflow node types available for building automation graphs.' It also enumerates the exact contents of the response, making it unmistakable that this is a metadata/reference tool rather than a tool that creates or modifies workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: 'Use this before calling campaignstack_create_workflow to ensure you author a valid graph.' This tells the agent when this tool is relevant, but it does not explicitly name alternatives or state when not to use it relative to sibling tools like get_workflow or list_workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workflow_statsA
Read-onlyIdempotent
Inspect

Get real-time execution statistics for a workflow. Returns per-node lead counts (waiting, processing, completed, failed), edge traversal counts, and paused action types. Use campaignstack_get_workflow to get the workflow structure first.

ParametersJSON Schema
NameRequiredDescriptionDefault
workflowIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds behavioral value by specifying the live nature of the data ('real-time') and detailing exactly what statistics are returned, going beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core purpose and return payload are front-loaded, and the sibling-tool usage note is placed second. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read-only tool with no output schema, the description explains the input context, the prerequisite call, and the main return categories. It stops short of describing the exact response shape or error behavior, but for this level of complexity the coverage is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It refers to 'a workflow' and points to get_workflow for structure, allowing an agent to infer that workflowId is the workflow identifier, but it never explicitly describes the parameter or explains where to obtain the ID. This is adequate but not fully explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get real-time execution statistics for a workflow.' It enumerates the exact return categories (per-node lead counts, edge traversal counts, paused action types), which clearly separates it from campaignstack_get_workflow, the structure-fetching sibling it names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly instructs the agent to use campaignstack_get_workflow first, establishing a clear ordering and implying this tool is for stats rather than structure. However, it doesn't explicitly state when not to use it or compare it to other potentially similar stats-related siblings like get_node_activity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workspaceA
Read-onlyIdempotent
Inspect

Get workspace details including name, company info, industry, and settings. The workspaceId is returned by campaignstack_whoami.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds some context about returned contents and ID provenance, but it does not disclose additional behavioral details such as auth requirements or scope constraints. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states what the tool returns, and the second provides the crucial ID source. Information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter read-only tool with no output schema, the description is complete: it names the return content, identifies the required parameter, and explains how to obtain that parameter. Annotations cover side-effect safety, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does so by telling the agent exactly where to obtain workspaceId — from campaignstack_whoami — which adds practical meaning beyond the bare string parameter in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pairing ('Get workspace details') and enumerates meaningful contents: name, company info, industry, and settings. This distinguishes it from sibling workspace-specific getters like get_workspace_billing, get_workspace_branding, get_workspace_metrics, and get_workspace_voice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear prerequisite by stating that workspaceId is returned by campaignstack_whoami. However, it does not explicitly discuss when to choose this tool over its workspace-related siblings or mention any exclusions, so the usage guidance is mostly implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workspace_billingA
Read-onlyIdempotent
Inspect

Get billing information for a workspace: plan (free/paid), billing cycle, workspace status, and Stripe subscription details (period start/end). Use campaignstack_get_credit_balance to see credit usage.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description only needs to add useful context. It adds the returned data categories, but no additional behavioral caveats such as authentication nuances or rate limits, landing at the baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The main purpose is front-loaded, followed immediately by a helpful sibling pointer, and nothing in the description repeats schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, one-parameter, read-only tool with strong annotations and a self-documenting schema, the description supplies the missing return-field detail and a relevant alternative tool. An agent has enough information to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, workspaceId, is fully documented in the schema with 100% coverage, including the user-key vs workspace-key binding note. The main description does not add parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get billing information for a workspace,' then enumerates concrete return fields (plan, billing cycle, workspace status, Stripe subscription period). This makes it clearly distinct from sibling tools such as campaignstack_get_workspace or campaignstack_get_workspace_metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence gives an explicit alternative: 'Use campaignstack_get_credit_balance to see credit usage,' which prevents misuse for a related task. It does not explicitly exclude other siblings, but the billing-specific field list provides enough context for when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workspace_brandingA
Read-onlyIdempotent
Inspect

Get a workspace's branding (logo presence, brand name, accent color, powered-by toggle): both the stored values and the fully-resolved branding with CampaignStack defaults filled. Branding is applied only to client-facing artifacts like shared reports. Use campaignstack_update_workspace_branding to change values.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description adds genuinely behavioral context beyond them: the dual stored-vs-resolved output with defaults filled in, and the application scope restriction. This helps the agent interpret results correctly and is consistent with the read-only annotation, so no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, no filler, with the core action front-loaded and the return contents immediately following. The second sentence (scope of branding application) and third sentence (pointer to the update tool) each earn their place and add decision-relevant information rather than restating the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with strong annotations and no output schema, the description covers the key decision points: what is returned, the stored-versus-resolved nuance, where branding applies, and which sibling performs writes. The only real gap is the unresolved semantics of workspaceId being optional, and the absence of any return-format detail, though no output schema exists to lean on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions workspaceId, so the description does not compensate for the missing schema documentation as the rubric prefers. However, the single parameter is a plainly named string ID whose meaning is self-evident and implied by the description's subject ('a workspace's branding'), and there are no enums or nested objects; the one notable gap is that required=0 (optional workspaceId) is never clarified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Get a workspace's branding') and enumerates the exact fields returned (logo presence, brand name, accent color, powered-by toggle), so an agent knows precisely what to expect. It further distinguishes the two output modes — stored values versus fully-resolved values with CampaignStack defaults — and explicitly separates this read tool from the update sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description names the mutation alternative explicitly ('Use campaignstack_update_workspace_branding to change values') and gives the switching condition, which is precisely the guidance an agent needs. It adds useful scope context by noting branding applies only to client-facing artifacts like shared reports, though it does not address when to prefer this over other get_* workspace siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workspace_metricsA
Read-onlyIdempotent
Inspect

Get workspace-level metrics: latest snapshot plus a time-series for the requested date range. Includes total campaigns, active campaigns, leads added/contacted/converted today, and the top campaign. Use campaignstack_get_campaign_metrics for per-campaign detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of calendar days to include in the range (default 30, max 90)
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is established. The description adds useful context about what the response contains (latest snapshot, time-series, specific metrics), but it does not disclose response shape, pagination, authentication requirements, or other behavioral details. With annotations covering safety, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler: it front-loads the verb and resource, states the return composition, and provides the alternative tool. Every sentence earns its place, and the most important scoping information comes first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is no output schema, the description does a good job of summarizing return contents in prose. It covers purpose, metric categories, date range behavior, and the relevant sibling. It could be slightly more explicit about the exact response shape or how the snapshot relates to the time-series, but it is sufficient for a read-only metrics tool with fully documented parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both 'days' and 'workspaceId' are already documented in the schema. The description only echoes the date-range concept ('requested date range') and adds no new parameter-level meaning beyond that, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get workspace-level metrics') and enumerates the actual contents returned, including snapshot, time-series, campaign counts, lead counts, and top campaign. It also explicitly distinguishes itself from campaignstack_get_campaign_metrics, so an agent can tell them apart without inspecting schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states the tool's level of granularity (workspace-level) and explicitly points to campaignstack_get_campaign_metrics when per-campaign detail is needed. This gives the agent a concrete routing decision between two otherwise similar metrics tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_get_workspace_voiceA
Read-onlyIdempotent
Inspect

Returns the brand voice & tone guide for a workspace's default LinkedIn account. Use this to understand the writing style before generating content drafts. Returns null defaultAccountVoice if not configured.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds meaningful behavioral detail beyond annotations by stating that the tool 'Returns null defaultAccountVoice if not configured', which is exactly the kind of edge-case behavior an agent needs to handle gracefully.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The core function is stated first, the intended use case is provided in the second sentence, and the null-return edge case is included compactly. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and clear annotations, the description covers the essential behavioral contract: what it returns, when to use it, and the null-result condition. It does not describe the exact structure of the returned guide, but 'brand voice & tone guide' is sufficient for an agent to consume it as writing-style guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, workspaceId, is fully documented in the schema with a clear description including the note about workspace keys being bound. The tool description adds no additional parameter-level semantics, but with 100% schema coverage the schema already carries the necessary information. This matches the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb ('Returns'), the resource ('brand voice & tone guide'), and the scope ('a workspace's default LinkedIn account'). It also distinguishes this from related voice tools by focusing on the workspace-level default account rather than conversation-level voices. The additional context about using it before generating content drafts reinforces its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool ('before generating content drafts'). It does not explicitly name alternatives or state when not to use it, but the context is clear enough that an agent can identify this as the pre-writing style lookup step. It could be stronger with a direct reference to sibling voice tools like get_conversation_voice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_import_apollo_listAInspect

Import leads from an Apollo contact list into CampaignStack. Fetches contacts from the specified Apollo list (up to 50,000 records across 500 pages) and creates or merges leads. Deduplicates by email and LinkedIn URL. Optionally filter by campaign ICP with onlyMatchingIcp: true. For large lists this runs asynchronously. Use campaignstack_get_apollo_import_progress to check status. Use campaignstack_list_apollo_sources to find valid listId values.

ParametersJSON Schema
NameRequiredDescriptionDefault
listIdYes
listNameNoDisplay name for the Apollo list (for progress tracking)
listCountNoExpected total contact count (for progress display)
campaignIdNoCampaign ID to filter by ICP (requires onlyMatchingIcp: true)
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
onlyMatchingIcpNoImport only contacts matching the campaign ICP

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say this is not read-only, not idempotent, not destructive, and open-world; the description adds genuinely useful behavior: deduplication by email and LinkedIn URL, create-or-merge semantics, a 50,000-record/500-page ceiling, optional ICP filtering, and asynchronous execution for large lists. This is substantial context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose first, then scale/dedup behavior, then filtering, then async follow-up. Every sentence carries operational value and no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating import tool with no output schema, the description covers prerequisite (listId via list_apollo_sources), behavior, and follow-up (get_apollo_import_progress). The main gap is the immediate return semantics and the precise threshold for asynchronous execution, but the provided guidance is sufficient for an agent to invoke and monitor the operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents 5 of 6 parameters (83% coverage), so the baseline is 3. The description adds meaning by telling agents that listId values come from campaignstack_list_apollo_sources and that onlyMatchingIcp gates the ICP filter, going beyond the schema's basic field descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with a specific verb and resource: 'Import leads from an Apollo contact list into CampaignStack.' It distinguishes itself from import siblings by naming the Apollo source, the deduplication keys, and the companion tools for progress and source lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context: use valid Apollo listIds, filter by ICP with onlyMatchingIcp, and monitor progress via campaignstack_get_apollo_import_progress. It does not explicitly state when to choose this over campaignstack_import_leads_csv or campaignstack_import_external_leads, but the Apollo-specific wording makes the intended use evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_import_external_leadsA
Idempotent
Inspect

Import every lead of an external provider source into CampaignStack (for Apollo use campaignstack_import_apollo_list). Provenance differs by provider: instantly (a data vendor) lands in the shared lead pool; hubspot (the tenant's own CRM) lands in workspace-scoped private leads. sourceKind picks between a provider lead list, a provider campaign (instantly only), or the whole portal (hubspot only, sourceId "portal"); ids come from campaignstack_list_external_lead_lists / campaignstack_list_external_sequences. Leads are deduplicated by email and LinkedIn URL, available fields (title, company, phone, location) are mapped, and an optional campaignId lands the leads in that campaign's default lead list. Long imports keep running server-side; poll campaignstack_get_external_import_progress for status. Free: no CampaignStack credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesIntegration provider to import from.
sourceIdYesProvider-side source id (from campaignstack_list_external_lead_lists or campaignstack_list_external_sequences). Pass "portal" for sourceKind portal.
campaignIdNoOptional CampaignStack campaign whose default lead list receives the imported leads.
sourceKindYesWhether sourceId is a provider lead list, a provider campaign (instantly only), or the whole portal (hubspot only: every contact).
sourceNameNoDisplay name for progress tracking.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond annotations: deduplication by email and LinkedIn URL, field mapping, asynchronous long-running imports with a progress-polling companion tool, provider-specific provenance, optional campaign assignment, and the fact that no CampaignStack credits are consumed. This complements the annotations rather than contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, alternative routing, provenance, source identification, deduplication, mapping, campaign targeting, async behavior, and cost are all covered with no filler. The structure front-loads purpose and then flows logically into usage details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is highly complete for a multi-provider, multi-source-kind import tool. It covers provenance, source ID discovery, deduplication, mapping, campaign assignment, async progress, and cost. However, since there is no output schema, it would be slightly stronger if it explicitly stated the immediate return value and how to use it with campaignstack_get_external_import_progress.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though schema coverage is 100%, the description adds important meaning: provider-specific constraints on sourceKind, the special sourceId value 'portal', which field values are mapped, and the effect of campaignId. This turns otherwise abstract enum choices into actionable semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Import every lead of an external provider source into CampaignStack' and immediately distinguishes the Apollo case by naming campaignstack_import_apollo_list. This makes the tool's purpose unmistakable and separates it from its closest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing guidance: Apollo users should use a different tool, instantly-imports land in the shared lead pool, hubspot-imports land in private workspace-scoped leads, and sourceKind determines whether sourceId refers to a list, campaign, or portal. It also points to the exact listing tools for valid source IDs, which is strong practical guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_import_leads_csvAInspect

Import leads from CSV data. Provide raw CSV content and optional column mapping. If no mapping is provided, columns are auto-mapped based on header names. After import, use campaignstack_search_leads to verify imported leads, or campaignstack_add_leads_to_list to add them to a campaign.

ParametersJSON Schema
NameRequiredDescriptionDefault
csvDataYes
mappingNo
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already indicating this is not read-only, not idempotent, and not destructive, the description adds useful context about auto-mapping based on header names. It does not disclose duplicate handling, required CSV columns, or result/error behavior, but the annotations carry the main safety profile, so a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no wasted words. The primary purpose is front-loaded, followed by input guidance and then concrete next steps. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a CSV import tool with three parameters and no output schema, the description covers the input, mapping behavior, and post-import verification steps. It is missing return-value details and specifics about mapping keys/values, but the provided workflow guidance makes it reasonably complete for an agent to invoke safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description must compensate. It meaningfully explains csvData as raw CSV content and mapping as optional column mapping, and clarifies the auto-mapping fallback. It does not fully specify the structure of the mapping object, but it adds substantial value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Import leads from CSV data') with a clear resource ('leads') and source format ('CSV'). It distinguishes the tool from sibling import tools like campaignstack_import_apollo_list by making the CSV input explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: provide raw CSV content and optional mapping, with auto-mapping behavior when mapping is absent. It also names follow-up tools (campaignstack_search_leads, campaignstack_add_leads_to_list), providing a workflow. It does not explicitly contrast this tool with other import alternatives, 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.

campaignstack_invite_memberAInspect

Invite a user to the workspace by email (role 'member' only; admin invitations require the workspace settings UI; the inviter is the workspace owner). An invitation email is sent automatically. The invitation expires after 7 days. Use campaignstack_list_invitations to check pending invitations.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesOnly "member" invitations can be created via MCP
emailYes
workspaceIdYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only indicate this is a mutating, non-idempotent action. The description adds meaningful behavioral context: an invitation email is sent automatically, invitations expire after 7 days, and the inviter must be the workspace owner. It doesn't cover failure modes or response format, but it provides solid transparency for the core behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise, information-dense sentences with no filler. The core purpose is front-loaded, followed by role restrictions, side effects, expiration, and a pointer to the relevant sibling tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the action, role constraint, inviter requirement, automatic email, expiration, and how to check invitations. Without an output schema, this is strong contextual coverage, though it could mention duplicate-invite or failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description must compensate. It adds meaning for 'email' by explaining the invitation is sent by email, and reinforces the 'role' constraint by stating member-only. The 'workspaceId' is not explicitly described, but the parameter name is self-explanatory in context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Invite a user to the workspace by email,' and identifies the specific resource and scope. It explicitly distinguishes this tool from admin invitations and from the sibling list_invitations tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit conditions for use: only 'member' role invitations are allowed, admin invitations require the workspace settings UI, and pending invitations can be checked via campaignstack_list_invitations. This leaves no ambiguity about when to use this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_like_postAInspect

Like a lead's most recent post to warm the relationship through engagement. platform is required (currently "linkedin"). Target can be specified as a profileUrl (LinkedIn profile URL) or a leadId (resolved server-side). If only one LinkedIn account is connected to the workspace it is used automatically; if multiple exist, specify accountId (use campaignstack_list_accounts to find it). Subject to daily post_like budget and business hours gates unless bypassed. When true, bypasses ALL LinkedIn safety limits (daily budget, weekly caps, business hours, account status checks). ⚠️ WARNING: This disables all protections that prevent LinkedIn account restrictions. Use only when you understand the risks and accept that the account may be flagged or restricted by LinkedIn.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond annotations by warning about daily post_like budgets, business hours gates, and the fact that bypassing 'disables ALL LinkedIn safety limits.' It explicitly discloses the risk of account restriction or flagging, which is essential for an agent to make a risk-aware decision.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose, then logically moves to target resolution, account selection, and finally a prominent risk warning. Every sentence carries useful information, and the warning is appropriately emphasized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The main gap is a structural inconsistency: the input schema declares zero properties while the description names several required/optional inputs. This could confuse an agent about how to invoke the tool. The return value/output is not mentioned, but the absence of an output schema reduces that concern.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Even though the input schema has zero parameters, the description explains the key inputs in prose: platform, profileUrl, leadId, and accountId, plus the bypass behavior. It earns the baseline 4 for zero-param schemas but loses a point because exact parameter names and the bypass flag name are not formally specified, and the prose conflicts with the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Like a lead's most recent post to warm the relationship through engagement.' It clearly distinguishes this from sibling tools like comment_on_post or send_message by stating the interaction type and intent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides strong context on when to use the tool and how to select the correct target/account, including the current platform constraint and a pointer to campaignstack_list_accounts for multi-account workspaces. It does not explicitly name alternative tools or state when not to use this tool, but the use case is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_accountsA
Read-onlyIdempotent
Inspect

List accounts connected to a workspace. Returns LinkedIn and Google accounts with a platform field. Optionally filter by platform ('linkedin' or 'google'). LinkedIn accounts include today's budget usage; Google accounts include email and status.

ParametersJSON Schema
NameRequiredDescriptionDefault
platformNoFilter by platform. Omit to return all accounts.
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation as read-only, idempotent, and non-destructive. The description adds behavioral context beyond that by specifying return shape differences between LinkedIn and Google accounts, including budget usage, email, and status. This helps the agent know what to expect from the response.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences with no filler. It front-loads the core behavior, then the optional filter, then the return-value distinctions. Every sentence delivers useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only two parameters and clear annotations, the description covers the main usage and return expectations. There is no output schema, so the mention of platform field and per-platform details is valuable. It does not address pagination or error behavior, but that is not critical for a simple read-only list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema documents the platform parameter with its enum and omission behavior, and the description reinforces this with concrete examples of 'linkedin' and 'google'. The required workspaceId has no description in the schema, and the description only implies it through 'workspace', which is minimal but adequate given the parameter name is self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List accounts connected to a workspace') and clearly identifies the resource as LinkedIn and Google accounts with a platform field. This is distinct from sibling tools like list_ad_accounts, which focuses on ad accounts, and get_account, which suggests a single account fetch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: to retrieve accounts for a workspace, optionally filtering by platform. However, it does not explicitly state when not to use it or mention alternatives such as list_ad_accounts or list_external_email_accounts, leaving some routing to the agent's inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_ai_suggestionsA
Read-onlyIdempotent
Inspect

List the latest AI-generated content post suggestions (draft posts tagged 'ai-generated') for a workspace. Returns up to 3 of the most recent AI drafts with author info and LinkedIn extension data. Use campaignstack_update_content_post to edit a suggestion, then campaignstack_schedule_content_post or campaignstack_submit_content_for_approval to publish it.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false). The description adds behavioral value beyond that: the result cap ('up to 3 of the most recent'), the return payload composition (author info, LinkedIn extension data), and the inclusion filter (drafts tagged 'ai-generated'). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste: purpose and scope, return contract, then next-step routing. The most decision-relevant information is front-loaded, and the workflow sentence earns its place by guiding downstream tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with one optional parameter, high schema coverage, and no output schema, the description adequately covers the return shape (up to 3 drafts, author info, LinkedIn data) and the follow-up workflow. Nothing critical 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% — workspaceId is already documented in the schema ('Workspace ID (required for user keys; workspace keys are bound)'). The description only echoes 'for a workspace' and adds no new parameter semantics, so the high-coverage baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List the latest AI-generated content post suggestions' with a clarifying parenthetical filter ('draft posts tagged ai-generated'). The scope is precise enough to distinguish it from campaignstack_list_content_posts (all posts) and campaignstack_get_content_post (single post) without inspecting either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear workflow: list suggestions, edit via campaignstack_update_content_post, then route to schedule_content_post or submit_content_for_approval. This firmly positions the tool as the entry point of the AI-suggestion lifecycle, but it never explicitly contrasts it with list_content_posts or states when-not-to-use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_apollo_sourcesA
Read-only
Inspect

List Apollo lists (labels) available in the connected Apollo account. Returns each list's id, name, and estimated contact count. Use the returned id values with campaignstack_import_apollo_list to import contacts. Requires a connected Apollo integration. Use campaignstack_connect_apollo first if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: it operates on the connected Apollo account and returns id, name, and estimated contact count. It does not mention pagination or error behavior, but those are minor for a read-only list operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each earning its place: what it does, what it returns, how to use the results, and what prerequisite might need handling. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple optional-parameter read operation with no output schema, the description is fully sufficient. It covers operation, source, return fields, prerequisite, and downstream consumer. The workspaceId nuance is already handled by the input schema, so nothing an agent needs is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the only parameter, workspaceId, is already described with its conditional requirement ('required for user keys; workspace keys are bound'). The description adds no parameter-level details, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List Apollo lists (labels) available in the connected Apollo account.' This clearly distinguishes the tool from generic list_lead_lists or list_external_lead_lists siblings, and the returned fields are named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives actionable guidance: requires a connected Apollo integration, tells the agent to call campaignstack_connect_apollo first if needed, and routes returned id values to campaignstack_import_apollo_list. It lacks an explicit 'do not use when...' contrast with sibling tools, but the prerequisite and downstream step are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_automationsA
Read-onlyIdempotent
Inspect

List scheduled automations for a campaign. Shows automation name, schedule, enabled status, and last run outcome.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds meaningful context beyond those annotations by specifying exactly what information is shown: automation name, schedule, enabled status, and last run outcome. This is especially valuable since there is no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The first sentence states the purpose, and the second lists the output fields. Everything included earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple: one required parameter, read-only, safe, and idempotent. The description covers the output fields despite the missing output schema. It does not mention pagination or empty-result behavior, but for a straightforward list operation the provided context is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does tie the single parameter to the campaign by saying 'for a campaign', but it does not explain the format or origin of campaignId beyond the schema's minLength constraint. This is adequate but leaves a gap for an agent unfamiliar with the platform.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and a specific resource ('scheduled automations for a campaign'), and it names the key output fields. It is clear about what the tool returns, though it does not explicitly differentiate itself from nearby siblings like campaignstack_get_automation_jobs or campaignstack_list_workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies when to use the tool: when you need to see a campaign's scheduled automations and their status. It does not mention alternatives or exclusions, but the scoping to a campaign and the read-only listing purpose provide enough contextual guidance for most agents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_campaignsA
Read-onlyIdempotent
Inspect

List campaigns in a workspace. Supports cursor-based pagination. Archived campaigns are hidden unless includeArchived is true. Use the returned campaignId values with campaignstack_get_campaign, campaignstack_list_workflows, or campaignstack_list_lead_lists.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
includeArchivedNoInclude archived campaigns. Off by default, so archived campaigns are hidden. Turn it on to find one you want to unarchive.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation read-only, idempotent, and non-destructive. The description adds valuable behavior beyond that: archived campaigns are hidden by default, and pagination is cursor-based. This helps set expectations for what the call returns and how to page through results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with no filler. It front-loads the core action, then adds pagination, archive behavior, and downstream integration guidance. Every sentence contributes actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is strong for a simple read-only list operation: it states scope, pagination, archive behavior, and how to use returned campaignIds. It does not detail the full response shape or pagination termination, but given the annotations and schema coverage, it is sufficiently complete for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 50% schema description coverage, the description compensates somewhat by clarifying cursor-based pagination and the archived-campaign default behavior. The schema already covers workspaceId and includeArchived with descriptions, so the added value is concentrated on cursor and default filtering.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific operation 'List campaigns in a workspace', naming the resource and scope. It also differentiates this list tool from related siblings by mentioning that returned campaignId values feed into campaignstack_get_campaign, campaignstack_list_workflows, and campaignstack_list_lead_lists, helping an agent understand its role in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: this is the tool for listing campaigns, supports cursor pagination, and explains how archived campaigns are treated. It does not explicitly state when to avoid this tool or name direct alternatives, but the downstream guidance about using returned campaignIds with related tools provides useful routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_companiesA
Read-onlyIdempotent
Inspect

List companies linked to a workspace. Returns company records with workspace metadata (tags, notes, addedAt). Supports cursor-based pagination. Use the returned companyId values with campaignstack_get_company.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. Beyond that, the description adds useful behavioral detail: it returns company records with workspace metadata (tags, notes, addedAt) and supports cursor-based pagination. It does not mention edge behavior such as omitted workspaceId, but that nuance is present in the schema, so the added disclosure is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: purpose, return contents, pagination and next-step usage. There is no filler or redundancy, and the most important scoping statement is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no required parameters and no output schema, the description covers the essential context: what is listed, what fields are returned, how pagination works, and how to consume the returned companyIds. The schema fills in the remaining parameter constraints, so an agent has enough to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%; only workspaceId has an inline description. The description adds meaning to cursor via 'Supports cursor-based pagination' and clarifies workspaceId via 'linked to a workspace,' but it never explains the limit parameter beyond what the schema's name and constraints imply. This leaves a small but real semantic gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List companies linked to a workspace.' It also distinguishes the tool from the closely related campaignstack_get_company by directing the agent to feed returned companyId values into that tool. This makes the purpose unambiguous without needing to inspect sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use this tool: to enumerate companies linked to a workspace, with cursor-based pagination. It also gives a concrete downstream usage pointer to campaignstack_get_company. It does not explicitly state when not to use it or name alternatives, but the context is clear enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_company_employeesA
Read-onlyIdempotent
Inspect

List the employees stored for a company (shared leads tied to it), paginated. Returns name, title, headline, email and LinkedIn URL per employee. Populate or refresh the set with campaignstack_extract_company_employees.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
companyIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context by noting pagination and enumerating the returned fields (name, title, headline, email, LinkedIn URL). It also clarifies that employees are shared leads tied to a company, which is non-obvious from the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence states the action and scope, and the second adds return-field detail and a pointer to the population tool. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paginated list endpoint with read-only annotations and no output schema, the description covers the main retrieval contract: what is listed, how it is paginated, what fields are returned, and how to refresh the underlying data. It could have mentioned cursor semantics or ordering, but for this tool's complexity the coverage is strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate by explaining companyId, limit, and cursor. It only implies companyId via 'for a company' and pagination via 'paginated', but does not explain cursor continuation, default limit, or how parameters map to the listing behavior. The schema names are self-explanatory, but the description adds little parameter-level value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), resource ('employees stored for a company'), and scope ('shared leads tied to it'), making the tool's purpose immediately clear. It also differentiates the tool from nearby siblings such as campaignstack_list_company_employee_watches by emphasizing stored employee records rather than watches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent that this reads stored employees and explicitly points to campaignstack_extract_company_employees for populating or refreshing the set. It does not exhaustively list when not to use it, but the naming of the related extraction tool gives practical routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_company_employee_watchesA
Read-onlyIdempotent
Inspect

List the workspace's company employee watches with company name, state, why a paused watch is paused, and the last check. Related: campaignstack_create_company_employee_watch, campaignstack_pause_company_employee_watch.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoall
workspaceIdYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds useful context about scope and returned fields, but discloses no additional behavioral traits such as pagination, ordering, or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The action, scope, returned fields, and related tools are all stated efficiently and front-loaded, making it easy for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does list key returned fields, which helps. However, it omits the state filtering parameter and any notes on pagination or ordering, so an agent cannot fully understand the complete behavior without inspecting the schema and making inferences.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter documentation. It only maps 'workspace's' to workspaceId and says nothing about the state parameter, its enum values, or its default of 'all'. The schema helps, but the description itself fails to explain filtering semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb ('List') and a specific resource ('the workspace's company employee watches'), and enumerates the returned fields ('company name, state, why a paused watch is paused, and the last check'). This clearly differentiates it from related list tools such as list_company_employees or list_signal_watches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for reading company employee watches and references related create/pause tools, which gives lifecycle context. However, it does not explicitly state when to use this tool over other list_* alternatives, nor does it mention any exclusions or conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_company_signalsA
Read-onlyIdempotent
Inspect

List a company's signals (funding events, headcount growth/decline, follower spikes), newest first. Company signals boost the score of every lead at the company. Use campaignstack_get_company or campaignstack_list_companies to find company IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
companyIdYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context—results are newest first and signals affect lead scoring—but does not disclose response format or pagination. This is acceptable given the annotation coverage, but not exceptionally transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver the core function, the ordering, the business significance, and a pointer for finding the required parameter. It is front-loaded with the primary action and has no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list with one required parameter, the description is nearly complete: it states what is listed, in what order, why the signals matter, and how to obtain the company ID. The lack of an output schema is not a major gap because the signal types are enumerated in the first sentence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only narrative source for parameters. It compensates for the required companyId by explaining how to find company IDs via other tools. The optional limit parameter is not described, though its default/min/max are present in the schema and its meaning is fairly inferable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List'), a resource ('a company's signals'), and enumerates signal types (funding events, headcount growth/decline, follower spikes) plus the ordering ('newest first'). It implicitly distinguishes this from lead-level signal tools, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when this tool is relevant: company signals boost the score of every lead at the company. It also gives concrete prerequisite guidance by pointing to campaignstack_get_company or campaignstack_list_companies for finding company IDs, though it does not explicitly state when to prefer this over sibling list tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_competitor_watchesA
Read-onlyIdempotent
Inspect

Lists competitor watches for a workspace. Optionally filter by status (active/paused). Use campaignstack_get_competitor_watch to see post details for a specific watch.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoFilter by status. Omit to list all watches.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate that this is a read-only, idempotent, non-destructive operation, so the description does not need to restate safety. It adds useful filter semantics but does not disclose return format, pagination, or default ordering; with annotations covering the safety profile, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences contain the core purpose, the optional filter, and the pointer to the detail-level sibling tool. There is 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.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple filtered list operation with rich annotations and fully described parameters, the description is complete. The lack of an output schema is acceptable here because the agent is told exactly what the tool lists and how to filter it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are already well documented. The description's mention of the status filter reinforces but does not meaningfully extend the schema's own descriptions, which already explain that omitting status lists all watches.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states a specific verb ('Lists'), a specific resource ('competitor watches'), and a scope ('for a workspace'). It also distinguishes itself from the related retrieval tool campaignstack_get_competitor_watch, which fetches post details for a single watch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the sibling tool to use when a specific watch's details are needed, making the division of responsibility clear. It also communicates the optional status filter, so an agent knows when this listing tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_contact_finder_requestsA
Read-onlyIdempotent
Inspect

List the workspace's built-in Contact Finder requests, newest first, optionally filtered by status (queued, linked, submitted, completed, failed). Each row carries origin (workflow, mcp, manual), wantEmail/wantPhone, creditsReserved, creditsCharged once settled, the result summary and errorCode. Use it to see what is in flight or to audit what the finder charged; use campaignstack_get_contact_finder_request for one id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax rows to return, newest first (default 25, max 100).
statusNoOnly requests in this status (queued, linked, submitted, completed, failed).
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: filtering by status, row contents including origin, wantEmail/wantPhone, credit reservations/charges, and result summary/errorCode, plus the ordering guarantee.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not bloated. It front-loads the core action and ordering, then adds status options, row contents, and the sibling alternative in three sentences with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description's inventory of returned fields (origin, wantEmail/wantPhone, creditsReserved, creditsCharged, result summary, errorCode) fills that gap well. It also covers ordering, filtering, and when to use the sibling tool, making the definition complete for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters clearly. The description adds framing about status filtering and credits but does not materially expand on parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List'), a specific resource (the workspace's built-in Contact Finder requests), and the ordering ('newest first'). It also clearly distinguishes itself from the sibling campaignstack_get_contact_finder_request, which handles fetching a single request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states use cases: 'see what is in flight or to audit what the finder charged.' It also provides a direct alternative for the single-id case: 'use campaignstack_get_contact_finder_request for one id.' This gives an agent clear decision criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_content_calendarA
Read-onlyIdempotent
Inspect

List content posts in a date range for calendar view. Returns posts that are scheduled or published within the given timeframe. Timestamps are Unix milliseconds. Use with campaignstack_get_content_post for full post details.

ParametersJSON Schema
NameRequiredDescriptionDefault
endMsYes
startMsYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnly/idempotent/non-destructive behavior. The description adds the meaningful filter behavior ('scheduled or published' within the timeframe) and the Unix-millisecond timestamp convention, which 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: action, return semantics, timestamp units, and a companion-tool pointer. Front-loaded, no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity read-only list with no output schema, it tells the agent what is returned (scheduled/published posts in range) and routes to get_content_post for more detail. Pagination/ordering/limit behavior are not stated, but this is adequate for safe selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (only workspaceId described), so the description compensates by clarifying that startMs/endMs define the date range and are Unix milliseconds. It doesn't spell out boundary inclusivity or timezone handling, but it provides the key semantic context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Identifies a specific action ('List content posts in a date range') and a clear resource/scope ('calendar view'). It doesn't explicitly contrast itself with the sibling campaignstack_list_content_posts, which is the only thing keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is explicit: use it for calendar-style listing within a date range, and pair it with campaignstack_get_content_post when full details are needed. It does not name when-not-to-use alternatives like list_content_posts, but the calendar-view wording gives a clear use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_content_postsA
Read-onlyIdempotent
Inspect

Lists content posts for a workspace with optional filtering by status, platform, and tags. Tags filter uses OR logic (posts matching ANY of the provided tags are returned). Returns up to 'limit' posts (default 20, max 100) ordered by most recent first. Supports cursor-based pagination: pass the response's nextCursor back as 'cursor' to fetch the next page. Use campaignstack_get_content_post to retrieve full details including media URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
limitNo
cursorNoOpaque pagination cursor from a previous response's nextCursor
statusNo
platformNo
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation read-only, idempotent, and non-destructive. The description adds meaningful behavioral detail beyond that: tags use OR matching, results are ordered most recent first, and cursor-based pagination is supported by passing nextCursor back as cursor. This fully discloses how the list behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences with no filler: action and filters first, then tag semantics, pagination/limiting, then sibling routing. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still explains what is returned (up to limit posts, most recent first), how to paginate (nextCursor), and where to go for richer data (get_content_post). For a filtered list operation, this is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description had to compensate, and it does: it documents OR logic for tags, default/max for limit, and cursor mechanics. Status and platform are covered by schema enums, and workspaceId has a schema description. This is slightly short of complete because workspaceId auth nuance is left to the schema rather than reinforced in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise action and target: 'Lists content posts for a workspace with optional filtering by status, platform, and tags.' This is unambiguous and naturally distinguishes the tool from related operations like campaignstack_get_content_post and other list_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit routing: 'Use campaignstack_get_content_post to retrieve full details including media URLs.' It also tells the agent when the list form is appropriate via filter and pagination behavior, leaving no ambiguity about how to retrieve a page versus full post details.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_external_email_accountsA
Read-only
Inspect

List an external provider's sending mailboxes / email accounts (provider-parameterized; only apollo exposes mailboxes today, other providers return errorType unsupported_provider). Returns each account's id, email address, and active status. Apollo's add-to-sequence endpoint requires one of these ids as emailAccountId. Apollo requires a MASTER API key for this endpoint: a non-master key returns errorType master_key_required. Requires a connected integration for the provider (e.g. campaignstack_connect_apollo).

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesIntegration provider whose sending mailboxes to list.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses that only Apollo currently exposes mailboxes, that unsupported providers return errorType unsupported_provider, that non-MASTER keys return master_key_required, and the exact returned fields (id, email, active status). This gives the agent realistic error expectations and outcome details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence adds value: purpose, return shape, downstream use, auth requirement, and prerequisite are all covered in a compact paragraph with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with no output schema, the description covers what the caller gets back, the main failure modes, the credential requirement, and the integration prerequisite. Nothing an agent needs to decide whether to call it or interpret its result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameters are already documented. The description adds meaning to the provider parameter by stating which enum value actually works today and what happens with the other, which is valuable semantic information not inferable from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List an external provider's sending mailboxes / email accounts.' It disambiguates from sibling list tools (e.g., list_external_lead_lists, list_external_sequences) by stating it is provider-parameterized and naming the unsupported_provider error for non-Apollo providers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states prerequisites (connected integration, MASTER API key for Apollo) and a concrete use case: Apollo's add-to-sequence endpoint needs one of these ids as emailAccountId. It does not explicitly contrast with alternative list tools, but it makes the tool's niche clear enough for an agent to select it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_external_lead_listsA
Read-only
Inspect

List an external provider's lead lists (provider-parameterized: instantly, hubspot or clay). For clay, the lists are the Clay tables the user registered on the Integrations page (Clay's API cannot enumerate tables), returned without their webhook URLs. Returns each list's id and name. Use the id as listId with campaignstack_add_lead_to_external_list or in an integration:add_to_list workflow node. Requires a connected integration for the provider.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesIntegration provider whose lead lists to list.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and non-destructive; the description adds valuable context by disclosing the Clay-specific limitation that Clay's API cannot enumerate tables, so only registered tables are returned and webhook URLs are omitted. It also surfaces the connected-integration requirement as a behavioral precondition.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the operation and resource, then efficiently covers the Clay caveat, return fields, downstream usage, and prerequisite. Every sentence contributes substantive information without repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read-only list tool with no output schema, the description covers supported providers, return fields, Clay-specific behavior, downstream usage, and the authentication prerequisite. It does not describe error or pagination behavior, but those are minor gaps for this operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the provider enum and workspaceId explanation, so the schema carries the parameter documentation burden. The description reinforces the provider-parameterized nature and downstream listId usage, but does not add substantial parameter-level semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific operation ('List') and a specific resource ('external provider's lead lists'), names the supported providers, and specifies that the result contains each list's id and name. This clearly distinguishes it from the sibling campaignstack_list_lead_lists by making the external scope explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how the returned ids are consumed downstream via campaignstack_add_lead_to_external_list or an integration:add_to_list node, and it states the connected-integration prerequisite. It does not explicitly contrast this tool with campaignstack_list_lead_lists for internal lists, but the external scope and provider parameter make the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_external_sequencesA
Read-only
Inspect

List an external provider's sequences (provider-parameterized: apollo sequences, instantly campaigns; more providers extend the enum). Returns each sequence's id, name, and active status. Use the id as campaignId with campaignstack_add_lead_to_sequence or in an integration:add_to_sequence workflow node. Apollo also needs a sending mailbox: get one with campaignstack_list_external_email_accounts. Apollo requires a MASTER API key for sequence endpoints: a non-master key returns errorType master_key_required. Requires a connected integration for the provider (campaignstack_connect_apollo / campaignstack_connect_instantly).

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYesIntegration provider whose sequences to list.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, openWorldHint, non-destructive), the description discloses valuable behavioral traits: the return contract (id, name, active status), a specific failure mode (non-master Apollo key returns errorType master_key_required), and the prerequisite that a connected integration must exist. This is genuinely additive context an agent needs to handle errors and prerequisites correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence carries operational value: purpose, return shape, downstream usage, mailbox prerequisite, key-type error condition, and connection prerequisite. It is front-loaded with the core purpose and the later sentences build logically. Slightly long, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with two parameters, a read-only annotation set, and no output schema, this description is remarkably complete. It compensates for the missing output schema by naming the returned fields, covers error conditions, prerequisites, and downstream workflow integration, and the schema handles the remaining parameter semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (both provider and workspaceId are documented in the schema), so the baseline is 3. The description adds meaning by explaining that the provider enum is open-ended ('more providers extend the enum'), which is critical given the openWorldHint annotation, and clarifies the provider-parameterized behavior. This goes beyond what the schema alone communicates.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('List an external provider's sequences') and immediately scopes it with the provider parameterization (apollo sequences, instantly campaigns). It clearly differentiates from siblings like campaignstack_list_external_email_accounts and campaignstack_list_external_lead_lists by specifying exactly what is returned (sequence id, name, active status).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable context: it chains the id forward to campaignstack_add_lead_to_sequence or the integration:add_to_sequence workflow node, points to campaignstack_list_external_email_accounts for the Apollo mailbox prerequisite, and states the connected-integration requirement (campaignstack_connect_apollo / campaignstack_connect_instantly). It lacks an explicit 'when not to use' statement against alternatives, but the provided routing makes the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_icpsA
Read-onlyIdempotent
Inspect

List all ICP (Ideal Customer Profile) definitions for a campaign. Returns ICP IDs with criteria summary including target titles, industries, seniorities, and score threshold. Use the returned icpId values with campaignstack_get_icp_scores to view lead match scores, or campaignstack_trigger_icp_scoring to run scoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying the shape of the returned criteria summary (target titles, industries, seniorities, score threshold) and the intended follow-up actions. This is useful context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each earning its place: the first states the action, the second describes the return value, and the third provides downstream usage. Front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only list tool, the description covers purpose, return content, and follow-up tool usage. It does not mention pagination or error behavior, but the annotations cover safety and the schema is trivial, so the overall context is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain campaignId beyond the generic phrase 'for a campaign.' The parameter name is self-explanatory to some degree, but the description adds no semantics about how to obtain the ID, expected format, or behavior for missing/invalid values.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List all ICP (Ideal Customer Profile) definitions for a campaign.' It also clarifies the return payload (ICP IDs with criteria summary), and the downstream relationship to get_icp_scores and trigger_icp_scoring, making it distinguishable from related ICP tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context on what the tool returns and how to chain it with campaignstack_get_icp_scores and campaignstack_trigger_icp_scoring. However, it does not explicitly state when not to use this tool versus ICP create/update/delete tools, so it falls just short of full alternative-selection guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_inbox_conversationsA
Read-onlyIdempotent
Inspect

List inbox conversations across all LinkedIn accounts in the workspace. Returns up to 50 conversations sorted by most recent activity, with participant details, last message preview, read/unread status, and associated lead info. Each conversation includes a conversationRef { platform, id } used as the identifier for other inbox tools. Use unreadOnly: true to filter to unread threads only. Use identityFilter to restrict to specific LinkedIn account IDs (use campaignstack_list_accounts to find them). Use campaignstack_get_conversation to fetch full message history for a thread.

ParametersJSON Schema
NameRequiredDescriptionDefault
unreadOnlyNo
workspaceIdNo
identityFilterNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and idempotent, so no safety contradiction exists. The description adds meaningful behavioral context: a 50-conversation cap, sort order by most recent activity, returned fields, and the conversationRef structure used by other inbox tools. It also discloses that the tool spans all LinkedIn accounts unless filtered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, all dense and purposeful. The core action and scope appear first, followed by return details, identifier semantics, and filter/alternative guidance. No wasted words or redundant restatements of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description thoroughly covers return shape, limits, sorting, filters, and related tools. The only notable gap is the unexplained workspaceId parameter, which prevents full contextual completeness for agents needing to target a specific workspace.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for parameter meaning. It explains unreadOnly and identityFilter well, even pointing to campaignstack_list_accounts for identity values. However, workspaceId is never described, leaving one of three parameters undocumented and forcing the agent to infer its purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'List inbox conversations across all LinkedIn accounts in the workspace.' It clearly distinguishes this from siblings like campaignstack_get_conversation and campaignstack_get_inbox_unread_count by focusing on listing conversation summaries rather than fetching message history or counts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: use unreadOnly to filter unread threads, use identityFilter to restrict by LinkedIn account, and use campaignstack_get_conversation for full message history. This tells the agent when to use this tool versus a clear alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_integrationsA
Read-onlyIdempotent
Inspect

List connected integrations for a workspace (Apollo, Instantly, Clay). Returns provider, connection status, and last-tested timestamp. API keys and webhook secrets are never returned; only a boolean indicating they are set. Use campaignstack_connect_apollo or campaignstack_connect_instantly to add integrations.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond that by disclosing that API keys and webhook secrets are never returned and only a boolean indicator is provided, which is a critical trust and safety detail. It also states the exact returned fields, reducing ambiguity given the absence of an 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: it states the core purpose first, then the return contents, then the security guarantee, and finally the relevant sibling alternatives. Every sentence adds value and there is no redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter, the description is complete. It covers what is listed, what fields are returned, what sensitive data is excluded, and how to add integrations. No output schema exists, so the description appropriately supplies the return-value context the agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single optional workspaceId parameter is already well documented in the schema. The description does not add parameter-specific guidance, which is acceptable because the schema carries the full semantic burden for this parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List'), the resource ('connected integrations for a workspace'), and the scope ('Apollo, Instantly, Clay'). It also distinguishes itself from related connect/disconnect tools by focusing on listing rather than mutating integration state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the primary use case obvious: retrieving integration status for a workspace. It also explicitly directs the agent to campaignstack_connect_apollo or campaignstack_connect_instantly when the goal is to add an integration, providing useful routing guidance. It does not mention when not to use it or alternatives for disconnecting, but that is a minor gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_invitationsB
Read-onlyIdempotent
Inspect

List pending invitations for a workspace. Returns email, role, and invitation date.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYes

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds modest value by disclosing the return fields (email, role, invitation date), but it does not clarify behaviors like whether expired or already-accepted invitations are included, or pagination. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler. It efficiently covers action, resource, scope, and return fields. It could carry slightly more guidance without bloat, but it is appropriately sized for a simple listing operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, read-only tool with one parameter and full annotation coverage, the description is nearly complete: it states the resource, scope, and return values. Minor gaps include no mention of pagination/limits and no lifecycle context linking to invite_member or revoke_invitation, but these are not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. 'For a workspace' weakly contextualizes workspaceId, but it does not explain what a workspaceId is, how to discover it, or its format. The single parameter's name is self-explanatory, but the description adds barely more meaning than the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a specific resource ('pending invitations for a workspace'), and discloses the return fields (email, role, invitation date). This is clear and unambiguous, but it does not explicitly name or differentiate from siblings such as campaignstack_list_members or campaignstack_invite_member, leaving distinction to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given on when to use this tool versus alternatives. It does not mention that this complements invite_member/revoke_invitation or how it differs from list_members, so an agent must infer the appropriate context from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_lead_listsA
Read-onlyIdempotent
Inspect

List all lead lists in a campaign with lead count per list. Returns type (set or query) and source for each list. Use the returned leadListId values with campaignstack_get_lead_list or campaignstack_add_leads_to_list. Use campaignstack_list_campaigns to find valid campaign IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description only needs to add context beyond those. It does so by stating that the tool returns lead count, list type (set or query), and source for each list. It does not mention pagination or a full return schema, but that is a minor gap for a simple read-only enumeration.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences with the main function front-loaded, followed by return details and related-tool guidance. Every sentence earns its place, and there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read-only tool whose annotations already cover the safety profile, the description is complete: it states what is listed, what fields are returned, and how to obtain both campaignId and leadListId. The absence of pagination details is acceptable given the simple scope.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required campaignId parameter with 0% description coverage, so the description must compensate. It only indirectly defines the parameter by saying 'in a campaign' and by directing users to campaignstack_list_campaigns to find valid campaign IDs. This is helpful but lacks explicit format, examples, or a direct statement of what campaignId represents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List all lead lists in a campaign with lead count per list', clearly stating the verb, resource, and scope. It also specifies the returned attributes (type and source), and distinguishes this from related tools by anchoring it to a campaign and pointing to campaignstack_list_campaigns for IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit chaining guidance: 'Use the returned leadListId values with campaignstack_get_lead_list or campaignstack_add_leads_to_list' and 'Use campaignstack_list_campaigns to find valid campaign IDs.' It does not explicitly contrast this tool with siblings like campaignstack_list_external_lead_lists, but the campaign scoping and next-step routing provide clear usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_leads_at_nodeA
Read-onlyIdempotent
Inspect

List leads currently at a specific workflow node. Returns up to 100 leads with their name, headline, company, status, and timestamps. Entries with status 'cancelled' were terminated by the lead router (cancelReason: superseded_by_reply, superseded_by_newer, meeting_booked, stale_expired, workflow_disabled). Use campaignstack_get_workflow_stats to identify nodes of interest.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral details: the 100-lead cap, which fields are returned, and the special meaning of 'cancelled' status with specific cancel reasons. This adds value beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the core purpose, and every sentence adds useful information. The cancellation semantics are detailed but relevant and not bloated.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple single-parameter tool with read-only annotations and no output schema, the description is complete: it covers purpose, output shape, limits, special status semantics, and how to discover valid node IDs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates by explaining that the tool operates on a specific workflow node and directing users to campaignstack_get_workflow_stats to identify valid nodeId values. This gives practical meaning to the single undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: listing leads currently at a workflow node. It is clear in scope and mentions returned fields, though it does not explicitly distinguish itself from sibling tools like campaignstack_get_node_activity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context that this tool lists current leads at a node and provides guidance to use campaignstack_get_workflow_stats to find nodes of interest. It doesn't explicitly state when not to use this tool or name a direct alternative for similar listing behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_lead_signalsA
Read-onlyIdempotent
Inspect

List recent signals detected for a lead: job changes, engagement activity, and similar events. Signals are profile changes or engagement events that affect scoring. Sorted by detection time, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
leadIdYes
leadSourceNoglobal

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavioral context by defining what counts as a signal and stating the sort order ('Sorted by detection time, newest first'). This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The core action is front-loaded, followed by a concise definition of signals and the ordering guarantee. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is adequate for basic selection and invocation, but with 4 parameters, 0% schema descriptions, and no output schema, it leaves important operational details unaddressed: pagination via cursor, the meaning of leadSource, and the response shape. An agent could call the tool correctly for the common case but lacks guidance for edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to compensate, but it only indirectly clarifies leadId via 'for a lead' and 'recent' via the default limit. Cursor and leadSource are left unexplained, and their semantics are not inferable from the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: 'List recent signals detected for a lead.' It gives concrete examples ('job changes, engagement activity') and notes the ordering ('newest first'), making the tool's purpose unambiguous and distinct from broader signal or lead tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when a lead's recent profile changes or engagement events are needed, especially those affecting scoring. It does not explicitly name alternatives or exclusions, but the scope is clear enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_manual_exclusion_urlsA
Read-onlyIdempotent
Inspect

List the LinkedIn profile URLs stored in a manual exclusion entry. Use campaignstack_get_exclusions to find exclusionId values. Returns importedLeadId values usable with campaignstack_remove_manual_exclusion_url.

ParametersJSON Schema
NameRequiredDescriptionDefault
exclusionIdYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds value beyond this by disclosing the return payload semantics (importedLeadId values) and their downstream usability for removal. There is no contradiction with annotations. It does not cover edge cases like empty exclusion entries or error behavior, but with annotations carrying the safety burden, the added behavioral context is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a distinct job: core purpose, prerequisite for the input, and output routing. The purpose is front-loaded and every sentence earns its place. No wasted words, no repetition of the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter, read-only tool with no output schema, the description covers what it does, how to obtain the required input, and what the returned values are useful for. The absence of an output schema is partially mitigated by the explicit mention of importedLeadId values. Minor gaps include no detail on the full response shape and no empty-entry behavior, but these are not critical for calling the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%: exclusionId has no schema description beyond type/minLength, while workspaceId is already documented in the schema. The description compensates for the undocumented exclusionId by telling the agent where to find its value ('Use campaignstack_get_exclusions to find exclusionId values'). This adds real semantic meaning beyond the bare string type in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and an unambiguous resource ('LinkedIn profile URLs stored in a manual exclusion entry'). This distinguishes it from siblings like campaignstack_get_exclusions (which finds exclusion entries/IDs) and campaignstack_remove_manual_exclusion_url (which removes URLs). The scope is precise and an agent can tell what this tool does 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit workflow sequencing: 'Use campaignstack_get_exclusions to find exclusionId values' tells the agent which tool to call first to obtain the required parameter, and 'Returns importedLeadId values usable with campaignstack_remove_manual_exclusion_url' routes the output to a downstream tool. It does not explicitly state when not to use this tool versus the many other list_* siblings, but the prerequisite and downstream guidance is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_membersA
Read-onlyIdempotent
Inspect

List all members of a workspace with their roles (owner, admin, member), names, and emails.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful context about the scope ('all members') and the exact data returned, which goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, tightly worded sentence that front-loads the action and resource, then lists the returned attributes. Every word contributes useful information with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one simple parameter, no output schema, and annotations covering read-only/idempotent behavior, the description provides sufficient detail: what the tool lists, for which workspace, and what fields the result contains. No critical information is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it does not explain workspaceId beyond the resource context. The parameter name is self-explanatory and the schema requires a non-empty string, so the meaning is inferable, but no additional guidance on format or how to obtain it is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a clear resource ('all members of a workspace'), and enumerates the returned fields (roles, names, emails). It fully distinguishes this tool from similarly named siblings like get_workspace and list_invitations because it uniquely targets member listing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is used when the agent needs to view workspace members and their roles/contact info. However, it does not explicitly state when to use this over other member-related tools (e.g., list_invitations, invite_member, update_member_role) or provide exclusion criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_notificationsA
Read-onlyIdempotent
Inspect

List notifications for a workspace. Returns paginated notifications most-recent first. Filter by type to see only specific notifications (e.g. pending_review, credits_exhausted, account_risk, reply_received). Use campaignstack_count_unread_notifications to get the unread badge count. Use campaignstack_mark_notification_read or campaignstack_mark_all_notifications_read to mark as read.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
limitNo
cursorNo
workspaceIdNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value beyond that by disclosing pagination behavior, most-recent-first ordering, and type filtering — useful behavioral context an agent needs to consume the result correctly. It doesn't detail cursor mechanics or response shape, but those are minor given the read-only context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: core purpose is front-loaded, then ordering/pagination behavior, then filter semantics with examples, then sibling routing. There is zero filler or repetition of schema/annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, idempotent list tool with no required parameters, the description is largely complete: it covers return behavior (paginated, most-recent first), filtering, and routes to the related count/mark tools. No output schema exists, but the description gives an adequate summary of what is returned. Minor gaps — how pagination continuation works (next cursor) and behavior when workspaceId is omitted — are not critical for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does clarify the `type` parameter's purpose with concrete examples (pending_review, credits_exhausted, account_risk, reply_received) and implies `cursor` via 'paginated'. However, `limit` (default 20, max 100) and `workspaceId` are not explained in prose — though the schema's default/minimum/maximum for limit partially self-documents that parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), resource ('notifications'), and scope ('for a workspace'), and adds behavioral specifics ('paginated', 'most-recent first'). It explicitly differentiates from sibling tools by naming count_unread_notifications (count vs. list) and the mark_* tools (mutating vs. read-only), so an agent can select it 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes to alternatives: 'Use campaignstack_count_unread_notifications to get the unread badge count' and 'Use campaignstack_mark_notification_read or campaignstack_mark_all_notifications_read to mark as read.' This tells the agent when NOT to use this tool, 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.

campaignstack_list_pending_reviewsA
Read-onlyIdempotent
Inspect

List pending workflow review actions requiring human approval. Returns entries with lead details (including leadLinkedInUrl), crafted content, aiReasoning, aiSources (which provided context the draft drew on, e.g. post, signal, experience, web; null for older drafts), conversationHistory (the prior thread with the lead, sender self/lead, null for cold opens), campaign/workflow context, and a reviewContext discriminated union: type "post_comment" includes commentText, postContent, postUrl, postAuthorName, postUnavailable (true when the post was deleted on LinkedIn) (when triggered by a post comment signal); type "campaign" for regular campaign workflow reviews; null when context cannot be determined. bookedMeeting (non-null when the calendar booking chain already booked a meeting from a link the lead sent) means the draft under review is that meeting's confirmation: the booking is done, rejecting the draft stops the message but never cancels the meeting. reviewTags marks priority items (e.g. meeting_booked); tagged entries are pinned at the top of the first page ahead of the FIFO queue - review them first. Use campaignstack_approve_review, campaignstack_reject_review, or campaignstack_edit_and_approve_review to act on entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
accountIdNoScope to drafts sent by one identity (linkedinAccounts id, from campaignstack_list_accounts). A filtered page may hold fewer than `limit` items; keep paging by cursor.
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only, idempotent, and non-destructive, and the description adds substantial behavioral context: FIFO ordering, pinned priority tags, null semantics for old drafts and cold opens, the reviewContext discriminated union, and the important caveat that rejecting a booked-meeting draft never cancels the meeting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense, and the purpose is front-loaded. Each sentence adds necessary detail about return fields, edge cases, or follow-up actions, though the single-paragraph format with many nested parentheticals is harder to scan than bulleted structure would be.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that there is no output schema, the description thoroughly documents the returned entries, the reviewContext union, null cases, priority ordering, and downstream action tools. For a list tool of moderate parameter complexity, this is nearly complete, with only minor reliance on parameter names for workspaceId and cursor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, covering only accountId, yet the description does not explain workspaceId, limit, or cursor semantics. It mentions 'first page' and FIFO ordering but provides no parameter-level guidance, so it does not compensate for the low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence uses a specific verb and resource: 'List pending workflow review actions requiring human approval.' This clearly separates it from the action-oriented siblings like approve_review, reject_review, and edit_and_approve_review.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells the agent to use this tool for listing pending reviews and explicitly names the sibling tools to act on entries. It also notes that tagged priority entries should be reviewed first. It stops short of explicitly contrasting with campaignstack_count_pending_reviews or stating when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_personasA
Read-onlyIdempotent
Inspect

List all personas for a campaign. Personas define buyer archetypes with pain points, goals, and objections. Use campaignstack_list_campaigns to find valid campaign IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral details beyond the fact that this is a read-only listing, but the annotation coverage lowers the burden and there is no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the core operation, a one-line domain clarification, and a pointer to the prerequisite tool. The key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only list tool, the description is nearly complete: it defines scope, gives the prerequisite lookup path, and annotations cover safety. It does not describe the result shape, but 'List all personas' strongly implies an array result and no output schema is provided.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema gives campaignId only as a string, so the description compensates by establishing that this must be a campaign ID and pointing to campaignstack_list_campaigns as the source of valid IDs. It does not explicitly map the parameter name, but with only one parameter the inference is unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('List all personas for a campaign') and adds domain context distinguishing personas from generic campaign data. It also names the sibling tool for fetching campaign IDs, reinforcing the scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs agents to use campaignstack_list_campaigns to find valid campaign IDs, which is a clear prerequisite. It lacks explicit exclusions for related persona tools such as get_persona, so it does not earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_phasesA
Read-onlyIdempotent
Inspect

List all phases for a campaign, sorted by order. Phases represent roadmap milestones with objectives and a phase type. Use campaignstack_list_campaigns to find valid campaign IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds useful behavioral context: it lists 'all' phases and returns them 'sorted by order.' However, it does not disclose pagination, error behavior, or what happens if the campaignId is invalid, leaving some transparency gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences each earn their place: the action, the sorting behavior, the semantic context, and the prerequisite lookup. The main purpose is front-loaded and there is no filler or redundant restating of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only list operation with one required parameter, the description is mostly complete: it defines scope, sorting, and how to find a valid input. Since there is no output schema, it could have given a bit more detail on the returned phase objects, but the phrase 'Phases represent roadmap milestones with objectives and a phase type' already hints at the expected content.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It ties the single campaignId parameter to 'for a campaign' and explicitly directs the agent to campaignstack_list_campaigns for valid IDs, which gives the parameter practical meaning beyond the bare string type in the schema. For a single self-explanatory parameter, this is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair: 'List all phases for a campaign,' and adds the sorting behavior. It also clarifies the domain concept of phases as roadmap milestones, which distinguishes this from simply listing other campaign-related entities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates when to use the tool: when you need all phases for a campaign. It also provides a concrete prerequisite by instructing the agent to use campaignstack_list_campaigns to find valid campaign IDs. It does not explicitly state when not to use alternative phase-related tools like campaignstack_get_phase, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_playbook_versionsA
Read-onlyIdempotent
Inspect

List playbook version snapshots for the workspace, newest first. A snapshot is taken automatically before every playbook write (regeneration, manual edit, or restore). Each row has _id, createdAt, replacedBy (what kind of write replaced it), and the full playbook text. Use campaignstack_revert_playbook to restore one.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this as read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond annotations: snapshot timing, ordering, row fields including _id, createdAt, replacedBy, and full playbook text. This gives the agent a solid understanding of what the operation returns and how snapshots relate to writes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly written sentences with no filler. The primary purpose and ordering are front-loaded, followed by snapshot lifecycle context, row schema, and a pointer to the relevant sibling tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation, the description covers the key contextual needs: what is returned, ordering, snapshot creation timing, and the related restore tool. No output schema exists, but the row fields are enumerated. Pagination or result limits are not mentioned, though this is a minor gap for a list endpoint.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for the single workspaceId parameter, including the note about user keys vs workspace keys. The description restates 'for the workspace' but does not add meaningful parameter-level detail beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'List playbook version snapshots for the workspace, newest first.' It distinguishes this from related tools like campaignstack_get_playbook and campaignstack_revert_playbook by focusing on version snapshots rather than the current playbook or restoration.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining when snapshots are created ('before every playbook write') and routes the agent to campaignstack_revert_playbook when restoration is needed. It doesn't explicitly state when not to use this tool versus alternatives, but the context is sufficiently clear for a listing tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_search_topicsA
Read-onlyIdempotent
Inspect

List all active LinkedIn search-watch topics across campaigns in a workspace. Returns each enabled topic search automation with the topic ID and the campaign it belongs to. Use this to see which topics are already being monitored before creating a new search watch. To get topics assigned to a specific campaign, use campaignstack_get_campaign_topics.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds genuine behavioral context beyond that: it only returns 'active'/'enabled' topics (filtering behavior) and discloses result contents (topic ID + owning campaign). This enriches what annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste: purpose, return contents, use case, and sibling alternative. The verb+resource is front-loaded in the first sentence, and each subsequent sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with one optional parameter and no output schema, the description compensates well by stating what each result contains (topic ID, campaign). It covers purpose, timing, and sibling routing. Minor gaps: other fields in each topic record and pagination behavior are not mentioned, but 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% — the single workspaceId parameter is fully documented in the schema, including the distinction between user keys (required) and workspace keys (bound). The description's 'in a workspace' phrasing orients the parameter but adds no syntax or format details beyond the schema. Baseline 3 applies since the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List'), resource ('active LinkedIn search-watch topics across campaigns'), and scope ('in a workspace'). It explicitly differentiates itself from campaignstack_get_campaign_topics by naming the per-campaign alternative, so an agent can distinguish these siblings 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidance: 'to see which topics are already being monitored before creating a new search watch' — i.e., for de-duplication prior to creation. It also names the alternative tool for the specific-campaign case. Both the trigger condition and the routing rule are stated, 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.

campaignstack_list_signal_agent_leadsA
Read-onlyIdempotent
Inspect

List leads discovered by a signal agent from its associated lead list. Returns lead records with entry metadata (status, createdAt) sorted newest first. Use campaignstack_list_signal_agents to find agent IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
agentIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, and the description adds useful context beyond them: records are returned sorted newest first with status and createdAt metadata. No contradiction exists between the text and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences, front-loaded with the action and scope, followed by the most useful cross-reference. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list operation with two parameters, the description covers what is returned, the ordering, and how to find the required agent ID. Since there is no output schema, it briefly names the return content; a fuller lead-record shape could be added, but the current level is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates for the required agentId by explaining it references a signal agent's associated lead list and by telling the agent how to obtain the ID. The optional limit parameter is not described, but its name plus schema default/min/max make it self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'List leads discovered by a signal agent from its associated lead list.' This clearly distinguishes it from siblings like campaignstack_list_signal_agents (which lists agents) and campaignstack_list_lead_signals (which lists signals, not lead records).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete usage pointer: 'Use campaignstack_list_signal_agents to find agent IDs,' which tells the agent how to satisfy the required agentId parameter. It does not explicitly state when not to use the tool or name alternative lead-list tools, but the intended context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_signal_agentsA
Read-onlyIdempotent
Inspect

List the signal agents (audience intelligence watchers) of a workspace. Signal agents monitor LinkedIn profiles, company feeds, groups or posts and detect engagements. Returns agents with status, type, target info, and counters. Connection watchers and message watchers are account maintenance and are hidden unless includeAccountMaintenance is true; campaignstack_get_account_maintenance is their home. Use campaignstack_get_signal_agent for full details, or campaignstack_get_signal_agent_stats for dashboard metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo
includeArchivedNo
includeAccountMaintenanceNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/non-destructive behavior. The description adds value beyond that by disclosing the default filtering of connection/message watchers, the effect of includeAccountMaintenance, and the returned fields. It does not contradict annotations and provides useful contextual behavior without repeating annotation data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: main action first, then return content, then filtering behavior, then routing to sibling tools. Every sentence contributes meaning and there is no redundant restatement of the tool name or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description still tells the agent what fields are returned and how filtering works. It also points to the right sibling tools for deeper detail and metrics. A minor gap is that includeArchived's default behavior is not stated, but the overall context is sufficient for a list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden for parameter meaning. It thoroughly explains includeAccountMaintenance, but workspaceId is only implied via 'of a workspace' and includeArchived is not addressed at all. Both are inferable from names, but the description does not fully compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('List') and resource ('signal agents (audience intelligence watchers) of a workspace'), then explains what signal agents are and what the response contains. It differentiates this list operation from the detail and stats tools by explicitly naming them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete selection guidance: use campaignstack_get_signal_agent for full details and campaignstack_get_signal_agent_stats for dashboard metrics. It also explains when the includeAccountMaintenance flag matters and directs account-maintenance watchers to campaignstack_get_account_maintenance, leaving no ambiguity about which tool to choose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_signal_watchesA
Read-onlyIdempotent
Inspect

List the workspace's lead signal watches with lead name, state (active/paused), why a paused watch is paused (user vs lead unreachable), last check and next check. Filter by state with the state argument. Related: campaignstack_create_signal_watch, campaignstack_pause_signal_watch, campaignstack_remove_signal_watch.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNoall
workspaceIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral detail beyond that: it reports why a paused watch is paused, distinguishing user vs lead unreachable, and notes last/next check times. It does not mention pagination, but that is a minor gap for a simple list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences front-load the core action and output fields, then cover filtering and related tools. Every sentence adds usable information with no repetition or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with simple parameters and safety annotations, the description is largely complete: it identifies the resource, enumerates return fields, and explains the filter. There is no output schema, but the description compensates by describing expected fields. Pagination or response envelope details would be nice but are not essential.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry parameter meaning. It explicitly explains the state argument as a filter and the 'workspace's' phrasing implies the workspaceId scope. It does not detail workspaceId formats, but the schema already requires it and its role is intuitive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'List the workspace's lead signal watches' with a specific verb and resource, and enumerates the returned fields. This differentiates it from siblings like campaignstack_list_signal_agents and campaignstack_list_lead_signals by focusing specifically on signal watches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool, including the state filter, and lists related tools (create, pause, remove signal watch). It does not explicitly contrast with an alternative list tool, but the resource scope and related operations make the intended usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_split_optimization_logsA
Read-onlyIdempotent
Inspect

List the audit trail of split-node auto-optimizations for a workflow node or a whole workflow (most recent first). Each entry has old/new branch weights, per-branch success stats (positive exits vs total leads), killed branches, and a human-readable reasoning string. Provide nodeId or workflowId. Use campaignstack_optimize_split_node to trigger an optimization manually.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds meaningful behavior beyond annotations: ordering, per-entry contents (old/new branch weights, per-branch success stats, killed branches, reasoning string), and the node-or-workflow scoping. It doesn't mention pagination or result limits, but for this read-only audit listing the disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: the first states purpose and ordering, the second describes the returned entries, and the third gives invocation requirements and points to the manual sibling. The structure is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only log tool, the description covers what is returned, how results are ordered, what input to provide, and how to trigger a manual optimization via a sibling. The main gap is that the input schema does not actually declare nodeId/workflowId, so the agent must rely on the description to construct arguments, and pagination/limit behavior is unmentioned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero properties, so the description is the only source of invocation guidance. It names nodeId and workflowId and indicates that either can be provided. This adds real meaning beyond the empty schema. However, the empty schema conflicts with the instruction to provide these identifiers, and their types/format are not specified, which prevents a higher score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a concrete resource ('audit trail of split-node auto-optimizations'), and a clear scope ('for a workflow node or a whole workflow'). It also adds ordering ('most recent first'), making it easy to distinguish from the many sibling list/get tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when this tool is relevant and explicitly names the sibling campaignstack_optimize_split_node as the alternative for triggering an optimization manually. It does not spell out when-not-to-use cases, but the read-only audit purpose and the manual-vs-log distinction are clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_voice_experiment_resultsA
Read-onlyIdempotent
Inspect

Reply-rate numbers for the voice vs generic experiment: sends, replies, acceptance counts, reply rate with a 95% confidence interval per arm, the relative lift, and whether the lift thesis is validated at volume. Sliceable by channel, craft kind, and profile version.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelNoSlice by channel, e.g. linkedin
craftKindNoSlice by craft kind: note, message, comment, reply
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
profileVersionNoSlice by voice profile version

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds context about the returned metrics and sliceability but does not disclose behavioral details like default slicing, empty-result behavior, or timeframe assumptions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler. The first sentence front-loads the full metric payload, and the second compactly communicates the available slicing dimensions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does a good job of telling the agent what the result payload contains. It does not mention time range, defaults, or the meaning of 'validated at volume,' but for a simple optional-parameter read-only results tool this is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema fully documents all four optional parameters. The description restates channel, craft kind, and profile version as slice dimensions but adds no additional semantics beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource—voice vs generic experiment results—and enumerates the exact metrics returned, including sends, replies, acceptance counts, reply rate with confidence interval, lift, and validation status. It lacks an explicit imperative verb but is specific enough to distinguish it from generic list_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The purpose is clear enough that an agent can infer when to call it, but the description provides no explicit guidance about when to use this tool versus sibling reporting or metrics tools. No alternatives are named and no exclusions are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_list_webhook_templatesA
Read-onlyIdempotent
Inspect

List available webhook templates for integration:webhook nodes. Each template pre-configures URL, method, headers, and body for a specific service (Slack, Instantly, etc.). Use the returned templateId and templateFields when creating webhook nodes via campaignstack_auto_generate_workflow. Templates with secretFields require the corresponding integration to be connected in workspace settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool read-only, idempotent, and non-destructive. The description adds meaningful behavioral context beyond those annotations: templates pre-configure service-specific fields and some require a connected integration, which is a prerequisite agents need to consider.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The purpose is front-loaded, and each subsequent sentence adds necessary information: template composition, downstream usage, and a conditional prerequisite.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only list tool, the description is complete: it explains what is returned conceptually (templates with templateId/templateFields), how the results should be used, and the secretFields integration requirement. No output schema exists, but the description covers the essential return/use information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100% (vacuously), so there are no inputs to document. Per the zero-parameter baseline, a 4 is appropriate; the description doesn't need to compensate for missing parameter docs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: 'List available webhook templates for integration:webhook nodes.' It clearly distinguishes this from the broad list_* siblings by limiting to webhook templates, and the rest of the description clarifies what a template contains (URL, method, headers, body).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear downstream context: use returned templateId and templateFields when creating webhook nodes via campaignstack_auto_generate_workflow, and secretFields templates require the corresponding integration to be connected. It doesn't explicitly name alternatives or when-not-to-use conditions, 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.

campaignstack_list_workflowsA
Read-onlyIdempotent
Inspect

List all workflows for a campaign. Returns workflow IDs, names, status, enabled flag, and node count. Use the returned workflowId values with campaignstack_get_workflow to inspect workflow details, or campaignstack_trigger_workflow to execute a workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as read-only, idempotent, and non-destructive. The description adds value by disclosing the exact output shape (summary fields, not full workflow details) and the role of workflowId in follow-up calls. No pagination or error behavior is mentioned, but the simple read-only nature makes this acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each substantive: scope, return contract, and downstream usage. No filler or repetition, and the key action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only list tool with no output schema, the description provides everything needed: the input context, the fields present in the response, and what to do with the returned IDs. The sibling set is huge, but the description's explicit references to get_workflow and trigger_workflow prevent confusion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one required campaignId parameter with no description (0% coverage). The description contextualizes it as 'for a campaign,' but does not explain where the ID comes from or its format. The parameter name and tool name make the meaning recoverable, so the description is minimally adequate but not richly compensating.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('List all workflows for a campaign') and describes the returned fields (IDs, names, status, enabled flag, node count). The downstream references to get_workflow and trigger_workflow make clear this is the list entry point, distinct from detail or execution tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly scopes the use case to listing workflows for a campaign and tells the agent what to do with the returned workflowIds: use get_workflow for details or trigger_workflow for execution. It does not explicitly state a when-not-to-use condition, but the downstream routing provides sufficient direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_mark_all_notifications_readA
Idempotent
Inspect

Mark all unread notifications in a workspace as read. Large backlogs are cleared asynchronously; the unread badge drops immediately. To mark a single notification read, use campaignstack_mark_notification_read instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral context beyond the annotations: large backlogs are cleared asynchronously while the unread badge drops immediately. This discloses timing and eventual-consistency behavior that neither the idempotentHint nor destructiveHint conveys. Annotations are consistent with the description (it is a mutation, hence readOnlyHint=false, and it is idempotent). A small gap remains in not describing the return value or failure behavior, but the async disclosure 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with zero waste: the core action is front-loaded, the async behavior follows as essential nuance, and the routing to the sibling tool closes it out. Every sentence earns its place and the definition is appropriately short for a simple one-parameter tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with one parameter, the description covers the operation, workspace scoping, async edge case, immediate badge effect, and the single-vs-all alternative. The only notable omission is the return value/confirmation behavior, especially given there is no output schema, but for a mark-as-read operation the effect is self-evident enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description bears the burden of explaining parameter meaning. The phrase 'in a workspace' clarifies that the single workspaceId parameter scopes the operation to a specific workspace, which partially compensates. However, the description does not explain where workspaceId comes from or that it is effectively required, though the parameter name is self-evident enough to keep this at an adequate level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Mark all unread notifications in a workspace as read.' The word 'all' plus 'in a workspace' precisely scopes the operation, and it is clearly distinguished from the sibling campaignstack_mark_notification_read, which handles a single notification. No ambiguity remains about what this tool accomplishes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the alternative tool ('use campaignstack_mark_notification_read instead') and the exact condition that selects it ('To mark a single notification read'). It also implies the intended use case for this tool — clearing all unread notifications at once — leaving no inference burden on the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_mark_conversation_readA
Idempotent
Inspect

Mark a conversation as read. Clears the unread flag and decrements the account's unread counter. No-ops if the conversation is already read. Use campaignstack_list_inbox_conversations to find conversation refs.

ParametersJSON Schema
NameRequiredDescriptionDefault
conversationRefYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint annotation, the description discloses the exact side effect (decrements unread counter) and the no-op behavior for already-read conversations. This is concrete behavioral detail that annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each adds value: main action, concrete effects, no-op behavior, and ref provenance. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter idempotent mutation with annotations already covering read-only/destructive hints, the description supplies everything needed to invoke it correctly: input source, effect, and idempotent edge case. No output schema exists, but the description makes return expectations unnecessary for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by telling the agent exactly where to get a conversationRef (list_inbox_conversations). It does not define the ref structure, but the schema already provides the object shape, platform enum, and required fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States an exact operation (mark a conversation read) and the concrete effects: clearing the unread flag and decrementing the unread counter. It is clearly scoped to conversations, distinguishing it from notification-read siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable context by directing the agent to campaignstack_list_inbox_conversations to obtain conversation refs. It does not explicitly contrast with notification-read tools, but the conversation-scoped language makes the intended use unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_mark_notification_readA
Idempotent
Inspect

Mark a single notification as read. Use campaignstack_list_notifications to find notificationId values. To mark all notifications read at once, use campaignstack_mark_all_notifications_read.

ParametersJSON Schema
NameRequiredDescriptionDefault
notificationIdYes

TDQS

A4.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true and destructiveHint=false, which cover the key behavioral safety traits. The description adds the single-item scope but does not mention what happens if the notification is already read, authorization requirements, or response behavior. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with the core action first and guidance about related tools second. Every sentence serves a distinct purpose, and there is no unnecessary detail or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter mutation tool with annotations covering idempotence and destructiveness, this description is complete. It identifies the target operation, the source for the required parameter, and the distinction from the bulk-marking sibling, so an agent has enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by telling the agent exactly where to obtain valid notificationId values ('Use campaignstack_list_notifications'). The schema already defines the parameter as a non-empty string, so the missing piece was the source of valid values, which the description provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Mark') and a precise object and scope ('a single notification as read'). It clearly distinguishes this tool from the bulk variant by emphasizing 'single', making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to use campaignstack_list_notifications to find notificationId values, and identifies campaignstack_mark_all_notifications_read as the alternative when marking all notifications is desired. This is clear, specific guidance for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_optimize_split_nodeA
Idempotent
Inspect

Run split-node auto-optimization immediately for a flow:split workflow node, instead of waiting for the daily cron. Re-weights branches via Thompson Sampling on downstream positive exits (replies, acceptances, meetings) and may kill severe underperformers (weight 0). Skips (with an explanatory status) when any branch is below the node's minimum lead volume or the weight change is insignificant. Returns a status string. Use campaignstack_get_workflow_stats to find split node IDs, and campaignstack_list_split_optimization_logs to inspect past optimizations.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses Thompson Sampling re-weighting, downstream positive-exit criteria, the possibility of killing underperformers via weight 0, skip conditions, and the return type. This gives the agent a clear picture of side effects and edge-case behavior; no contradiction with the annotations is evident.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence contributes distinct information: purpose, algorithm, skip behavior, return value, and discovery/logging pointers. The purpose is front-loaded and there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation tool with annotations and no output schema, the description covers the operation, algorithmic behavior, side effects, skip cases, return value, and how to obtain valid inputs. Nothing critical is missing for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides only the name 'nodeId' with no description, so the description's pointer to campaignstack_get_workflow_stats for finding split node IDs adds useful semantic value. It does not fully spell out the parameter format, but the single parameter is self-explanatory and the 'flow:split workflow node' context disambiguates it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise action ('Run split-node auto-optimization immediately'), a specific resource ('flow:split workflow node'), and contrasts it with waiting for the daily cron. It also names related sibling tools for finding node IDs and inspecting logs, making it clearly distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly frames the tool as the immediate alternative to the daily cron, and explains when it may skip execution (insufficient lead volume or insignificant weight change). It also directs the agent to campaignstack_get_workflow_stats for node ID discovery and campaignstack_list_split_optimization_logs for past optimizations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_pause_company_employee_watchA
Idempotent
Inspect

Pause a company employee watch: weekly re-reads stop, the record stays. Resume with campaignstack_resume_company_employee_watch.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is not read-only, is idempotent, and is non-destructive. The description adds useful behavioral context beyond those hints by specifying that weekly re-reads cease while the record persists, and that the operation can be reversed via the resume sibling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler. The core action is front-loaded, the behavioral consequence is stated immediately, and the resume alternative is given in a single short clause. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple pause action with two required IDs, the description covers the essential effect and reversal path. The absence of an output schema makes return-value details missing, but that is a minor gap for this kind of mutation; annotations already communicate idempotency and non-destructiveness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not compensate by explaining workspaceId or watchId. The parameter names are fairly self-explanatory, but the description offers no guidance on what these IDs refer to or how they relate to the paused watch, so it fails to add meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Pause a company employee watch.' It clearly states the operational effect ('weekly re-reads stop') and the key non-destructive detail ('the record stays'), distinguishing it from removal tools like campaignstack_remove_company_employee_watch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: when you want to stop weekly re-reads but retain the watch record. It also names the exact sibling tool for reversing the action, campaignstack_resume_company_employee_watch, providing an explicit alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_pause_competitor_watchA
Idempotent
Inspect

Pauses a competitor watch and disables its associated automations. Use campaignstack_resume_competitor_watch to resume monitoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses a key side effect: pausing also disables associated automations, which is not inferable from the schema or name. It remains consistent with readOnlyHint=false, idempotentHint=true, and destructiveHint=false. It doesn't cover edge cases like already-paused watches, but the idempotency annotation mitigates that.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the primary action and side effect, followed by the one relevant alternative. No filler or repeated schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter state-change tool, the description covers the action, the automations side effect, and the resume path. It omits explicit guidance on how to obtain the watchId, but the get/list competitor-watch siblings cover that; annotations handle safety and idempotence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description should compensate, but it never explicitly names watchId. However, the single required parameter is self-descriptive ('watchId') and the description's 'a competitor watch' makes clear which identifier is expected, so the gap is minor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('pauses'), a clear resource ('competitor watch'), and a concrete side effect ('disables its associated automations'). It also names the resume counterpart, so an agent can distinguish it from resume and from related pause tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly points to campaignstack_resume_competitor_watch for the reverse operation, giving clear context on when to use the counterpart. It does not explicitly contrast with delete_competitor_watch or other watch variants, but the pause/resume symmetry makes the intended use obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_pause_signal_agentA
Idempotent
Inspect

Pause a signal agent, stopping feed polling and workflow execution. The agent and its data are preserved. Use campaignstack_resume_signal_agent to resume. Use campaignstack_list_signal_agents to find agent IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by specifying exactly what stopping entails: feed polling and workflow execution cease. It also explicitly states the preservation of the agent and its data, which aligns with destructiveHint=false and idempotentHint=true. This is valuable behavioral context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each earning its place: the core action and effect, the non-destructive guarantee, and the pointer to related tools. The most decision-relevant information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, non-destructive state-change tool with idempotency already declared in annotations, this description covers the essential context: what the tool does, what side effects it has, how to reverse it, and how to obtain the required identifier. No output schema exists, but none is needed for an action whose success is reasonably inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines agentId as a string with minLength 1 and no description. The description compensates by explaining that agent IDs can be found via campaignstack_list_signal_agents, which tells the agent where to source the required value. It doesn't restate the parameter name explicitly, but the connection to the single parameter is clear.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific action ('Pause a signal agent') and the concrete behavioral consequences ('stopping feed polling and workflow execution'). It also clarifies that the agent and its data are preserved, which sharply distinguishes this tool from deletion. The resource type is unambiguous even among many sibling pause tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the inverse tool for resuming and the lookup tool for finding agent IDs, which is strong practical guidance. It implies this is the non-destructive pause option by stating data is preserved, but it does not explicitly contrast this with delete_signal_agent or other pause variants, so it stops just short of full when-and-when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_pause_signal_watchA
Idempotent
Inspect

Pause a lead signal watch: the daily refresh stops, the record and its history stay. Resume with campaignstack_resume_signal_watch. Use campaignstack_list_signal_watches to find watch IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond the annotations: pausing stops daily refreshes but preserves the record and history, and the operation is resumable. This is consistent with idempotentHint=true and destructiveHint=false, with no contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, each with a distinct purpose: state the behavior, name the resume counterpart, and give the ID lookup path. The core effect is front-loaded and there is no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple state-change tool, the description covers the action's effect, non-destructiveness, resumption path, and how to discover the watchId. The only notable gap is the absence of any guidance on workspaceId, but the tool is otherwise well-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by telling the agent to use campaignstack_list_signal_watches to find watch IDs. However, it adds no semantic guidance for workspaceId, so one of the two required parameters remains unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Pause', the resource 'lead signal watch', and the exact effect: the daily refresh stops while the record and history remain. It also differentiates from resuming and removing by describing the non-destructive nature of pausing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names campaignstack_resume_signal_watch for resuming and campaignstack_list_signal_watches for finding watch IDs, which gives clear operational context. It does not explicitly contrast with remove_signal_watch, but the 'record and history stay' phrasing implies the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_priority_enrichA
Idempotent
Inspect

Immediately enrich specific LinkedIn profiles, bypassing the normal priority queue. Profiles are queued at highest priority and processing starts immediately. Maximum 50 slugs per request. Use campaignstack_get_enrichment_status to monitor progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugsYes
platformNo
accountIdYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as non-read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond those annotations: profiles are queued at highest priority, processing starts immediately, there is a 50-slug limit, and progress should be monitored via a status tool. This gives the agent an accurate mental model of the asynchronous queue behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three short sentences that front-load the core action, then add the key constraint and the monitoring suggestion. Every sentence earns its place, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core action, urgency/priority behavior, batch limit, and how to monitor progress, which is largely sufficient for correct invocation. However, since there is no output schema, the description does not clarify what the response will contain (e.g., a job identifier) or how the status tool correlates to this request, leaving a minor but real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only partially does. It clarifies that 'slugs' refer to LinkedIn profiles, which is useful, but workspaceId and accountId are left unexplained. The 'Maximum 50 slugs per request' simply restates the schema's maxItems constraint and adds no new semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource ('Immediately enrich specific LinkedIn profiles'), states the key differentiator ('bypassing the normal priority queue'), and clearly distinguishes this from other enrichment tools. The mention of campaignstack_get_enrichment_status further clarifies the tool's role in a workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly conveys when to use this tool: when immediate, high-priority enrichment of LinkedIn profiles is needed. It also gives a follow-up action ('Use campaignstack_get_enrichment_status to monitor progress') and a hard limit ('Maximum 50 slugs per request'). It does not explicitly name alternative enrichment tools or state when not to use it, which prevents a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_propose_playbook_changeAInspect

Ask the playbook assistant for a change to the workspace's craft data (playbook sections, outreach intent details, offer context) and get a proposal back. This tool NEVER writes: it returns an assistant message and, when a change fits, a proposalId whose current/proposed text you read with campaignstack_get_playbook_proposal and apply with campaignstack_decide_playbook_proposal. A question gets an answer and no proposal. A new proposal replaces the workspace's pending one. Runs an LLM call.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYesWhat should change about how the workspace writes, in plain words, e.g. 'stop mentioning pricing in openers' or 'sound less corporate'
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A3.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly claims 'This tool NEVER writes', but the annotations declare readOnlyHint=false. This is a direct contradiction with the annotation. Additionally, the description itself says 'A new proposal replaces the workspace's pending one,' which implies a write to workspace state. Because the description contradicts the annotations, it fails behavioral transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and information-dense. It front-loads the core purpose, then adds the critical non-write caveat, the proposal flow with companion tools, and behavior for questions vs. changes. Every sentence contributes useful operational context without padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema present, the description adequately covers return behavior: an assistant message, a proposalId when a change fits, no proposal for questions, and replacement of pending proposals. It also notes the LLM call. Minor gaps like error cases or response formatting keep it from a 5, but the essentials are present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters well. The description adds some value by framing the request as plain-language instructions and by explaining that workspaceId is key-bound for workspace keys, but it does not meaningfully extend beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear, specific action: asking the playbook assistant for a change to craft data and receiving a proposal. It distinguishes itself from related sibling tools by naming campaignstack_get_playbook_proposal and campaignstack_decide_playbook_proposal as the follow-up tools for reading and applying the proposal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage context: ask for a change, get a proposal; questions get answers without proposals; new proposals replace pending ones. It also explains the workflow with companion tools. It does not explicitly state when to use an alternative instead, but the boundary is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_queue_leadsA
Idempotent
Inspect

Queue leads for enrichment. Each result is validated, deduped by profile slug, and added to the enrichment pipeline. Invalid profile URLs are skipped with errors reported. Results should come from LinkedIn search page extraction. platform defaults to 'linkedin'.

ParametersJSON Schema
NameRequiredDescriptionDefault
resultsYes
platformNo
accountIdYes
campaignIdYes
workspaceIdYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true and destructiveHint=false, and the description adds meaningful behavioral detail beyond that: each result is validated, deduped by profile slug, invalid profile URLs are skipped, and errors are reported. This gives an agent a realistic model of what happens during execution. It stops short of describing error format or pipeline timing, but the added context is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the primary action. Every sentence adds information: the purpose, the validation/dedup behavior, the handling of invalid URLs, the expected source of results, and the platform default. There is 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and an array input with multiple nested fields, the description covers the operational behavior and expected input source but omits return/response semantics beyond 'errors reported' and does not clarify the meaning of the four required identifier parameters. It is adequate for basic invocation but incomplete for fully confident use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the missing parameter documentation, but it only addresses 'platform' (defaults to 'linkedin') and broadly hints that 'results' should come from LinkedIn search extraction. The required identifiers workspaceId, campaignId, and accountId are left unexplained, and the individual fields inside each result object are not semantically clarified beyond their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Queue leads for enrichment') and the resource (leads), and adds meaningful specifics: validation, deduping by profile slug, and adding to the enrichment pipeline. It does not explicitly name or distinguish itself from sibling tools like add_leads_to_list or priority_enrich, but the enrichment-pipeline wording makes the core purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful context about when the tool is appropriate: results should come from LinkedIn search page extraction, and platform defaults to 'linkedin'. However, it does not explain when to prefer this over related alternatives such as add_leads_to_list, import_leads_csv, or enrich_lead_contact_info, nor does it state any exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_refresh_inboxAInspect

Trigger an inbox refresh for all LinkedIn accounts in the workspace. Polls LinkedIn for new messages and routes them into CampaignStack conversations. Respects a 20-second freshness dedup window per account (skips recently-fetched accounts). Returns { refreshed, skipped, errors } where refreshed = accounts polled, skipped = fresh/expired/unenriched accounts. After refresh, use campaignstack_list_inbox_conversations to see updated conversations.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNo

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a mutating, non-idempotent, open-world operation. The description goes further by disclosing the 20-second freshness dedup window, the fact that recently-fetched accounts are skipped, and the exact return shape. This adds meaningful behavioral detail 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences carry action, scope, dedup behavior, return format, and a follow-up recommendation. There is no filler, and the most important action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description documents the return object, the dedup constraint, and the follow-up tool, which is substantial for a tool with no output schema. It is slightly incomplete on parameter behavior and error semantics, but for a refresh action with one obvious parameter, it is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explicitly explain how workspaceId behaves, whether it is optional, or what happens when it is omitted. The word 'workspace' in the description loosely implies the parameter's role, but the description does not compensate for the missing schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Trigger an inbox refresh for all LinkedIn accounts in the workspace.' It clearly explains the polling and routing behavior, and the follow-up reference to list_inbox_conversations distinguishes it from reading conversations directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when this tool is relevant and explicitly routes to campaignstack_list_inbox_conversations after the refresh. It does not state when not to use it or compare it with other refresh-related tools, but the context is strong enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_regenerate_playbookAInspect

Trigger AI regeneration of the workspace playbook based on current campaigns, ICPs, personas, and company context. An existing playbook is UPDATED, not discarded: user-authored passages are preserved verbatim and the previous version is snapshotted to history (see campaignstack_list_playbook_versions / campaignstack_revert_playbook). An existing hand-edited offerContext is never overwritten. The operation is NOT idempotent and may take several seconds. Fetch the updated playbook afterwards with campaignstack_get_playbook.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate mutating and non-idempotent. The description adds critical behavioral detail: existing playbook is updated not discarded, user-authored passages are preserved verbatim, previous version is snapshotted, hand-edited offerContext is never overwritten, and operation may take seconds. This is far beyond the structured hints and matches the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the action and resource, and each subsequent sentence adds a distinct operational fact: preservation behavior, history snapshot, offerContext protection, non-idempotence/latency, and follow-up retrieval. There is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-optional-param mutation with no output schema, the description covers trigger semantics, side effects, timing, and next steps. It does not explicitly state the return payload, but it directs the agent to fetch the updated playbook afterwards, which is sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema fully documents the single optional workspaceId parameter, so the description does not need to add parameter-level detail. It adds no extra context about the workspace-key vs user-key distinction beyond the schema, so the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the specific verb 'Trigger AI regeneration' and the object 'workspace playbook', and names the input context (campaigns, ICPs, personas, company context). It clearly differentiates this from read-only and versioning tools by explaining the update-not-discard behavior and pointing to related playbook tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when regeneration is appropriate: it updates rather than discards, preserves user-authored passages, snapshots history, and protects hand-edited offerContext. It also warns about non-idempotence and latency, but it does not explicitly contrast with alternatives like propose_playbook_change.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_reject_content_postAInspect

Rejects a 'pending_approval' content post back to 'draft' status with a reason. Increments the revision count (max 10 revisions). Use campaignstack_update_content_post to edit the post, then campaignstack_submit_content_for_approval to resubmit.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonYes
contentPostIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations by disclosing the revision count increment and the 10-revision maximum. Since annotations already signal mutation and non-idempotency, the description enriches the agent's understanding of side effects, though it doesn't specify what happens when the max is reached.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly packed sentences convey the action, state transition, required reason, side effect, and subsequent workflow with no filler. The most important information is front-loaded in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete enough for a simple two-parameter state transition tool: it states the input status, output status, revision side effect, and suggested next actions. Minor gaps around max-revision behavior and response/error semantics prevent a perfect score.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It clarifies that 'reason' is the rejection rationale, but it does not explicitly define 'contentPostId' role or constraints beyond the schema's minLength. The parameter names are self-explanatory, giving partial but not full compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Rejects'), a specific resource ('content post'), and the exact state transition ('pending_approval' to 'draft'). It also specifies that a reason is required, which differentiates it from related sibling tools like approve_content_post and update_content_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the precondition ('pending_approval' content post) and gives a clear follow-up workflow: use campaignstack_update_content_post to edit, then campaignstack_submit_content_for_approval to resubmit. This effectively tells the agent when to use this tool and what to do instead or next.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_reject_draft_checkupAInspect

Reject the pending draft checkup without applying anything. Two consecutive rejections pause automatic checkups for 30 days (manual runs stay available).

ParametersJSON Schema
NameRequiredDescriptionDefault
checkupIdYesPending checkup id from campaignstack_get_draft_checkup
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only indicate non-read-only and non-idempotent behavior, so the description carries the burden of explaining side effects. It does this well by disclosing the 30-day pause after two consecutive rejections and clarifying that manual runs remain available. This adds real behavioral context beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The main action is front-loaded, and the important side-effect warning is included compactly in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the action, what it does not do, and the key side effect. Since there is no output schema, some return-value detail could be helpful, but it is not essential for this simple state-changing tool. The description is sufficiently complete for an agent to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents both parameters with 100% coverage, including the source of checkupId. The description adds no additional parameter-level detail, so it earns the schema-covered baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Reject') and resource ('pending draft checkup'), and the phrase 'without applying anything' clarifies that this action does not apply the draft's changes. This distinguishes it clearly from accept/apply-style sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description communicates the core use case and a meaningful consequence ('Two consecutive rejections pause automatic checkups for 30 days'), but it does not explicitly say when to choose this over campaignstack_accept_draft_checkup or campaignstack_run_draft_checkup. The usage context is mostly implied rather than stated with exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_reject_reviewAInspect

Reject a pending review entry. The lead follows the 'rejected' edge in the workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavioral context beyond the annotations by stating that the lead follows the 'rejected' edge in the workflow and that the entry must be pending. This goes beyond the mere mutation signal from readOnlyHint=false. It does not discuss reversibility or error behavior for non-pending entries, but the added workflow context is valuable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, with the core action front-loaded and no filler. Every sentence adds either what the tool does or what the workflow effect is. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with annotations and no output schema, the description covers the target resource, the precondition (pending), and the workflow outcome. It does not describe return values or behavior when the entry is not pending, but the tool is simple enough that this is a minor gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must help interpret the parameters. The phrase 'review entry' clarifies that entryId refers to the review entry being rejected, but workspaceId is not explained and no explicit parameter mapping is given. The simple, standard parameter names keep this adequate rather than deficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Reject') and resource ('pending review entry'), so an agent immediately knows what the tool does. The second sentence clarifies the domain by explaining the workflow consequence. It is clearly distinct from sibling reject/approve tools by focusing on review entries in a pending state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when a pending review entry should be rejected. However, it gives no explicit comparison to related tools such as approve_review, edit_and_approve_review, or retry_review, and no when-not-to-use guidance. The workflow-edge sentence explains the effect but not tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_remove_company_employee_watchA
Destructive
Inspect

Remove a company employee watch (archives it, one-way; the company, its employees and their signals are untouched). To stop temporarily, pause instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes
workspaceIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description discloses that the operation is one-way/irreversible and that the company, employees, and signals remain untouched. This scopes the destructive behavior precisely and adds meaningful context the annotation alone does not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: one action statement, a parenthetical clarifying effects, and a sentence pointing to the alternative for temporary stops. No filler or redundant information is present.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive tool with no output schema, the description fully covers what happens, irreversibility, what is not affected, and when to use a different tool. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description does not explicitly define workspaceId or watchId. However, the phrase 'company employee watch' clarifies that watchId refers to that specific resource, and the parameter names are self-explanatory. This is only partial compensation for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Remove a company employee watch'. It clarifies the action by adding 'archives it, one-way' and explicitly contrasts with pause, distinguishing it from sibling tools like pause_company_employee_watch.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when NOT to use this tool: 'To stop temporarily, pause instead.' This directly names the alternative and the condition, leaving no ambiguity about choosing between remove and pause.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_remove_lead_listA
Destructive
Inspect

Permanently delete a lead list. This is destructive and cannot be undone. Use campaignstack_list_lead_lists to find valid lead list IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadListIdYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful context beyond the annotations by explicitly stating the operation is permanent and cannot be undone. While the destructiveHint annotation already signals destructiveness, the irreversibility warning is extra value the agent can use for cautious decision-making.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no filler. The destructive nature is front-loaded, and the ID sourcing tip follows naturally. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter destructive tool, the description covers the action, the risk, and how to obtain a valid input. No output schema exists, and the annotations already cover the read-only/idempotent/destructive profile, so little else is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% coverage for the single leadListId parameter, but the description compensates by pointing the agent to campaignstack_list_lead_lists to obtain valid IDs. The parameter name is also self-explanatory given the tool's purpose, though more detail about the ID format or source would be even stronger.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Permanently delete a lead list.' This clearly distinguishes the operation from nearby siblings like campaignstack_remove_leads_from_list, which removes leads rather than deleting the entire list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you want permanent deletion of a lead list. It also instructs the agent to use campaignstack_list_lead_lists to find valid lead list IDs, providing concrete guidance for preparing the call. It doesn't explicitly mention when not to use it or compare it to alternatives, 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.

campaignstack_remove_leads_from_listA
DestructiveIdempotent
Inspect

Remove specific leads from a lead list. Each leadRef needs leadSource (default 'global') and leadId. Returns the count of leads actually removed. Use campaignstack_get_lead_list with includeLeads=true to see current leads.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadRefsYes
leadListIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as destructive and idempotent. The description adds valuable context by stating it 'Returns the count of leads actually removed,' which signals partial success behavior and reinforces idempotency. The guidance on leadRef structure also helps the agent understand what the operation expects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: the action, the essential parameter detail, and the return value plus a useful workflow pointer. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with a nested array parameter and no output schema, the description covers the key invocation details: field semantics, default value, return value, and how to view the current list state. It could add a note about idempotency or behavior when some leads don't exist, but annotations and the count-based return cover most gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain the leadRefs shape: 'Each leadRef needs leadSource (default 'global') and leadId.' However, leadListId is left to its self-explanatory name, and the description slightly overstates leadSource as required when the schema marks it optional with a default. The maxItems and minItems constraints are not mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Remove specific leads from a lead list.' This clearly distinguishes it from sibling tools like campaignstack_remove_lead_list (removing a whole list) and campaignstack_add_leads_to_list (adding leads).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly frames the operation as removing specific leads and tells the user to use campaignstack_get_lead_list with includeLeads=true to inspect current leads before removal. It does not explicitly name alternative tools or when not to use this one, but the context is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_remove_manual_exclusion_urlA
Destructive
Inspect

Remove a LinkedIn profile URL from a manual exclusion entry by its importedLeadId. Use campaignstack_list_manual_exclusion_urls to find importedLeadId values. Use campaignstack_get_exclusions to find exclusionId values.

ParametersJSON Schema
NameRequiredDescriptionDefault
exclusionIdYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
importedLeadIdYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is destructive and not idempotent. The description adds useful behavioral context by specifying exactly what is removed: a single LinkedIn profile URL from a manual exclusion entry, not the entire entry. This goes beyond the raw destructiveHint and clarifies the target of the mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences with no filler. The primary action is front-loaded, and the two lookup instructions each serve a distinct purpose. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive operation with two required parameters, the description covers the action, both required identifiers, and how to retrieve them. It does not describe the return value or error behavior, but with no output schema and a straightforward removal operation, the provided context is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, with the two required parameters undocumented in the schema. The description compensates by explaining the role of importedLeadId as identifying the URL to remove and pointing to specific tools to find valid values for both required parameters. workspaceId is left to the schema, which already documents it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove'), the specific resource ('a LinkedIn profile URL from a manual exclusion entry'), and the key ('by its importedLeadId'). It distinguishes itself from related tools like campaignstack_list_manual_exclusion_urls and campaignstack_get_exclusions by naming them as lookup helpers rather than the removal operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent how to obtain the required identifiers: use campaignstack_list_manual_exclusion_urls to find importedLeadId values and campaignstack_get_exclusions to find exclusionId values. This gives clear, actionable usage guidance and routes the agent to the correct sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_remove_memberA
Destructive
Inspect

Remove a member from the workspace. Cannot remove the workspace owner or admins (admin removal requires the workspace settings UI). This action is irreversible.

ParametersJSON Schema
NameRequiredDescriptionDefault
memberIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the operation destructive, non-read-only, and non-idempotent. The description adds meaningful context beyond annotations by warning that the action is irreversible and by disclosing the owner/admin restriction. It does not detail downstream effects on member data, but the key risk is covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences front-load the action and then add two high-value caveats: the owner/admin restriction and irreversibility. There is no filler, and every sentence contributes essential information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter destructive action with annotations already covering the safety profile and no output schema, the description provides the core operational context: what is removed, who cannot be removed, and that it is irreversible. It could add a note about expected return/confirmation, but that is not strictly necessary without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description should compensate for the missing parameter explanations. It does not mention memberId or workspaceId at all. The parameter names are fairly self-explanatory, and 'from the workspace' loosely maps to workspaceId, but no additional format, ownership, or identification guidance is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Remove a member from the workspace.' It clearly scopes the action to workspace membership and explicitly states what cannot be removed (owner/admins), distinguishing it from sibling tools like invite_member, update_member_role, and revoke_invitation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when not to use this tool: the workspace owner and admins cannot be removed, and admin removal requires the workspace settings UI. However, it does not name alternative tools for related cases such as revoking an invitation, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_remove_signal_watchA
Destructive
Inspect

Remove a lead signal watch (archives it - one-way, the watch disappears from lists and never refreshes again; the lead and its signals are untouched). To stop temporarily, use campaignstack_pause_signal_watch instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark destructiveHint=true, and the description goes further by explaining the exact consequences: the watch is archived, disappears from lists, never refreshes again, and the lead/signals remain untouched. It also describes the one-way nature, which is critical behavioral context beyond the structured annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The core action and consequences are front-loaded, and the alternative tool is named in the second sentence. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple destructive action with two string parameters, the description covers the essential facts: irreversibility, side effects on the watch and lead, and the temporary alternative. No critical behavioral context is missing, and annotations cover the destructive safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to compensate by explaining what watchId and workspaceId refer to. It does not mention either parameter. The names are reasonably self-explanatory, but the description adds no parameter-level meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Remove a lead signal watch'), the exact resource ('signal watch'), and the key semantic distinction that this archives it permanently. It also distinguishes itself from the pause sibling, so an agent can select the right tool 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool versus an alternative: use it for permanent removal, and use campaignstack_pause_signal_watch to stop temporarily. This is direct, actionable guidance that prevents a common misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_reopen_reviewA
Idempotent
Inspect

Put an already decided review (approved, rejected or cancelled after approval) back in the pending queue with its stored draft, so it can be approved, rejected, edited or retried again. Works for entries parked at a review node and for critic-flagged drafts parked at their craft node. Downstream steps that never ran (waiting, failed or cancelled sends) are removed and re-created by the next approve. Refuses with REVIEW_DOWNSTREAM_ALREADY_RAN when a later step already executed for the lead, since reopening would set up a second send. Entry ids come from campaignstack_get_lead_history.

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses concrete behavioral details: downstream steps that never ran are removed and re-created on the next approval, and the tool refuses with REVIEW_DOWNSTREAM_ALREADY_RAN when a later step already ran. This gives the agent accurate expectations about side effects and 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence adds distinct value: main purpose, applicable contexts, downstream behavior, failure condition, and entry ID source. It is front-loaded with the core action and avoids redundancy with the schema or annotations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with no output schema and only two simple parameters, the description provides enough operational detail: what state changes occur, what happens to downstream steps, when it refuses, and where to get the required entry ID. No critical decision information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for parameter meaning. It adds useful guidance for entryId by pointing to campaignstack_get_lead_history, but it does not explain workspaceId or how the two parameters relate to the review context. Partial but not complete compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: returning an already decided review to the pending queue with its stored draft, and distinguishes this from approval, rejection, editing, and retrying. It also specifies the two applicable node contexts, making the tool's unique role clear among the many review-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains when to use the tool: for already decided reviews parked at a review or craft node, and when not to use it: when downstream steps have already executed, with a refusal code. It names the source for entry IDs but does not explicitly route to alternative sibling tools such as approve_review or retry_review.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_reply_to_commentA
Read-only
Inspect

Generate a contextual threaded reply for a LinkedIn comment. Fetches lead profile, campaign context, and ICP data from Convex, then uses AI to craft a relevant, conversational reply. When addDmHint is true (set when a DM is also being sent), the reply includes a 'Sent you a DM!' nudge. After calling this tool, the agent navigates to the post, finds the comment, clicks Reply, and types the returned replyText using browser_* tools.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/destructive annotations, it discloses what data is fetched (lead profile, campaign context, ICP data), the AI-generation behavior, the addDmHint conditional output, and crucially clarifies that the tool does not post the reply itself—the agent must use browser_* tools afterward. This prevents a false expectation of direct side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, with the core purpose front-loaded and each sentence providing distinct value: outcome, conditional behavior, and required follow-up actions. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description covers what it does, how the result is produced, the shape of the returned data (replyText), and the exact next steps. Nothing necessary for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero properties, so schema coverage is vacuously complete and no parameter documentation is required. The description's mention of addDmHint is a contextual condition rather than a callable argument, though a brief note that it is not an input parameter would remove ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Generate a contextual threaded reply for a LinkedIn comment.' The phrase 'threaded reply' plus the described workflow (find the comment, click Reply) clearly distinguishes it from top-level commenting siblings such as campaignstack_comment_on_post or campaignstack_craft_comment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this is for replying to an existing LinkedIn comment, shows the conditional DM-nudge behavior, and specifies the follow-up browser actions. It does not explicitly name alternative tools or when-not-to-use conditions, so it falls just short of top-tier routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_resume_company_employee_watchA
Idempotent
Inspect

Resume a paused company employee watch (also retries one the system paused as company-unreachable; the failure counter resets).

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it reveals that the failure counter resets and that the tool also acts as a retry for system-paused watches. This is useful behavioral context; it could add more on ownership or error behavior, but the key side effect is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence conveys the primary action and the special retry behavior without wasted words. The parenthetical adds the extra case while keeping the main action clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with annotations covering idempotency and non-destructiveness, the description explains the operation and its main side effect. It does not describe return values, but no output schema exists and the operation is simple enough that this is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides zero descriptions for workspaceId and watchId, and the description does not compensate by explaining how those IDs are used or where they come from. The parameter names are self-explanatory, but the description adds no parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Resume'), a specific resource ('company employee watch'), and adds a precise scope: only paused watches, including system-paused ones. This clearly distinguishes it from sibling create/pause/remove/list watch tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states the condition for use: a watch that is paused, and it adds the special case of a watch system-paused as company-unreachable. It does not name alternatives or exclusions, but the circumstances are clear from the text and sibling names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_resume_competitor_watchA
Idempotent
Inspect

Resumes a paused competitor watch and re-enables its associated automations. Use campaignstack_pause_competitor_watch to pause monitoring.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral context by disclosing that resuming also 're-enables its associated automations,' which is a non-obvious side effect. It does not describe failure states, but the idempotency annotation partially covers repeated-call safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences carry the essential information: what the tool does, what side effect it has, and which sibling handles the inverse operation. There is no filler or repetition of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter mutation with no output schema, the description plus annotations cover purpose, side effects, idempotency, and the counterpart tool. The main gap is that watchId semantics are only implied rather than explicitly defined, and there is no mention of what happens if the watch is not currently paused.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only defines watchId as a string with minLength 1, and schema description coverage is 0%, so the description needed to clarify the parameter. It does not explicitly state that watchId is the identifier of the paused competitor watch. However, the tool name and the phrase 'Resumes a paused competitor watch' make the single parameter's role reasonably inferable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Resumes') with a clear resource ('a paused competitor watch') and states the concrete outcome ('re-enables its associated automations'). It also distinguishes this tool from its pause counterpart by naming campaignstack_pause_competitor_watch, so the agent can tell them apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly points to the alternative operation: 'Use campaignstack_pause_competitor_watch to pause monitoring.' This gives useful context for when to use this tool vs. its inverse. It does not explicitly enumerate exclusions or other alternatives, but the resume/pause pairing is sufficient for the common case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_resume_signal_agentA
Idempotent
Inspect

Resume a paused signal agent, re-enabling feed polling and workflow execution. Connection-watch and message agents cannot resume while their bound LinkedIn account is disconnected (AGENT_ACCOUNT_UNAVAILABLE). Reconnect the account first. Use campaignstack_list_signal_agents to find agent IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentIdYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, idempotent, non-destructive operation. The description adds meaningful behavioral detail beyond that: it re-enables feed polling and workflow execution, and it discloses the AGENT_ACCOUNT_UNAVAILABLE failure condition and the recommended remediation. This goes beyond what annotations alone communicate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The first sentence states the action and effect, the second explains a critical failure condition and workaround, and the third gives a direct pointer for satisfying the required parameter. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with one required parameter, the description covers what the tool does, what effect it has, what can go wrong, how to resolve that error, and where to obtain the required identifier. No output schema exists, but none is needed to invoke this operation correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the single parameter agentId is self-explanatory and the description compensates by telling the agent to use campaignstack_list_signal_agents to find agent IDs. For a one-parameter tool, this is sufficient semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Resume a paused signal agent', and clarifies the concrete effect ('re-enabling feed polling and workflow execution'). It clearly distinguishes this tool from sibling tools by targeting signal agents specifically, and even directs the agent to campaignstack_list_signal_agents for IDs, leaving no ambiguity about the operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when the tool applies: resuming paused signal agents, with an explicit precondition that connection-watch and message agents cannot resume while their LinkedIn account is disconnected. It also names the error code and suggests reconnecting first, but it does not explicitly contrast this tool with sibling resume tools like campaignstack_resume_signal_watch, so usage guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_resume_signal_watchA
Idempotent
Inspect

Resume a paused lead signal watch. Also the way to retry a watch the system paused as lead-unreachable: resuming resets the failure counter and the daily refresh starts again. Counts against the workspace's active-watch cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes
workspaceIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond annotations by disclosing resuming resets the failure counter, restarts daily refresh, and counts against the workspace's active-watch cap. Annotations declare idempotent=true, readOnly=false, destructive=false; the description adds useful side-effect context without contradicting those hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each carrying distinct information: the primary action, the retry semantics, and the quota side effect. No filler or repetition, and the most important usage is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-ID mutation with annotations covering idempotency and non-destructiveness, the description provides the key behavioral consequences: failure-counter reset, daily-refresh restart, and active-watch cap. It does not describe error cases or prerequisites, but none are essential for this low-complexity resume action.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. It references the workspace's active-watch cap, indirectly explaining workspaceId's role, and 'watch' implies watchId, but it does not explicitly define either parameter. The parameter names are self-explanatory and the schema constraints are simple, making this adequate but not thorough.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Resume a paused lead signal watch.' It further clarifies the retry use case (system-paused due to lead-unreachable), which distinguishes it from pause_signal_watch, resume_signal_agent, and other sibling resume tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use the tool: for paused watches and for watches the system paused as lead-unreachable. It does not explicitly name alternative tools or exclusion conditions, but the two use cases are concrete and sufficient for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_retry_content_postA
Idempotent
Inspect

Moves a 'failed' content post back to 'draft' status, clearing the failure reason. Use campaignstack_get_content_post to check the failureReason before retrying. After retrying, edit the post if needed, then schedule or submit for approval again.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentPostIdYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the state change and the clearing of the failure reason, which adds behavioral context beyond the annotations. It is consistent with idempotentHint=true and destructiveHint=false. No hidden destructive side effects are described, which is appropriate given the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences front-load the core action, then provide the prerequisite step and the follow-up workflow. No filler or redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter state-transition tool, the description covers the precondition (check failureReason), the action (move to draft, clear reason), and the next steps (edit, schedule, submit for approval). No output schema is needed to understand the tool's effect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, contentPostId, and the schema provides no description (0% coverage). The description implies this is the identifier of the failed content post, but it does not explicitly define the parameter's role. Since the parameter is simple and inferable from context, the gap is minor but still present.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: moving a 'failed' content post back to 'draft' status and clearing the failure reason. This is a specific verb-plus-resource with an explicit state transition, and it differentiates this tool from related siblings like retry_failed_entry or update_content_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear workflow guidance: check failureReason via get_content_post before retrying, then edit and schedule or submit for approval. It lacks an explicit 'when not to use' statement, but the context is specific enough for an agent to know when this tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_retry_failed_entries_at_nodeA
Idempotent
Inspect

Retry every failed entry at a workflow node in one call. Resets each one from FAILED to WAITING so the executor picks them up on the next tick. Use this after fixing the cause of a batch failure (expired session, unreachable runner) instead of retrying leads one by one. Returns how many were requeued and how many failed entries remain: call again when 'remaining' is above zero.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeIdYes
workspaceIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (mutation, idempotent, non-destructive), the description discloses the state transition from FAILED to WAITING, the executor timing ('next tick'), and the return semantics with a follow-up condition ('call again when remaining is above zero'). This adds meaningful behavioral context not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, perfectly front-loaded with the core action, then the when-to-use, then the return behavior. Every sentence earns its place with no repetition or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation with annotations already covering safety semantics, the description is complete: what it does, why to use it, what state changes, what is returned, and when to call again. The absence of an output schema is mitigated by the explicit return description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden of explaining parameters. It references a 'workflow node' and implies workspace context, but it never explicitly maps nodeId to the node or workspaceId to the workspace, nor does it describe formats or relationships. The self-explanatory property names help, but the description does not compensate for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Retry'), a clear resource ('every failed entry at a workflow node'), and a distinctive scope ('in one call'). It also explicitly contrasts with the one-by-one retry path, making it easy to distinguish from the singular retry tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage context: use after fixing the cause of a batch failure, such as expired session or unreachable runner. It also names the alternative ('retrying leads one by one') instead of leaving the choice to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_retry_failed_entryA
Idempotent
Inspect

Retry a failed workflow entry. Resets the entry from FAILED to WAITING so the workflow executor picks it up on the next tick. Use campaignstack_list_leads_at_node to find failed entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful behavior beyond annotations by explaining the state transition from FAILED to WAITING and that the workflow executor picks it up on the next tick. It does not contradict the annotations, and while it doesn't discuss idempotency details, the annotations already declare idempotentHint=true and destructiveHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three tight sentences with no filler: the action, the mechanism, and the supporting lookup tool. The most important information is front-loaded in the first sentence, and each sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation tool, the description covers the core behavior, effect, and how to find the target entries. It is slightly incomplete because it doesn't address the closest batch sibling or the semantics of workspaceId, but overall an agent can reasonably select and invoke the tool with the provided guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it does not explain entryId or workspaceId beyond the generic context of retrying a workflow entry. The parameter names are somewhat self-explanatory, but workspaceId is never mentioned, and no format, ownership, or relationship details are provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and resource: 'Retry a failed workflow entry' and defines the exact state transition from FAILED to WAITING. It is clear, but it does not explicitly distinguish itself from the very similar sibling campaignstack_retry_failed_entries_at_node; the singular 'entry' implies scope but the alternative is not named or contrasted.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent to use campaignstack_list_leads_at_node to find failed entries, which provides a clear usage path. However, it does not explain when to prefer this single-entry tool over the batch variant retry_failed_entries_at_node, nor does it state any exclusions or prerequisites such as requiring a FAILED status.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_retry_reviewAInspect

Retry AI content generation for a pending review entry. The entry returns to PROCESSING while the AI regenerates, then comes back to PENDING_REVIEW with new content.

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYes
workspaceIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly=false annotation, the description discloses the full state lifecycle: the entry goes to PROCESSING during regeneration and returns to PENDING_REVIEW with new content. This is useful non-obvious behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire definition is one focused sentence that front-loads the action and then gives the relevant state behavior. 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter action with no output schema, the description covers the core purpose and side effect well. However, the 0% parameter coverage and absence of sibling guidance leave the agent to infer the exact ID semantics and when retry is appropriate versus other review actions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain how to obtain or identify entryId/workspaceId. The phrase 'review entry' hints that entryId identifies the entry, but workspaceId is unexplained and the description does not compensate for the missing schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Retry AI content generation') and a precise target ('a pending review entry'), so an agent can distinguish it from approval/rejection tools. The state transition detail reinforces what the tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly scopes the tool to pending review entries, which gives an agent a concrete precondition. It does not name alternatives or give explicit 'use when not' guidance, but the context is not merely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_revert_playbookA
Idempotent
Inspect

Restore a playbook version snapshot as the live workspace playbook. The replaced current text is itself snapshotted first, so a revert is always revertible. Find version ids with campaignstack_list_playbook_versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
versionIdYesPlaybook version id from campaignstack_list_playbook_versions
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (write, idempotent, non-destructive), the description reveals a key behavioral trait: the current text is snapshotted before replacement, so a revert is always reversible. This meaningfully helps an agent understand the operation's safety and side effects, with no contradiction against annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences each carry a distinct purpose: what the tool does, the safety behavior, and how to obtain the required ID. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter revert tool, the description plus annotations and schema fully cover operation, safety, and parameter sourcing. With no output schema, the lack of return-value detail is not a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both versionId and workspaceId. The description only reinforces the versionId source from the schema and adds no new parameter-specific semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Restore') and names the exact resource ('a playbook version snapshot' becoming 'the live workspace playbook'), making the operation unambiguous. It also differs from nearby siblings like regenerate_playbook by framing this as snapshot restoration, and it points to list_playbook_versions as the source of version IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly sets the context for a rollback/revert action and gives the prerequisite lookup step ('Find version ids with campaignstack_list_playbook_versions'). It does not explicitly enumerate when not to use it or contrast it with regenerate_playbook, but the context is clear enough for an agent to select it for a revert.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_revoke_invitationA
Destructive
Inspect

Revoke a pending invitation. The invitation link becomes invalid immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYes
invitationIdYes

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, and the description adds a valuable concrete behavioral detail: the invitation link becomes invalid immediately. This goes beyond the generic destructive flag and tells the agent exactly what consequence to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler. The main action is front-loaded, and the immediate effect is stated in the second sentence. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple two-parameter tool with destructive annotations already provided. The description covers the core behavior and consequence. It is complete enough for an agent to invoke correctly, though parameter-level details would make it slightly stronger.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention workspaceId or invitationId at all. The parameter names are somewhat self-explanatory, but the description does not compensate for the missing schema documentation by explaining how to obtain or use these identifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Revoke') and resource ('a pending invitation'), and clarifies the practical consequence ('The invitation link becomes invalid immediately'). This clearly distinguishes it from related invitation/manage-member tools such as invite_member, remove_member, and list_invitations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'pending invitation' implies the correct context: revoke only invitations that have not yet been used. However, the description does not explicitly say when not to use it, mention accepted invitations, or name any alternative tool as a fallback.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_run_draft_checkupAInspect

Run a draft checkup for the workspace now, bypassing the automatic evidence thresholds (the daily sweep only runs when the clean-approval rate degrades). Fails when a proposal is already pending (decide it first) or when fewer than 3 recent drafts exist to analyze. NOT idempotent; runs LLM analysis plus up to 2 replay crafts and may take tens of seconds. Read the result with campaignstack_get_draft_checkup.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing non-idempotency, side effects (LLM analysis plus up to 2 replay crafts), expected latency ('may take tens of seconds'), and failure conditions. This gives the agent a realistic model of what invoking the tool entails.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four concise, information-dense sentences with no filler. The primary action and key differentiator are front-loaded, followed by failure conditions, behavioral warnings, and a clear follow-up instruction. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description is complete: it explains when to trigger, what happens during execution, how long it may take, what can cause failure, and exactly where to retrieve the result. An agent has enough context to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The only parameter, workspaceId, is already fully documented in the input schema with 100% coverage, so the description does not need to add parameter detail. It does not go beyond the schema, but the schema carries the full burden adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Run a draft checkup for the workspace now'), identifies the exact resource scope, and explains how it differs from the automatic daily sweep. It also names the companion read tool, campaignstack_get_draft_checkup, making the tool's role in the workflow clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly explains when to use this tool: when an immediate checkup is needed, bypassing the automatic thresholds. It also gives exclusion conditions (pending proposal, fewer than 3 recent drafts) and points to the correct alternative for reading results, campaignstack_get_draft_checkup.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_schedule_content_postA
Idempotent
Inspect

Schedules a draft content post for publishing (skips approval). Pass scheduledAt (Unix ms, in the future) for an exact time, or set autoSchedule:true (or omit scheduledAt) to auto-place it into the next valid slot that respects the account's daily LinkedIn posting limit. The response includes the resolved scheduledAt. Use campaignstack_get_content_post to verify the post is in 'draft' status first.

ParametersJSON Schema
NameRequiredDescriptionDefault
scheduledAtNoExact publish time. Omit (or set autoSchedule) for the next valid slot.
autoScheduleNoAuto-place into the next valid posting slot instead of an exact time. Default when scheduledAt is omitted.
contentPostIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds valuable context beyond annotations: scheduling skips approval, auto-placement respects the daily LinkedIn posting limit, and the response includes the resolved scheduledAt. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences with no filler. The main action is stated first, followed by parameter semantics, response behavior, and a verification pointer. Every sentence adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core workflow: target state ('draft'), scheduling modes, daily-limit behavior, response content, and a verification step. There is no output schema, so noting the response includes resolved scheduledAt is valuable. Minor edge cases like errors for non-draft posts are not stated, but the verification instruction mitigates that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers scheduledAt and autoSchedule at a basic level, and the description adds important semantic details: Unix milliseconds, future-time requirement, autoSchedule as default, and daily-limit awareness. contentPostId has no schema description, but its role is clear from the tool name and required status; the description compensates for most of the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Schedules'), names the resource ('draft content post'), and states a key behavioral differentiator ('skips approval'). It is clearly distinguishable from sibling tools like approve_content_post, submit_content_for_approval, or unschedule_content_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains both invocation modes (exact scheduledAt vs autoSchedule), clarifies autoSchedule is the default when scheduledAt is omitted, and gives a concrete precondition: verify the post is in 'draft' status first using campaignstack_get_content_post. It does not explicitly enumerate when not to use the tool, but the guidance is strong enough for correct selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_search_leadsA
Read-onlyIdempotent
Inspect

Search leads in a workspace by name, email, LinkedIn URL or company. Returns paginated results; follow nextCursor for the next page. Omit query and companyId to page through every lead. Covers both shared leads and workspace-private (CSV-imported) ones. Platform presence (LinkedIn URL, follower counts, …) is under each lead's profiles key (e.g. profiles.linkedin.url); the top-level linkedInUrl is a legacy alias. Use returned leadId values with campaignstack_get_lead or campaignstack_add_leads_to_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoA person's name, an email address, or a LinkedIn profile URL. Job titles are not searchable here.
cursorNo
companyIdNo
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the tool as read-only and idempotent. The description adds substantial behavioral detail: pagination via nextCursor, coverage of private CSV-imported leads, nested profiles structure, legacy linkedInUrl alias, and downstream leadId consumption. This goes well beyond the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: purpose, pagination, full-scope paging, data coverage, response shape caveat, and downstream usage. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully covers pagination, result shape (profiles, nextCursor, leadId), and legacy field handling. It does not exhaustively document every edge case, but it provides enough context for an agent to invoke the tool and correctly interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, but the description compensates by explaining query semantics (name, email, LinkedIn URL), the role of companyId, and the cursor behavior. It also clarifies how to omit query and companyId for full pagination. A few parameters like limit rely on schema defaults, but the description adds meaningful meaning where the schema is sparse.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Search leads in a workspace by name, email, LinkedIn URL or company.' It clearly defines the scope, including shared and workspace-private leads, and indirectly differentiates itself from single-lead tools like campaignstack_get_lead by framing this as a search/pagination tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational guidance: paginate with nextCursor, omit query and companyId to page through all leads, and use returned leadId values with downstream tools. It does not explicitly name alternatives or exclusion conditions, but the usage context is strong enough for an agent to know when to call it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_send_connection_requestA
Destructive
Inspect

Send a connection request to a profile. platform is required ("linkedin" - connection requests are a LinkedIn-only concept; on other networks use campaignstack_follow_profile). Target can be specified as a profileUrl (LinkedIn profile URL) or a leadId (resolved server-side to the lead's LinkedIn URL). Optionally include a personalized note (max 300 chars, LinkedIn limit). If only one LinkedIn account is connected to the workspace it is used automatically; if multiple exist, specify accountId (use campaignstack_list_accounts to find it). Subject to daily connection_request budget, weekly cap, and business hours gates unless bypassed. When true, bypasses ALL LinkedIn safety limits (daily budget, weekly caps, business hours, account status checks). ⚠️ WARNING: This disables all protections that prevent LinkedIn account restrictions. Use only when you understand the risks and accept that the account may be flagged or restricted by LinkedIn.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only signal mutating and destructive behavior; the description adds concrete risk context: daily connection_request budget, weekly cap, business hours gates, and a bypass that disables all safety checks. It even warns that LinkedIn may flag or restrict the account, which is material behavioral context beyond destructiveHint. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but dense, front-loaded with the core action and then organized by platform, target, note, account, budget, and warning. The warning is slightly redundant ('bypasses ALL safety limits' vs. 'disables all protections'), but the repetition is defensible for a risky action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no parameter schema, this description covers every decision an agent needs: which platform, how to identify the target, note length, account selection, applicable limits, and the risk of bypassing them. It also routes to the correct sibling for other networks, making it complete relative to the available structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Because the input schema is empty, the description is the sole parameter documentation and it compensates well: it defines platform as required, target as profileUrl or leadId, note as max 300 chars, and accountId as conditionally required. The bypass flag is only described as 'When true' without an exact field name, but the semantics are still clear enough for an agent to act on.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and target: 'Send a connection request to a profile.' It immediately distinguishes LinkedIn connection requests from other networks by naming campaignstack_follow_profile as the alternative, so the agent can disambiguate among the large sibling set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states that platform is required and that on non-LinkedIn networks the agent should use campaignstack_follow_profile instead. It also gives a conditional rule for account selection: use campaignstack_list_accounts when more than one LinkedIn account is connected. This is direct when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_send_inmailA
Destructive
Inspect

Send a LinkedIn InMail to a non-connected profile. platform is required ("linkedin" - InMail is a LinkedIn-only premium product). Requires a Premium, Sales Navigator, or Recruiter subscription on the sending account. Target can be specified as a profileUrl (LinkedIn profile URL) or a leadId (resolved server-side). Requires subject (max 200 chars) and messageText (max 1900 chars). If only one LinkedIn account is connected to the workspace it is used automatically; if multiple exist, specify accountId (use campaignstack_list_accounts to find it). Subject to daily send_inmail budget and business hours gates unless bypassed. Free-tier LinkedIn accounts have a budget of 0 (InMail requires a paid subscription). When true, bypasses ALL LinkedIn safety limits (daily budget, weekly caps, business hours, account status checks). ⚠️ WARNING: This disables all protections that prevent LinkedIn account restrictions. Use only when you understand the risks and accept that the account may be flagged or restricted by LinkedIn.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description adds substantial risk context: premium subscription requirements, daily budget limits, business hours gates, and a stark warning that bypass mode can disable protections and lead to account restriction. This goes well beyond the annotation basics and clearly discloses side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but every sentence adds necessary guidance: prerequisites, target resolution, length limits, account disambiguation, budget gates, and a critical warning. The warning is placed at the end to avoid distracting from the main operation, and the high-value constraints are clearly ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with an empty schema and no output schema, the description carries the full burden and covers nearly everything needed to invoke it: required platform, eligibility, target forms, content limits, account selection, and risk warnings. The main gap is the unnamed bypass parameter field and the lack of explicit parameter names/types that an agent would need to construct the call reliably.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty, so the description is the only source of parameter meaning. It explains platform, target options (profileUrl or leadId), subject max 200 chars, messageText max 1900 chars, conditional accountId, and bypass behavior. However, the bypass instruction says 'When true' without naming the exact parameter, and no parameter names or types are formally structured, leaving a small but real ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Send a LinkedIn InMail to a non-connected profile.' This clearly distinguishes it from sibling messaging tools like send_message, send_gmail, and send_connection_request by emphasizing 'LinkedIn' and 'non-connected profile.' The LinkedIn-only restriction is front-loaded.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: requires Premium/Sales Navigator/Recruiter, targets must be non-connected, and account selection behavior when multiple LinkedIn accounts exist. It does not explicitly name alternative tools or state when NOT to use this tool, but the 'non-connected profile' qualifier strongly implies the boundary versus send_message or send_connection_request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_send_messageA
Destructive
Inspect

Send a LinkedIn message in an existing conversation, optionally with file attachments (public URLs). Takes a conversationRef { platform, id } from campaignstack_list_inbox_conversations. The message is dispatched asynchronously via the runner. The tool returns a messageEntityUrn for tracking. Use campaignstack_get_conversation to check delivery status. Subject to daily send_message budget and business hours gates unless bypassed. When true, bypasses ALL LinkedIn safety limits (daily budget, weekly caps, business hours, account status checks). ⚠️ WARNING: This disables all protections that prevent LinkedIn account restrictions. Use only when you understand the risks and accept that the account may be flagged or restricted by LinkedIn.

ParametersJSON Schema
NameRequiredDescriptionDefault
textYes
attachmentsNoUp to 5 files to attach (images or documents). Downloaded server-side and validated against the LinkedIn attachment policy.
conversationRefYes
dangerouslyBypassSafetySystemNo

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses several traits beyond the annotations: the message is 'dispatched asynchronously via the runner,' it returns a messageEntityUrn for tracking, and it is 'subject to daily send_message budget and business hours gates unless bypassed.' The warning that the bypass disables 'ALL LinkedIn safety limits' and may 'flag or restrict' the account explains the destructiveHint=true annotation rather than merely restating it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the core action, then attachments, input sourcing, async behavior, follow-up, and safety gates in decreasing priority. Every sentence carries information, and the risk warning earns its place given the destructive annotation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with nested objects, no output schema, and destructive annotations, the description covers the action, input sourcing, return value, delivery-status follow-up, async behavior, and risk profile. Nothing an agent needs to call it correctly or avoid account harm is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 25% schema description coverage, the description compensates for the gaps: it tells the agent where conversationRef comes from, clarifies that attachment URLs must be public ('public URLs'), and explains the dangerouslyBypassSafetySystem parameter in detail ('bypasses ALL LinkedIn safety limits... account may be flagged or restricted'). The required text parameter still relies mostly on inference from the tool's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action: 'Send a LinkedIn message in an existing conversation, optionally with file attachments (public URLs).' The 'existing conversation' scoping and LinkedIn platform constraint distinguish it from sibling send tools like send_connection_request, send_inmail, and send_gmail, and the reference to campaignstack_list_inbox_conversations anchors its place in the workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational context: the conversationRef must come from campaignstack_list_inbox_conversations, and campaignstack_get_conversation is named as the follow-up for checking delivery status. It does not explicitly state when to prefer send_inmail or send_connection_request over this tool, so differentiation from sending siblings is left implicit rather than stated as exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_set_account_owner_workspaceA
Idempotent
Inspect

Set the workspace that owns a LinkedIn account: the one that pays for its maintenance watchers (connection watcher, message watcher, invitation hygiene) and for messages written by hand in the inbox. The target must be one of the workspaces the account is linked to (ACCOUNT_OWNER_NOT_LINKED otherwise) and must not be locked. Read the current owner with campaignstack_get_account (ownerWorkspaceId).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspaceIdYes
linkedinAccountIdYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-read-only, idempotent, non-destructive operation. The description adds meaningful behavioral context: what ownership implies financially, the linked-workspace constraint, the locked-workspace restriction, and the relevant error case. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core action is front-loaded, the clarifying definition of 'owns' is useful, and the preconditions plus read-current-state pointer are each valuable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter, idempotent setter with no output schema, the description is complete: it defines the operation, explains the ownership semantics, states the key constraints and error condition, and tells the agent how to inspect the current owner. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden. It effectively identifies linkedinAccountId as the LinkedIn account whose owner is being changed and workspaceId as the new target workspace, while adding constraints on workspaceId (must be linked, must not be locked). The parameter names are simple and the prose maps them clearly, though it does not use the exact field names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the operation: setting which workspace owns a LinkedIn account, and defines 'owns' concretely as paying for maintenance watchers and inbox messages. This distinguishes it from sibling tools like campaignstack_set_account_watcher by emphasizing the billing/ownership role.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear preconditions: the target workspace must be linked to the account and must not be locked, with an explicit error condition (ACCOUNT_OWNER_NOT_LINKED). It also directs the agent to campaignstack_get_account to read the current owner. It does not explicitly name alternatives or state when not to use the tool, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_set_account_watcherA
Idempotent
Inspect

Turn a LinkedIn account's connection watcher or message watcher on or off. The first enable creates the agent and its template workflow (welcome messages or reply drafts, review-first); later calls resume or pause it. One watcher per kind per LinkedIn account across all workspaces: a watcher owned by another workspace cannot be controlled from here (DUPLICATE_*_EXTERNAL). Enabling needs a live LinkedIn session (AGENT_ACCOUNT_UNAVAILABLE otherwise). Use campaignstack_get_account_maintenance to read the current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
enabledYes
workspaceIdNo
linkedinAccountIdYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond annotations, the description discloses meaningful behavioral details: first enable creates an agent and template workflow, later calls resume or pause, one watcher per kind per account across workspaces, and specific error conditions (DUPLICATE_*_EXTERNAL, AGENT_ACCOUNT_UNAVAILABLE). This is far richer than the raw annotations alone and matches the idempotentHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficiently organized: main action first, then lifecycle, cross-workspace constraint, auth prerequisite, and a pointer to the read tool. Every sentence adds operational value and none is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers creation, resumption, pausing, workspace ownership limits, session requirements, error cases, and how to read current state. For a state-toggle tool with no output schema, this is unusually complete; an agent has enough context to call it correctly and interpret common failures.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates well: it explains kind values (connection watcher vs message watcher), enabled behavior (on/off, first enable creates), and the LinkedIn account scope. It also gives workspace-related context, though it never explicitly names workspaceId or states how it should be supplied, so a small gap remains.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise verb and resource: turning a LinkedIn account's connection watcher or message watcher on or off. It also distinguishes the tool from the read-only sibling by explicitly directing to campaignstack_get_account_maintenance for reading state, and clarifies that first enable creates the agent while later calls resume/pause.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: enabling requires a live LinkedIn session, and a watcher owned by another workspace cannot be controlled from here. It also names the alternative for reading state (campaignstack_get_account_maintenance) and explains the lifecycle difference between first enable and later resume/pause calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_set_agent_exclusionsA
DestructiveIdempotent
Inspect

Replace a signal agent's own (level-1) exclusion list. These ADD to the workspace list and cannot release anything set there: to stop excluding someone workspace-wide, edit the workspace list instead. Pass the complete list, not a delta - whatever you send replaces what is there, and [] clears it. Entry shape matches campaignstack_get_exclusions. Read campaignstack_get_exclusions with level=effective and this signalAgentId to see the merged result.

ParametersJSON Schema
NameRequiredDescriptionDefault
exclusionsYesThe agent's complete level-1 exclusion list, replacing whatever is there. Pass [] to clear. Same entry shape as campaignstack_get_exclusions returns. These ADD to the workspace list; they cannot release a workspace exclusion.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
signalAgentIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal destructiveHint=true, but the description adds specific destructive semantics: "whatever you send replaces what is there, and [] clears it," plus the additive relationship to the workspace list and the inability to release workspace-level exclusions. For an idempotent full-replace operation, this precisely characterizes the behavioral contract beyond what the annotation booleans convey. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, followed by scoping, replace semantics, entry shape, and verification. Every sentence earns its place, though it is long-ish and partially repeats what the exclusions schema description already states (complete list, [] clears, ADD to workspace). Dense but not padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive 3-param mutation with no output schema, it covers purpose, destructive scope, workspace interaction, parameter shapes, and a post-condition verification path (get_exclusions with level=effective). The only gap is that the return value/response format is never described — mitigated by the explicit verification instruction, which is arguably more useful for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with signalAgentId having only minLength:1. The description compensates: exclusions entry shape is pinned to campaignstack_get_exclusions, "complete list, not a delta" clarifies replace semantics, and signalAgentId's role is reinforced by the verification call example. The workspaceId nuance (required for user keys) lives in the schema, not the description, so some meaning is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource+scope: "Replace a signal agent's own (level-1) exclusion list." The level-1 qualifier and the contrast with the workspace list clearly distinguish this from siblings like campaignstack_toggle_exclusion, campaignstack_get_exclusions, and campaignstack_update_filter_exclusion_rules. An agent can tell what this does and what it does not do 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-not-to-use guidance: "cannot release anything set there: to stop excluding someone workspace-wide, edit the workspace list instead." It also states the replace-not-delta contract and prescribes a verification workflow via campaignstack_get_exclusions with level=effective. This is explicit when/when-not/alternatives guidance, not merely implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_set_workflow_accountsA
Idempotent
Inspect

Set (or clear) a workflow's act/rotation account pool for a platform. LinkedIn nodes dispatch only on pool accounts (multiple accounts rotate); an EMPTY pool means the workflow never dispatches LinkedIn actions at all, so binding at least one account is required before an enabled workflow can send. Also syncs a linked signal agent's acting accounts. Use campaignstack_list_accounts for account ids and campaignstack_get_workflow to inspect the current pool (accountRefs).

ParametersJSON Schema
NameRequiredDescriptionDefault
platformYesPlatform of the account pool to set
accountIdsYesAccount ids for the workflow's act/rotation pool. Empty array clears the pool; a pool-less workflow never dispatches actions on this platform.
workflowIdYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses a critical behavioral consequence: an empty pool means the workflow never dispatches LinkedIn actions, and at least one account is required before an enabled workflow can send. It also reveals a side-effect: syncing a linked signal agent's acting accounts. This is high-value operational context for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: the first states the core operation, the second explains the crucial dispatch consequence and prerequisite, and the third routes to supporting tools. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter setter with no output schema, the description covers the operation, the platform-specific behavior, the consequence of clearing, a precondition for enabled workflows, a side-effect, and guidance for obtaining the necessary IDs. Nothing essential to making the call correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions already cover platform and accountIds, including empty-array behavior. The description adds further meaning by explaining the act/rotation pool concept, tying accountIds to LinkedIn dispatch, and directing the agent to list_accounts for valid IDs. workflowId has no schema description, but the name and context make its role self-evident.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Set (or clear) a workflow's act/rotation account pool for a platform.' It then clarifies what this means for LinkedIn dispatch behavior, making the tool's role distinct from generic workflow update tools. The naming of companion tools (list_accounts, get_workflow) further anchors its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when this tool is appropriate: whenever the workflow's account pool must be set or cleared, and explicitly points to campaignstack_list_accounts for IDs and campaignstack_get_workflow for inspection. It stops short of explicitly stating when not to use this tool versus update_workflow, but the specialized wording makes the choice largely unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_start_connections_exportAInspect

Start an async runner job that exports the 1st-degree LinkedIn connections for the given account as leads. The job runs in the background. Use campaignstack_get_automation_jobs to monitor progress. Imported connections are added to the shared leads database and can be added to campaigns via lead lists. Use campaignstack_list_accounts to find valid accountId values (platform: 'linkedin').

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYes
workspaceIdYes
maxConnectionsNoMaximum number of connections to export (default 2500)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only indicate false read-only/idempotent/destructive hints, so the description adds valuable behavioral context: the job runs asynchronously in the background, imports connections into the shared leads database, and makes leads available for campaigns. This goes beyond the structured annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-organized: the core action is front-loaded, followed by monitoring advice, downstream effects, and a prerequisite lookup step. Every sentence contributes useful guidance with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should explain what the caller can expect in return. It explains how to monitor progress but does not mention whether the tool returns a job ID or how the agent should connect the result to campaignstack_get_automation_jobs. The overall workflow is covered, but the immediate return value is unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, with only maxConnections documented. The description partially compensates by explaining that accountId refers to a LinkedIn account and pointing to campaignstack_list_accounts, but workspaceId is left unexplained and maxConnections is not addressed in the description. More parameter guidance would be needed for full clarity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Start an async runner job'), a specific resource ('1st-degree LinkedIn connections'), and the output ('as leads'). It also clearly scopes the operation to a given account, making it easy for an agent to distinguish from the many import/export sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: this tool starts a background export/import job, and it points to campaignstack_get_automation_jobs for monitoring and campaignstack_list_accounts for finding valid accountId values. However, it does not explicitly mention when not to use this tool or name alternatives such as CSV or Apollo imports.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_submit_content_for_approvalA
Idempotent
Inspect

Submits a draft content post for approval, moving it to 'pending_approval' status. The post body must not be empty. Use campaignstack_approve_content_post or campaignstack_reject_content_post to continue the workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentPostIdYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context by specifying the status change to 'pending_approval' and the non-empty body requirement, which are not captured in the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences cover action, state transition, validation rule, and next steps with no filler. The most important operational detail is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter state-transition tool with no output schema and minimal annotations, the description is complete enough. It tells the agent what to do, what state results, what precondition applies, and how the workflow continues.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate by explaining contentPostId, but it doesn't. The parameter's meaning is implied by its name, and the 'post body must not be empty' note is a resource precondition rather than parameter-level guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Submits') and resource ('draft content post') and names the resulting state ('pending_approval'). It clearly distinguishes this tool from the sibling approve/reject tools by describing the workflow position rather than the final decision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear workflow context and explicitly names the sibling tools to use next (approve_content_post or reject_content_post). It doesn't explicitly state when not to use this tool, but the draft-to-pending-approval framing makes the intended scenario obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_submit_feedbackAInspect

Submit a feedback report or bug report to the CampaignStack team. Mirrors the in-app feedback widget (feedback-widget.tsx) and writes to the same feedbackReports table and triggers the same email notification. Use category 'bug' for broken functionality, 'feature' for capability requests, 'question' for how-to questions, and 'other' for anything else. Returns the new feedback report ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
routeYesThe app route or context where the feedback originates (e.g. '/dashboard/campaigns' or 'mcp-agent')
messageYesThe feedback body text
categoryYesFeedback category: bug (something broken), feature (new capability request), question (how-to), other
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only show readOnlyHint/idempotentHint/destructiveHint all false, which tells the agent little beyond 'not read-only, not idempotent, not destructive'. The description compensates by stating concrete side effects: it writes to feedbackReports, triggers the same email notification, and returns the new feedback report ID. This makes the write behavior and outcome transparent beyond what annotations convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler: the first states the action and destination, the second adds behavioral fidelity, and the third gives category semantics and return value. The most important information is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly includes the return value (new feedback report ID). It also states side effects and category options, covering the key operational details an agent needs. The optional workspaceId nuance is already documented in the input schema, so nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains each parameter. The description adds a category-value mapping for bug/feature/question/other, which is helpful but largely redundant with the schema enum descriptions. It adds no information about route, message, or workspaceId beyond what the schema already provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence names a specific action ('submit'), a clear object ('feedback report or bug report'), and a destination ('CampaignStack team'). The rest of the description clarifies expected behavior and return value, so an agent can tell what the tool accomplishes even among a large sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit category selection rules for bug/feature/question/other, telling the agent exactly which value to choose for each scenario. It also notes the tool mirrors the in-app widget and writes to the same table/email flow, giving context for how it should be used. It doesn't exclude alternatives, but no sibling is a plausible substitute, so the guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_sync_lead_to_hubspotA
Idempotent
Inspect

Sync a single lead into the workspace's connected HubSpot portal (same behavior as the integration:crm_sync workflow node). Upserts the contact by email (idempotent), optionally associates the lead's company (when a real domain resolves), and optionally logs an outreach note on the contact's timeline. lifecycleStage is NEVER sent unless explicitly provided (downgrade risk on existing CRM contacts). Leads without an email cannot be synced (errorCode no_email). Requires a connected HubSpot integration — use campaignstack_connect_hubspot first. On success returns the HubSpot contactId (plus companyId/noteId when those steps ran) and a degraded[] list for steps that fell back gracefully (e.g. company_upsert, source_property, note). This path is in beta: it is unit-tested but not yet confirmed inside a real portal's UI, so tell the user to spot-check the first synced contact in HubSpot.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional outreach note to log on the contact's HubSpot timeline
leadIdYes
leadSourceNoLead source table (defaults to trying global, then private)
syncCompanyNoAssociate the lead's company when a real domain resolves (default true)
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
lifecycleStageNoHubSpot lifecyclestage to set (e.g. 'lead'). NEVER sent unless provided — sending it can downgrade an existing customer contact

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal idempotent, non-read-only, non-destructive behavior, but the description adds substantial context: upsert semantics by email, the lifecycleStage downgrade risk, errorCode no_email, degraded[] fallback behavior, return fields, and beta status with a spot-check instruction. This goes far beyond the annotations and tells the agent exactly what side effects and caveats to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence earns its place: core behavior first, then idempotency, optional steps, the critical lifecycleStage warning, prerequisite, return shape, and beta caveat. Despite being longer than average, it is tightly packed with decision-relevant information and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description correctly discloses return values (contactId, companyId, noteId, degraded[]) and failure modes. It also covers prerequisites, idempotency, optional behavior, and post-call user guidance for beta risk. An agent has enough context to invoke this tool safely and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 83%, so the schema already documents most parameters well. The description adds useful narrative context around note logging and company association, but it largely restates what the parameter descriptions already provide (e.g., lifecycleStage NEVER sent, syncCompany default true). The baseline of 3 is appropriate because the schema carries the parameter-level burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise action ('Sync a single lead into the workspace's connected HubSpot portal'), names the target resource, and explains the upsert-by-email behavior. It also distances itself from the integration connection tool (campaignstack_connect_hubspot) by naming the prerequisite rather than conflating the two.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: it is for syncing a single lead into HubSpot, requires a connected HubSpot integration, and explicitly tells the agent to call campaignstack_connect_hubspot first. It also documents a hard failure condition (leads without an email cannot be synced). It does not enumerate alternatives or say when not to use it, but the prerequisite and error behavior provide solid usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_toggle_automationAInspect

Toggle a scheduled automation on or off. Returns the new enabled state.

ParametersJSON Schema
NameRequiredDescriptionDefault
automationIdYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already signal a non-read-only, non-idempotent, non-destructive operation. The description adds the useful detail that the new enabled state is returned, which partly compensates for the missing output schema, but it does not disclose side effects such as whether toggling off stops active runs or clears pending schedules.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no filler: it states the action, the object, and the return behavior. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter toggle with annotations covering the safety profile, the description is nearly complete: it defines the operation and the return value. It could add how to obtain the automationId or describe the enabled-state type, but neither is essential for calling the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description must compensate, and it does so only indirectly: 'scheduled automation' suggests automationId is the identifier of the automation to toggle. The parameter name is self-descriptive and the schema marks it required, but no guidance is given on where the ID comes from or what format it uses.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Toggle') and a specific resource ('scheduled automation'), making the tool's function unambiguous. The only other toggle tool among siblings targets exclusions, so this is readily distinguishable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call this when you need to flip the enabled state of a scheduled automation. However, it does not explicitly state when not to use it or contrast it with related state-changing siblings such as pause/resume or enable/disable tools, and it does not point to list_automations for obtaining the ID.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_toggle_exclusionA
Idempotent
Inspect

Enable or disable a signal exclusion entry. Disabled exclusions are not evaluated during signal agent processing. Use campaignstack_get_exclusions to find exclusionId values. Use campaignstack_list_signal_agents to find signal agents for context.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYesWhether the exclusion should be active
exclusionIdYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations (readOnlyHint: false, idempotentHint: true, destructiveHint: false) already establish the safety profile. The description adds genuine behavioral context beyond that: what disabling actually does ('not evaluated during signal agent processing'), which is the semantic consequence an agent needs to predict side effects. Nothing contradicts the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with zero filler: the action is front-loaded, the behavioral effect comes second, and the ID-sourcing hints come third. Every sentence earns its place and the most decision-relevant information appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-required-parameter toggle with annotations covering safety, the description covers the action, the behavioral consequence, and how to obtain the required exclusionId. The workspaceId semantics are reasonably handled by the schema. Minor gaps remain — no mention of the return value or when the change takes effect — but nothing critical is missing for a tool this simple.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% — enabled and workspaceId are described in the schema, but exclusionId is not. The description compensates for that gap by telling the agent where valid exclusionId values come from (campaignstack_get_exclusions) and clarifying that the enabled boolean governs whether the exclusion is evaluated. This adds meaning beyond the schema's bare property definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource pair — 'Enable or disable a signal exclusion entry' — and immediately clarifies the operational consequence: disabled exclusions are not evaluated during signal agent processing. This is precise and readily distinguished from bulk operations like campaignstack_set_agent_exclusions and campaignstack_update_filter_exclusion_rules.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable lookup guidance: use campaignstack_get_exclusions to find exclusionId values and campaignstack_list_signal_agents for context. It does not explicitly contrast with the exclusion-related siblings (set_agent_exclusions, update_filter_exclusion_rules), but the practical ID-sourcing instructions make correct invocation straightforward.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_trigger_icp_scoringA
Idempotent
Inspect

Trigger ICP scoring for specific leads or all leads in the campaign. Scoring runs and persists results. Use campaignstack_get_icp_scores to check results afterward. Use campaignstack_list_icps to find ICP IDs first.

ParametersJSON Schema
NameRequiredDescriptionDefault
icpIdYes
leadIdsNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read-only, idempotent, non-destructive operation. The description adds that scoring 'runs and persists results' and that results are checked afterward, implying no direct result return. It could go further by stating whether the operation is asynchronous or what happens to previously stored scores.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tight sentences, front-loaded with the primary action, followed by a persistence note and two workflow pointers. Every sentence carries useful information with no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trigger tool with only 2 parameters and no output schema, the description provides a complete operational loop: find ICP ID, optionally specify leads, run scoring, then retrieve results. Minor gaps exist around empty leadIds semantics and whether execution is synchronous, but the definition is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description compensates by explaining leadIds as 'specific leads' and clarifying the optional behavior as 'all leads' when omitted. It also tells the agent to use list_icps to obtain icpId. It does not describe lead ID format or campaign membership constraints, but the core semantics are covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Trigger') and resource ('ICP scoring') with explicit scope ('specific leads or all leads in the campaign'), clearly distinguishing it from related tools like get_icp_scores and list_icps. No ambiguity about what action this tool performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the prerequisite tool (campaignstack_list_icps) and the follow-up tool (campaignstack_get_icp_scores), providing a clear workflow. It does not explicitly contrast this tool against alternatives, but the sequencing makes the intended usage clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_trigger_workflowAInspect

Trigger workflow execution for specific leads or all leads in the workflow's lead list. Leads are set to 'waiting' status at the workflow entry node and will be processed by the workflow executor. Use campaignstack_list_workflows to find workflow IDs, and campaignstack_get_lead_list to see available leads. To chain workflows FROM INSIDE a workflow, use the integration:add_to_sequence node with provider campaignstack instead; unlike this tool it never re-triggers a lead that already entered the target workflow (loop-safe once-ever semantics).

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdsNo
workflowIdYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that leads are set to 'waiting' status and processed by the workflow executor. It also implies that this tool can re-trigger leads already entered, unlike add_to_sequence, which is critical behavioral information. This goes well beyond the annotations, which only indicate non-read, non-idempotent behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence contributes: scope, execution behavior, prerequisite tools, and the key alternative with its crucial safety distinction. The description is dense but not bloated, and the most important operational details are front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a non-read tool with only two parameters. It explains prerequisites, side effects, and the key distinction from the chaining mechanism. There is no output schema to document, and the absence of return-value details is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the burden of explaining parameters. It clarifies that workflowId identifies the target workflow and leadIds are for specific leads while omitting leadIds triggers all leads. It could explicitly name the parameters and mention that leadIds is optional, but the semantic intent is clear enough for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear action ('Trigger workflow execution') and the exact scope ('specific leads or all leads in the workflow's lead list'). It also differentiates from related tools by naming campaignstack_list_workflows and campaignstack_get_lead_list, and by contrasting with the add_to_sequence node for chaining workflows.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent what this tool is for and when to use alternatives: list workflows to find IDs, get lead list to see leads, and use integration:add_to_sequence for chaining from inside a workflow. The loop-safe contrast clearly defines a boundary where this tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_unarchive_campaignA
Idempotent
Inspect

Unarchive a campaign, bringing it back into active views. Re-evaluates search watches. IMPORTANT: this does NOT restart the workflows and automations that archiving stopped - they stay paused and disabled, and each has to be re-enabled deliberately. That is on purpose: silently resuming outbound work as a side effect of un-hiding a campaign would start messaging real people. Use campaignstack_list_campaigns with includeArchived to find archived campaigns. If the campaign is not found, use campaignstack_list_campaigns to find valid IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false) are consistent with the description, and the description goes well beyond them by disclosing the critical non-effect: workflows and automations stay paused and disabled. It also explains the intentional design rationale (avoiding silently messaging real people) and the search-watches side effect — exactly the behavioral context 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, logically ordered, and every sentence earns its place: action, side effect, critical warning, rationale, lookup guidance, error fallback. The safety-critical constraint is front-loaded with 'IMPORTANT:' and the included rationale makes the constraint memorable without adding fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write operation with real-world outbound-messaging implications, the description covers the action, the intentional non-effects, the safety rationale, input sourcing, and error handling. Nothing an agent needs to invoke it correctly or to decide whether it is the right tool is missing, even without an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single campaignId parameter, but the description compensates by telling the agent exactly how to obtain a valid value (campaignstack_list_campaigns with includeArchived) and how to handle a not-found case. For one obvious parameter this is strong compensation, though it stops short of explicitly defining the value domain (e.g., that it must be an archived campaign's ID).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Unarchive a campaign') plus the observable outcome ('bringing it back into active views'), making the purpose unmistakable. It is clearly distinguished from siblings like campaignstack_archive_campaign, campaignstack_delete_campaign, and campaignstack_update_campaign by its unique action and the added side-effect note about re-evaluating search watches.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly names the sibling tool campaignstack_list_campaigns with the includeArchived flag for finding archived campaigns, and provides a fallback instruction for not-found errors. It also establishes an important exclusion — this tool does NOT restart workflows/automations — signaling the agent that separate re-enable tools are needed, which is precise when-to-use vs alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_unschedule_content_postA
Idempotent
Inspect

Moves a 'scheduled' content post back to 'draft' status, clearing the scheduled time. Use campaignstack_schedule_content_post to reschedule it.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentPostIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by stating the concrete state transition and that the scheduled time is cleared. With annotations already indicating a non-read-only, idempotent, non-destructive operation, this is useful behavioral context without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences carry the action, the effect, and the relevant sibling alternative with no filler or repeated schema facts. Information is front-loaded: the primary effect comes first, routing second.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter mutation with no output schema and annotations covering idempotence and safety, the description adequately covers the state change and the next step. It does not specify return values or error behavior, but those are not clearly necessary for such a simple operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has no description for contentPostId, so the description has to compensate; it only implies that the ID identifies the scheduled content post being unscheduled. The single parameter's purpose is inferable from the resource noun, but explicit guidance on how to obtain the ID is absent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: it moves a content post from 'scheduled' to 'draft' and states that the scheduled time is cleared. This clearly distinguishes it from siblings like schedule_content_post, approve_content_post, or delete_content_post.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The first sentence establishes when to use it: when a scheduled post should be reverted to draft. The second sentence names the exact alternative for the opposite operation, campaignstack_schedule_content_post, giving an agent explicit routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_brand_identityA
Idempotent
Inspect

Updates the brand identity for a workspace's default account voice. Supports updating voice guide text and visual identity (colors, font style, style descriptors). Pass only the fields you want to change. Use campaignstack_get_workspace_voice to check current values first.

ParametersJSON Schema
NameRequiredDescriptionDefault
fontStyleNoFont style description (e.g. bold sans-serif, geometric)
voiceGuideNo
accentColorNoAccent brand color as hex (e.g. #ff6b35)
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
primaryColorNoPrimary brand color as hex (e.g. #1a2b3c)
secondaryColorNoSecondary brand color as hex (e.g. #4d5e6f)
styleDescriptorsNoStyle keywords (e.g. clean, minimal, corporate)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-readonly, idempotent, non-destructive operation. The description adds useful behavioral context by clarifying partial-update semantics—unspecified fields are left unchanged—and by recommending a pre-check before overwriting. It does not mention side effects or return behavior, but the annotation profile covers the core safety traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, each earning its place: the first defines the operation, the second enumerates supported content, and the third gives key usage guidance. Information is front-loaded and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter partial-update tool with no output schema, the description is largely sufficient: it explains what updates, which field groups are supported, and how to invoke it safely. It leaves some ambiguity around sibling tool boundaries and does not state expected return values, but the schema and annotations fill most gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high at 86%, so the schema carries most parameter documentation. The description adds value by clarifying that voiceGuide refers to voice guide text and by grouping the visual identity fields (colors, font style, style descriptors). The 'pass only fields you want to change' guidance reinforces the all-optional, partial-update semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: updates brand identity for a workspace's default account voice. It clearly indicates the scope (voice guide text and visual identity), and points to a related getter. However, it does not explicitly distinguish itself from sibling tools like campaignstack_update_workspace_branding or campaignstack_update_conversation_voice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear usage context: this is a partial-update tool where only changed fields should be passed. It also instructs the agent to check current values first via campaignstack_get_workspace_voice. It does not state when not to use the tool or mention alternative update tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_campaignA
Idempotent
Inspect

Update a campaign's title, description, or outreach intents (why this campaign writes to people). Only provided fields are updated. Returns the updated campaign object.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNo
campaignIdYes
descriptionNo
outreachIntentsNoAcceptable outcomes for this outreach, most preferred FIRST. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back. The craft picks the highest outcome the individual reader could plausibly give, so listing several is how a non-buyer still gets a relevant message.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already state the tool mutates (readOnlyHint=false), is idempotent, and is non-destructive; the description adds the key partial-update behavior ('Only provided fields are updated') and the return contract ('Returns the updated campaign object'). These are meaningful behavioral details not available in the structured annotations. There is no contradiction between the description and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences carry the entire semantics: what is updated, what the update means, the partial-update rule, and the return value. There is no filler or redundant restatement of the name or schema. It is well structured and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The combination of description, the detailed schema description for outreachIntents (override/fallback/ordering), and annotations covers safety, idempotency, field semantics, and return value. Without an output schema, 'Returns the updated campaign object' is sufficient. The only minor gap is the absence of explicit guidance about when not to use this tool, which is more usage guidance than contextual completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 25% schema description coverage, the description compensates by naming all updatable fields and clarifying that outreachIntents means 'why this campaign writes to people.' It also communicates the optionality/partial-update behavior ('Only provided fields are updated') that the schema does not state at the top level. campaignId is left to inference, but its role is self-evident from the name and required flag.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Update a campaign's') and enumerates the exact mutable fields—title, description, and outreachIntents—which distinguishes it from sibling tools like create_campaign, archive_campaign, or update_campaign_weight. The parenthetical also clarifies the otherwise ambiguous 'outreachIntents' concept. There is no mistaking what operation this performs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use (modify an existing campaign's content fields) is implied by the verb and the field list, but the description never explicitly says when to prefer this tool over related siblings such as create_campaign or update_campaign_weight. It offers no exclusionary guidance or alternative routing. This is adequate but left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_campaign_weightA
Idempotent
Inspect

Update the weight (score impact) of a signal type for a campaign. Use campaignstack_get_campaign_weights to see current weights.

ParametersJSON Schema
NameRequiredDescriptionDefault
campaignIdYes
signalTypeYes
scoreImpactYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate that this is not read-only, is idempotent, and is not destructive. The description adds useful semantic context ('score impact') but does not disclose additional behavioral detail such as whether the value overwrites the existing weight or whether there are downstream effects on scoring.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with the core action front-loaded and no filler. The pointer to the getter tool earns its place and does not bloat the description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter mutation with annotations covering idempotency and non-destructiveness, the description is mostly complete. It tells the agent what to update and how to inspect current weights, which also helps discover valid signalType values. However, with no output schema and no explicit mention of the response or success behavior, it leaves a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only explains the concept of 'weight' and does not clarify what values signalType accepts, how campaignId should be formatted, or how scoreImpact interacts with the range constraints already present in the schema. It adds some meaning but leaves key parameter semantics undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Update the weight') on a specific resource ('signal type for a campaign'), and clarifies that 'weight' means 'score impact.' This distinguishes it from the related getter, campaignstack_get_campaign_weights, and from the broader update_campaign tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly directs the agent to use campaignstack_get_campaign_weights to see current weights before updating, which is practical and context-rich. It does not go further to state when not to use this tool or compare it to other update_* siblings, 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.

campaignstack_update_company_metadataA
Idempotent
Inspect

Update workspace-level metadata (notes and tags) on a company. Only provided fields are updated. Works for shared companies and imported (workspace-scoped) companies; a company can be annotated even before any lead links it to the workspace. Use campaignstack_get_company or campaignstack_list_companies to find company IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
notesNo
companyIdYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds meaningful behavioral detail by explaining partial-update behavior and that a company can be annotated before any lead links it to the workspace. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with purpose and no filler. The first sentence states what it does, the second adds key behavioral semantics, and the third gives ID lookup guidance. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter update tool with no output schema, this description covers the essential invocation context: what is updated, partial-update behavior, workspace eligibility, and how to find company IDs. It does not describe the return value, but no output schema exists and the operation is straightforward enough that this is not a critical omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, but the description compensates by naming the substantive parameters: notes, tags, and companyId. It also clarifies that only provided fields are updated, which adds real semantic value beyond the schema. The workspaceId nuance is already explained in the schema, so the gap is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update workspace-level metadata (notes and tags) on a company.' It also clarifies partial-update semantics with 'Only provided fields are updated,' making the operation distinct from related update tools like update_lead_metadata or update_workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context on when the tool applies: shared companies, imported workspace-scoped companies, and companies not yet linked to a lead. It does not explicitly name alternatives or when-not-to-use conditions, but it does tell the agent how to obtain company IDs via campaignstack_get_company or campaignstack_list_companies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_competitor_watch_accountsA
Idempotent
Inspect

Replaces the LinkedIn accounts a competitor watch reads and acts with. Updates the bound signal agent's read and act pools, its workflow, and the discovery pool. Requires at least one account. Use campaignstack_list_accounts to find valid account IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
watchIdYes
accountIdsYesLinkedIn account IDs the watch reads and acts with. Replaces the current selection. Use campaignstack_list_accounts to find valid IDs.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint false, idempotentHint true, destructiveHint false), the description explains exactly what is mutated: the signal agent's read and act pools, its workflow, and the discovery pool. It also makes the replacement semantics explicit. This gives an agent a solid behavioral model of the side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler. The primary action is front-loaded, followed by the impacted components and the required prerequisite. Every sentence adds useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation tool with no output schema, the description is largely complete: it states the effect, the prerequisite, and the source for valid account IDs. It does not define watchId explicitly or mention edge cases, but the tool name and context make the intent reasonably clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes accountIds well, and the description reinforces it by framing the action as replacing the accounts and requiring at least one. However, with 50% schema coverage, watchId has no schema description and the description also does not elaborate on what a watchId is or how to obtain one. The provided guidance is valid but only partially compensates for that gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Replaces the LinkedIn accounts a competitor watch reads and acts with.' It then names the concrete affected components (read/act pools, workflow, discovery pool), which clearly distinguishes it from related sibling tools like update_signal_agent or set_workflow_accounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the usage context clear: change which LinkedIn accounts a competitor watch uses. It also gives an explicit prerequisite and helper tool: 'Use campaignstack_list_accounts to find valid account IDs,' and states the minimum input requirement. It does not explicitly mention when not to use the tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_content_postA
Idempotent
Inspect

Updates a draft content post. Only posts in 'draft' or 'scheduled' status can be edited. Pass only the fields you want to change. Supports updating tags (replaces entire array). Use campaignstack_get_content_post to check current status before updating.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
tagsNo
mediaIdsNo
postTypeNo
contentPostIdYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses two important behaviors: the partial-update contract ('Pass only the fields you want to change') and the overwrite risk for tags ('replaces entire array'). This is exactly the behavioral context an agent needs and is not present in the schema or annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each earning its place: action/status, partial update, tags behavior, and a status check pointer. No filler or redundant restating of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient to invoke the tool correctly for the common path: check status, pass desired fields, and understand tags replacement. It does not mention alternate tools for non-editable statuses or the return/error behavior, but the explicit pre-step mitigates the main risk.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the partial-update model and the replacement semantics of tags. It does not explicitly describe mediaIds, body, or postType behavior, though the schema's types/enum and the partial-update statement cover much of the remaining need.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and object ('Updates a draft content post') and immediately narrows scope with the status constraint. This clearly distinguishes the tool from create/delete/schedule siblings in the campaignstack namespace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when editing is allowed ('Only posts in draft or scheduled status can be edited') and gives a concrete pre-step ('Use campaignstack_get_content_post to check current status before updating'). It does not explicitly name create/schedule/delete as alternatives, so it stops short of full when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_conversation_voiceAInspect

Edit a conversation voice profile's structured fields. Send the FULL profile object back (read it first with campaignstack_get_conversation_voice); the write is validator-enforced and versions the previous state. An edit to an approved profile keeps it approved.

ParametersJSON Schema
NameRequiredDescriptionDefault
profileYesThe full profile object to store. Read the current one first, edit fields, send it back whole.
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)
readableSummaryNo
linkedinAccountIdYesLinkedIn account id

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare three false hints, so the description carries the behavioral disclosure burden. It adds genuinely valuable traits beyond those hints: the write is 'validator-enforced' (implying rejection risk on invalid payloads), it 'versions the previous state' (confirming reversibility, consistent with destructiveHint=false), and an edit 'keeps [the profile] approved'. These are meaningful behavioral details, though it omits error-path behavior and 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, zero waste. The purpose is front-loaded in sentence one, the critical workflow and validation/versioning behavior in sentence two, and the approval edge case in sentence three. Every sentence carries distinct information that would otherwise have to be discovered by trial and error.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a highly nested schema (8 required profile sub-objects), 4 parameters, and no output schema, the description covers the most failure-prone aspects: the full-object requirement, the read-first sequence, validator enforcement, and approval-state retention. It does not explain the readableSummary parameter (undocumented in schema too) or describe the return value, which matters slightly more since no output schema exists. Minor gaps against an otherwise thorough definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the schema already documents profile, workspaceId, and linkedinAccountId. The description adds the critical meta-semantic missing from the schema: this is a full-replacement write, not a partial patch — 'Send the FULL profile object back... send it back whole.' That instruction prevents a common agent failure mode. The undocumented readableSummary parameter is not mentioned, but the core payload semantics are well supplemented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Edit a conversation voice profile's structured fields.' It clearly distinguishes this from the two likely confusable siblings — campaignstack_get_conversation_voice (read workflow: 'read it first') and campaignstack_extract_conversation_voice (creation-style extraction) — by framing the operation as editing an existing object by sending it back whole.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit precondition workflow: 'read it first with campaignstack_get_conversation_voice' and 'Send the FULL profile object back (read it first...)'. This tells the agent exactly when and how to invoke the tool. It lacks an explicit exclusion (e.g., 'use extract_conversation_voice to create a new profile'), but the read-first instruction and the full-object requirement effectively route the agent away from the wrong alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_filter_exclusion_rulesA
Idempotent
Inspect

Replace the rule set of a filter-type signal exclusion. Filter exclusions skip leads matching attribute rules (e.g. companyName contains 'Acme') during signal agent processing and before outreach dispatch. Rules combine with the given logic; prefer 'or' for blocklists. 'and' across several values of the same field can never match. Use campaignstack_get_exclusions to find exclusionId values of filter-type entries.

ParametersJSON Schema
NameRequiredDescriptionDefault
logicNoHow rules combine. Use 'or' for a blocklist of alternatives (exclude leads matching ANY rule). 'and' requires ALL rules to match one lead at once and is unsatisfiable for several values of the same field.or
rulesYesComplete replacement rule set
exclusionIdYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint and destructiveHint, so the bar is lower. The description adds that exclusions take effect during signal agent processing and before outreach dispatch, and clarifies replacement rather than incremental editing. It does not discuss permissions or impact on already-queued leads, but the core behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each with a distinct job: define the operation, explain its purpose, and provide critical logic guidance. The 'and can never match' warning is repeated from the schema but earns its place because it is a high-risk gotcha.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given four parameters, no output schema, and sibling tools that handle other exclusion types, the description is sufficient: it defines the resource, the rule format, the logic pitfall, and how to resolve the ID parameter. A minor gap is lack of any statement about what the call returns or what happens to the previous rule set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers logic and rules in detail, but the description adds meaning by giving a concrete rule example and explaining how to obtain exclusionId. With 75% schema coverage, the missing behavior of exclusionId is compensated by the pointer to campaignstack_get_exclusions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a concrete action ('Replace the rule set') on a specific resource ('filter-type signal exclusion'), and the following sentence defines what filter exclusions do, distinguishing this from generic exclusion tools. It is explicit that this is a full replacement, not an incremental add/remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear operational guidance: prefer 'or' for blocklists, warns that 'and' across same-field values is unsatisfiable, and directs the agent to campaignstack_get_exclusions for exclusionId lookup. It does not explicitly name an alternative tool for non-filter or URL exclusions, so it lacks a formal when-not-to-use statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_icpA
Idempotent
Inspect

Update an existing ICP's criteria. Only supply the fields you want to change; omitted fields are left unchanged. Updating criteria automatically invalidates cached scores and reschedules scoring variant generation. Use campaignstack_list_icps to find ICP IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
icpIdYes
titlesNo
keywordsNo
industriesNo
senioritiesNo
companySizesNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes beyond annotations by disclosing non-obvious side effects: invalidating cached scores and rescheduling scoring variant generation. This is valuable behavioral context that an agent needs to anticipate consequences, and it does not contradict the idempotent or non-destructive hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly-scoped sentences: the operation, the update semantics, the side-effect warning, and a pointer to the prerequisite lookup tool. No filler, front-loaded purpose, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity update tool, the description covers purpose, patch semantics, side effects, and ID discovery. A minor gap is that it does not clarify whether supplying an array field replaces the entire list or merges with existing values, and there is no mention of error conditions or return values, though no output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining the essential patch behavior: supplied fields change, omitted fields remain unchanged. It also tells the agent how to obtain the required icpId. Individual field names like titles, keywords, and industries are largely self-explanatory, so the lack of per-field detail is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise operation: 'Update an existing ICP's criteria.' The verb 'Update' and resource 'existing ICP' make it unmistakable and clearly distinguish it from sibling tools like campaignstack_create_icp and campaignstack_delete_icp.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs partial-update semantics ('Only supply the fields you want to change; omitted fields are left unchanged') and points to campaignstack_list_icps for finding ICP IDs. It does not explicitly state when not to use this tool versus create_icp, though 'existing' implies that distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_lead_contact_infoA
Idempotent
Inspect

Save extracted contact information (email, phone, website) to a lead. Called by the linkedin-contact-info agent after extracting data from LinkedIn's Contact Info overlay. Only provided fields are updated; omitted fields are left unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNo
phoneNo
leadIdYes
websiteNo
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate that this is a mutating, idempotent, non-destructive operation. The description adds valuable partial-update behavior: 'Only provided fields are updated; omitted fields are left unchanged.' This aligns with idempotentHint and gives the agent an accurate mental model of the write semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two lean sentences with no filler. The core action and fields are front-loaded, and the partial-update behavior is stated concisely in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple five-parameter primitive update tool, the description covers the caller, the source context, the fields, and the update semantics. The schema covers workspaceId constraints, and no output schema is required for a straightforward save operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low (20%), but the description compensates by naming the contact fields (email, phone, website) and implying leadId via 'to a lead.' It also explains the update behavior for provided vs omitted fields. workspaceId is already described in the schema, so together the description and schema cover all parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('Save extracted contact information'), the target resource ('a lead'), and the specific fields involved (email, phone, website). It also distinguishes itself from enrichment tools by stating it is called after data has already been extracted from LinkedIn's Contact Info overlay.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states who calls this tool and when ('Called by the linkedin-contact-info agent after extracting data from LinkedIn's Contact Info overlay'), giving an agent a clear trigger context. It does not explicitly contrast with alternatives like campaignstack_enrich_lead_contact_info, but the caller context is strong enough guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_lead_listA
Idempotent
Inspect

Update a lead list: rename it and/or update its query predicate. Setting a query converts the list to query type. Use campaignstack_list_lead_lists to find valid lead list IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
queryNo
leadListIdYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral detail beyond annotations: setting a query converts the list to query type. This is useful state-changing context that helps the agent predict the tool's effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and parameters, with no filler. The behavioral note about query conversion and the reference to the ID-lookup sibling are both essential and compactly placed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description gives the essential operation, the conversion behavior, and where to find IDs, which is adequate for a simple update. However, the query object is a nested structure with required include/exclude/filter/logic fields and zero schema-level descriptions; the description does not sufficiently compensate, so an agent may not know how to construct a valid query or what each field means.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only maps name to 'rename' and query to 'query predicate'. It does not explain the meaning of the nested query fields include, exclude, filter, logic, or excludedLeadIds, nor does it clarify the leadListId parameter beyond pointing to the list tool. This leaves the most complex part of the input schema under-explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Update a lead list', then enumerates the two concrete modification actions: rename and update query predicate. This clearly distinguishes it from related tools like create_lead_list and remove_lead_list, and the 'converts the list to query type' note clarifies the semantic effect of the query parameter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Covers prerequisite context by directing the agent to campaignstack_list_lead_lists for valid lead list IDs, which is essential for correct invocation. It does not explicitly state when to prefer this over create_query_lead_list or create_lead_list, but the 'update' framing and 'converts to query type' note give clear usage context without exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_lead_metadataA
Idempotent
Inspect

Update user-level metadata (notes and tags) on a lead. Only provided fields are updated. Use campaignstack_search_leads or campaignstack_get_lead to find lead IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
notesNo
leadIdYes
workspaceIdNoWorkspace ID (required for user keys; workspace keys are bound)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark the operation as non-read-only, idempotent, and non-destructive, so the description doesn't need to cover those basics. The description adds useful behavioral nuance by stating that only provided fields are updated, which tells the agent the tool won't clear unspecified metadata. It does not specify whether the tags array replaces all tags or merges, but this is a minor gap given the idempotent annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences carry all the essential information: the action, the scope, the partial-update behavior, and how to find lead IDs. There is no filler, and the most important detail is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update tool with four parameters, the description covers the core semantics and provides ID-discovery guidance. It doesn't explicitly describe the return value, and there is no output schema, but the description plus annotations give enough context for an agent to invoke it correctly. The main omission is the exact behavior for tags replacement, but this is a minor completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description should compensate. It does name 'notes and tags' and says 'on a lead', which clarifies leadId and the two main fields, but it does not add meaningful detail about workspaceId beyond what the schema already provides. For the low coverage, the description adds some value but leaves the workspaceId semantics to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Update') and resource ('user-level metadata (notes and tags) on a lead'), making the tool's scope immediately distinguishable from sibling tools like update_lead_contact_info or update_company_metadata. The parenthetical field list removes ambiguity about what kind of metadata is affected.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent to use campaignstack_search_leads or campaignstack_get_lead to find lead IDs, and the 'Only provided fields are updated' phrase communicates partial-update semantics. It does not explicitly contrast with alternative update tools (e.g., update_lead_contact_info), but the ID-lookup guidance is concrete and actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_member_roleA
Idempotent
Inspect

Update a member's role. Via MCP, roles can only be set to 'member'. Granting admin or transferring ownership requires the workspace settings UI. Use campaignstack_list_members to find member IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesOnly "member" can be set via MCP
memberIdYes
workspaceIdYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that the call is non-read-only, idempotent, and non-destructive, so the description does not need to restate those. It adds useful behavioral context: the MCP surface is deliberately limited to the 'member' role and admin/ownership changes are off-platform, clarifying the tool's side-effect boundaries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler. The action comes first, followed by the limitation, then the out-of-band alternative and ID lookup guidance. Every sentence contributes to correct tool use.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter mutation, the description supplies the allowed role, the source for member IDs, and the boundary for admin/ownership actions. It is slightly incomplete in not indicating how to source workspaceId or what a successful update returns, but annotations and schema already cover the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 33% schema description coverage, the description compensates by telling the agent to use campaignstack_list_members to find member IDs and by reinforcing that role can only be 'member'. The workspaceId parameter still relies on the agent's existing workspace context, but the non-obvious parameters are addressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb-resource pair ('Update a member's role') and immediately scopes the tool with a hard constraint: via MCP roles can only be set to 'member'. It also distinguishes this tool from admin/ownership changes by stating those require the workspace settings UI, so an agent knows exactly what this tool does and does not do.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when this tool is appropriate (setting a role to 'member'), when it is not (admin grants and ownership transfers require the UI), and how to satisfy the memberId parameter (use campaignstack_list_members). This is clear routing to alternatives and prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_notification_preferencesA
Idempotent
Inspect

Update the calling user's notification email preferences. Set a category's email delivery globally (omit workspaceId) or as a per-workspace override (pass workspaceId); pass clear=true to remove a stored deviation so resolution falls back (workspace → global → default). Also toggles the weekly report via weeklyReport. Requires a USER API key (csu_). Categories: account_health, billing, reviews, engagement, workflow, reports. Use campaignstack_get_notification_preferences to inspect current values.

ParametersJSON Schema
NameRequiredDescriptionDefault
clearNo
valueNo
categoryNo
workspaceIdNo
weeklyReportNo

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnly=false, idempotent=true, and destructive=false, and the description adds substantial behavioral context beyond those flags: it requires a USER API key (csu_), explains global versus per-workspace override semantics, clarifies that clear=true removes a stored deviation with fallback order workspace → global → default, and notes the weeklyReport behavior. This is high-value transparency with no contradiction against 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is information-dense and front-loaded with the primary purpose, then mode semantics, auth requirements, and the inspection alternative. Most sentences earn their place, but the category list partly duplicates the schema enum and is incomplete, adding a small amount of unnecessary and slightly inaccurate noise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given five optional parameters and no output schema, the description covers auth requirements, parameter interactions, fallback behavior, and the getter tool, making invocation feasible. It is not fully complete because it does not describe the return/error shape and its category list is out of sync with the schema enum.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the parameter semantics burden and mostly succeeds: workspaceId, clear, weeklyReport, and the category concept are given meaningful behavior beyond their names. However, it omits the value parameter's accepted values, and its category list is an incomplete subset of the schema enum, missing meetings and signals, which could mislead an agent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States the exact operation — updating the calling user's notification email preferences — and additionally specifies the global versus per-workspace modes and the weekly report toggle. This verb+resource description is specific enough to distinguish it from the many notification-related sibling tools such as campaignstack_get_notification_preferences and campaignstack_mark_notification_read.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly establishes when to use the tool: to change the calling user's notification email delivery or weekly report settings. It also explicitly directs the agent to campaignstack_get_notification_preferences for inspecting current values, but it does not spell out when not to use this tool or contrast it with other notification update tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_personaA
Idempotent
Inspect

Update a persona's name, description, pain points, goals, or objections. Only provided fields are updated. Returns the updated persona object.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
goalsNo
personaIdYes
objectionsNo
painPointsNo
descriptionNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate a non-read-only, idempotent, non-destructive operation. The description adds value by clarifying partial-update semantics ('Only provided fields are updated') and by stating the return behavior ('Returns the updated persona object'). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence that front-loads the action and resource, lists the relevant fields, states the partial-update behavior, and notes the return value. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward update tool, this is largely complete: it names the fields, states partial-update semantics, and reports the return object despite no output schema. The main gap is not offering guidance on prerequisites like the persona existing or how errors are surfaced.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It names the updatable fields, which helps, and clarifies that only provided fields are updated. However, it does not explain the required personaId parameter or provide any detail about formats, boundaries, or list item expectations beyond what the schema already shows.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Update a persona's...' and enumerates the exact mutable fields: name, description, pain points, goals, or objections. This clearly distinguishes it from create, get, list, and delete persona tools nearby.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage context is implied by the verb 'Update' and the resource 'persona': use this when modifying an existing persona's fields. However, it does not explicitly mention alternatives or conditions, such as using create_persona when the persona does not exist yet.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_phaseA
Idempotent
Inspect

Update a campaign phase's name, description, objectives, phase type, or order. Only provided fields are updated. Returns the updated phase object.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
orderNo
phaseIdYes
phaseTypeNo
objectivesNo
descriptionNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is non-read-only, idempotent, and non-destructive. The description adds useful behavioral context by stating that only provided fields are updated and that the response returns the updated phase object. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no redundancy. The action and target are front-loaded, the partial-update rule is stated compactly, and the return value is included without extra prose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a relatively simple update tool, the description covers what is updated, how partial updates work, and what is returned. The input schema already documents the required phaseId and enum, while annotations cover the safety profile. It does not address prerequisites or disambiguate from create/delete, but those are not critical here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description partially compensates by enumerating the updateable fields (name, description, objectives, phase type, order) and noting partial-update behavior. However, it does not mention the required phaseId parameter or clarify constraints like enum values or objectives array semantics, leaving meaningful gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Update') with a precise resource ('a campaign phase') and lists the exact modifiable fields. It is clearly distinct from sibling tools like create_phase, get_phase, delete_phase, and update_campaign.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this tool is for updating an existing campaign phase, and it adds the partial-update rule ('Only provided fields are updated'). However, it gives no explicit direction on when to choose this over sibling tools such as create_phase, delete_phase, or update_campaign, nor does it state exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_signal_agentA
Idempotent
Inspect

Update a signal agent's configuration. Only provided fields are updated. Can change name, response mode (auto_send / review_first), observing account list (accountIds), acting account list (actAccountIds), the agent playbook (what to do at each stage of the thread, never how to sound), or public reply configuration. Account lists are kind-restricted: connection-watch and message agents are permanently bound to the account they watch (accountIds/actAccountIds are rejected with AGENT_POOL_LOCKED); group watch agents accept exactly one observing account (the group member; GROUP_READ_POOL_SINGLE otherwise). Use campaignstack_list_signal_agents to find agent IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
agentIdYes
playbookNo
accountIdsNo
responseModeNo
silenceHoursNo
actAccountIdsNo
publicReplyConfigNo
followUpDelaysHoursNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses kind-restricted account lists, permanent binding for connection-watch/message agents, the single-account constraint for group watch agents, and the specific error codes AGENT_POOL_LOCKED and GROUP_READ_POOL_SINGLE. It also clarifies playbook semantics ('what to do at each stage of the thread, never how to sound'). This is substantial behavioral context and is consistent with idempotentHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description front-loads the action and partial-update behavior, then packs constraints into compact parentheticals and semicolon-separated clauses. No sentence is wasted; length is justified by the density of useful constraints.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers partial updates, field scope, account restrictions, error codes, and ID discovery, which is strong for a 9-parameter mutation without an output schema. The main gap is that two supported parameters (silenceHours, followUpDelaysHours) are unmentioned, and there is no note about response/return behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates by explaining responseMode enum values, accountIds, actAccountIds, playbook, and publicReplyConfig. However, it omits silenceHours and followUpDelaysHours from the updatable list, so not every schema field receives semantic coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Update a signal agent's configuration,' and immediately clarifies partial update semantics with 'Only provided fields are updated.' It lists the updatable aspects, making the tool's scope unmistakable relative to create/delete/pause siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives practical context: partial updates, the fields that can change, and a pointer to 'campaignstack_list_signal_agents to find agent IDs.' It doesn't explicitly say when to prefer this over related tools like pause/resume/create, but the configuration-update context is clear enough for an agent to select it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_workflowA
Idempotent
Inspect

Update a workflow's name, description, email sending account, and/or graph. Provide name/description/emailGoogleAccountId to patch metadata; provide graph to replace the non-anchor nodes and edges. Both can be supplied in a single call. Set existingNodeId on graph nodes that update an existing node in place. Claimed nodes keep their in-flight leads, while removing a node that still holds active leads fails with NODE_HAS_ACTIVE_LEADS (drain it first with campaignstack_cancel_node_leads). Graph replacement runs validation. Invalid graphs are rejected and the workflow is left unchanged. To enable or disable a workflow use campaignstack_update_workflow_status instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations by disclosing in-place node updates via existingNodeId, lead preservation for claimed nodes, the NODE_HAS_ACTIVE_LEADS error and how to resolve it, validation behavior, and atomicity ('Invalid graphs are rejected and the workflow is left unchanged'). No annotation contradiction is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence carries distinct, necessary information: core action, parameter grouping, node semantics, failure mode, validation behavior, and sibling tool routing. It is front-loaded with the primary purpose and contains no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers behavior well, but for a complex mutation tool with an empty schema it omits a critical piece: how the agent specifies which workflow to update (e.g., a workflowId parameter). Without that, and with no schema or output schema to fill the gap, the description is not complete enough for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With an empty input schema, the description is the only source of parameter meaning: name/description/emailGoogleAccountId for metadata and graph/existingNodeId for graph replacement. However, it does not specify types, requiredness, the graph node structure, or how the target workflow is identified, so an agent still lacks enough structural detail to invoke the tool reliably.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('update') and a specific resource ('workflow's name, description, email sending account, and/or graph'), immediately distinguishing this from sibling tools. It also names the one sibling it is not (campaignstack_update_workflow_status), which removes ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly separates metadata patching from graph replacement and says both can be combined in one call. It also gives an explicit when-not-to-use instruction: 'To enable or disable a workflow use campaignstack_update_workflow_status instead.' This is clear routing behavior.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_workflow_statusA
Idempotent
Inspect

Enable or disable a workflow. Enabling activates the workflow (status becomes active, the graph is validated, and initial sourcing starts); disabling pauses it. When enabled, the workflow will process leads according to its node configuration. Use campaignstack_get_workflow to inspect the current node configuration first.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYes
workflowIdYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this as mutating, idempotent, and non-destructive. The description adds meaningful behavioral detail beyond those annotations: enabling validates the graph, starts initial sourcing, and causes the workflow to process leads, while disabling pauses rather than deletes. This is consistent with the annotations and gives the agent useful expectations about side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no fluff: the core enable/disable action comes first, followed by behavioral consequences, then a practical prerequisite. Every sentence earns its place and the structure supports quick agent comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter boolean toggle, the description covers the key side effects: graph validation, initial sourcing on enable, pausing on disable, and ongoing lead processing. It omits return values and error conditions, and there is no output schema, but the information needed to invoke correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the semantic weight. It clearly explains the enabled boolean as activate versus pause, and implicitly ties the operation to workflowId. It doesn't specify ID format or retrieval steps, but with only two simple parameters this is adequate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific operation: 'Enable or disable a workflow.' It then clarifies exactly what each state does: enabling activates the workflow with graph validation and initial sourcing, while disabling pauses it. This clearly distinguishes the tool from generic workflow updates and one-shot trigger tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context about when to use the tool: to activate or pause a workflow, with concrete behavioral consequences. It also provides a useful prerequisite by recommending campaignstack_get_workflow to inspect node configuration first. It does not explicitly name alternatives such as update_workflow, but the usage context is clear enough for a simple toggle.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_update_workspaceA
Idempotent
Inspect

Update workspace settings. Only provided fields are updated. offerContext is the factual company/offer grounding injected into every AI craft (pass an empty string to clear it). capabilities describes what the SYSTEM behind this workspace can detect and do (signal detection, automated actions, integrations), as opposed to what it sells: it is injected into AI reply crafts only, so the agent can recognise when a lead describes a problem the product solves. Keep it short and factual; it is never used as a pitch list. Pass an empty string to clear it. playbookSections is the playbook itself, one field per section, each with its own hard character cap: a write over a cap is rejected, so shorten rather than retry. Read all current values via campaignstack_get_playbook.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
industryNo
companyNameNo
workspaceIdYes
capabilitiesNo
offerContextNo
outreachIntentsNoAcceptable outcomes for this outreach, most preferred FIRST. Answers 'why are we writing to these people': a message with no stated purpose reads as a compliment plus an open question. Resolution is workspace then campaign then workflow, and the narrowest non-empty list REPLACES the wider ones rather than merging, so setting it here overrides the level above. Pass an empty array to clear this level and fall back. The craft picks the highest outcome the individual reader could plausibly give, so listing several is how a non-buyer still gets a relevant message.
playbookSectionsNoThe workspace playbook, one field per section. Only the fields you pass are changed. Each field has a target length and a HARD character cap; a write over the cap is REJECTED, not truncated. Write to the target, not the cap: identity (aim for about 400, max 1200, sent on every message): who we are, positioning, what makes us different; voice (aim for about 400, max 1200, sent on every message): tone, formality, words to use and avoid; boundaries (aim for about 500, max 1500, sent on every message): topics to avoid, claims never to make; angles (aim for about 1000, max 3000, sent on messages we send first): reasons to reach out that land, and the levers that persuade; objections (aim for about 2000, max 6000, sent on replies, after they have written back): what people push back with, and the real answers. Sections are selected per message, so a long objections list costs a first message nothing. Do NOT restate the offer, the personas or the campaign goal here: all three already reach the prompt from structured data, and a second copy can only contradict the first.
companyWebsiteUrlNo

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With idempotentHint=true and destructiveHint=false already declared, the description adds substantial behavior beyond annotations: writes over a hard cap are REJECTED rather than truncated (telling the agent to shorten, not retry), empty strings clear fields, outreachIntents uses replace-not-merge resolution with fallback to wider scopes, and playbook sections are selected per message. This is exactly the kind of operational detail an agent needs to avoid failed calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but every sentence earns its place — the offerContext/capabilities distinction is essential and non-obvious, and the character-cap warning prevents a whole class of failed writes. It is front-loaded with the core partial-update semantic, then organized logically by parameter. The outreachIntents detail is deferred to the schema description, which keeps the main description from bloating further.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with nested objects and no output schema, the description covers the high-risk aspects: error behavior, clearing semantics, override resolution, and what not to include in playbook sections. Minor gaps remain — no mention of what the response looks like on success, whether empty strings clear the simple fields, or auth requirements — but the critical decision points for a correct call are addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 22%, so the description carries the burden — and it earns its keep on the three genuinely ambiguous parameters: offerContext (factual grounding injected into every craft), capabilities (system detection abilities injected into replies only, never a pitch list), and playbookSections (per-section char caps with target lengths). The self-evident params (name, industry, companyName, companyWebsiteUrl, workspaceId) are left to their names, which is an acceptable trade given the description cannot cover all nine at this length.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Update workspace settings') and immediately clarifies the partial-update semantics ('Only provided fields are updated'). It clearly identifies the operation, though it does not explicitly differentiate itself from closely named siblings like campaignstack_update_workspace_branding or campaignstack_get_workspace; the agent must infer the boundary from the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong contextual guidance about when field values are consumed (injected into crafts, reply crafts only, per-message selection) and explicitly points to campaignstack_get_playbook for reading current values before updating. However, it never states when NOT to use this tool or names alternatives for branding/workspace-level reads, so the when-to-use is largely 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.

campaignstack_update_workspace_brandingA
Idempotent
Inspect

Update a workspace's branding: brandName, primaryColor (hex like #4f46e5), hidePoweredBy. Pass null to reset a field to the CampaignStack default. Logo upload is UI-only. Owner/admin only for user API keys. Use campaignstack_get_workspace_branding to inspect current values.

ParametersJSON Schema
NameRequiredDescriptionDefault
brandNameNo
workspaceIdNo
primaryColorNo
hidePoweredByNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses the null-to-reset semantics and UI-only logo restriction, which materially change how the tool should be called, and it flags the owner/admin requirement. The annotations already signal a non-read, non-destructive, idempotent mutation, and the description adds further behavioral context without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four tightly packed sentences, each earning its place: the action and fields, the reset behavior, the access/limitation context, and the inspection workflow. Key information is front-loaded and nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter mutation with no output schema, the description covers the important semantics, permissions, and a follow-up inspection call. The main omissions are explicit workspaceId guidance and any statement about return format, but the description is otherwise sufficient to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero schema descriptions, the description compensates by explaining brandName, primaryColor with a valid hex example, and hidePoweredBy, plus the shared null-reset behavior. The workspaceId parameter is not mentioned or given a format/requirement, but it is inferable from the name and the schema marks no parameters as required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Update a workspace's branding') and enumerates the three mutable fields (brandName, primaryColor, hidePoweredBy), so an agent knows exactly what the tool affects. It does not explicitly contrast this with similarly named siblings like update_brand_identity or update_workspace, leaving some differentiation to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-not guidance ('Logo upload is UI-only'), an access prerequisite ('Owner/admin only for user API keys'), and a companion workflow ('Use campaignstack_get_workspace_branding to inspect current values'). This is concrete enough for an agent to decide whether to invoke this tool and how to verify its effects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

campaignstack_whoamiA
Read-onlyIdempotent
Inspect

Returns information about the current API key: workspace name, available scopes, and key prefix. Useful for debugging permission issues.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful context beyond those annotations by specifying that it inspects the current API key and reports scopes, which directly supports permission debugging.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler: the first front-loads the action and output fields, and the second states the purpose. Every sentence earns its place, and it avoids restating schema or annotation information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with annotations covering side-effect safety, this description provides everything an agent needs to select and invoke it correctly: the resource, the returned fields, and the intended use case. The absence of an output schema is mitigated because the main return fields are explicitly listed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool accepts zero parameters and the input schema is empty, so there are no parameter semantics for the description to clarify. The baseline of 4 applies because no parameter documentation is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Returns information') for a precise resource ('the current API key') and enumerates the returned fields: workspace name, available scopes, and key prefix. This clearly differentiates it from the many get_workspace/get_account sibling tools, which target broader workspace/account data rather than the API key context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Useful for debugging permission issues' gives a clear, actionable context for when an agent should invoke this tool. It does not explicitly name alternative tools or state when not to use it, but for a zero-parameter whoami utility this is sufficient.

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. Dates show when Glama detected each change.

  1. 134 tool updates
    • Changedcampaignstack_accept_draft_checkup1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_add_lead_to_external_list1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_add_lead_to_sequence1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_add_manual_exclusion_urls1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_approve_ad_creative
    • Removedcampaignstack_check_calendar_availability
    • Removedcampaignstack_check_company_news
    • Changedcampaignstack_connect_apollo1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_connect_hubspot1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_connect_instantly1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_create_ad_campaign
    • Removedcampaignstack_create_ad_creative
    • Removedcampaignstack_create_calendar_event
    • Changedcampaignstack_create_campaign1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_create_competitor_watch1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_create_content_post1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_create_signal_agent1 field changed
      • addedInput schema / properties / followUpDelaysHours / maxItems
        Added value: +10
    • Changedcampaignstack_create_workflow1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_decide_playbook_proposal1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_delete_calendar_event
    • Removedcampaignstack_disable_warmup
    • Changedcampaignstack_disconnect_integration1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_discover_lead_magnets
    • Removedcampaignstack_dismiss_lead_magnet_creator
    • Removedcampaignstack_dismiss_lead_magnet_post
    • Removedcampaignstack_enable_warmup
    • Changedcampaignstack_enrich_company_info1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_enrich_lead_contact_info1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_export_craft_audit1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace to export from. Defaults to the API key's workspace."New value: +"Workspace to export from. Workspace ID (required for user keys; workspace keys are bound)."
    • Changedcampaignstack_extract_conversation_voice1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_generate_ad_campaign
    • Removedcampaignstack_get_ad_analytics
    • Removedcampaignstack_get_ad_campaign
    • Removedcampaignstack_get_ad_dashboard
    • Changedcampaignstack_get_apollo_import_progress1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_company1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Only needed for imported (workspace-scoped) companies. Defaults to the API key's workspace"New value: +"Only needed for imported (workspace-scoped) companies. Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_get_company_metric_history
    • Changedcampaignstack_get_contact_finder_request1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_content_analytics1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_conversation_voice1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_credit_balance1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_draft_checkup1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_exclusions1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_external_import_progress1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_get_free_slots
    • Removedcampaignstack_get_lead_magnet_run
    • Removedcampaignstack_get_lead_magnet_schedule
    • Changedcampaignstack_get_playbook1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_playbook_proposal1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_get_private_proxy
    • Removedcampaignstack_get_warmup_status
    • Changedcampaignstack_get_workspace_billing1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_workspace_metrics1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_get_workspace_voice1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_import_apollo_list1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_import_external_leads1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_import_leads_csv1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_link_lead_profile1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_list_ad_accounts
    • Removedcampaignstack_list_ad_campaigns
    • Removedcampaignstack_list_ad_creatives
    • Removedcampaignstack_list_ad_lead_forms
    • Changedcampaignstack_list_ai_suggestions1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_apollo_sources1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_campaigns1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_companies1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_list_company_discoveries
    • Removedcampaignstack_list_company_funding_events
    • Removedcampaignstack_list_company_news_events
    • Removedcampaignstack_list_company_reviews
    • Changedcampaignstack_list_competitor_watches1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_contact_finder_requests1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_content_calendar1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_content_posts1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_external_email_accounts1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_external_lead_lists1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_external_sequences1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_integrations1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_list_lead_magnet_creators
    • Removedcampaignstack_list_lead_magnet_posts
    • Changedcampaignstack_list_manual_exclusion_urls1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_playbook_versions1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_search_topics1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_list_voice_experiment_results1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_list_workspace_warmups
    • Removedcampaignstack_mark_as_warmed_up
    • Removedcampaignstack_onboard_workspace
    • Removedcampaignstack_promote_lead_magnet_creator
    • Changedcampaignstack_propose_playbook_change1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_refresh_company
    • Changedcampaignstack_regenerate_playbook1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_reject_ad_creative
    • Changedcampaignstack_reject_draft_checkup1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_remove_manual_exclusion_url1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_remove_private_proxy
    • Changedcampaignstack_revert_playbook1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_run_draft_checkup1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_search_console_dead_pages
    • Removedcampaignstack_search_console_draft_post
    • Removedcampaignstack_search_console_get_demand
    • Removedcampaignstack_search_console_list_competitors
    • Removedcampaignstack_search_console_list_queries
    • Removedcampaignstack_search_console_set_competitor
    • Removedcampaignstack_search_console_status
    • Removedcampaignstack_search_console_sync
    • Changedcampaignstack_search_leads1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_send_gmail
    • Removedcampaignstack_seo_get_advisory
    • Removedcampaignstack_seo_get_latest_report
    • Removedcampaignstack_seo_get_visibility
    • Removedcampaignstack_seo_list_prompts
    • Removedcampaignstack_seo_run_audit
    • Removedcampaignstack_seo_update_prompts
    • Removedcampaignstack_seo_white_label_report
    • Removedcampaignstack_set_ad_autopilot
    • Changedcampaignstack_set_agent_exclusions1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_set_google_app_password
    • Removedcampaignstack_set_lead_magnet_schedule
    • Removedcampaignstack_set_private_proxy
    • Removedcampaignstack_source_lead_magnet_post
    • Changedcampaignstack_submit_feedback1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_sync_lead_to_hubspot1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Workspace ID (defaults to the bound workspace)"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_toggle_exclusion1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_unlink_lead_profile1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_update_ad_campaign
    • Changedcampaignstack_update_brand_identity1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_update_calendar_event
    • Changedcampaignstack_update_company_metadata1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_update_conversation_voice1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_update_filter_exclusion_rules1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_update_lead_contact_info1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Removedcampaignstack_update_lead_magnet_topics
    • Changedcampaignstack_update_lead_metadata1 field changed
      • changedInput schema / properties / workspaceId / description
        Previous value: -"Defaults to the API key's workspace"New value: +"Workspace ID (required for user keys; workspace keys are bound)"
    • Changedcampaignstack_update_signal_agent1 field changed
      • addedInput schema / properties / followUpDelaysHours / maxItems
        Added value: +10
  2. 1 tool update
    • Addedcampaignstack_onboard_workspace
  3. 5 tool updates
    • Changedcampaignstack_create_signal_agent2 fields changed
      • addedInput schema / properties / followUpDelaysHours
        Added value: +{
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / silenceHours
        Added value: +{
        +  "maximum": 720,
        +  "minimum": 1,
        +  "type": "integer"
        +}
    • Addedcampaignstack_edit_scheduled_message
    • Addedcampaignstack_reopen_review
    • Addedcampaignstack_set_account_owner_workspace
    • Changedcampaignstack_update_signal_agent3 fields changed
      • addedInput schema / properties / followUpDelaysHours
        Added value: +{
        +  "items": {
        +    "type": "number"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / playbook
        Added value: +{
        +  "maxLength": 6000,
        +  "type": "string"
        +}
      • addedInput schema / properties / silenceHours
        Added value: +{
        +  "maximum": 720,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  4. 282 tool updates
    • First observedcampaignstack_accept_draft_checkup
    • First observedcampaignstack_add_lead_to_external_list
    • First observedcampaignstack_add_lead_to_sequence
    • First observedcampaignstack_add_leads_to_list
    • First observedcampaignstack_add_manual_exclusion_urls
    • First observedcampaignstack_analyze_website
    • First observedcampaignstack_approve_ad_creative
    • First observedcampaignstack_approve_content_post
    • First observedcampaignstack_approve_review
    • First observedcampaignstack_archive_campaign
    • First observedcampaignstack_build_search_url
    • First observedcampaignstack_cancel_node_leads
    • First observedcampaignstack_check_calendar_availability
    • First observedcampaignstack_check_company_news
    • First observedcampaignstack_comment_on_post
    • First observedcampaignstack_connect_apollo
    • First observedcampaignstack_connect_hubspot
    • First observedcampaignstack_connect_instantly
    • First observedcampaignstack_count_pending_reviews
    • First observedcampaignstack_count_unread_notifications
    • First observedcampaignstack_craft_comment
    • First observedcampaignstack_craft_followup
    • First observedcampaignstack_craft_message
    • First observedcampaignstack_craft_note
    • First observedcampaignstack_create_ad_campaign
    • First observedcampaignstack_create_ad_creative
    • First observedcampaignstack_create_calendar_event
    • First observedcampaignstack_create_campaign
    • First observedcampaignstack_create_company_employee_watch
    • First observedcampaignstack_create_competitor_watch
    • First observedcampaignstack_create_connection_watch_agent
    • First observedcampaignstack_create_content_post
    • First observedcampaignstack_create_icp
    • First observedcampaignstack_create_lead_list
    • First observedcampaignstack_create_persona
    • First observedcampaignstack_create_phase
    • First observedcampaignstack_create_query_lead_list
    • First observedcampaignstack_create_search_watch
    • First observedcampaignstack_create_signal_agent
    • First observedcampaignstack_create_signal_watch
    • First observedcampaignstack_create_workflow
    • First observedcampaignstack_decide_playbook_proposal
    • First observedcampaignstack_delete_calendar_event
    • First observedcampaignstack_delete_campaign
    • First observedcampaignstack_delete_competitor_watch
    • First observedcampaignstack_delete_content_post
    • First observedcampaignstack_delete_icp
    • First observedcampaignstack_delete_persona
    • First observedcampaignstack_delete_phase
    • First observedcampaignstack_delete_signal_agent
    • First observedcampaignstack_delete_workflow
    • First observedcampaignstack_diagnose_lead_sourcing
    • First observedcampaignstack_disable_warmup
    • First observedcampaignstack_disconnect_integration
    • First observedcampaignstack_discover_lead_magnets
    • First observedcampaignstack_dismiss_lead_magnet_creator
    • First observedcampaignstack_dismiss_lead_magnet_post
    • First observedcampaignstack_duplicate_content_post
    • First observedcampaignstack_edit_and_approve_review
    • First observedcampaignstack_enable_warmup
    • First observedcampaignstack_enrich_company_info
    • First observedcampaignstack_enrich_lead_contact_info
    • First observedcampaignstack_export_craft_audit
    • First observedcampaignstack_extract_company_employees
    • First observedcampaignstack_extract_conversation_voice
    • First observedcampaignstack_fetch_mutual_connections
    • First observedcampaignstack_find_warm_paths
    • First observedcampaignstack_follow_profile
    • First observedcampaignstack_generate_ad_campaign
    • First observedcampaignstack_get_account
    • First observedcampaignstack_get_account_maintenance
    • First observedcampaignstack_get_ad_analytics
    • First observedcampaignstack_get_ad_campaign
    • First observedcampaignstack_get_ad_dashboard
    • First observedcampaignstack_get_apollo_import_progress
    • First observedcampaignstack_get_automation_jobs
    • First observedcampaignstack_get_campaign
    • First observedcampaignstack_get_campaign_metrics
    • First observedcampaignstack_get_campaign_topics
    • First observedcampaignstack_get_campaign_weights
    • First observedcampaignstack_get_company
    • First observedcampaignstack_get_company_metric_history
    • First observedcampaignstack_get_competitor_watch
    • First observedcampaignstack_get_contact_finder_request
    • First observedcampaignstack_get_content_analytics
    • First observedcampaignstack_get_content_post
    • First observedcampaignstack_get_conversation
    • First observedcampaignstack_get_conversation_voice
    • First observedcampaignstack_get_credit_balance
    • First observedcampaignstack_get_draft_checkup
    • First observedcampaignstack_get_enrichment_status
    • First observedcampaignstack_get_exclusions
    • First observedcampaignstack_get_external_import_progress
    • First observedcampaignstack_get_free_slots
    • First observedcampaignstack_get_icp_scores
    • First observedcampaignstack_get_inbox_unread_count
    • First observedcampaignstack_get_lead
    • First observedcampaignstack_get_lead_connections
    • First observedcampaignstack_get_lead_history
    • First observedcampaignstack_get_lead_list
    • First observedcampaignstack_get_lead_magnet_run
    • First observedcampaignstack_get_lead_magnet_schedule
    • First observedcampaignstack_get_lead_score_breakdown
    • First observedcampaignstack_get_node_activity
    • First observedcampaignstack_get_notification_preferences
    • First observedcampaignstack_get_persona
    • First observedcampaignstack_get_phase
    • First observedcampaignstack_get_platform_capabilities
    • First observedcampaignstack_get_playbook
    • First observedcampaignstack_get_playbook_proposal
    • First observedcampaignstack_get_private_proxy
    • First observedcampaignstack_get_signal_agent
    • First observedcampaignstack_get_signal_agent_stats
    • First observedcampaignstack_get_warmup_status
    • First observedcampaignstack_get_workflow
    • First observedcampaignstack_get_workflow_node_types
    • First observedcampaignstack_get_workflow_stats
    • First observedcampaignstack_get_workspace
    • First observedcampaignstack_get_workspace_billing
    • First observedcampaignstack_get_workspace_branding
    • First observedcampaignstack_get_workspace_metrics
    • First observedcampaignstack_get_workspace_voice
    • First observedcampaignstack_import_apollo_list
    • First observedcampaignstack_import_external_leads
    • First observedcampaignstack_import_leads_csv
    • First observedcampaignstack_invite_member
    • First observedcampaignstack_like_post
    • First observedcampaignstack_link_lead_profile
    • First observedcampaignstack_list_accounts
    • First observedcampaignstack_list_ad_accounts
    • First observedcampaignstack_list_ad_campaigns
    • First observedcampaignstack_list_ad_creatives
    • First observedcampaignstack_list_ad_lead_forms
    • First observedcampaignstack_list_ai_suggestions
    • First observedcampaignstack_list_apollo_sources
    • First observedcampaignstack_list_automations
    • First observedcampaignstack_list_campaigns
    • First observedcampaignstack_list_companies
    • First observedcampaignstack_list_company_discoveries
    • First observedcampaignstack_list_company_employee_watches
    • First observedcampaignstack_list_company_employees
    • First observedcampaignstack_list_company_funding_events
    • First observedcampaignstack_list_company_news_events
    • First observedcampaignstack_list_company_reviews
    • First observedcampaignstack_list_company_signals
    • First observedcampaignstack_list_competitor_watches
    • First observedcampaignstack_list_contact_finder_requests
    • First observedcampaignstack_list_content_calendar
    • First observedcampaignstack_list_content_posts
    • First observedcampaignstack_list_external_email_accounts
    • First observedcampaignstack_list_external_lead_lists
    • First observedcampaignstack_list_external_sequences
    • First observedcampaignstack_list_icps
    • First observedcampaignstack_list_inbox_conversations
    • First observedcampaignstack_list_integrations
    • First observedcampaignstack_list_invitations
    • First observedcampaignstack_list_lead_lists
    • First observedcampaignstack_list_lead_magnet_creators
    • First observedcampaignstack_list_lead_magnet_posts
    • First observedcampaignstack_list_lead_signals
    • First observedcampaignstack_list_leads_at_node
    • First observedcampaignstack_list_manual_exclusion_urls
    • First observedcampaignstack_list_members
    • First observedcampaignstack_list_notifications
    • First observedcampaignstack_list_pending_reviews
    • First observedcampaignstack_list_personas
    • First observedcampaignstack_list_phases
    • First observedcampaignstack_list_playbook_versions
    • First observedcampaignstack_list_search_topics
    • First observedcampaignstack_list_signal_agent_leads
    • First observedcampaignstack_list_signal_agents
    • First observedcampaignstack_list_signal_watches
    • First observedcampaignstack_list_split_optimization_logs
    • First observedcampaignstack_list_voice_experiment_results
    • First observedcampaignstack_list_webhook_templates
    • First observedcampaignstack_list_workflows
    • First observedcampaignstack_list_workspace_warmups
    • First observedcampaignstack_mark_all_notifications_read
    • First observedcampaignstack_mark_as_warmed_up
    • First observedcampaignstack_mark_conversation_read
    • First observedcampaignstack_mark_notification_read
    • First observedcampaignstack_optimize_split_node
    • First observedcampaignstack_pause_company_employee_watch
    • First observedcampaignstack_pause_competitor_watch
    • First observedcampaignstack_pause_signal_agent
    • First observedcampaignstack_pause_signal_watch
    • First observedcampaignstack_priority_enrich
    • First observedcampaignstack_promote_lead_magnet_creator
    • First observedcampaignstack_propose_playbook_change
    • First observedcampaignstack_queue_leads
    • First observedcampaignstack_refresh_company
    • First observedcampaignstack_refresh_inbox
    • First observedcampaignstack_regenerate_playbook
    • First observedcampaignstack_reject_ad_creative
    • First observedcampaignstack_reject_content_post
    • First observedcampaignstack_reject_draft_checkup
    • First observedcampaignstack_reject_review
    • First observedcampaignstack_remove_company_employee_watch
    • First observedcampaignstack_remove_lead_list
    • First observedcampaignstack_remove_leads_from_list
    • First observedcampaignstack_remove_manual_exclusion_url
    • First observedcampaignstack_remove_member
    • First observedcampaignstack_remove_private_proxy
    • First observedcampaignstack_remove_signal_watch
    • First observedcampaignstack_reply_to_comment
    • First observedcampaignstack_reread_review_link
    • First observedcampaignstack_resume_company_employee_watch
    • First observedcampaignstack_resume_competitor_watch
    • First observedcampaignstack_resume_signal_agent
    • First observedcampaignstack_resume_signal_watch
    • First observedcampaignstack_retry_content_post
    • First observedcampaignstack_retry_failed_entries_at_node
    • First observedcampaignstack_retry_failed_entry
    • First observedcampaignstack_retry_review
    • First observedcampaignstack_revert_playbook
    • First observedcampaignstack_revoke_invitation
    • First observedcampaignstack_run_draft_checkup
    • First observedcampaignstack_schedule_content_post
    • First observedcampaignstack_search_console_dead_pages
    • First observedcampaignstack_search_console_draft_post
    • First observedcampaignstack_search_console_get_demand
    • First observedcampaignstack_search_console_list_competitors
    • First observedcampaignstack_search_console_list_queries
    • First observedcampaignstack_search_console_set_competitor
    • First observedcampaignstack_search_console_status
    • First observedcampaignstack_search_console_sync
    • First observedcampaignstack_search_leads
    • First observedcampaignstack_send_connection_request
    • First observedcampaignstack_send_gmail
    • First observedcampaignstack_send_inmail
    • First observedcampaignstack_send_message
    • First observedcampaignstack_seo_get_advisory
    • First observedcampaignstack_seo_get_latest_report
    • First observedcampaignstack_seo_get_visibility
    • First observedcampaignstack_seo_list_prompts
    • First observedcampaignstack_seo_run_audit
    • First observedcampaignstack_seo_update_prompts
    • First observedcampaignstack_seo_white_label_report
    • First observedcampaignstack_set_account_watcher
    • First observedcampaignstack_set_ad_autopilot
    • First observedcampaignstack_set_agent_exclusions
    • First observedcampaignstack_set_google_app_password
    • First observedcampaignstack_set_lead_magnet_schedule
    • First observedcampaignstack_set_private_proxy
    • First observedcampaignstack_set_workflow_accounts
    • First observedcampaignstack_source_lead_magnet_post
    • First observedcampaignstack_start_connections_export
    • First observedcampaignstack_submit_content_for_approval
    • First observedcampaignstack_submit_feedback
    • First observedcampaignstack_sync_lead_to_hubspot
    • First observedcampaignstack_toggle_automation
    • First observedcampaignstack_toggle_exclusion
    • First observedcampaignstack_trigger_icp_scoring
    • First observedcampaignstack_trigger_workflow
    • First observedcampaignstack_unarchive_campaign
    • First observedcampaignstack_unlink_lead_profile
    • First observedcampaignstack_unschedule_content_post
    • First observedcampaignstack_update_ad_campaign
    • First observedcampaignstack_update_brand_identity
    • First observedcampaignstack_update_calendar_event
    • First observedcampaignstack_update_campaign
    • First observedcampaignstack_update_campaign_weight
    • First observedcampaignstack_update_company_metadata
    • First observedcampaignstack_update_competitor_watch_accounts
    • First observedcampaignstack_update_content_post
    • First observedcampaignstack_update_conversation_voice
    • First observedcampaignstack_update_filter_exclusion_rules
    • First observedcampaignstack_update_icp
    • First observedcampaignstack_update_lead_contact_info
    • First observedcampaignstack_update_lead_list
    • First observedcampaignstack_update_lead_magnet_topics
    • First observedcampaignstack_update_lead_metadata
    • First observedcampaignstack_update_member_role
    • First observedcampaignstack_update_notification_preferences
    • First observedcampaignstack_update_persona
    • First observedcampaignstack_update_phase
    • First observedcampaignstack_update_signal_agent
    • First observedcampaignstack_update_workflow
    • First observedcampaignstack_update_workflow_status
    • First observedcampaignstack_update_workspace
    • First observedcampaignstack_update_workspace_branding
    • First observedcampaignstack_whoami

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects AI assistants to LinkedIn outreach, enabling lead finding, campaign management, messaging, and analytics through natural language.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Provides AI agents with tools for structuring and auditing cold outreach messages, building follow-up sequences, handling replies, and detecting red flags.
    7
    67
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Enables AI tools to search and enrich B2B leads, including finding professional emails, company profiles, and filtering people and companies by various criteria.
    5
    227
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    GTM signal intelligence suite for AI agents. Six tools: hiring signals, tech stack detection, company-to-LinkedIn resolution, ICP scoring, job board scanning, and a combined signals aggregator. Built for outbound sales workflows.
    11
    162
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.7/5.0
Disambiguation3/5

The set is enormous and generally well-differentiated through detailed cross-referenced descriptions, but several clusters blur together: archive/delete/remove have inconsistent permanence semantics (delete_campaign vs remove_signal_watch vs archive_campaign), create_connection_watch_agent explicitly overlaps with set_account_watcher, and the parallel draft-checkup and playbook-proposal flows (run_draft_checkup/get_draft_checkup/accept_draft_checkup vs propose_playbook_change/get_playbook_proposal/decide_playbook_proposal) present near-identical decision pipelines.

Naming Consistency4/5

Nearly every tool follows the campaignstack_<verb>_<noun> convention with disciplined get/list pairing and consistent verb choices (create/update/delete/pause/resume). Minor deviations like campaignstack_priority_enrich (adverb+verb) and campaignstack_whoami break the strict verb_noun pattern but are isolated and do not hinder navigation.

Tool Count1/5

223 tools is an extreme surface for any MCP server. Even though each tool maps to a distinct API operation and the underlying platform is broad, the scale far exceeds the 50+ threshold for an extreme mismatch and will overwhelm agents with selection overhead.

Completeness5/5

The surface is exhaustive for the LinkedIn outreach domain: full campaign/workflow/lead-list lifecycles, ICP and persona management, content scheduling and approvals, inbox and messaging, enrichment and integrations, signal watches and exclusions, review queues, playbook versioning, workspace admin, billing, and notifications. Minor gaps like a missing delete_lead or delete_company are explained by shared-data semantics, so no critical dead ends remain.

Resources