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.2/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, non-idempotent operation. The description adds valuable behavioral context beyond those annotations: it applies text 'through the same caps and version snapshots as a manual edit' and fails on stale targets. This gives the agent a concrete model of side effects 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?

Two sentences carry a complete behavioral contract: what the tool does, how it behaves relative to a manual edit, and the key failure condition with remediation. Every clause earns its place and the most important verb 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 tool has no output schema, but it is an action rather than a query, so return-value documentation is less critical. The description covers the action, the mutation semantics, and the failure mode. It could be slightly more explicit about the success response, but the essential context for correct invocation is 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%, and the checkupId parameter is already well documented as coming from campaignstack_get_draft_checkup. The description adds no additional 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?

States a specific verb ('Accept') and resource ('pending draft checkup'), and further explains the action by saying it applies proposed text to a target. It distinguishes itself from sibling tools like reject_draft_checkup and run_draft_checkup by describing the commit-like behavior.

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 a draft checkup is pending and should be accepted. It also provides an important exclusion cue by stating it 'fails when the targeted text changed since the checkup ran' and instructs to 'run a new checkup in that case,' which effectively steers an agent away from this tool under stale conditions.

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?

Annotations carry idempotentHint=true, and the description substantiates it ('Duplicate adds to the same list are idempotent successes (status already_present)'). It adds rich provider-specific behavior beyond any annotation: clay's fire-and-forget webhook semantics, no provider lead id returned, the dedupe key riding along, the LinkedIn-URL-only qualification, the fact that no outreach is started, the free/no-credit property, and the full status enum including error examples. 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 and dense, but the tool is genuinely complex (three providers with divergent behavior, multiple statuses, idempotency, exclusions). Every sentence earns its place and the core action is front-loaded. It could be improved with paragraph breaks, but no filler 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?

With no output schema present, the description correctly takes on the burden of explaining return values — it enumerates all statuses (added, already_present, skipped_no_email, error) with concrete error examples. Combined with provider branching, exclusions, idempotency, and cost semantics, 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?

Schema coverage is 83%, so the schema already documents most parameters, but the description genuinely adds meaning: it explains skipIfInWorkspace's effect ('skip leads that already exist anywhere in the provider workspace'), clarifies the provider parameter's behavioral branching (instantly/hubspot/clay), and implies leadId must correspond to a lead with an email via the skipped_no_email status. Minor gap: leadSource/workspaceId get no description-level treatment, but the schema covers them.

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 'Add one lead to an external provider's lead list' — a specific verb, resource, and scope. It explicitly distinguishes itself from campaignstack_add_leads_to_list (own lists) and campaignstack_add_lead_to_sequence (starts outreach), so an agent can disambiguate 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?

Provides explicit routing guidance: names campaignstack_add_leads_to_list as the alternative for CampaignStack's own lists, states that campaignstack_add_lead_to_sequence is for starting outreach, and points to campaignstack_list_external_lead_lists for retrieving list ids. When-to-use and when-not-to-use are both explicit.

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.8/5.0
Behavior5/5

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

Beyond the annotations (idempotentHint=true, readOnlyHint=false), the description discloses rich behavior: Apollo auto-creates contacts, duplicate adds return already_present, activateSequence is best-effort, Instantly handoffs sync reply/bounce/unsubscribe state, the operation is free, and it enumerates possible statuses including specific error codes like INTEGRATION_NOT_CONNECTED and INTEGRATION_KEY_INSUFFICIENT_SCOPE. This is far more than the structured annotations provide.

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

Conciseness5/5

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

The description is dense but every sentence adds value: scope, provider differences, idempotency, sequencing activation, state-sync side effects, billing, return statuses, and lookup tool references. The core purpose is front-loaded, and the supporting detail is compactly organized. Nothing feels like filler or repetition of the schema.

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 8 parameters across two providers, the description is exceptionally complete: it explains the return status vocabulary, provider-specific requirements, error scenarios, idempotency behavior, and side effects. An agent has enough context to invoke the tool correctly and interpret the result.

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 the schema already covers 88% of parameters, the description adds significant provider-specific meaning: emailAccountId is required for Apollo and unused by Instantly, activateSequence is Apollo-only and best-effort, skipIfInWorkspace is Instantly-only, and campaignId comes from campaignstack_list_external_sequences. These semantics materially help an agent choose and fill parameters correctly.

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', and immediately distinguishes it from sibling tools by naming the provider-parameterized nature (Apollo sequences, Instantly campaigns) and the external scope. This makes it clearly separable from similar tools like campaignstack_add_lead_to_external_list 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 Guidelines4/5

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

The context is clear: this is for adding a single lead to an external sequence, with provider-specific behaviors spelled out. It also directs the agent to campaignstack_list_external_sequences for sequence IDs and campaignstack_list_external_email_accounts for Apollo mailbox IDs. However, it does not explicitly state when to prefer this tool over the closely related sibling add_lead_to_external_list, so it stops short of a full 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?

Annotations already indicate this is a non-read, non-idempotent, non-destructive operation. The description adds meaningful behavioral detail beyond annotations: URLs are validated and normalized, duplicates are skipped and reported, and per-URL success/error results are returned. This gives the agent useful expectations for calling 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 concise sentences, each earning its place: main action, behavior, return shape, and prerequisite lookup tips. 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 mutation tool with no output schema, the description covers the action, input constraints (via schema), return format, and prerequisite lookups. It could be more explicit about what normalization entails or what error conditions look like, but it is sufficient for an agent to invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 67% (profileUrls and workspaceId are described, but exclusionId is not). The description compensates by adding behavioral semantics for profileUrls: validation, normalization, duplicate handling, and per-URL results. It also indirectly explains exclusionId by directing users 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 description uses a specific verb ('Add'), identifies the resource ('manual exclusion entry'), and specifies the object ('LinkedIn profile URLs'). It clearly distinguishes itself from sibling tools like campaignstack_remove_manual_exclusion_url and campaignstack_list_manual_exclusion_urls.

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 contextual guidance by pointing to campaignstack_get_exclusions for finding exclusionId values and campaignstack_list_signal_agents for finding signal agents. However, it does not explicitly contrast this tool with alternatives like set_agent_exclusions or remove_manual_exclusion_url, so it stops short of full when-to-use versus 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_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.7/5.0
Behavior5/5

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

The description discloses behavior beyond the annotations: it validates the key against the Apollo API, stores the integration, and notably reveals that a failed validation still creates an integrationId. This partial-failure behavior is valuable and not contradicted by the annotations.

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

Conciseness5/5

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

Four sentences, each earning its place: the main action, validation behavior, return semantics, and a next-step pointer. The description is front-loaded with the core purpose and avoids 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 two-parameter connector with no output schema, the description adequately explains the operation, validation outcome, partial-failure behavior, and what to do next. It provides enough information for an agent to select and invoke the tool correctly without ambiguity.

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 clarifies that apiKey is the Apollo API key and that it is validated against the Apollo API, adding meaning beyond the schema's type and minLength. The workspaceId parameter is already well-described in the schema as defaulting to the bound workspace, but the description does not add further context for 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: connect an Apollo.io account by providing an API key, then validates and stores the integration. It is specifically distinguished from sibling connect tools like campaignstack_connect_hubspot and campaignstack_connect_instantly by naming Apollo.io explicitly.

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 using the tool: connect an Apollo.io account with an API key. It also provides a helpful follow-up step, 'Use campaignstack_list_apollo_sources after connecting to browse available contact lists.' However, it does not explicitly explain when not to use it or how it compares to other connection tools.

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.7/5.0
Behavior5/5

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

The annotations already mark the tool as mutating, non-destructive, and open-world, and the description adds substantial behavioral detail: validation via read ping and write-scope probe, integration storage, specific error codes, token non-echoing, subscription-tier ambiguity, and beta status. 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 long but each sentence serves a purpose: purpose, validation behavior, scope requirements, success/failure contract, error taxonomy, operational caveat, security note, and beta disclaimer. It is front-loaded with the core purpose and contains 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?

Given that this is an external integration call with no output schema, the description covers the essentials: token requirements, validation behavior, success/failure contract, error codes, optional scopes, security, and beta limitations. An agent has enough detail to call it correctly and handle the main failure modes.

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 apiKey lacks a schema description, but the description compensates by explaining the token format (pat-na1…/pat-eu1…), purpose, and required scopes. The optional workspaceId is already described in the schema as defaulting to the bound workspace.

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 a HubSpot portal'), the exact input type (Private App access token), and what happens (validation and storage). It is clearly distinct from sibling connect tools like connect_apollo and connect_instantly by naming HubSpot and explaining the token 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 gives clear usage context: use it to connect a HubSpot portal, provide a Private App token, and ensure the required scopes. It does not explicitly name alternatives or say when not to use it, but the HubSpot-specific details make 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_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
Behavior5/5

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

Beyond the annotations, the description reveals important behavior: the tool validates the key, stores the integration, and returns success true/false. It also discloses a non-obvious nuance—when validation fails, success is false but an integrationId is still created. This is valuable context for an agent deciding whether to retry or report an error.

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

Conciseness5/5

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

The description is three focused sentences: what it does, how it validates, and what it returns. Every sentence adds essential information, and the most important action is front-loaded. No fluff 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 two-parameter integration tool with no output schema, the description covers the essential behavior: validation, storage, and both success and failure return semantics. The unusual failure case is also explained, so an agent can set proper expectations when calling this 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 describes workspaceId but not apiKey, so description coverage is only 50%. The description adds that apiKey is used for validation, which helps, but it does not explain how to obtain the key or any additional constraints beyond the schema's minLength. This is adequate but not rich.

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: connect an Instantly.ai account using an API key and validate it against the Instantly API. It distinguishes this tool from sibling connect tools like campaignstack_connect_apollo and campaignstack_connect_hubspot by naming the exact platform.

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 intended use clear: connecting an Instantly account by supplying a valid API key. It does not explicitly mention alternatives or exclusions, but the context is evident from the tool name and description, especially among other integration-connect tools.

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_campaignBInspect

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

B3.4/5.0
Behavior4/5

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

Annotations already indicate this is a mutating, non-idempotent, non-destructive operation. The description adds useful context beyond that: the tool returns the new campaign ID and title, and the created campaign is 'ready for configuration.' This helps the agent understand the immediate post-condition of the call. 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.

Conciseness3/5

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

The description is short and front-loaded, but it is somewhat redundant: 'Create a new campaign in a workspace' and 'Creates a new campaign ready for configuration' essentially repeat the same creation fact. The return-value sentence is useful, but the third sentence could be merged or removed without losing much meaning.

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?

This is a minimal viable definition for a creation tool. It states the return value and the campaign's initial state, and the schema covers workspace defaults. However, it lacks guidance on what 'goal' should contain, when to use this versus the many sibling creation tools, and any required prerequisites for creating a campaign. These are notable gaps, though the core call is still inferable.

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 schema description. The description mentions 'workspace' and returns 'title,' but does not explain the meaning or acceptable values of the required 'goal' parameter, nor does it clarify the optional 'description' beyond its obvious name. The low schema coverage places a burden on the description to compensate, and it largely fails to do so.

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 ('Create'), a clear resource ('a new campaign'), and the scope ('in a workspace'). It also distinguishes itself from mutation tools like update_campaign by emphasizing creation, and from create_ad_campaign by focusing on the general campaign object. The return value of ID and title further clarifies 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 Guidelines2/5

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

The description explains what the tool does but provides no guidance on when to choose it over alternatives such as create_ad_campaign, update_campaign, or archive_campaign. There are no explicit conditions, prerequisites, or 'use this when...' instructions. The intended usage must be inferred entirely from the tool name and basic description.

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?

The annotations already signal a non-read-only, non-idempotent, non-destructive operation, so the description adds value by disclosing automatic deduplication by normalized LinkedIn URL and workspace scoping. It also clarifies that the watch is created to monitor, implying ongoing observation. It could specify what happens when a duplicate URL is supplied, but 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?

Three sentences with no filler: the purpose is front-loaded, the deduplication behavior is stated second, and the discovery pointer to list_competitor_watches closes it. Every sentence carries operational 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?

Despite lacking an output schema, the description covers the essential semantics: what is created, the monitoring target, workspace scoping, deduplication, and how to see existing watches. It does not describe the return shape, but create operations typically return the created watch and the list tool is provided as a fallback. Given the annotations and parameter descriptions, this 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 schema already documents accountIds and workspaceId well, and entityType has an enum. The description adds meaning by framing profileUrl as a LinkedIn company page or influencer profile and by explaining URL normalization dedupe behavior. The name parameter remains minimal, but the parameter name is straightforward and the description compensates reasonably for the 40% 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 opens with a specific verb and resource: 'Creates a new competitor watch to monitor a LinkedIn company page or influencer profile.' This precisely identifies the object and target, and the LinkedIn-monitoring focus distinguishes it from other watch-creation siblings. The purpose is unambiguous 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 for when the tool is appropriate: creating a competitor watch for a LinkedIn company or influencer. It also directs the agent to campaignstack_list_competitor_watches to inspect existing watches. It does not explicitly contrast with create_signal_watch or create_search_watch, but the resource type is distinct enough that the guidance 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/5.0
Behavior4/5

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

Annotations only mark non-read-only/non-idempotent/non-destructive, so the description adds real value by clarifying that the post is created as a draft, returns the new post ID, and infers postType from media. This goes beyond the structured hints; it could additionally disclose scheduling side effects, but those are covered by parameter descriptions.

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 and return value, then moves to inference rules and tags. Every sentence carries information that helps an agent call the tool correctly, 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 9-parameter create operation with no output schema, the description covers the key behavioral nuances, return value, and retrieval route. The remaining gaps (specific meaning of body/authorAccountId, scheduling workflow) are minor because the parameter names and schema descriptions make them inferable.

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 low (33%), so the description must compensate. It does add useful semantics for postType (auto-inference rules from media) and tags (system vs freeform tags), but it leaves required parameters like body and authorAccountId unexplained and repeats little beyond the schema for the other 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 first sentence names a specific verb ('creates'), resource ('draft content post'), and platform ('LinkedIn account'), and the description explicitly differentiates from retrieval via campaignstack_get_content_post. This is enough for an agent to know exactly what operation 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 Guidelines3/5

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

The description states the core use case and directs the agent to campaignstack_get_content_post for retrieving the full post, but it does not give exclusion criteria against close siblings such as schedule_content_post, update_content_post, or submit_content_for_approval. Some usage context is implied by 'draft' and the scheduling parameters, but the when-not guidance is left to inference.

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

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

A3.7/5.0
Behavior4/5

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

The description goes beyond the annotations by disclosing that creation also 'Auto-generates a template workflow and lead list' and by clarifying the distinct roles of accountIds ('observe the feed') and actAccountIds ('act on signals'). This is valuable side-effect context that annotations alone do not provide. It does not fully explain the implications of responseMode auto_send, but the main behavioral surprises are surfaced.

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 adds necessary detail about target variants and account roles. Every sentence contributes meaning; the examples are verbose but justified by the complex polymorphic target schema. It could be slightly trimmed, but it remains efficient and well organized.

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?

This is a complex creation tool with 11 parameters, nested objects, no output schema, and no parameter descriptions in the schema. The description covers the target structure and core account semantics well, but leaves required fields like type, targetName, and responseMode unexplained. The responseMode enum (auto_send vs review_first) is especially important for understanding autonomous behavior and should have been described. The auto-generated workflow/lead list side effect is mentioned but not elaborated 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%, so the description must compensate. It does explain the target object's three shapes with concrete examples, and it clarifies accountIds vs actAccountIds. However, several required parameters — type, targetName, responseMode, and optional but important ones like silenceHours, publicReplyConfig, and followUpDelaysHours — are not given any semantic explanation beyond their names and enum 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?

The description opens with a specific verb and resource: 'Create a new signal agent', and specifies exactly what it monitors (LinkedIn profile, company feed, group, or post) plus the side effects (auto-generates template workflow and lead list). It distinguishes this from sibling watch/agent creation tools by describing a broader automation agent rather than a simple watch, and the target variants clarify scope.

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 clear usage context: when you want to create a signal agent that watches LinkedIn sources and acts on engagements. It also tells the user to call campaignstack_list_accounts to find account IDs. However, it does not explicitly contrast with similar siblings like campaignstack_create_signal_watch, campaignstack_create_connection_watch_agent, or campaignstack_create_competitor_watch, so an agent gets no explicit when-not-to-use guidance.

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

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.4/5.0
Behavior4/5

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

The annotations (all false hints) carry little information, so the description carries the burden — and it delivers: it discloses the success return shape ({ workflowId, nodeCount }), the default behavior when sourceConfig is omitted (campaign_pool with icpScoreMin 50), and the capability boundary around signal-intake graphs. It doesn't cover post-create execution side effects, but the key behavioral traits are surfaced.

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?

Six sentences, each earning its place: purpose, graph definition, prerequisite routing, return value, default behavior, and limitation. The core purpose is front-loaded in the first sentence, and there is no filler or repetition of schema content.

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

Completeness4/5

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

The tool is complex (nested graph object, provider configs, no output schema), yet the description covers the prerequisite discovery step, return shape, defaults, and exclusions. The only meaningful gap is whether a created workflow begins executing immediately or requires a separate trigger — a behavioral detail an agent would want — but overall this is a well-rounded definition for a complex create 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 80%, so the baseline is 3, but the description adds genuine value beyond it: concrete node type examples (linkedin:profile_view, linkedin:connection_request, flow:wait) that the schema doesn't enumerate, plus the practical consequence of omitting sourceConfig. These details help an agent construct a valid graph and decide whether to pass sourceConfig at all.

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+resource ('Create a new workflow from a graph you author') and immediately defines what a graph is — automation nodes plus directed edges. This distinguishes the tool from its workflow siblings (get_workflow, update_workflow, delete_workflow, trigger_workflow, list_workflows) without needing to inspect any of 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?

It gives an explicit prerequisite, 'Use campaignstack_get_workflow_node_types first to discover valid node types, their configHint shapes, and the required graph format,' which routes the agent to the correct discovery tool. It also states a clear when-not boundary ('Signal-intake graphs... are not supported by this tool'), though it doesn't name the alternative tool for that unsupported case.

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.6/5.0
Behavior5/5

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

The annotations only declare readOnly=false, idempotent=false, and destructive=false, so the description carries the burden of behavioral context. It does this well by explaining that accept is transactional, mirrors manual edits, fails on conflicting changes, and that reject applies no changes. This is meaningful behavioral detail 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, with the core action stated in the first sentence and the critical failure/no-op behavior in the second. Every sentence provides necessary context without 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 mutation tool with only two required parameters and no output schema, the description is mostly complete: it explains what accept and reject do, how acceptance behaves transactionally, and what to do if it fails. The only minor gap is that it does not describe the response or result of a successful decision, but that is not essential given the tool's straightforward nature.

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 decision is an undocumented enum. The description clarifies that 'accept' applies all changes and 'reject' applies nothing, which adds meaning to the decision parameter. With 67% schema coverage, the description partially compensates, though it does not add much about workspaceId or return behavior.

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 ('Accept or reject') and the resource ('pending playbook proposal'), and it distinguishes accept from reject. It also sets expectations around the proposal lifecycle, which separates it from related proposal-creation and reversion 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 conveys when to use the tool: when a playbook proposal is pending and a decision must be made. It also instructs the user to propose again if acceptance fails due to stale text. However, it does not explicitly mention sibling alternatives or state conditions where another tool should be used instead.

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/5.0
Behavior4/5

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

Annotations already signal destructiveHint=true; the description adds the important specific that the integration record and stored credentials are permanently deleted. This gives the agent a concrete understanding of what is destroyed beyond the bare 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?

Three short, front-loaded sentences: what it does, the destructive consequence, valid providers, and a helpful pointer to the list tool. 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?

For a simple destructive tool with a rich schema, most necessary context is present. However, the inaccurate provider list weakens completeness: an agent cannot reliably tell which providers are actually supported, and there is no mention of what happens when the provider is not connected. A clarifying note about the optional workspaceId would also help.

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 documents all parameters at 100%, so the baseline is 3, but the description's provider list contradicts the schema enum by omitting 'hubspot'. This can mislead an agent into thinking hubspot is invalid, and it does not clarify the optional workspaceId behavior.

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 ('Disconnect (remove)') and names the resource ('an integration') with the exact side effect: permanently deletes the integration record and stored credentials. It is clearly distinct from the connect_* and list_integrations 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 orients the agent by naming the valid providers and points to campaignstack_list_integrations for discovering connected integrations. It does not explicitly list when-not conditions or alternative connect 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_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.5/5.0
Behavior5/5

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

The description discloses key behaviors beyond the annotations: it fills only empty fields, never overwrites first-party data, costs no CampaignStack credits, and returns distinct statuses with error examples. This complements readOnlyHint=false and openWorldHint=true 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?

Although dense, every sentence earns its place: fields, scope, merge behavior, cost, return statuses, and the integration prerequisite are all covered without redundancy. Core action and constraints are front-loaded before error 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 tool with no output schema and an external provider dependency, the description sufficiently covers preconditions, provider behavior, side effects, and return states. The agent can determine when and how to invoke it correctly, including the clay polling behavior and the need to connect Apollo first.

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 four parameters clearly. The description adds some useful context about provider behavior and return statuses, but it does not add significant meaning beyond the parameter descriptions already 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 states a specific verb ('enrich') and resource ('a company's firmographics') and enumerates the exact fields involved. It also clarifies scope ('Single company'), which distinguishes it from lead-level enrichment siblings like campaignstack_enrich_lead_contact_info.

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 and a prerequisite: a connected provider integration is required and the user should call campaignstack_connect_apollo first. It also explains provider selection (apollo vs clay), but it does not explicitly name alternatives or state when not to use this tool versus refresh_company or priority_enrich.

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.6/5.0
Behavior5/5

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

The description adds substantial behavioral detail beyond the annotations: fill-empty write-back rules, no overwriting of existing emails, credit reservation and refund behavior, async pending status with requestId and creditsReserved, masked emails never returned, and rich error statuses. 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 first sentence is front-loaded with the core function, and every subsequent clause adds necessary operational or billing detail. The description is long, but that length is justified by the multi-provider, async, billing-sensitive nature of the tool; slightly denser formatting prevents a perfect score.

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 correctly carries the burden of explaining return semantics: enriched, pending, not_found, and error statuses, plus requestId, creditsReserved, alreadyPresent, and polling functions. It also covers integration prerequisites, credit costs, and provider-specific behavior, making it complete enough to invoke 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 86%, so the schema already explains most parameters. The description adds meaningful context around write-back behavior, credit billing, async polling, and provider-specific conditions such as clayRoutineId being required for clay and revealPhone being ignored for other providers.

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: resolve a lead's work email and write it onto the lead, while naming the default provider and alternative enrichment providers. It clearly differentiates this from sibling tools by emphasizing single-lead contact enrichment rather than company enrichment or manual lead updates.

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 provider-specific guidance: bettercontact requires no integration, while apollo/instantly/clay require connected integrations, and async results must be polled via campaignstack_get_contact_finder_request or campaignstack_list_contact_finder_requests. It does not explicitly contrast this with sibling tools like enrich_company_info or update_lead_contact_info, so it stops short of full when-not routing.

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.2/5.0
Behavior4/5

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

Annotations already cover read-only and idempotent behavior. The description adds meaningful behavioral context beyond that: rows are 'accepted AI craft' only, newest first, paginated via cursor, with references to workflow, node, lead, and aiUsage cost row. This gives the agent a solid picture of what a 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?

The description is dense but every clause earns its place: resource, row granularity, included fields, ordering, pagination, and intended use cases. It is front-loaded with the action and resource, 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 read-only export tool with no required parameters and no output schema, the description is nearly complete. It explains what rows are returned and their content, plus pagination and ordering. It could mention the response envelope or cursor mechanics more explicitly, but it is sufficient for an agent to invoke it correctly.

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

Parameters3/5

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

Input schema coverage is 100%, so the schema already documents every parameter. The description adds general pagination and ordering context but does not add per-parameter semantics beyond what the schema provides. Baseline 3 is appropriate.

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

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: 'Export craft audit log rows for a workspace'. It goes further by itemizing the exact row contents (prompts, raw output, final text, attempt count, refs) and the row types (messages, notes, comments, replies, critic passes), making it easily distinguishable from the many 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 explicit use cases: 'diagnose a bad draft from what the model was actually shown, or to assemble a grading set'. It does not name alternatives or exclusion criteria, so it stops short of a full when-not-to-use guidance, 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_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 discloses meaningful side effects beyond the annotation flags: a draft profile is created and gated behind human approval, credits are charged, and credits are refunded on failure. This gives the agent an accurate cost and safety model.

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, each carrying distinct information: what the tool does, its prerequisite, and the draft/credit outcome. 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?

It covers prerequisites, the human-approval safety workflow, and cost/refund behavior well. With no output schema, it could say a bit more about what the call returns or how to track completion, but the saved-draft framing gives enough orientation for most agents.

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 baseline is 3. The description only indirectly touches parameters by noting the 50-message prerequisite; it does not add parameter-level syntax, defaults, or format details beyond what the schema already states.

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: 'Run voice extraction for a LinkedIn account from its stored message history.' It also clarifies that the output is a draft profile requiring human approval, which separates it from read/update voice tools such as get_conversation_voice and 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?

It gives clear situational context: the account needs at least 50 usable human-written messages and backfill runs at connection. It does not explicitly name alternatives or say when not to use it, so it falls short of a 5.

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

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.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, so the safety profile is covered. The description adds useful behavioral detail by enumerating the returned fields, statuses, and the fact that it should be polled to track large imports, going beyond the annotations.

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

Conciseness5/5

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

Three concise sentences: first states the purpose and return values, second gives the polling use case, third clarifies parameter reuse. There is no fluff, and the most important usage guidance 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 polling tool with two parameters and no output schema, this description is complete: it specifies the input requirement, the operation context, and the expected return shape, including statuses and error messages. 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.

Parameters4/5

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

The listId parameter has no schema description, but the tool description compensates by explaining to use the same listId passed to campaignstack_import_apollo_list. workspaceId is already documented in the schema, so the description adds meaningful guidance where it is most 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 states a specific action: getting progress of an Apollo list import. It clearly identifies the resource, the status values, the returned fields, and the error message, so an agent can understand exactly what this tool does and distinguish it from generic import or 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 Guidelines4/5

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

The description gives explicit guidance: poll this after campaignstack_import_apollo_list and reuse the same listId. It does not explicitly mention when not to use it or point to alternatives like campaignstack_get_external_import_progress, so it is clear context without full exclusion 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?

Annotations already indicate read-only, idempotent, non-destructive behavior, and the description adds substantial context beyond that: both ID forms are accepted, companySource indicates which matched, platform presence lives under `profiles`, top-level LinkedIn fields are legacy aliases, and the `watch` key appears when a watch exists. This gives the agent a clear model of the response shape and key behavioral nuances.

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: operation, ID scope, response fields, legacy alias caveat, watch key behavior, and fallback guidance. The key scoping information 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 read-only retrieval tool with no output schema, the description is exceptionally complete: it covers accepted inputs, return content, nested key structure, legacy alias warning, conditional watch data, and not-found handling. Nothing critical for correct invocation or interpretation 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%: workspaceId has a description but companyId does not. The description compensates by explaining that companyId can be a shared global ID or an imported workspace-scoped ID, and that workspaceId is only needed for imported companies with a default fallback. This adds meaningful 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 clearly identifies the operation as 'Get a company by ID' and specifies the resource and scope, distinguishing it from list-oriented siblings like campaignstack_list_companies. It also clarifies the two accepted ID forms (global vs workspace-scoped) and the response's companySource field, 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 Guidelines4/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 (get company by ID) and provides a concrete fallback: 'If the company is not found, use campaignstack_list_companies to find valid company IDs.' It does not exhaustively distinguish it from enrichment-related siblings, but the ID-based retrieval context 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_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 mark this as read-only and idempotent, and the description adds substantial behavioral context beyond that: it reveals the asynchronous nature of the underlying workflow, expected completion timing ('usually completes within minutes and never later than about an hour'), the credit semantics (reserved vs charged), and the side effect that found data is written to the lead rather than returned. This is far beyond 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?

The description is dense but efficiently structured: it leads with the operation, enumerates return fields in a logical order, then gives usage context, timing, and a critical caveat. Every sentence contributes useful information; 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?

With no output schema present, the description fully compensates by listing the statuses, wanted fields, credit fields, result fields, and errorCode. It also provides the trigger condition, expected duration, and the all-important clarification that the tool does not return the actual contact data. An agent has everything needed to call and interpret 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 coverage is 100%, with both requestId and workspaceId already described in the input schema. The description adds no additional parameter-specific detail beyond restating the requestId origin indirectly, but with full schema coverage 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 one built-in Contact Finder request by id.' It clearly distinguishes this single-request getter from the sibling list tool by deliberately saying 'one' and 'by id', and enumerates the exact fields returned, 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 gives explicit when-to-use guidance: 'Poll it after campaignstack_enrich_lead_contact_info returned status pending with provider bettercontact.' It also tells the agent what not to expect ('never returns the email or phone itself') and points to campaignstack_get_lead for the actual data, effectively routing 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_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.4/5.0
Behavior4/5

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

Annotations already mark it readOnly, idempotent, and non-destructive. The description adds what the call returns (engagement metrics, trend vs previous period, top-performing posts), which is useful beyond the annotations. No contradictions found.

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

Conciseness5/5

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

Three sentences with no filler; purpose and scope are front-loaded, followed by return value, then parameter usage. Each sentence adds distinct 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 analytics call with three parameters, the description covers purpose, date-range units, and return content. It would be slightly stronger with explicit sibling exclusion or output shape, but nothing required to make 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 description coverage is only 33%, but the description compensates by defining fromMs/toMs as Unix timestamps in milliseconds for the date range, which the schema does not provide. workspaceId is already described in the schema as defaulting to the API key's workspace.

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 ('Get analytics') and a well-scoped resource ('workspace's own published LinkedIn content'), and names the output categories. This distinguishes it from ad/campaign/workspace-level analytics siblings even without naming them.

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

Usage Guidelines4/5

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

Gives clear context for when the tool applies: analytics on the workspace's own organic LinkedIn content. It doesn't explicitly name alternative tools or say when not to use it, but the scope is precise enough to route away from ad, campaign, and workspace metrics.

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

A4/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 behavioral detail beyond annotations: the specific fields returned, the history backfill state, and the explicit 'Returns voice: null when no profile has been extracted yet' behavior. This gives an agent a concrete expectation of the response even 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 a single, well-organized sentence that front-loads the core purpose, lists the concrete return contents, and ends with the important null-case edge behavior. Every clause earns its place and there is no redundant or filler language.

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 read operation with complete schema coverage and safety annotations. The description sufficiently enumerates return fields and the null case, which is especially important because there is no output schema. It could be slightly more detailed about the shape of 'corpus stats' or 'structured profile', but the overall information is adequate for an agent to call the tool 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 100%, with both linkedinAccountId and workspaceId already documented in the input schema. The description adds no parameter-level meaning beyond reinforcing that the profile belongs to a LinkedIn account, which is already reflected in the parameter names and schema descriptions. Baseline 3 applies 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 states a specific verb and resource: 'Get a LinkedIn account's conversation voice profile.' It enumerates the exact contents returned (status, version, style summary, corpus stats, structured profile, backfill state), which clearly distinguishes it from sibling tools like campaignstack_extract_conversation_voice and campaignstack_update_conversation_voice. The account-specific scope also separates it from campaignstack_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 implies this is the read tool for retrieving an existing conversation voice profile, and the null-return note suggests extraction may be needed when no profile exists. However, it does not explicitly name alternatives or state when to prefer extract_conversation_voice or update_conversation_voice. Usage context is clear but 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_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.3/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds value by disclosing exactly what is returned (monthly usage, included credits, rolled-over credits, pack balance, overage used, total pool size, remaining credits, percent used, and plan type), which is especially useful 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?

Two concise sentences with no filler. The core purpose is front-loaded, and the detailed return-field list is presented compactly as a single 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 read-only getter with one optional parameter, annotations covering safety, and no output schema, the description is complete: it states what is retrieved and fully lists the response contents. No additional context is needed for an agent to call this 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 coverage is 100%, and the single optional workspaceId parameter already has a clear description: 'Defaults to the API key's workspace.' The tool description adds no substantive parameter meaning beyond confirming that the balance is scoped to a workspace, so the schema is carrying 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?

The description uses a specific verb ('Get') and a clear resource ('current AI credit balance for a workspace'), then enumerates the exact data returned. This makes the tool's purpose unambiguous and naturally distinguishes it from other get_* tools like get_workspace_billing or get_account.

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 intended use is clearly stated: retrieve the AI credit balance for a workspace. It does not explicitly list exclusions or alternative tools, but the highly specific resource and returned fields give an agent enough context 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_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 mark it read-only, idempotent, and non-destructive; the description adds valuable behavioral detail: it returns null when no proposal is pending, describes the contents of the result (findings with evidence, current vs proposed text, before/after replays), and emphasizes that no changes are applied until the accept sibling is invoked. 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 four sentences, front-loaded with the core purpose, and each sentence adds distinct information: what is returned, what a checkup is, what the result contains, and the side-effect boundary. 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?

With no output schema, the description carries the burden of explaining the return value, and it does: null when none pending, named findings with evidence, current vs proposed text, and before/after replays. The single workspaceId parameter is covered by schema, and annotations cover safety, so nothing essential is missing for an agent to call this 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?

There is only one optional parameter, and the schema already documents its default behavior ('Defaults to the API key's workspace'). Schema description coverage is 100%, so this is the baseline case where the description does not need to add parameter-level detail, and it doesn't.

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 opens with a specific verb and resource: 'Get the workspace's open draft checkup proposal, or null when none is pending.' It further defines what a checkup is and distinguishes the read-only nature from accept by noting 'Nothing is applied until campaignstack_accept_draft_checkup.' This is unambiguous and sets it apart from sibling accept/reject/run 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?

Description makes it clear this is the retrieval action for a pending proposal and explicitly warns that nothing is applied until the accept sibling is called. It does not explicitly name run_draft_checkup as the action that generates a proposal, so the when-to-use guidance is good 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_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.9/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/destructive-safe annotations, the description reveals important behavioral semantics: the two-level union model, that level 1 can only add to level 0, that effective merges both levels, and that this merged set is what the pipeline applies. This gives the agent a clear model of tool 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 dense but every sentence earns its place: purpose, level model, parameter behavior, return contents, and sibling routing. 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 read-only lookup tool with no output schema, it adequately describes what each level returns (entries with enabled status/config, merged sets), which parameters are needed, and how results connect to related tools. 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 coverage is 100%, so the baseline is 3. The description adds meaning by explaining the union relationship between levels, the 'only adds' constraint, and the practical reason to request effective exclusions. This exceeds the schema without fully redefining parameter formats.

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') and then precisely defines the two exclusion levels. This distinguishes the tool from siblings like toggle_exclusion or set_agent_exclusions without requiring schema inspection.

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 explains when to use level=workspace vs level=effective, and routes the agent to related tools for exclusionId-based mutations and for finding signal agents. The note to read level=effective to explain why a lead was skipped is a concrete, actionable usage guideline.

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.2/5.0
Behavior4/5

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

Annotations already mark it read-only/idempotent; the description adds meaningful behavior beyond that: the exact statuses returned, the processed/imported counts, and the null-when-never-started edge case. No contradictions.

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

Conciseness5/5

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

Single sentence with the action front-loaded and each clause adding information; 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?

Given no output schema, the description compensates by listing returned fields and the null edge case. It lacks explicit fallback behavior for invalid provider/sourceId combos, but that is minor for a read-only status 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 covers all three params at 100%, so baseline is 3. Description links provider/sourceId to the originating import run but doesn't add format or behavior details 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?

States a specific verb ('Read'), a precise resource ('campaignstack_import_external_leads run'), and enumerates the returned data (processed/imported counts, status, error). The null fallback further disambiguates it from other progress tools 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?

Clearly scopes use to checking progress of an import_external_leads run and implies it pairs with campaignstack_import_external_leads. It does not explicitly name sibling alternatives or state when not to use it (e.g., get_apollo_import_progress), so no exclusion guidance.

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.7/5.0
Behavior5/5

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

Annotations already indicate readOnly, idempotent, and non-destructive behavior. The description adds meaningful behavioral details beyond annotations: returns null if the workspace does not exist, an unwritten playbook comes back as an empty object, and explains the injection context of each section (every message, first messages, replies). This is strong added value.

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 lists the return structure, provides usage context, states edge cases, and names the sibling tool to use for creation/refresh. The structure is efficient, with front-loaded purpose followed by valuable behavioral and routing 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?

There is no output schema, so the description carries the full burden of explaining the return value. It thoroughly enumerates all returned fields, their semantic meaning, and their injection contexts. It also covers null and empty-object cases and directs the agent to the correct mutation/creation sibling. 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% for the single optional workspaceId parameter, which already states 'Defaults to the API key's workspace'. The description does not add parameter-level detail, but it also does not need to because the schema fully documents the parameter. 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?

States a specific verb and resource ('Get the workspace's playbook') and details exactly what is returned: playbookSections with individual fields, offerContext, and capabilities. It clearly distinguishes this from related siblings like campaignstack_regenerate_playbook and campaignstack_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 Guidelines5/5

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

Explicitly tells the agent when not to use this tool: 'Use campaignstack_regenerate_playbook to create or refresh it' and notes that all returned elements are editable via campaignstack_update_workspace. This provides clear direction for when to call this versus 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_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?

Beyond the readOnly/idempotent/destructive annotations, the description discloses what the return payload contains (request, assistant message, one to three changes with target/current/proposed replacement) and explicitly states that nothing is applied until the decide tool is called. This is rich, non-obvious behavioral context that annotations 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?

Every sentence earns its place: the first states the core behavior and null case, the second summarizes the payload structure, and the third clarifies the lack of side effects. The most decision-relevant information is front-loaded, 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?

With no output schema present, the description takes on the burden of explaining the return value and does so well: null vs. a structured payload and the key fields an agent needs to review. It also clarifies the side-effect boundary. For a simple one-parameter read tool, nothing important 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% and the single workspaceId parameter is already documented ('Defaults to the API key's workspace'). The tool description adds no parameter-specific meaning, but it also does not need to because the schema is sufficient. 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 states a specific action ('Get'), the exact resource ('the workspace's pending playbook proposal'), and the null-when-empty behavior. It clearly distinguishes this from general playbook tools like campaignstack_get_playbook by focusing on the pending proposal awaiting 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 context: this is for retrieving a proposal that is waiting for a decision. It references campaignstack_decide_playbook_proposal as the follow-up action, making the tool's place in the workflow obvious. It does not explicitly list exclusions or compare itself to get_playbook, so it stops short of a perfect 5.

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.2/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 clear. The description adds useful context by enumerating the data returned (plan, cycle, status, Stripe period start/end), which is especially valuable since there is no output schema. 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 purposeful sentences: the first states the operation and the returned fields, the second routes the agent to the correct sibling for credit usage. There is no filler, repetition, or 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 simple read-only tool with one optional parameter and no output schema, the description sufficiently communicates the returned content. The schema documents the defaulting behavior. A minor gap is that it doesn't specify value formats or types, but this is not critical for a billing-info retrieval 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?

There is one optional parameter, workspaceId, and the schema description covers it fully with 'Defaults to the API key's workspace.' The tool description adds no additional parameter semantics, but with 100% schema coverage 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 billing information for a workspace,' then lists the exact content returned (plan, billing cycle, workspace status, Stripe subscription period start/end). It clearly differentiates itself from the billing-adjacent sibling campaignstack_get_credit_balance by explicitly routing credit-usage questions to that 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?

It explicitly says to use campaignstack_get_credit_balance for credit usage, which tells the agent when not to use this tool for billing-related but credit-specific questions. It doesn't exhaustively compare against other get_workspace* siblings, but the intended use case is clear from the listed fields.

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.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 safety behavior is covered. The description adds meaningful behavioral detail by specifying that the response contains both a latest snapshot and a time-series, plus listing the included metrics. 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?

Two sentences with zero filler: the first front-loads purpose and returned content, the second gives a clear sibling alternative. It avoids repeating schema details 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 simple read-only metrics tool with no required parameters, the description provides sufficient context: what metrics are returned, that a snapshot and time-series are included, and how the date range behaves. The sibling pointer and annotations round out the picture, so an agent can 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?

Both parameters are fully described in the schema (days range/default and workspaceId default), giving 100% schema description coverage. The description's phrasing about a 'requested date range' only paraphrases the days parameter without adding new meaning. 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 uses a specific verb and resource ('Get workspace-level metrics') and enumerates concrete output components such as total/active campaigns, lead counts, and the top campaign. It also explicitly names the sibling tool for per-campaign detail, making its scope 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 clearly states workspace-level scope and explicitly routes agents to campaignstack_get_campaign_metrics for per-campaign detail. This gives an agent a direct decision rule for choosing between the two related 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 indicate read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral information beyond that: it discloses that the tool returns null for defaultAccountVoice if not configured. This helps set expectations for 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?

Two tightly written sentences with no wasted words. The main purpose and the null-return behavior are both communicated efficiently, and the usage guidance 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 covers the purpose, usage context, and a key return-value edge case (null when unconfigured). While it does not describe the full structure of the voice guide, the null disclosure and simple one-parameter schema make this adequate for a getter 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%, with workspaceId already documented as defaulting to the API key's workspace. The description adds no further parameter-level meaning, so a baseline of 3 is appropriate.

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

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 a precise resource: the brand voice & tone guide for a workspace's default LinkedIn account. This clearly distinguishes it from related tools like get_conversation_voice, which targets conversation-specific voice rather than the workspace-level default account 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?

The description gives explicit context for use: 'Use this to understand the writing style before generating content drafts.' It does not mention when not to use it or name alternative tools, but the usage context 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_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.7/5.0
Behavior5/5

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

Annotations already signal mutation (readOnlyHint: false), but the description adds valuable behavioral context: up to 50,000 records across 500 pages, creates-or-merges semantics, deduplication by email/LinkedIn URL, optional ICP filtering, and asynchronous execution for large lists. This goes well 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 well-structured: main action first, then key behaviors, then async caveat, then cross-references to sibling tools. Every sentence contributes meaningful information 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 6-parameter import tool with no output schema, the description covers the data source, scale limits, deduplication, ICP filtering, async behavior, and how to find valid inputs and track progress. An agent has enough context to invoke the tool correctly and interpret follow-up steps.

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 high (83%), and the description adds extra meaning by telling the agent to use campaignstack_list_apollo_sources for valid listId values, which is not explained in the schema. It also clarifies the onlyMatchingIcp option and its relationship to campaignId. Modest but useful added 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 ('Import') with a clear resource ('Apollo contact list into CampaignStack'), and details what the tool does: fetches contacts, creates/merges leads, and deduplicates by email and LinkedIn URL. It is unmistakably distinct from sibling import tools like campaignstack_import_external_leads or campaignstack_import_leads_csv.

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 this tool (importing from an Apollo list), mentions optional ICP filtering, and explicitly points to sibling tools for finding valid listId values (campaignstack_list_apollo_sources) and checking async status (campaignstack_get_apollo_import_progress). It does not explicitly contrast with other import tools, 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_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

A5/5.0
Behavior5/5

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

Beyond the annotations, the description discloses concrete behavior: provider-specific provenance (shared pool vs workspace private leads), deduplication by email and LinkedIn URL, field mapping, optional campaign routing, and long-running server-side imports with a polling mechanism. This materially helps an agent anticipate side effects and follow-up actions.

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 efficient, front-loading the core purpose and Apollo distinction before covering provenance, sourceKind, deduplication, campaign routing, async behavior, and cost. Every sentence carries distinct information with 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?

The description covers the key operational aspects an agent needs: required source context, provider differences, data handling behavior, optional campaign assignment, long-running execution, and the progress-tracking companion tool. Given the tool's complexity, nothing essential is missing, and the lack of an output schema is mitigated by pointing to the progress poll.

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 the schema has 100% coverage, the description adds meaningful semantics: sourceKind maps to provider-specific meanings, sourceId can be 'portal', IDs come from specific list tools, campaignId routes to a campaign's default lead list, and sourceName is for progress tracking. This goes well beyond the schema's 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 opens with a specific verb and resource: 'Import every lead of an external provider source into CampaignStack.' It also distinguishes itself from the closest sibling by noting 'for Apollo use campaignstack_import_apollo_list', which removes ambiguity about which import tool to use.

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 for Apollo and explains when this tool is appropriate for instantly and hubspot. It also specifies source restrictions (instantly-only campaign sources, hubspot-only portal), where to get source IDs, and the free/no-credits condition, giving the agent clear contextual 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

A3.8/5.0
Behavior4/5

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

Annotations already flag that this is a non-read-only, non-idempotent write, and the description adds behavior beyond that: raw CSV content is required, mapping is optional, and auto-mapping uses header names. It also usefully signals a verification workflow after import. 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 tightly packed in three sentences, front-loads the core purpose, and every sentence adds value: input format, mapping behavior, and post-import next steps. 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.

Completeness4/5

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

For a moderate-complexity import tool with no output schema, the description provides enough to call it with just csvData and to know what to do next. The main remaining gap is the unclear mapping structure, but the tool can be used without a mapping, so the description is sufficiently complete for the primary use case.

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 33%, the description compensates partially by explaining csvData as 'raw CSV content' and mapping as 'optional column mapping' with auto-mapping based on header names. However, it does not define the exact key/value semantics of the mapping object, which remains ambiguous.

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: 'Import leads from CSV data.' It clearly identifies the input format (CSV) and distinguishes this tool from other import siblings like campaignstack_import_apollo_list and campaignstack_import_external_leads, though it does not explicitly name them.

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 clear follow-up actions ('After import, use campaignstack_search_leads to verify...') but does not state explicit when-to-use versus alternative import tools. Usage context is implied by 'CSV data' rather than directly contrasted with sibling tools.

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 establish read-only, idempotent, and non-destructive behavior. The description adds meaningful behavioral context beyond that: results are limited to 3, they are the most recent drafts, and they include author info and LinkedIn extension data. This gives the agent a clear expectation of the tool's output and scope 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?

The description is three sentences with no filler. It front-loads the core purpose and scope, then briefly describes the result shape, then gives a concise downstream workflow. 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 read-only listing tool with one optional parameter and no output schema, the description is complete: it explains what is listed, the cap of 3 results, what data is included, and what to do next. Annotations already cover the safety profile, so 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 coverage is 100%, with a single optional workspaceId that already has a clear description ('Defaults to the API key's workspace'). The tool description mentions 'for a workspace' but adds no new parameter-level semantics; the schema carries the full burden, so the baseline score of 3 is appropriate.

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

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 the latest AI-generated content post suggestions (draft posts tagged 'ai-generated') for a workspace.' It distinguishes this tool from generic content listing tools by emphasizing AI-generated drafts, the 'up to 3 most recent' limit, and the author/LinkedIn extension data returned.

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: it is the entry point for AI-generated suggestions, followed by edit, schedule, or submit-for-approval actions. It names the immediate downstream tools (campaignstack_update_content_post, campaignstack_schedule_content_post, campaignstack_submit_content_for_approval), but it does not explicitly contrast with sibling list tools like campaignstack_list_content_posts.

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.3/5.0
Behavior4/5

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

Annotations already communicate readOnlyHint and destructiveHint, so the description's safety burden is lower. It adds practical behavioral context by stating the integration prerequisite and describing the output fields, which is useful 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: purpose first, then return value, then downstream usage and prerequisite. Every sentence contributes either to selection, invocation, or follow-up actions, 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 simple read-only listing tool with a well-documented single optional parameter and no output schema, the description is complete. It covers what the tool returns, what must be true before calling it, and how to use the results.

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%, and the single optional workspaceId parameter is already fully described in the input schema as 'Workspace ID (defaults to the bound workspace)'. The description adds no parameter-level detail, but none is needed because the schema carries the information.

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 action ('List Apollo lists'), the resource ('available in the connected Apollo account'), and the returned fields ('id, name, and estimated contact count'). It clearly differentiates itself from the sibling import tool by explaining the lists are meant for later import.

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 a connected Apollo integration and tells the agent to use campaignstack_connect_apollo first if needed. It also directs the returned id values to campaignstack_import_apollo_list. It does not explicitly exclude alternative list tools, but the Apollo-specific wording and prerequisite 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_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 this as read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond that: cursor-based pagination and the archived-campaign hiding behavior unless includeArchived is true. It does not cover pagination details or response shape, but that is not critical 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 focused sentences, each adding value: purpose, pagination, archive visibility, and downstream usage. The most important information is front-loaded, with no redundancy 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 list tool with rich annotations, the description covers the essential behaviors: workspace scoping, pagination, archive filtering, and how to use the returned campaignId values. Since there is no output schema, a bit more detail about the exact response structure would be helpful, but the description is sufficient for correct invocation and follow-up.

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 workspaceId and includeArchived, and the description adds meaning for cursor-based pagination and the archived filter behavior. With 50% schema coverage, this is a reasonable level of additional guidance, though limit and cursor mechanics could be slightly more 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 opens with a specific verb and resource: 'List campaigns in a workspace.' It clearly distinguishes this tool from related siblings like campaignstack_get_campaign or campaignstack_list_ad_campaigns by naming the exact object type and 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 provides clear context for when to use the tool and explains how to chain the results with campaignstack_get_campaign, campaignstack_list_workflows, or campaignstack_list_lead_lists. It does not explicitly state when not to use it, but the simple listing purpose is unambiguous.

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/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 useful behavioral context by mentioning cursor-based pagination and the workspace metadata fields 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?

Three short sentences, each earning its place: the first states the core purpose, the second describes return content, and the third gives practical next-step guidance. No filler or redundant restatement of the name or 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 read-only list tool with no output schema, the description covers the resource, returned metadata, pagination behavior, and downstream usage. Minor gaps like the exact next-cursor field name, sort order, and explicit limits semantics prevent a perfect score, but nothing critical is missing for basic 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 coverage is only 33%, so the description must compensate. It explains cursor semantics by mentioning cursor-based pagination and workspaceId is described in the schema, but limit is left entirely to inference despite being a meaningful pagination control. The compensation is partial rather than complete.

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 clarifies what the response includes (workspace metadata: tags, notes, addedAt), which sets it apart from generic list tools and from campaignstack_get_company, which retrieves a single company.

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 is the tool for enumerating companies in a workspace and suggests chaining to campaignstack_get_company via returned companyId values, but it does not explicitly state when to use this over other list tools or when not to use it. There is no alternative/exclusion guidance, just downstream usage.

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 declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds workspace scoping and optional status filtering, which is useful, but does not describe return shape, ordering, or pagination 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?

Two concise, front-loaded sentences. The first states the core action and scope, the second states the optional filter and the alternative tool. 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 read-only list operation with no required parameters and fully documented schema, the description covers the essential contextual information: what is being listed, the scoping, the one optional filter, and where to go for per-item details.

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 fully documents both parameters with 100% coverage: status is an enum with a clear meaning, and workspaceId has a default. The description repeats the status filter but adds no new parameter 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 verb ('Lists'), a concrete resource ('competitor watches for a workspace'), and an optional filter dimension (status). It also names the sibling tool for a different use case, get_competitor_watch, making the purpose distinct.

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 says when to use this list tool versus get_competitor_watch: use the list for competitor watches, and use the get tool to see post details for a specific watch. This gives the agent clear routing guidance without over-explaining.

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.4/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: newest-first ordering, row-level fields like origin, wantEmail/wantPhone, creditsReserved, creditsCharged, result summary, and errorCode. It does not cover pagination or rate limits, but the safe, idempotent nature is well 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?

The description is compact and front-loaded: it opens with the action, resource, ordering, and optional filter, then lists the useful row fields, then gives usage context and the sibling alternative. Each sentence earns its place with no filler or repetition of obvious 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?

There is no output schema, so the description compensates by enumerating the key row fields and explaining the charge-audit use case. It does not describe the exact response envelope or pagination behavior, but for a straightforward filtered list with fully documented optional parameters, 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 100%, and each parameter already has a clear description: limit default/max, status enum, and workspaceId default. The description restates the statuses and mentions filtering, but it does not add significant meaning beyond what the schema already provides, 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 states a specific action and resource: 'List the workspace's built-in Contact Finder requests, newest first, optionally filtered by status.' It also clearly distinguishes itself from the sibling campaignstack_get_contact_finder_request by positioning that tool as the one for a single id.

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 use cases: 'Use it to see what is in flight or to audit what the finder charged.' It also names the alternative tool for one-id lookups, giving an agent direct routing guidance between the list and get variants.

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.4/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, so the description only needs to add useful behavioral context. It does so by scoping results to scheduled/published posts, specifying Unix millisecond timestamps, and signaling that this endpoint returns summary-level calendar data rather than full post 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?

Three sentences, front-loaded with the purpose, then the return scope/units, followed by the companion-tool pointer. Every sentence earns its place with no redundant phrasing.

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 no output schema, the description covers what is returned, what inputs mean, and how to get richer details. It omits pagination/sorting, which could matter for large date ranges, but the core invocation guidance is complete enough.

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?

Only workspaceId has a schema description (33% coverage), so the description must compensate for startMs/endMs semantics. It adds that the inputs form a date range and that timestamps are Unix milliseconds, while the parameter names make the start/end roles clear. It could state inclusivity/exclusivity, but the essential meaning is 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 opens with a specific verb and resource ('List content posts in a date range for calendar view') and adds the status filter of scheduled or published posts. This is clearly distinct from the sibling campaignstack_list_content_posts and pairs with campaignstack_get_content_post for detail 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 establishes the intended use case (calendar view over a date range) and tells the agent to follow up with campaignstack_get_content_post for full post details. It does not explicitly name when-not-to-use alternatives such as campaignstack_list_content_posts, 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_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

A5/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, and the description adds substantial behavioral context: OR-style tag filtering, default and maximum limits, most-recent-first ordering, and cursor-based pagination with nextCursor. This goes well beyond the structured 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?

Four compact sentences, front-loaded with the core purpose, followed by filter semantics, ordering, pagination, and a pointer to the sibling tool. Every sentence delivers actionable 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 list-style read tool with no output schema, the description provides all essential operational details: what is returned, how results are ordered, how pagination works, and how to get fuller entity details. The agent has everything needed to call the tool correctly and decide when a different tool is appropriate.

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 only 33%, so the description carries most of the semantic weight. It explains tags OR logic, limit defaults and maximum, cursor mechanics, and that status/platform are optional filters. The remaining parameter (workspaceId) is already described in the schema, so the description compensates well for the low 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 states the action, resource, and scope: 'Lists content posts for a workspace' with optional filters. It also names and distinguishes the sibling tool 'campaignstack_get_content_post' by pointing out that it returns full details including media URLs, making the division of responsibility 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 gives explicit guidance on filters, OR semantics for tags, pagination behavior, and directs the agent to campaignstack_get_content_post when full details are needed. This effectively communicates when to use this list tool versus the get tool.

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?

Annotations already signal readOnly/not destructive, and the description adds meaningful behavioral detail beyond them: exact error conditions (unsupported_provider, master_key_required), the requirement for a connected integration, and the returned fields (id, email address, active status). This is precisely the kind of auth/error context that helps an agent predict outcomes.

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 adding a distinct piece of information: scope, return shape, downstream usage, auth/error behavior, and integration prerequisite. Front-loaded with the core listing behavior; no filler or repetition of schema content.

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

Completeness5/5

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

For a 2-parameter list tool with no output schema, the description is complete: it covers return fields, supported/unsupported providers, auth requirement, prerequisite integration, and error behavior. The only omitted details (e.g., pagination) are minor and not necessary 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 100%, so the baseline is 3. The description adds value beyond the schema by explaining provider parameterization and that instantly, despite being an enum value, currently returns unsupported_provider. It also ties the returned id to the emailAccountId required elsewhere, giving the provider parameter operational context the schema alone does not provide.

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 opens with a specific verb and resource: 'List an external provider's sending mailboxes / email accounts', then immediately scopes it as provider-parameterized and notes that only Apollo exposes mailboxes today. This clearly distinguishes it from sibling list tools like campaignstack_list_external_lead_lists and campaignstack_list_external_sequences, even 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?

Clear usage context: it states Apollo is the only supported provider (other providers return unsupported_provider), calls out prerequisites (MASTER API key, connected integration), and explains a downstream use case (Apollo's add-to-sequence needs emailAccountId). However, it does not explicitly name alternative tools or say 'use X instead', so it stops short of a fully explicit when/alternative decision rule.

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.3/5.0
Behavior5/5

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

Beyond the readOnlyHint=true and destructiveHint=false annotations, the description discloses a real behavioral nuance: for clay, lists are the tables registered on the Integrations page because Clay's API cannot enumerate tables, and webhook URLs are omitted from results. It also states the exact return fields (id and name), which an agent would otherwise need to discover. The 'Requires a connected integration' line adds an operational prerequisite 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.

Conciseness4/5

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

Five sentences, each contributing to purpose, clay exception, return shape, downstream usage, or prerequisite. The core purpose is front-loaded, and the clay edge case is contained in a separate sentence without bloating the main message. Slightly dense, but no 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 list operation with no output schema, the description covers what an agent needs: provider dimension, clay-specific source of truth, returned fields (id, name), how to consume the result, and the integration prerequisite. The only missing elements are standard list-tool details like pagination or empty-result behavior, which are minor given the tool's simplicity. Annotations already establish the safety profile.

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 describes both parameters and enumerates provider (100% schema description coverage), so the baseline is 3. The description adds some color on the provider parameter by listing valid values and explaining clay's registration behavior, but it adds nothing about workspaceId beyond the schema's default note. Overall, the description enriches the provider semantics slightly without needing to compensate for a schema 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 specific verb ('List'), a specific resource ('external provider's lead lists'), and names the exact provider parameterization (instantly, hubspot, clay). This clearly distinguishes it from internal lead-list tools like campaignstack_list_lead_lists by emphasizing 'external provider'. The clay-specific clarification reinforces the scope and avoids ambiguity.

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: it is for external providers only, requires a connected integration, and explains how the returned id is consumed ('Use the id as listId with campaignstack_add_lead_to_external_list or in an integration:add_to_list workflow node'). It does not explicitly name alternatives for internal lead lists, but the 'external' qualifier and provider enum make 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_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.7/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint and destructiveHint), the description adds substantial behavioral context: Apollo requires a MASTER API key and returns errorType master_key_required for non-master keys; a connected integration is required; and the output includes id, name, and active status. These details help the agent anticipate failures and prerequisites without contradicting any 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?

The description is information-dense but every sentence earns its place: purpose, return values, downstream usage, prerequisite emails, API key requirement, and integration requirement. The structure flows logically from what the tool does to how to use its output and what could go wrong, with no fluff 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?

Given the moderate complexity (provider enum, cross-tool usage, API key caveats), the description covers all critical operational aspects. It explains return fields since there is no output schema, provides error behavior, names prerequisite tools, and references connect tools. Nothing essential for invoking this tool 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 coverage is 100%, so parameters are already documented. The description adds meaningful semantic nuance about the provider parameter: apollo maps to 'sequences', instantly maps to 'campaigns', and more providers extend the enum. It also ties the provider parameter to the integration requirement, which enriches the bare schema 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 clear verb and resource: 'List an external provider's sequences.' It specifies exactly what is returned (id, name, active status) and explicitly distinguishes itself from related list tools by naming provider-parameterized behavior. It also clarifies the difference between apollo sequences and instantly campaigns, making the tool's scope unambiguous.

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

Usage Guidelines4/5

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

The description provides strong contextual guidance: it tells the agent to use the returned id as campaignId with campaignstack_add_lead_to_sequence or an integration:add_to_sequence node, and directs Apollo users to campaignstack_list_external_email_accounts for a sending mailbox. It also states the prerequisite of a connected integration. However, it does not explicitly state when not to use this tool versus other list tools or name direct alternatives for listing sequences, so it misses the 'when-not' element required for 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_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
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 valuable non-obvious behavior: API keys and webhook secrets are never returned, only booleans indicating whether they are set. This goes beyond what annotations and schema 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 short sentences, each carrying distinct information: purpose, return fields, security guarantee, and routing to connect tools. The purpose is front-loaded and there is no filler or repetition of schema content.

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

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 and no output schema, the description covers the purpose, return fields, security behavior, and relevant sibling routing. Combined with complete schema documentation, nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

The schema fully documents the sole optional parameter, workspaceId, including its default-to-bound-workspace behavior. The description adds no additional parameter-level detail, so the baseline of 3 for high schema coverage 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?

Description names a specific verb ('List') and resource ('connected integrations for a workspace'), and adds concrete examples (Apollo, Instantly, Clay). It also states the returned fields, clearly setting it apart from generic list tools and from connect/disconnect 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 explicitly routes to campaignstack_connect_apollo and campaignstack_connect_instantly when the goal is to add integrations, making the when-not boundary clear. This is direct and actionable guidance for an agent choosing between siblings.

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, idempotentHint, and non-destructive behavior, so the bar is lower. The description adds useful behavioral context: the entry stores LinkedIn profile URLs and the response returns importedLeadId values usable with a removal tool. 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 with zero filler: first states the core purpose, second gives the prerequisite lookup, third explains the downstream value. 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.

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 read-only tool with strong annotations, the description covers what the tool returns and how to find the required parameter. There is no output schema, so a little more detail about the exact response shape could help, but the current description is sufficient for correct invocation.

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

Parameters4/5

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

Schema coverage is only 50%, and exclusionId has no schema description. The description compensates by explaining that exclusionId identifies a manual exclusion entry and telling the agent how to obtain it. workspaceId is already described in the schema, so no additional explanation 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 states a specific verb ('List'), a specific resource ('LinkedIn profile URLs stored in a manual exclusion entry'), and differentiates itself from related tools by referencing get_exclusions and remove_manual_exclusion_url. This makes the tool's role unambiguous.

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_get_exclusions to find exclusionId values, which is the key prerequisite. It doesn't explicitly state 'don't use for X', but the read-only listing purpose plus the sibling references make the usage context clear.

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.3/5.0
Behavior4/5

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

The annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond that: snapshots are created automatically before every write, rows are newest first, and each row includes _id, createdAt, replacedBy, and the full playbook text. This gives the agent a good mental model without contradicting the annotations.

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

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 action and ordering, the second explains the snapshot mechanism, and the third lists the row fields and points to the revert tool. 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 read-only list tool with one optional parameter and no output schema, the description is complete. It explains what the tool returns (row fields including full playbook text), how snapshots are created, and how to act on the results via campaignstack_revert_playbook. There are no obvious gaps that would prevent 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 100%, and the only parameter, workspaceId, is already documented in the schema with 'Defaults to the API key's workspace.' The tool description itself does not add parameter-level guidance, but it does not need to because the schema fully covers it. Baseline 3 is appropriate 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 states a specific verb and resource: 'List playbook version snapshots for the workspace, newest first.' It clearly distinguishes this from related tools like campaignstack_get_playbook and campaignstack_revert_playbook by focusing on historical snapshots rather than the current playbook or restoring it.

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 is useful by explaining that snapshots are taken before every playbook write, and it explicitly points to campaignstack_revert_playbook for restoring a snapshot. It does not enumerate exclusions or multiple alternatives, but the guidance is clear enough for an agent to select this tool for history inspection or pre-restore lookup.

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.5/5.0
Behavior4/5

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

Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds useful scope context: it lists only active/enabled topics, spans all campaigns in the workspace, and returns the topic ID plus owning campaign. 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?

Three sentences, each earning its place: scope and return value, primary use case, and pointer to the sibling alternative. The most important scoping information is front-loaded, 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 simple read-only tool with one optional parameter, full schema coverage, and safety annotations, the description is complete. It tells the agent what the tool returns, when to use it, and which sibling to choose for campaign-specific queries.

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 only parameter (workspaceId) is already described as defaulting to the API key's workspace. The description confirms the workspace scope but adds no semantic detail beyond the schema, so the baseline of 3 is appropriate.

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

Purpose5/5

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

States a specific verb ('List') and resource ('active LinkedIn search-watch topics across campaigns in a workspace'), and clarifies what is returned (topic ID and campaign). It explicitly differentiates itself from campaignstack_get_campaign_topics, so an agent can distinguish the two tools 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?

Gives an explicit use case: check which topics are already being monitored before creating a new search watch. It also names the alternative for campaign-scoped queries (campaignstack_get_campaign_topics), providing 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_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.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is established. The description adds useful context about the output content (confidence interval, lift, validation) and sliceability, but it does not disclose behavioral details like default time windows, empty-result behavior, or pagination. This adds some value beyond annotations without contradicting them.

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

Conciseness5/5

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

Two sentences, no filler; the core purpose and output metrics are front-loaded in the first sentence, with filtering options in the 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 read-only, no-required-params metrics listing, the description covers the returned values and all relevant slicing dimensions; the schema covers the parameters. The lack of an output schema is compensated by the explicit metric list, though details like the time range or the definition of 'at volume' are not specified, leaving slightly more to infer than ideal.

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?

All four parameters have schema descriptions with 100% coverage, so the schema does the heavy lifting. The description's 'Sliceable by channel, craft kind, and profile version' largely restates the schema fields, and it adds no format, enumeration, or default semantics beyond the schema's workspaceId note. 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 names a specific resource (voice vs generic experiment) and enumerates exactly what is returned: sends, replies, acceptance counts, reply rate with 95% CI per arm, relative lift, and validation status. This clearly distinguishes it from the many other list_* siblings, which concern leads, campaigns, accounts, etc. The only minor weakness is that it starts with a noun phrase rather than an explicit verb, but the intent is 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 implies the tool is used when an agent needs reply-rate and lift metrics for the voice vs generic experiment, and it states the available slicing dimensions. However, it offers no explicit when-to-use vs alternatives or any exclusions (e.g., when to prefer get_campaign_metrics or list_split_optimization_logs). This is more than no guidance but less than explicit routing.

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

A4.5/5.0
Behavior5/5

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

It discloses important behaviors beyond annotations: the tool never directly applies craft-data changes, returns either an answer or a proposalId, replaces any existing pending proposal, and runs an LLM call. The phrase 'NEVER writes' could be read too literally, but the following sentence about replacing the pending proposal clarifies the real state mutation, and readOnlyHint=false is consistent with 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?

Five sentences, all carrying operational value: main action, non-write behavior, follow-up workflow, question edge case, and pending-proposal side effect. It is front-loaded and contains 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 still tells the agent exactly what to expect as output, what to do next with the proposalId, what happens to a pending proposal, and what happens if the request is a question. Nothing needed to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, with both parameters already described: request has min/max length and examples, and workspaceId has a default behavior. The description adds no significant new parameter-level meaning, 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 ('Ask the playbook assistant') and a specific resource ('the workspace's craft data'), and clearly defines the outcome: a proposal with a proposalId, not a direct change. It also names the related reading and applying tools, which distinguishes it from campaignstack_get_playbook_proposal and campaignstack_decide_playbook_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?

It gives explicit routing for the proposal workflow: read with campaignstack_get_playbook_proposal, apply with campaignstack_decide_playbook_proposal, and explains the question-without-proposal case. It does not explicitly contrast this with related playbook tools like regenerate_playbook or revert_playbook, so it is clear but not exhaustive.

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

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.5/5.0
Behavior5/5

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

The description richly discloses behavior beyond annotations: it preserves user-authored passages verbatim, snapshots the previous version to history, never overwrites hand-edited offerContext, is non-idempotent, and may take several seconds. This gives an agent a strong mental model of the tool's side effects and safeguards.

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 appropriately sized and well-structured: it leads with the core purpose, then explains update semantics, preservation guarantees, non-idempotence, latency, and the required follow-up. Each sentence adds meaningful information without unnecessary padding.

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 has one optional parameter, no output schema, and annotations indicating a write operation, the description covers all needed operational context: inputs, mutation behavior, versioning, latency, and how to retrieve the updated playbook. The explicit follow-up instruction removes ambiguity about 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?

The single optional parameter workspaceId is already fully covered in the schema with 'Defaults to the API key's workspace,' so the description does not need to add parameter details. The description implicitly reinforces the workspace context but provides no additional parameter 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 action ('Trigger AI regeneration') applied to a specific resource ('the workspace playbook') and clarifies it updates an existing playbook rather than discarding it. It clearly distinguishes the tool from related playbook operations like campaignstack_list_playbook_versions and campaignstack_revert_playbook by referencing them for history management.

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: regenerate the playbook from current campaigns, ICPs, personas, and company context. It provides post-conditions and references follow-up tools, but it does not explicitly contrast this with alternatives like campaignstack_propose_playbook_change 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_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.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 non-obvious behavioral consequence: two consecutive rejections pause automatic checkups for 30 days while manual runs remain available. This is valuable context not carried by annotations. It does not fully describe the fate of the rejected checkup, but the key side-effect is 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 concise sentences with no wasted words. The primary action and the important consequence are front-loaded, making the description easy to parse and action.

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 rejection action, the description provides enough information to select and invoke the tool correctly: what it operates on, the required source of the ID, and the behavioral side-effect. The lack of an output schema means return-value expectations are not addressed, but this does not block correct usage.

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 parameter descriptions already explain checkupId's source and workspaceId's default. The tool description adds no additional parameter-level meaning, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action: reject the pending draft checkup without applying any changes. This directly distinguishes it from the sibling accept_draft_checkup and clarifies the non-applying nature of the rejection.

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 appropriate: when a draft checkup should be rejected rather than accepted or applied. It does not explicitly name alternatives, but 'without applying anything' and the pause side-effect provide sufficient guidance for selecting this tool over accept/run variants.

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.4/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 useful behavioral context by specifying exactly what gets removed (a LinkedIn profile URL) and how it is identified, going 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?

Three concise, front-loaded sentences with no filler. The core operation is stated first, followed by two highly relevant lookup instructions. 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 and no output schema, the description covers the action, target, and parameter sourcing. It does not mention return values or error cases, but this is a minor gap for such a straightforward removal 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?

With schema description coverage at only 33%, the description compensates by explaining the meaning of the two required parameters: importedLeadId is the identifier for the URL and comes from list_manual_exclusion_urls, while exclusionId comes from get_exclusions. The optional workspaceId is already described 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 opens with a specific verb and resource: 'Remove a LinkedIn profile URL from a manual exclusion entry by its importedLeadId.' It clearly distinguishes the tool's scope by naming the exact entity and identifier, making it easy to differentiate from sibling removal 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 prerequisite guidance by telling the agent to use campaignstack_list_manual_exclusion_urls to find importedLeadId values and campaignstack_get_exclusions to find exclusionId values. It does not explicitly discuss when not to use this tool versus alternatives, 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_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.2/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 destructive, and idempotent. The description adds valuable behavioral detail by stating that the currently replaced text is snapshotted first, making each revert reversible. 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 wasted words. The core action is stated first, followed by the safety-relevant snapshot behavior and a pointer to the version-listing companion 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 two-parameter mutation tool with annotations and a fully documented schema, the description covers the operation, reversibility, and where to obtain version ids. It is largely complete, though it does not describe the response format or explicitly address selection against alternative playbook-modifying tools.

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 both parameters already have clear descriptions in the schema. The tool description adds no additional parameter semantics beyond what the schema provides, so the baseline score of 3 is appropriate.

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

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') with a clear resource ('a playbook version snapshot as the live workspace playbook'). It clearly distinguishes this rollback operation from related tools like list_playbook_versions and regenerate_playbook.

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 invoke this tool: to restore a snapshot as the live playbook. It also points to campaignstack_list_playbook_versions for finding version ids, but it does not explicitly mention when not to use it or contrast alternatives such as 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_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.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and idempotentHint=false, and the description adds substantial behavioral context beyond them: it is NOT idempotent because it runs LLM analysis plus up to 2 replay crafts, it may take tens of seconds, it bypasses automatic thresholds, and it fails under specific conditions. This gives an agent a genuinely accurate model of side effects and latency. 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?

Four dense sentences with zero waste, and the core purpose is front-loaded first. Each sentence earns its place: purpose, failure conditions, behavioral traits/latency, and result-read pointer. The 'NOT idempotent' flag reinforces the annotation while adding explanatory context rather than merely repeating it.

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-optional-parameter action tool with no output schema, the description is complete: it covers what happens, how long it takes, failure modes, side effects, and where to retrieve the outcome (campaignstack_get_draft_checkup). The result-read pointer compensates for the absent output schema, so nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% — workspaceId is fully documented ('Defaults to the API key's workspace'). The description adds no parameter-level detail, but with complete schema coverage the baseline of 3 applies; the schema carries the load 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?

States a specific verb, resource, and scope: 'Run a draft checkup for the workspace now'. It distinguishes itself from the automated daily sweep by noting it bypasses evidence thresholds, and from campaignstack_get_draft_checkup by explicitly pointing there for reading results. An agent can tell exactly what this tool does and how it differs from its nearest 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?

Provides clear context: use it for an on-demand checkup bypassing automatic thresholds, with the alternative being the threshold-gated daily sweep. It also gives concrete failure conditions (pending proposal, fewer than 3 drafts) that tell an agent when NOT to call it, and names the sibling for reading results. It doesn't explicitly enumerate all sibling alternatives (e.g., accept/reject checkup), but the guidance is sufficient 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_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.8/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 pagination behavior, the need to follow nextCursor, coverage of both shared and workspace-private leads, the structure of platform presence under `profiles`, and deprecation of top-level linkedInUrl. This is rich 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?

The description is dense but every sentence adds value: scope, pagination, filter omission, lead visibility, response structure, legacy alias, and downstream usage. It is front-loaded with the core purpose and contains 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?

Despite having no output schema, the description explains the important return aspects needed to use the tool correctly: pagination via nextCursor, the profiles key, the legacy alias, and leadId handoff to other tools. For a read-only search tool with five optional parameters, this is complete enough for an agent to call it correctly without further assumptions.

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 only 40%, but the description compensates by explaining that query accepts name/email/LinkedIn URL, that company searching is supported, and that omitting query and companyId pages through all leads. It also explains how cursor relates to pagination and how leadId feeds downstream tools, adding meaning well 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 uses a specific verb ('Search'), a clear resource ('leads'), and a bounded scope ('in a workspace'), and enumerates the searchable fields: name, email, LinkedIn URL, or company. This unambiguously distinguishes it from other list/search siblings such as campaignstack_list_leads_at_node or campaignstack_get_lead.

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 patterns: how to page with nextCursor, how to page through every lead by omitting query and companyId, and how to use the returned leadId with sibling tools. It does not explicitly state when to choose this over other lead-related tools or name exclusions, but the context 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_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.9/5.0
Behavior5/5

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

Annotations already mark this as destructive and idempotent, but the description adds crucial behavioral context: the replacement is additive to the workspace list, it cannot release workspace exclusions, and the list is wholly replaced rather than merged. This meaningfully expands on what the annotations alone 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?

Every sentence earns its place. The core operation is stated first, followed by critical caveats about additive behavior, complete-list replacement, clearing, and verification. No redundant or filler content 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 destructive, idempotent replacement operation with no output schema, the description fully covers what an agent needs to know: how to invoke it correctly, what the edge cases are, and how to inspect the resulting effective exclusions. Nothing important 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 already documents exclusions and workspaceId, but the description adds important meaning: the exact replacement semantics, that [] clears the list, that entries match campaignstack_get_exclusions shapes, and how to interpret the effective merged result. signalAgentId is not described in the schema or description beyond its name, but its role is clear from context and the read-back instruction.

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: 'Replace a signal agent's own (level-1) exclusion list.' It clearly distinguishes itself from related tools like campaignstack_get_exclusions and campaignstack_toggle_exclusion by emphasizing this is a full replacement operation, not a read or toggle.

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 and when-not-to-use guidance: it instructs to pass the complete list rather than a delta, clarifies that [] clears the list, and explains that workspace-level exclusions must be edited via the workspace list instead. It also tells the agent how to verify the merged result by reading campaignstack_get_exclusions with level=effective.

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.1/5.0
Behavior4/5

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

Beyond the annotations, the description discloses that the tool writes to a shared feedbackReports table, triggers an email notification, and returns the new feedback report ID. These are meaningful behavioral consequences for a non-read-only operation. It does not contradict the annotations and adds useful side-effect context.

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 compact and front-loaded with the primary action. The three sentences each earn their place: the core purpose, the mirrored backend behavior, and the category routing guidance. Minor redundancy exists between 'feedback report or bug report' and the later category list, but it does not hurt clarity.

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 submission tool with a well-described schema and useful annotations, the description covers the essential context: what it does, what underlying effects it triggers, how to choose categories, and what is returned. It could mention the non-idempotent creation aspect explicitly, but the return of a new feedback report ID already implies 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 parameter meaning is already fully documented in the input schema. The description reinforces the category enum semantics but does not add substantive new meaning for route, message, or workspaceId beyond what the schema 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 opens with a specific verb and resource ('Submit a feedback report or bug report to the CampaignStack team') and further clarifies the mechanism by referencing the in-app feedback widget and the feedbackReports table. This distinguishes the tool from the large sibling set, none of which cover feedback submission.

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 identifies when to use this tool: when a user wants to submit feedback or a bug report to CampaignStack. It also provides explicit category selection guidance for 'bug', 'feature', 'question', and 'other'. It does not explicitly name alternatives or exclusions, but no sibling tool competes for this purpose, so the context is sufficient.

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

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.9/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 explaining the idempotency key (email), the downgrade risk of lifecycleStage, the no_email error code, the degraded[] fallback behavior, and the beta status with a user spot-check caveat. These are non-obvious side effects and operational details an agent needs before calling.

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-structured: core behavior first, then conditions, prerequisites, return contract, and risk caveat. Every sentence contributes a distinct operational fact, 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?

Even though there is no output schema, the description defines the success return values (contactId, companyId, noteId, degraded[]), the key error condition, the integration prerequisite, and the beta caveat. For a mutation tool with six parameters and a nested note object, this is enough for an agent to call it correctly and set user expectations.

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 83%, so the schema already documents most parameters. The description adds meaningful operational context: syncCompany depends on a real domain resolving, the note is logged on the contact's timeline, and lifecycleStage is never sent by default. leadSource and workspaceId are left to the schema, which is acceptable given the high 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 states a specific verb and resource: sync a single lead into the workspace's connected HubSpot portal. It further clarifies the operation by referencing the integration:crm_sync workflow node and explaining upsert, company association, and note logging, making it clearly distinct from the many 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 gives an explicit prerequisite: a connected HubSpot integration is required, and campaignstack_connect_hubspot should be used first. It also provides a hard when-not condition (leads without an email cannot be synced) and warns against sending lifecycleStage unless explicitly provided, which helps an agent decide when and how to invoke the tool.

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.2/5.0
Behavior4/5

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

Annotations already indicate this is a mutating but idempotent and non-destructive operation. The description adds meaningful behavioral context beyond those annotations by stating that disabled exclusions are not evaluated during signal agent processing. It could further explain reversal effects or whether disabling affects existing agent runs, but the provided detail 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: the primary action comes first, followed by the behavioral consequence and then the practical lookup instructions. Each sentence adds necessary information without wordiness or redundant schema 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 toggle tool with three parameters, this description provides enough context for an agent to select and invoke it correctly: the action, the runtime effect, and how to find the required exclusionId. The workspaceId parameter is already documented in the schema, so no additional explanation 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?

Schema descriptions cover enabled and workspaceId, but exclusionId lacks a schema description. The description compensates by directing the agent to 'Use campaignstack_get_exclusions to find exclusionId values.' It also reinforces the enabled parameter's meaning by explaining the consequence of disabling an exclusion.

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: 'Enable or disable a signal exclusion entry.' It identifies the resource and adds a specific behavioral detail: 'Disabled exclusions are not evaluated during signal agent processing.' While this distinguishes the operation from many siblings, it does not explicitly contrast it with closely related tools like set_agent_exclusions or 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 clear context for when to use the tool by defining what disabling an exclusion does. It also provides lookup guidance: 'Use campaignstack_get_exclusions to find exclusionId values' and 'Use campaignstack_list_signal_agents to find signal agents for context.' However, it does not explicitly state when not to use this tool or name alternative sibling tools.

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?

The annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds genuine behavioral context beyond the annotations by disclosing partial-update semantics — "Pass only the fields you want to change" implies unspecified fields are preserved, which is important for safe mutation. It does not add details on auth requirements or response behavior, but the partial-update trait is the most valuable disclosure 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?

Three sentences with zero waste: purpose is front-loaded, field scope in the second sentence, and actionable usage guidance in the third. Every sentence earns its place and the flow is logical — what, what-fields, how-to-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 7-parameter, all-optional mutation tool with annotations covering the safety profile and no output schema, the description covers the essentials: purpose, field scope, partial-update behavior, and pre-check routing. The only meaningful gap is the absence of any statement about return values or confirmation behavior, but for a non-destructive partial update this is a minor 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 coverage is 86%, above the 80% baseline, so the schema carries most parameter documentation. The description compensates for the one undocumented parameter by naming "voice guide text" (mapping to voiceGuide) and groups the color params and style params into families, adding organizational meaning beyond the schema's individual descriptions. It does not add per-parameter syntax details, but the grouping and coverage of the gap warrant above-baseline credit.

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: "Updates the brand identity for a workspace's default account voice," then enumerates the updatable content (voice guide text, colors, font style, style descriptors). It differentiates from siblings by scoping to the "default account voice," but it never explicitly distinguishes itself from the similarly named sibling campaignstack_update_workspace_branding, so it falls just short of full sibling differentiation.

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

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: "Pass only the fields you want to change" establishes partial-update conventions, and "Use campaignstack_get_workspace_voice to check current values first" explicitly routes the agent to a read-before-write workflow with a named sibling. However, it lacks any when-not-to-use guidance or explicit alternatives beyond the pre-check tool, so exclusions are absent.

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 the operation as non-read-only, non-destructive, and idempotent, so the description only needs to add behavioral context. It adds the important partial-update semantic ('Only provided fields are updated'), clarifies workspace-level scoping, and covers the edge case of annotating a company before lead linking. This is consistent 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?

The description is three sentences with no filler: the main action and partial-update behavior are front-loaded, followed by scope details and ID lookup guidance. 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 four-parameter update tool with no output schema, the description covers purpose, partial-update behavior, supported company scopes, and ID discovery. The main omission is lack of explicit return-value information, but the annotations and schema cover safety and parameter structure sufficiently.

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 only 25%, the description carries a meaningful burden, and it partially compensates by naming the updateable fields (notes and tags) and explaining that only provided fields are mutated. It also tells the agent how to obtain companyId via get_company or list_companies. It doesn't fully detail every parameter, but combined with the schema's structural constraints, it provides enough 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 uses a specific verb ('Update') and names the exact resource ('workspace-level metadata (notes and tags) on a company'), clearly distinguishing it from sibling tools like campaignstack_update_lead_metadata and campaignstack_update_workspace. It also communicates the partial-update behavior directly, 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 provides concrete usage context: it works for shared and imported companies, and a company can be annotated even before any lead links it to the workspace. It also explicitly directs the agent to campaignstack_get_company or campaignstack_list_companies for finding company IDs. However, it does not explicitly state when to prefer this over sibling update tools or when not to use it.

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

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?

With annotations limited to readOnlyHint=false, idempotentHint=false, destructiveHint=false, the description adds meaningful behavioral context beyond them: 'validator-enforced' writes, 'versions the previous state' (aligning with destructiveHint=false), and the approval-retention rule. These are non-obvious side effects an agent must know before calling, though it could go further on revertability or downstream approval 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, each carrying distinct payload: purpose, procedure plus behavior, and approval semantics. The full-object requirement is emphasized with capitalization of FULL, and no words are wasted.

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 write tool with a deeply nested profile schema and no output schema, the description covers the operational essentials: what to edit, how to obtain the current state, validator behavior, versioning, and the approval-status invariant. It doesn't describe the response format or error conditions, a minor gap given no output schema exists and the read tool is explicitly named.

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% (linkedinAccountId, profile, workspaceId described; readableSummary only has maxLength). The description reinforces the critical PUT-like semantic — send the whole profile back — and the profile param's own schema description echoes this read-edit-send pattern, which is substantive guidance beyond raw field 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-resource pair — 'Edit a conversation voice profile's structured fields' — which unambiguously states the mutation action and target. It distinguishes itself from the read sibling by naming campaignstack_get_conversation_voice in the read-first instruction, and 'edit' vs 'extract' semantically separates it from extract_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?

The read-first directive ('read it first with campaignstack_get_conversation_voice') and the full-object requirement ('Send the FULL profile object back') give the agent an explicit procedure for correct invocation. It names the gatekeeper sibling that must precede it, though it doesn't state explicit when-not-to-use conditions or contrast with extract_conversation_voice.

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.4/5.0
Behavior4/5

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

The description matches the annotations: readOnlyHint=false aligns with 'Replace', and idempotentHint=true is consistent with replacing a rule set. It adds behavioral context beyond annotations by explaining when filtering happens and how rule logic affects matching, though it doesn't discuss response behavior or side effects beyond the replacement itself.

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 and every sentence earns its place: purpose, mechanism, logic guidance, and id lookup path. It is front-loaded with the core purpose and contains no filler or redundant restatement of schema fields.

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 modifying tool without an output schema, the description covers the essential facts: what is replaced, how rule matching works, logic caveats, and how to obtain exclusionId values. It could additionally mention alternatives for non-filter exclusions, but this is not a significant gap given the clear 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 75%, so the schema already handles most parameter documentation. The description adds meaningful semantics above the schema: it explains logic behavior, recommends 'or' for blocklists, highlights the unsatisfiability of 'and' for same-field values, and provides a rule example, which helps agents construct valid rules.

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: 'Replace the rule set of a filter-type signal exclusion.' It also explains what a filter exclusion does and gives a concrete example ('companyName contains Acme'), making the tool easily distinguishable from sibling exclusion-related 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 practical usage guidance: prefer 'or' for blocklists, warns that 'and' across multiple values of the same field can never match, and directs the agent to campaignstack_get_exclusions to find exclusionId values. It doesn't explicitly say when not to use this tool versus other exclusion/signal-agent tools, but the scope 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_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.1/5.0
Behavior4/5

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

The description explicitly discloses partial-update behavior: 'Only provided fields are updated; omitted fields are left unchanged.' This adds practical value beyond the annotations, which already indicate the operation is non-destructive and idempotent. It gives the agent confidence about repeated calls and field-level 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?

Two sentences with no filler: the action and target are front-loaded, the caller context is stated, and the important behavioral caveat is included. 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 mutation with annotations and an input schema, the description covers the action, the fields involved, the partial-update behavior, and the intended invocation context. It doesn't describe response behavior or error cases, but no output schema is provided and those details are not essential 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 description coverage is only 20% (only workspaceId is described), so the description must compensate. It does clarify that email, phone, and website are the contact fields being saved, and the partial-update rule explains how omitted optional fields behave. leadId is implied as the target but not explicitly described; still, the description covers the most important semantic gaps.

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 ('Save'), resource ('contact information'), and target ('to a lead'), making the core purpose clear. It is more specific than the generic 'update lead' wording, but it does not explicitly contrast with sibling tools like campaignstack_update_lead_metadata or campaignstack_enrich_lead_contact_info, so it misses the 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?

The description gives a clear invocation context: it is called by the linkedin-contact-info agent after extracting data from LinkedIn's Contact Info overlay. This tells an agent when this tool is appropriate, though it doesn't 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_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.4/5.0
Behavior4/5

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

The annotation set already marks this as read-write, idempotent, and non-destructive. The description adds a genuinely useful behavioral guarantee: only provided fields are updated, so missing fields are not overwritten. This goes 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, no filler. The main action is front-loaded, the partial-update caveat follows immediately, and the lookup guidance is 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 simple partial-update tool, the description covers what the tool does, how it treats missing fields, and how to obtain the required leadId. The only minor gap is that it does not specify whether a provided tags array replaces or merges with existing tags, but the schema's maxItems constraint and 'only provided fields are updated' wording keep this 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?

With only 25% schema description coverage, the description compensates by naming the two content parameters (notes and tags) and clarifying that they are optional in effect ('Only provided fields are updated'). The leadId purpose is implied via the lookup instruction, and workspaceId is described 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 action ('Update') on a clear resource ('user-level metadata (notes and tags) on a lead'), which distinguishes it from sibling tools like update_lead_contact_info. The parenthetical enumerates exactly which fields are 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 gives a concrete prerequisite: use campaignstack_search_leads or campaignstack_get_lead to obtain lead IDs. It does not explicitly contrast with alternative update tools, but the field scope 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_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.4/5.0
Behavior4/5

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

Beyond annotations, it discloses partial-update behavior, permanent account-binding restrictions with exact error codes (AGENT_POOL_LOCKED, GROUP_READ_POOL_SINGLE), and clarifies playbook semantics ('never how to sound'). Annotations already cover idempotency and destructiveness, so this is solid additional context, though it doesn't discuss side effects of updating account lists or response mode.

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, partial-update rule, field enumeration, restrictions, and ID lookup pointer. Information is grouped logically and 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 9-parameter update tool with no schema descriptions and no output schema, the description covers the main fields, constraints, and error paths well. The gaps are minor: silenceHours and followUpDelaysHours are not explained and the response shape is not described, but the property names and annotations carry some of that weight.

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 compensates by explaining name, responseMode enum values, accountIds/actAccountIds restrictions, playbook intent, and public reply configuration. It leaves silenceHours and followUpDelaysHours to their fairly self-descriptive names, and publicReplyConfig's map structure is not detailed.

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 and resource: 'Update a signal agent's configuration,' then enumerates the specific changeable fields. This clearly differentiates it from create/delete/pause/get/list siblings, and even points to campaignstack_list_signal_agents for discovering agent 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?

Gives clear partial-update semantics ('only provided fields are updated') and tells the agent how to find the required agentId. It doesn't explicitly enumerate when to prefer this over create_signal_agent or pause/resume, but the boundaries are obvious and no alternative is misleading.

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.6/5.0
Disambiguation3/5

Many tools share the same verb prefix (create_, list_, update_, get_) across closely related resources, so pairs like add_lead_to_external_list vs add_lead_to_sequence, create_signal_agent vs create_signal_watch, and approve_review vs approve_content_post can be confused. The descriptions are unusually detailed and cross-referenced, which mitigates but does not eliminate the ambiguity inherent in a 282-tool surface.

Naming Consistency4/5

Virtually every tool follows the campaignstack_verb_noun snake_case pattern, which is highly predictable. Minor deviations exist: destructive operations mix remove_ and delete_ (remove_lead_list vs delete_campaign), AI generation uses both craft_ and generate_, and the seo_/search_console_ subdomains introduce a second prefix convention.

Tool Count1/5

282 tools is an extreme mismatch by any reasonable standard, exceeding the 50+ threshold by more than 5x. Even for a full B2B outreach platform, this surface is far too large and would be better consolidated into higher-level operations or grouped sub-servers.

Completeness4/5

The tool surface is impressively comprehensive, covering campaigns, workflows, leads, content, ads, SEO, integrations, billing, and more with CRUD-level depth. Minor gaps remain: no single-ICP getter, no direct pause/delete for search watches, and no explicit delete for ad campaigns (only archive via update).

Resources