campaignstack
Server Details
Run B2B outreach from your AI agent: 250+ tools for campaigns, leads, LinkedIn and email workflows.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
Available Tools
286 toolscampaignstack_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.
| Name | Required | Description | Default |
|---|---|---|---|
| checkupId | Yes | Pending checkup id from campaignstack_get_draft_checkup | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_listAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadRefs | Yes | ||
| leadListId | Yes |
TDQS
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.
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.
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.
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.
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.
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_listAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | ||
| listId | Yes | Provider-side lead list id (from campaignstack_list_external_lead_lists). | |
| provider | Yes | Integration provider that owns the lead list. | |
| leadSource | No | Lead source table (default: global). Private leads are workspace-scoped CSV imports. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| skipIfInWorkspace | No | Skip the lead if its email already exists anywhere in the provider workspace, in any campaign or list. |
TDQS
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.
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.
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.
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.
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.
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_sequenceAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | ||
| provider | Yes | Integration provider that owns the sequence. | |
| campaignId | Yes | Provider-side sequence id (from campaignstack_list_external_sequences). | |
| leadSource | No | Lead source table (default: global). Private leads are workspace-scoped CSV imports. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| emailAccountId | No | Provider-side sending mailbox id. REQUIRED for apollo (from campaignstack_list_external_email_accounts); unused by instantly. | |
| activateSequence | No | Start the sequence after adding if it is not running yet (best-effort). Apollo only. | |
| skipIfInWorkspace | No | Skip the lead if its email already exists anywhere in the provider workspace, not just this sequence. Instantly only. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| exclusionId | Yes | ||
| profileUrls | Yes | LinkedIn profile URLs to add to the exclusion list | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_websiteARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
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.
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.
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.
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.
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.
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_ad_creativeAInspect
Approve a pending ad creative. This is the publish step: a WRITE-THROUGH that creates the creative on LinkedIn and returns its externalId. All generated/created creatives require this approval before anything is published. Feature flag and budget guardrails are enforced server-side. Use campaignstack_list_ad_creatives to find adCreativeId.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace | |
| adCreativeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explicitly calling this a WRITE-THROUGH, noting that it creates the creative on LinkedIn, and revealing that feature flag and budget guardrails are enforced server-side. This gives an agent useful expectations about side effects and possible failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Each sentence earns its place: the action, the critical side effect, the workflow requirement, server-side guardrails, and the parameter lookup pointer. It is front-loaded with the most important information and avoids fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write operation with no output schema, the description covers the key return value (externalId), the prerequisite state (pending creative), and server-side constraints. It does not fully describe error cases or the complete response shape, but it is sufficient for selection and initial invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds practical guidance for adCreativeId by directing the agent to list_ad_creatives. The platform and workspaceId parameters are already well described in the schema, so the 67% schema coverage is partially compensated. Still, the description does not add much semantic depth beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Approve') and resource ('pending ad creative'), and goes further to explain that this is the publish step that creates the creative on LinkedIn and returns its externalId. This distinguishes it from related tools like approve_content_post and create_ad_creative by clarifying the actual side effect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear workflow context: generated/created creatives require this approval before anything is published, and it explicitly points to campaignstack_list_ad_creatives for finding the adCreativeId. It does not explicitly mention when not to use it versus reject_ad_creative, but the usage window is well defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_approve_content_postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scheduledAt | No | Exact publish time. Omit (or set autoSchedule) for the next valid slot. | |
| autoSchedule | No | Auto-place into the next valid posting slot instead of an exact time. Default when scheduledAt is omitted. | |
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_campaignADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, idempotentHint=true), the description discloses the 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.
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.
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.
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.
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.
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_urlARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| titles | No | ||
| keywords | No | ||
| locations | No | ||
| industries | No | ||
| seniorities | No | ||
| companySizes | No |
TDQS
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.
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.
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.
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.
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.
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_leadsADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_check_calendar_availabilityARead-onlyIdempotentInspect
Check whether a specific time slot is available in the user's Google Calendar. Returns { available, conflictingEvents } where conflictingEvents is a list of events overlapping the requested range (each with summary, start, end). Requires a Google account to be connected and linked to the workspace. If googleAccountId is omitted, uses the first connected Google account linked to the workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| endTime | Yes | End of the time range to check (ISO 8601 string, e.g. '2026-06-17T15:00:00Z') | |
| startTime | Yes | Start of the time range to check (ISO 8601 string, e.g. '2026-06-17T14:00:00Z') | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | No | Google account ID to use. Defaults to the first connected Google account linked to the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as read-only, idempotent, and non-destructive, so the bar for extra disclosure is lower. The description adds meaningful behavioral context by specifying the return payload, what counts as a conflict, and the account prerequisite/default resolution behavior. This goes beyond simply restating the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, return shape second, prerequisites and defaults third. Every sentence carries useful information with no redundant filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even without an output schema, the description fully explains the return value, including the shape of conflictingEvents. It also covers the prerequisite account connection and the default fallback behavior. This is sufficient for an agent to know what the tool does, what it returns, and what inputs matter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter coverage, so the baseline is 3. The description adds value by explicitly documenting the behavior of googleAccountId when omitted and framing startTime/endTime as the requested range to check. This is helpful beyond the raw schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action — checking whether a time slot is available — with a clear resource (Google Calendar) and a defined result shape ({ available, conflictingEvents }). It distinguishes itself from sibling tools like get_free_slots by emphasizing a specific time slot rather than general free-slot discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly establishes when to use it: to check a specific time range for conflicts. It also provides the critical prerequisite that a Google account must be connected and linked to the workspace, plus the default behavior when googleAccountId is omitted. It does not explicitly contrast with related alternatives like get_free_slots, though the context is strong enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_check_company_newsAInspect
Run a fresh news check for one company now: a week-fresh news search, classified into corporate events and corroborated before anything is stored (a name match alone is never enough). Charges the company_news_check credit action (refunded if the check fails). Results land in the news events; read them with campaignstack_list_company_news_events. The scheduled news sweep already covers active-campaign, freshly-flagged and watched companies for free, so use this for a company you want checked right now.
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | ||
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which only indicate non-read-only, non-idempotent, non-destructive), the description discloses the credit charge, refund-on-failure behavior, the fact that results are persisted to news events, and the corroboration requirement before storage. This gives the agent a clear model of the side effects and data flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: the action/behavior, the cost/refund, where results go and how to read them, and when to use this instead of the scheduled sweep. The key purpose 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting action with no output schema, the description covers the operational essentials: what is performed, what it costs, what happens on failure, where results are stored, how to retrieve them, and when the on-demand check is appropriate. An agent has enough context to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: workspaceId has a schema description but companyId has none. The tool-level description clarifies that the operation targets 'one company' and that results land in news events, which helps map companyId to the company being checked. However, it does not explicitly explain the companyId parameter or add substantial detail beyond what the schema already provides, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Run a fresh news check for one company now.' It details the workflow (week-fresh search, classification into corporate events, corroboration before storage) and explicitly distinguishes itself from the scheduled sweep and from reading results with campaignstack_list_company_news_events. This is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent when to call the tool: for a company that needs checking right now. It also names the alternative (the free scheduled news sweep covering active-campaign, freshly-flagged, and watched companies), so the agent can decide between immediate paid-on-demand and free scheduled processing. This is explicit and actionable.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_apolloAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | ||
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_hubspotAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | ||
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_instantlyAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| apiKey | Yes | ||
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_reviewsARead-onlyIdempotentInspect
Count pending workflow review actions in a workspace. Returns the total number of entries awaiting human approval.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_notificationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
TDQS
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.
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.
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.
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.
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.
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_commentARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_messageARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_noteARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_ad_campaignAInspect
Create an ad campaign. This is a WRITE-THROUGH to LinkedIn: the campaign is created on the platform immediately and its externalId is returned. Budgets (dailyBudget, totalBudget, unitCost) are money objects: { amount: string, currencyCode: string }. Account spend ceilings and the linkedin_ads feature flag are enforced server-side and cannot be bypassed. The new campaign has no creatives yet. Add them with campaignstack_create_ad_creative (they require approval before publishing). Use campaignstack_list_ad_accounts to find adAccountId.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| format | No | ||
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| schedule | No | ||
| unitCost | No | Bid amount (for manual / cost_cap / target_cost strategies) | |
| objective | No | ||
| targeting | No | Platform-native targeting criteria object (passed through as-is) | |
| adAccountId | Yes | Managed ad account _id. Use campaignstack_list_ad_accounts to find it. | |
| bidStrategy | No | ||
| dailyBudget | No | Money value: { amount: string, currencyCode: string } | |
| totalBudget | No | Money value: { amount: string, currencyCode: string } | |
| workspaceId | No | Defaults to the API key's workspace | |
| campaignGroupId | No | Optional ad campaign group _id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses that the campaign is created on LinkedIn immediately, that an externalId is returned, that spend ceilings and the linkedin_ads feature flag are enforced server-side and cannot be bypassed, and that the new campaign starts with no creatives. This is substantive side-effect context that annotations alone do not provide, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences front-load the core action, then layer behavioral caveats, money-object semantics, and sibling routing in a logical order. Each sentence earns its place, though the server-side enforcement sentence is slightly wordier than the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 13-parameter tool with nested money objects, four enums, and no output schema, the description covers the essential invocation facts: side effect, return value, budget shape, server-side constraints, and post-creation state. It does not clarify whether a budget or schedule is required for a valid campaign, and it omits any cost implications of the live write-through, but an agent can confidently invoke the tool using the two required params listed in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 62% schema coverage, most parameters are already documented in the schema; the description adds value by consolidating that dailyBudget, totalBudget, and unitCost all share the same money-object shape, which is most helpful for unitCost, whose schema entry only calls it a bid amount. It also reinforces the adAccountId lookup path. Semantics for name, format, objective, and bidStrategy are left to their enums, and the description does not compensate for those gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence 'Create an ad campaign' states a specific verb and resource, and the description immediately disambiguates it from the closely related campaignstack_create_ad_creative by noting the new campaign has no creatives yet and directing the agent to add them separately. The write-through nature and the returned externalId further pin down exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit prerequisite and follow-up routing: it names campaignstack_list_ad_accounts for finding adAccountId and campaignstack_create_ad_creative for adding creatives, which is actionable guidance. It does not, however, state when not to use this tool or contrast it with siblings like campaignstack_generate_ad_campaign or campaignstack_update_ad_campaign.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_create_ad_creativeAInspect
Create a text creative (headline, body text, call to action) for an ad campaign. The creative lands as pending_approval and is NOT published. Nothing reaches LinkedIn until a human (or an ads:write caller) approves it with campaignstack_approve_ad_creative. Returns the new adCreativeId and assetId.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| bodyText | No | ||
| headline | No | ||
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace | |
| adCampaignId | Yes | ||
| callToAction | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only mark the tool as non-read-only, non-idempotent, and non-destructive. The description adds crucial behavioral detail: the creative lands as pending_approval, is NOT published, and nothing reaches LinkedIn until approved. It also discloses required permission context (human or ads:write caller) and names the returned identifiers. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences with no filler. The most important fact — that the creative is not published until approved — is front-loaded, and the return values are stated clearly. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the output (adCreativeId and assetId) and the approval workflow, which is essential since there is no output schema. However, it does not clarify that only adCampaignId and name are required, nor what `name` should represent. It also doesn't mention content length limits or whether at least one content field is needed. Slightly incomplete for a 7-parameter creation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 29%, so the description needs to compensate. It adds meaning to headline, bodyText, and callToAction by describing them as text creative fields, and implies adCampaignId is the target campaign. However, the required `name` parameter is not explained, and the description lists content fields as if core while the schema marks them optional, creating mild ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: create a text creative (headline, body text, call to action) for an ad campaign. It distinguishes itself from sibling tools like campaignstack_approve_ad_creative by emphasizing the pending_approval lifecycle, and from campaignstack_create_ad_campaign by focusing on creative content rather than campaign setup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear contextual guidance: it is the creation step, and approval is explicitly routed to campaignstack_approve_ad_creative. This implies post-creation workflow. It stops short of explicit when-not-to-use or alternative tool comparisons, but the context is strong enough for an agent to understand the intended flow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_create_calendar_eventAInspect
Create a Google Calendar event and optionally invite attendees. When attendeeEmails are provided, Google sends invite emails automatically (sendUpdates=all). Requires a Google account to be connected and linked to the workspace. If googleAccountId is omitted, uses the first connected Google account linked to the workspace. Returns { eventId, htmlLink } on success.
| Name | Required | Description | Default |
|---|---|---|---|
| endTime | Yes | Event end time (ISO 8601, e.g. '2026-06-17T15:00:00Z') | |
| summary | Yes | Event title | |
| location | No | Optional event location (address, room name, or video link) | |
| startTime | Yes | Event start time (ISO 8601, e.g. '2026-06-17T14:00:00Z') | |
| description | No | Optional event description / agenda | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| attendeeEmails | No | Optional list of attendee email addresses. Google Calendar sends invites automatically when sendUpdates=all. | |
| googleAccountId | No | Google account ID to use. Defaults to the first connected Google account linked to the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses the side effect that Google sends invite emails automatically when attendeeEmails is provided (sendUpdates=all), states the account prerequisite, explains the default account selection behavior, and documents the return shape { eventId, htmlLink }. Annotations only carry the read/write/destructive/idempotent bits; this description delivers the operational behavior an agent needs to predict consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences that front-load the core purpose, then cover side effects, prerequisites, default behavior, and return value in logical order. Each sentence earns its place; the only minor redundancy is that the sendUpdates=all detail also appears in the attendeeEmails schema description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with no output schema, the description covers prerequisites, side effects, default parameter behavior, and the return format. Remaining gaps are minor (no explicit error behavior when no Google account is linked, and no explicit routing to sibling calendar tools), but annotations and full schema coverage already carry much of the burden.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already has a description, so the baseline is 3. The description mostly echoes the schema's account-selection and invite-email notes rather than adding substantially new parameter meaning; the only marginal addition is naming the sendUpdates=all mechanism explicitly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the specific verb 'Create' plus an explicit resource ('Google Calendar event') and the optional attendee invitation behavior. The create-vs-update-vs-delete vs-check availability distinction among sibling calendar tools is immediately clear without opening any other tool definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when it applies: requires a connected Google account linked to the workspace, and defaults to the first such account when googleAccountId is omitted. However, it does not explicitly name sibling alternatives (e.g., check_calendar_availability for availability checks, update_calendar_event for modifications), leaving when-not-to-use guidance implicit.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | ||
| title | Yes | ||
| description | No | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_watchAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| accountIds | No | Optional 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. | |
| entityType | Yes | ||
| profileUrl | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | ||
| linkedinAccountId | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| tags | No | ||
| mediaIds | No | ||
| platform | Yes | ||
| postType | No | ||
| scheduledAt | No | Schedule the post at this exact time after creating it. | |
| workspaceId | No | Defaults to the API key's workspace | |
| autoSchedule | No | Create 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. | |
| authorAccountId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| titles | No | ||
| keywords | No | ||
| campaignId | Yes | ||
| industries | No | ||
| seniorities | No | ||
| companySizes | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| leadRefs | No | ||
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| goals | No | Goals this persona is trying to achieve | |
| campaignId | Yes | ||
| objections | No | Common objections from this persona | |
| painPoints | No | Pain points this persona experiences | |
| description | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| order | Yes | ||
| phaseType | No | Optional phase classification | |
| campaignId | Yes | ||
| objectives | Yes | ||
| description | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| query | Yes | ||
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topicId | Yes | ID 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. | |
| accountIds | No | Optional list of LinkedIn account IDs to scope the search watch to. When omitted, the watch runs on any available account. | |
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| type | Yes | ||
| target | Yes | ||
| accountIds | Yes | ||
| targetName | Yes | ||
| workspaceId | No | ||
| responseMode | Yes | ||
| silenceHours | No | ||
| actAccountIds | Yes | ||
| publicReplyConfig | No | ||
| followUpDelaysHours | No |
TDQS
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.
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.
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.
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.
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.
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_watchAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | ||
| leadSource | No | global | |
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| graph | Yes | Workflow graph: nodes (nodeType, label, config) + edges (sourceIndex, targetIndex). Use campaignstack_get_workflow_node_types to discover valid node types. | |
| campaignId | No | Associate this workflow with a campaign | |
| workspaceId | No | Defaults to the API key's workspace | |
| sourceConfig | No | Source 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
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| decision | Yes | ||
| proposalId | Yes | Pending proposal id from campaignstack_get_playbook_proposal | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_calendar_eventADestructiveIdempotentInspect
Delete (cancel) a Google Calendar event. By default, cancellation notifications are sent to all attendees (sendNotifications=true). Requires a Google account to be connected and linked to the workspace. If googleAccountId is omitted, uses the first connected Google account linked to the workspace. Returns { deleted: true } on success.
| Name | Required | Description | Default |
|---|---|---|---|
| eventId | Yes | Google Calendar event ID to delete | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | No | Google account ID to use. Defaults to the first connected Google account linked to the workspace. | |
| sendNotifications | No | If true (default), Google sends cancellation notifications to all attendees. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnly=false, idempotent true), the description discloses important behavior: cancellation notifications are sent by default, a connected Google account is required, the fallback account selection behavior, and the success return value. This gives an agent a clear model of side effects and prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core action, then adds defaults, prerequisites, and the return value in logical order. Each sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive calendar operation, the description covers the required prerequisites, the default notification side effect, account fallback, and the success response. No output schema exists, so stating the return shape is important and is included. The annotations already convey destructive/read-only/idempotent traits, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description mostly restates what the schema already says about sendNotifications and googleAccountId defaults rather than adding new parameter-level meaning. It adds useful non-parameter context (account requirement and return value) but not additional semantics for the parameters themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Delete (cancel) a Google Calendar event.' This unambiguously identifies the operation and its target, and the parenthetical clarifies terminology. It is clearly distinguished from the sibling tools create_calendar_event and update_calendar_event by virtue of the delete/cancel semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational context: it specifies the prerequisite of a connected/linked Google account, the default account selection when googleAccountId is omitted, and the default notification behavior. It does not explicitly name alternatives or state when not to use it, but the delete/cancel framing makes the primary use case evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_delete_campaignADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchADestructiveInspect
Deletes a competitor watch and disables its associated automations. This action is irreversible. Use campaignstack_pause_competitor_watch to temporarily stop monitoring instead.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes |
TDQS
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.
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.
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.
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.
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.
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_postADestructiveInspect
Deletes a content post. Only posts in 'draft' or 'failed' status can be deleted. Use campaignstack_get_content_post to check status before deleting.
| Name | Required | Description | Default |
|---|---|---|---|
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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_icpADestructiveIdempotentInspect
Permanently delete an ICP and its associated scoring data. This action is irreversible. Use campaignstack_list_icps to find ICP IDs before deleting.
| Name | Required | Description | Default |
|---|---|---|---|
| icpId | Yes |
TDQS
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.
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.
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.
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.
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.
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_personaADestructiveInspect
Permanently delete a persona. This action cannot be undone. Use campaignstack_list_personas to confirm the persona ID before deleting.
| Name | Required | Description | Default |
|---|---|---|---|
| personaId | Yes |
TDQS
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.
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.
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.
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.
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.
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_phaseADestructiveInspect
Permanently delete a campaign phase. This action cannot be undone. Use campaignstack_list_phases to confirm the phase ID before deleting.
| Name | Required | Description | Default |
|---|---|---|---|
| phaseId | Yes |
TDQS
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.
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.
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.
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.
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.
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_agentADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes |
TDQS
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.
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.
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.
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.
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.
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_workflowADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workflowId | Yes |
TDQS
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.
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.
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.
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.
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.
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_sourcingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_disable_warmupADestructiveIdempotentInspect
Disable email warmup for a connected Google account. Credits already used are not refunded. If warmup is restarted later, it begins from week 1 of the ramp-up process (costs credits again). Returns { success: true, previousStatus } where previousStatus is 'warming' or 'warmed'. If no active warmup exists for the account, returns an informational message. Use campaignstack_list_workspace_warmups to see all warmup states.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | Yes | Google account ID to disable warmup for. Use campaignstack_list_integrations to find valid account IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several crucial behaviors beyond annotations: credits already used are not refunded, restarting warmup begins from week 1 and costs credits again, and the return value includes { success: true, previousStatus }. It also explains the informational response when no active warmup exists. This is rich, relevant behavioral context that matches the destructiveHint and idempotentHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences, each carrying important information: the primary action, credit/restart consequences, return shape, no-op behavior, and a pointer to the relevant sibling tool. It is front-loaded with the core purpose and avoids filler or redundant restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and two parameters, the description fully covers what the agent needs: what the tool does, side effects, return structure, edge-case behavior, and where to look for warmup states. There is no missing operational detail that would prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the schema already explains googleAccountId and workspaceId. The description adds no additional parameter-level meaning, but because the schema is fully self-documenting, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Disable email warmup for a connected Google account.' This clearly distinguishes the tool from the enable_warmup sibling and from read-only warmup list/status tools. The purpose is unambiguous and directly actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for using the tool, including behavior when no active warmup exists and a pointer to campaignstack_list_workspace_warmups for viewing all warmup states. It does not explicitly say 'use enable_warmup to enable instead,' but the opposite operation is implied by the tool's name and description. A minor gap is the lack of explicit exclusions, such as 'do not use if warmup is already disabled'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_disconnect_integrationADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Integration provider to disconnect | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_discover_lead_magnetsAInspect
Start a lead magnet discovery run: searches Google for fresh LinkedIn posts (last 7 days) that gate a resource behind a comment, fetches live comment counts and full bodies from public post pages, classifies genuine magnets, and ranks candidates by reachable commenters. Charges 500 credits, refunded if the run fails. One concurrent run per workspace. Optional topics narrow the search. Poll campaignstack_get_lead_magnet_run for progress; use campaignstack_set_lead_magnet_schedule for a paid weekly recurrence.
| Name | Required | Description | Default |
|---|---|---|---|
| topics | No | Per-run topic selection; defaults to the workspace's full topic union | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-read-only and non-idempotent; the description adds crucial cost/concurrency behavior: 500 credits charged and refunded on failure, and one concurrent run per workspace. It does not disclose the return shape or what happens if a concurrent run already exists, but the disclosed side-effect profile 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and every clause adds useful information: process, cost, refund, concurrency, topics, and follow-up tools. It is sentence-like and dense rather than neatly structured, but there is no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex kickoff tool with no output schema, it covers the essential operational context—cost, refund, concurrency, optional topics, and the exact polling/scheduling tools. It stops short of stating what the tool returns (e.g., a run ID), which an agent would need to start the polling loop immediately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes topics including its workspace-union default; the description reinforces that topics narrow the search. However, workspaceId has no schema description and the description does not explain how it is used or defaulted, leaving half of the parameter surface undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('Start a lead magnet discovery run') and details the whole pipeline: Google search for last-7-day LinkedIn posts, comment-count fetching, magnet classification, and ranking by reachable commenters. It clearly distinguishes this tool from the numerous sibling lead-magnet tools by framing it as the run-starter, not a list/get/schedule operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives actionable routing: poll get_lead_magnet_run for progress and set_lead_magnet_schedule for weekly recurrence, plus the option to narrow via topics. It lacks explicit 'when not to use' exclusions or alternatives for starting vs sourcing lead magnets, but the main follow-up choices are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_dismiss_lead_magnet_creatorAIdempotentInspect
Dismiss a creator: they never auto-promote again and their posts stop receiving the promoted relevance boost. Dismissal is sticky until promoted by hand.
| Name | Required | Description | Default |
|---|---|---|---|
| creatorId | Yes | Creator ID from campaignstack_list_lead_magnet_creators | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description reveals important behavioral traits: dismissal is sticky, auto-promotion stops permanently, and the promoted relevance boost is removed. This meaningfully adds context about persistence and side effects. Annotations already cover idempotency and non-read-only nature, so the description does not need to restate those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences deliver the purpose, the behavioral consequences, and the persistence caveat with no wasted words. The core action is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with idempotent and non-destructive annotations, the description covers the essential selection and invocation context. The main residual gaps are the unstated workspaceId semantics and the absence of any return-value or response expectations, both minor for this simple mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents creatorId with a helpful source ('Creator ID from campaignstack_list_lead_magnet_creators'), but workspaceId has no description and the tool description adds no parameter-level meaning. With 50% schema coverage and no compensating description, parameter semantics are only partially clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Dismiss a creator') and then explains the exact consequences: no more auto-promotion and no promoted relevance boost. It clearly distinguishes this from the sibling dismiss_lead_magnet_post (which targets a post, not a creator) and from promote_lead_magnet_creator by noting dismissal is sticky until promoted by hand.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when a creator should never auto-promote again and should stop receiving the promoted relevance boost. It also implies the undo path ('until promoted by hand'), but it does not explicitly name the alternative tool or state when not to use it, 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_dismiss_lead_magnet_postAIdempotentInspect
Dismiss a magnet candidate so it stops appearing in the candidate list. Dismissal is per workspace and does not affect other workspaces that found the same post.
| Name | Required | Description | Default |
|---|---|---|---|
| junctionId | Yes | Candidate junction ID from campaignstack_list_lead_magnet_posts | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotency and non-destructive behavior. The description adds valuable behavioral context beyond annotations: dismissal is per workspace and does not affect other workspaces discovering the same post. This helps an agent understand the cross-workspace isolation semantics without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The primary effect is front-loaded, and the workspace scoping clarification is provided immediately after. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, state-changing tool with idempotency and non-destructive annotations, the description covers the essential semantics: what it does, the outcome, and the workspace scoping. It could additionally mention reversibility, but given the annotations and simple parameter set, nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes junctionId as originating from campaignstack_list_lead_magnet_posts, but workspaceId has no schema description. The description's 'per workspace' statement indirectly hints at workspaceId's role, but it does not explicitly document the parameter or its optionality. At 50% schema coverage, the description provides only partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Dismiss'), resource ('magnet candidate'), and the concrete outcome ('stops appearing in the candidate list'). It also clarifies the workspace-scoped nature, distinguishing this post-level dismissal from related tools like dismiss_lead_magnet_creator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when a magnet candidate post should be removed from the candidate list. It does not explicitly name alternatives or exclusion conditions, but the effect and scope are unambiguous enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_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.
| Name | Required | Description | Default |
|---|---|---|---|
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes | ||
| updatedContent | Yes |
TDQS
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.
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.
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.
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.
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.
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_messageAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes | ||
| updatedContent | Yes |
TDQS
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.
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.
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.
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.
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.
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_enable_warmupAInspect
Enable email warmup for a connected Google account via MailReach. Requires a Google App Password to be configured first (use campaignstack_set_google_app_password). Costs 6,250 credits (covers the ~4 week warming period). Once the reputation score reaches 80, warmup completes automatically. Optionally specify warmupEmail to warm a verified alias instead of the primary address. Fails if this email address is already being warmed on another account. Returns { ok: true, alreadyEnabled } on success. Use campaignstack_list_workspace_warmups to see all warmup states before enabling.
| Name | Required | Description | Default |
|---|---|---|---|
| warmupEmail | No | Email address to warm up (defaults to the account's primary email). Can be an alias if the alias is verified in the account settings. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | Yes | Google account ID to enable warmup for. Use campaignstack_list_integrations to find valid account IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing the credit cost, the ~4 week duration, the automatic completion threshold (reputation score 80), the failure mode, and the exact success return shape. The annotations already indicate mutation and non-idempotency, so the description adds valuable 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries distinct value: purpose, prerequisite, cost, duration, auto-completion, optional parameter behavior, failure condition, return contract, and related tool. The most important action is front-loaded, 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 3 parameters, no output schema, and no rich annotations, the description covers all essential operating context: prerequisites, cost, side effects, failure modes, return shape, and recommended pre-check. An agent can decide to call this tool and interpret its result without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds useful context around warmupEmail (alias vs primary), but this largely mirrors the schema's own parameter description. It does not introduce new parameter-level semantics beyond what the input schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Enable email warmup'), the target resource (a connected Google account via MailReach), and clearly differentiates from related sibling tools like campaignstack_disable_warmup and campaignstack_get_warmup_status. The scope is immediately understandable without needing to inspect the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names a prerequisite tool (campaignstack_set_google_app_password) and a pre-check tool (campaignstack_list_workspace_warmups), giving the agent a clear sequence. It also discloses the failure condition when the email is already being warmed, but does not explicitly provide a 'when not to use' or alternative for already-enabled accounts.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | No | Enrichment provider (default: apollo). clay runs the routine given in clayRoutineId and polls for the result. | |
| companyId | Yes | Company ID to enrich (from campaignstack_get_lead or campaignstack_list_companies). | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| clayRoutineId | No | Clay only, required with provider clay: the Clay routine id to run. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | ||
| provider | No | Enrichment 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. | |
| leadSource | No | Lead source table (default: global). Private leads are workspace-scoped CSV imports. | |
| revealPhone | No | bettercontact 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. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| clayRoutineId | No | Clay 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. | |
| instantlyEnrichments | No | Instantly 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
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.
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.
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.
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.
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.
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_auditARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Inclusive createdAt upper bound (Unix ms). | |
| from | No | Inclusive createdAt lower bound (Unix ms). | |
| limit | No | Rows per page (default 50). | |
| cursor | No | Continuation cursor from a previous call. | |
| workspaceId | No | Workspace to export from. Defaults to the API key's workspace. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | ||
| maxResults | No | ||
| workspaceId | Yes | ||
| positionFilter | No | Job-title keywords separated by " OR ", at most 6 terms |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace | |
| linkedinAccountId | Yes | LinkedIn account id | |
| analysisMessageCount | No | How many stored messages the extraction analyzes (default 200) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | ||
| leadSource | No | global | |
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_pathsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | ||
| leadSource | No | global | |
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_profileAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_generate_ad_campaignAInspect
AI-generate a DRAFT ad campaign with creatives from a CampaignStack campaign and/or ICP: targeting, budget, and creative copy are derived automatically. NOTHING is published to LinkedIn. The draft campaign's creatives land as pending_approval and must be approved with campaignstack_approve_ad_creative before going live. dailyBudgetUsd is a plain USD number here (the stored campaign uses { amount, currencyCode } money objects). Ceilings and the linkedin_ads flag are enforced server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| icpId | No | Optional ICP _id to derive targeting from | |
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| objective | No | ||
| campaignId | No | Optional CampaignStack campaign _id to base the draft on | |
| adAccountId | Yes | Managed ad account _id. Use campaignstack_list_ad_accounts to find it. | |
| workspaceId | No | Defaults to the API key's workspace | |
| creativeCount | No | How many creative drafts to generate | |
| dailyBudgetUsd | No | Desired daily budget in USD |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry readOnly=false and destructive=false, but the description goes well beyond them by clarifying that this operation creates a draft, never publishes, leaves creatives in pending_approval, and enforces ceilings/linkedin_ads flag server-side. It also flags the currency-format difference for dailyBudgetUsd. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph with no filler: every sentence covers a distinct fact — purpose, publication status, approval step, currency shape, server enforcement. It front-loads the key draft/non-publishing distinction before details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with no output schema, the description covers core side effects, the approval route, and an important parameter caveat. Its only notable gap is that it does not describe the return payload (e.g., the generated campaign/creative IDs), which an agent would need to chain the approval step without additional lookups.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so most parameter meanings are already documented. The description adds meaningful nuance by explaining that dailyBudgetUsd is a plain USD number while the stored campaign uses money objects, and by indicating how campaignId/icpId feed the derivation. That extra semantic value justifies a score above the high-coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and resource: 'AI-generate a DRAFT ad campaign with creatives.' It also scopes the source (CampaignStack campaign and/or ICP) and clearly distinguishes the result from a live campaign by stating 'NOTHING is published to LinkedIn' and requiring campaignstack_approve_ad_creative before going live.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It communicates the workflow context: generated creatives enter pending_approval and must be approved before going live, and server-side constraints apply. It does not, however, name a direct alternative such as campaignstack_create_ad_campaign for immediate publishing, so the when-not-to-use guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_accountARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform of the account to retrieve | |
| accountId | Yes |
TDQS
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.
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.
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.
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.
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.
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_maintenanceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | ||
| linkedinAccountId | Yes |
TDQS
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.
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.
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.
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.
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.
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_ad_analyticsARead-onlyIdempotentInspect
Get raw daily ad metric rows (spend, impressions, clicks, conversions, leads, cost per lead) for one aggregation level: account, campaignGroup, campaign, or creative. Dates are YYYY-MM-DD, inclusive. For a summarized view use campaignstack_get_ad_dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD (inclusive) | |
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| startDate | Yes | YYYY-MM-DD (inclusive) | |
| entityType | Yes | Aggregation level of the daily metric rows | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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 meaningful behavioral context beyond those annotations: it returns raw daily rows, uses inclusive YYYY-MM-DD dates, and operates at exactly one aggregation level per call. This helps set expectations without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first defines the resource and metrics, the second specifies date format, and the third routes to the alternative tool. The most important scoping detail ('raw daily' and 'one aggregation level') is front-loaded. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, full schema coverage, and safe annotations, the description covers the essential decision points: what is returned, at what granularity, over what date range, and which sibling to choose for a different need. The absence of an output schema is partially compensated by explicitly listing the returned metric fields. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter, including the date format, entityType enum, platform default, and workspaceId fallback. The description adds little parameter-level meaning beyond what the schema provides; it only reinforces 'aggregation level' and the inclusive date format. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('raw daily ad metric rows'), enumerates the exact metrics returned, and lists all four aggregation levels. It also explicitly contrasts itself with campaignstack_get_ad_dashboard ('summarized view'), making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when to use this tool: when raw daily metric rows are needed. It names the alternative tool (campaignstack_get_ad_dashboard) and the condition ('summarized view') that should select that sibling instead. This gives an agent actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_ad_campaignARead-onlyIdempotentInspect
Get one ad campaign by ID, including its creatives and performance metrics. If not found, use campaignstack_list_ad_campaigns to find valid IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace | |
| adCampaignId | Yes |
TDQS
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 the useful detail that creatives and performance metrics are included in the response, which is beyond the annotations. However, it doesn't disclose error behavior, return format, or other side effects. With annotations handling the main behavioral burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences accomplish everything: the primary purpose is stated first, the included response content is mentioned, and the fallback sibling is named. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple single-resource getter with strong annotations and a clear required parameter. The description tells the agent what response content to expect even though there is no output schema. It lacks explicit error-handling details, but the fallback guidance covers the most likely failure case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% because platform and workspaceId are documented, while adCampaignId lacks a description but is self-explanatory from its name and the tool description. The description does not add extra parameter-level meaning beyond what the schema already provides, so the baseline of 3 fits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get one ad campaign by ID'), the resource ('ad campaign'), and the included contents ('creatives and performance metrics'). It also differentiates this from the sibling list operation by emphasizing the single-ID retrieval scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit fallback: 'If not found, use campaignstack_list_ad_campaigns to find valid IDs.' This tells the agent exactly when to switch to a sibling tool, which is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_ad_dashboardARead-onlyIdempotentInspect
Get the ads dashboard for a workspace: connection status, spend/impression/click/lead totals, per-account breakdown, and a daily trend. Dates are YYYY-MM-DD; omit them for the last 30 days. For raw daily rows per entity use campaignstack_get_ad_analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | YYYY-MM-DD. Defaults to today. | |
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| startDate | No | YYYY-MM-DD. Defaults to 30 days ago. | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by laying out exactly what the response will contain (connection status, totals, per-account breakdown, daily trend) and the date defaulting behavior. It does not mention auth or rate limits, but for a read-only dashboard tool that is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the purpose and expected output are front-loaded, the date convention is concise, and the sibling distinction is a single clear clause. There is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by listing the dashboard's major sections. It also explains the default date range, and the schema fully documents all optional parameters. Combined with the annotations' safety profile, an agent has everything needed to select and invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (startDate, endDate, platform, workspaceId) having its own description and default values. The description's date guidance ('omit them for the last 30 days') is largely a restatement of those schema defaults, adding little genuinely new parameter meaning. This matches the baseline of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the ads dashboard for a workspace,' and enumerates the dashboard's components (connection status, spend/impression/click/lead totals, per-account breakdown, daily trend). It also explicitly distinguishes itself from the sibling campaignstack_get_ad_analytics by directing raw per-entity row requests there, making its scope sharp.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use instruction relative to the main alternative: use campaignstack_get_ad_analytics for raw daily rows per entity. It also provides a concrete invocation rule for the default 30-day window by telling the agent to omit dates. This is strong routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_apollo_import_progressARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| listId | Yes | ||
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_jobsARead-onlyIdempotentInspect
Get recent job execution history for a scheduled automation. Returns the last 10 jobs with status, timestamps, and results.
| Name | Required | Description | Default |
|---|---|---|---|
| automationId | Yes |
TDQS
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.
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.
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.
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.
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.
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_campaignARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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_metricsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of calendar days to include in the range (default 30, max 90) | |
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_topicsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_weightsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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_companyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | ||
| workspaceId | No | Only needed for imported (workspace-scoped) companies. Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_company_metric_historyARead-onlyIdempotentInspect
Get a company's metric snapshot time series, newest first: staff count, follower count, Trustpilot score, review counts and open job count per observation. Snapshots are change-only (a new row means a value moved, plus a 90-day liveness heartbeat), and each row's capturedAt is when its values were first observed. Filter by source or a since timestamp to narrow the window.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| since | No | Only snapshots captured at or after this Unix ms timestamp | |
| source | No | Restrict to one observation source; omit for all sources | |
| companyId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a safe read operation, and the description adds valuable non-obvious behavior: snapshots are change-only, a new row may be a 90-day liveness heartbeat, and capturedAt marks first observation. This prevents the agent from misreading sparse rows or heartbeat entries, going well beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose and ordering, followed by data semantics and filtering guidance. Every clause contributes meaningful information with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description compensates by listing the time-series fields, ordering, change-only semantics, timestamp meaning, and filter options. Combined with the schema's required companyId, source enum, since format, and limit constraints, the agent has enough to call this tool correctly; only minor pagination/default-limit details are left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes since and source well; companyId and limit have no descriptions but are reasonably inferable from their names and constraints. The description only summarizes filtering and does not explain limit behavior or default output size, so it adds limited parameter-level meaning beyond the 50% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get a company's metric snapshot time series,' then enumerates exact fields (staff count, follower count, Trustpilot score, review counts, open job count) and ordering ('newest first'). This makes the tool's scope concrete and clearly distinguishable from sibling company/campaign/workspace metric tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear operational guidance: 'Filter by source or a since timestamp to narrow the window.' It does not explicitly name alternatives or state when not to use this tool, so it stops short of a full 5, but the context is clear enough for an agent to recognize when this historical snapshot tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_competitor_watchARead-onlyIdempotentInspect
Returns a competitor watch with post count and the 5 latest posts. Use campaignstack_list_competitor_watches to find valid watch IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes |
TDQS
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.
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.
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.
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.
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.
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_requestARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | Yes | Request id returned by campaignstack_enrich_lead_contact_info (provider bettercontact). | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_analyticsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| toMs | Yes | ||
| fromMs | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_postARead-onlyIdempotentInspect
Returns a single content post with its LinkedIn extension data and media URLs. Use campaignstack_list_content_posts to find valid post IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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_conversationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| conversationRef | Yes |
TDQS
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.
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.
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.
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.
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.
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_voiceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace | |
| linkedinAccountId | Yes | LinkedIn account id |
TDQS
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.
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.
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.
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.
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.
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_balanceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_checkupARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_statusARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | ||
| campaignId | No | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_exclusionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No | workspace (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. | |
| workflowId | No | With level=effective, merge this workflow source node's own exclusions | |
| workspaceId | No | Defaults to the API key's workspace | |
| signalAgentId | No | With level=effective, merge this signal agent's own exclusions |
TDQS
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.
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.
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.
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.
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.
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_progressARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Integration provider of the import. | |
| sourceId | Yes | Provider-side source id the import was started with. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_free_slotsARead-onlyIdempotentInspect
Find the next available time slots in the user's Google Calendar. Fetches events for up to 14 days from fromDate, then returns the first N gaps that fit the requested duration. When businessHoursOnly is true (default), slots are restricted to the account's configured scheduling hours (schedulingStartHour/schedulingEndHour, default 9 AM–6 PM) in the Google account's timezone (auto-detected from the calendar on connect; falls back to UTC). Requires a Google account to be connected and linked to the workspace. If googleAccountId is omitted, uses the first connected Google account.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of free slots to return (default: 3) | |
| fromDate | Yes | Start of the search window (ISO 8601 string, e.g. '2026-06-17T00:00:00Z'). Slots earlier than this date are excluded. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| durationMinutes | No | Duration of each slot in minutes (default: 30) | |
| googleAccountId | No | Google account ID to use. Defaults to the first connected Google account linked to the workspace. | |
| businessHoursOnly | No | If true (default), only return slots within business hours (9 AM–6 PM in the Google account's timezone, defaults to UTC if not set) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds substantial behavioral context beyond that: the 14-day fetch window, business-hours restriction using schedulingStartHour/schedulingEndHour with 9 AM–6 PM defaults, and timezone auto-detection with UTC fallback. No contradiction with annotations; the read-only claim is consistent with a slot-finding operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Roughly 100 words covering algorithm, defaults, timezone handling, and prerequisites — dense but every sentence earns its place, with the core purpose front-loaded in the first sentence. The googleAccountId defaulting is slightly redundant with the schema description but adds narrative clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the algorithm, window limits, business-hours semantics, timezone behavior, and account prerequisites, making it sufficient for correct invocation. The main gap is the return format, which is unstated and there is no output schema to fill it, though the slot semantics are reasonably inferable from the name and algorithm.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description adds genuine value above it by wiring parameters into behavior: fromDate defines the search window, businessHoursOnly is tied to schedule hours and timezone fallback, and googleAccountId defaulting is explained narratively. This elevates the description beyond what the schema alone provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Find the next available time slots in the user's Google Calendar') and goes further to describe the algorithm (fetch events for up to 14 days, return the first N gaps that fit the duration). The detailed behavioral description makes it easy to distinguish from the calendar create/update/delete siblings, and the free-slot semantics are clearly distinct from the similar-sounding check_calendar_availability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit usage context: a prerequisite ('Requires a Google account to be connected and linked to the workspace') and clear defaulting behavior (googleAccountId falls back to the first connected account). However, it never names an alternative tool or states when NOT to use it, so the choice against sibling campaignstack_check_calendar_availability 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_get_icp_scoresARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| icpId | Yes | ||
| limit | No | ||
| cursor | No | ||
| minScore | No |
TDQS
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.
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.
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.
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.
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.
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_countARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
TDQS
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.
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.
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.
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.
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.
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_leadARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes |
TDQS
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.
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.
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.
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.
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.
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_connectionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| degree | No | ||
| leadId | Yes | ||
| leadSource | No | global |
TDQS
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.
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.
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.
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.
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.
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_historyARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| leadId | Yes | ||
| leadSource | No | global | |
| workspaceId | No |
TDQS
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.
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.
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.
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.
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.
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_listARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| leadListId | Yes | ||
| includeLeads | No |
TDQS
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.
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.
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.
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.
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.
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_magnet_runARead-onlyIdempotentInspect
Get a discovery run (default: the latest): status, topics searched, queries run, candidates found, magnets found, wall/block counts on the public fetch stage, and gate metrics (reachable commenters per topic, date honesty, magnet rate, gate verdict).
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Run ID; defaults to the latest run | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate those. It adds behavioral detail beyond annotations by specifying the default-latest behavior and the specific categories of metrics returned, including public fetch wall/block counts and gate verdicts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no filler, and the core verb and default behavior are front-loaded. The long list of returned metrics is dense but each element adds meaningful detail about what the agent can expect, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description carries the burden of explaining return values, and it does so thoroughly by listing the major metric groups. It does not explain how to discover valid run IDs beyond the optional runId parameter, but the default-latest behavior makes the tool usable without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50%: runId is documented but workspaceId is not. The description adds useful semantics for runId by noting it defaults to the latest run, but it does not clarify workspaceId's role or how it interacts with run selection. This is adequate but leaves a gap for one of the two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get a discovery run.' It clearly enumerates what the run contains (status, topics, queries, candidates, magnets, wall/block counts, gate metrics), making the tool's function unmistakable. The focus on a single run distinguishes it from sibling tools that list posts, creators, or schedules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes clear that this retrieves a discovery run, with the default being the latest run, which implies its typical use after a discovery has been performed. It does not explicitly name alternative tools or state when not to use it, but the context is clear enough for an agent to select it over list-oriented siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_lead_magnet_scheduleARead-onlyIdempotentInspect
Get the workspace's weekly magnet-search schedule: whether it is enabled, the saved topic selection it reuses, and when it was last changed. Each weekly run charges the standard run price.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
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. The description adds value beyond that by warning that each weekly run charges the standard run price, which is useful cost-related behavior an agent should know before acting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the action and resource, lists what will be returned, and appends a relevant cost warning. Every sentence contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with one optional parameter, safety annotations, and no output schema, the description covers the key returned components and the cost implication. A minor gap is that it does not explicitly route the agent to related sibling tools, but this is not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one optional parameter, workspaceId, and the schema already documents it fully with 100% coverage. The description does not add parameter-specific detail, but given the high schema coverage, no additional explanation is necessary.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it gets the workspace's weekly magnet-search schedule. It further clarifies the exact contents of the result—enabled state, saved topic selection, and last-changed time—making it easy to distinguish from siblings like get_lead_magnet_run or set_lead_magnet_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for reading schedule configuration rather than running or modifying it, but it does not explicitly state when to use this tool versus related siblings such as get_lead_magnet_run or set_lead_magnet_schedule. There are no exclusion conditions or alternative routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_lead_score_breakdownARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | ||
| campaignId | Yes | ||
| leadSource | No | global |
TDQS
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.
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.
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.
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.
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.
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_activityARead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| nodeId | Yes |
TDQS
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.
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.
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.
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.
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.
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_preferencesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_personaARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| personaId | Yes |
TDQS
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.
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.
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.
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.
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.
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_phaseARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| phaseId | Yes |
TDQS
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.
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.
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.
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.
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.
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_capabilitiesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
TDQS
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.
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.
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.
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.
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.
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_playbookARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_proposalARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_private_proxyARead-onlyIdempotentInspect
Get the private proxy connection info (host, port, username; never the password) for a LinkedIn account, or null if the account is on a shared pool proxy. You can only read proxies for accounts in your own workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | ||
| workspaceId | Yes |
TDQS
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 meaningful behavioral detail beyond that: it never returns the password, it returns null for shared-pool accounts, and it enforces a workspace-scoped read permission. These details materially affect how an agent interprets results and handles authorization.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler. The key facts are front-loaded: what is returned, what is never returned, the null case, and the access restriction. Every clause adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description appropriately explains the return semantics: proxy connection info fields, password exclusion, and null for shared-pool accounts. It also covers the authorization boundary. It doesn't discuss error behavior for unauthorized or nonexistent accounts, but for a simple read-only getter this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description carries the semantic burden for accountId and workspaceId. It connects the params to their real-world meaning: a LinkedIn account and the user's workspace, and implies proxy info is scoped by both. It doesn't describe exact identifier formats, but the parameter names plus this context make the expected values reasonably clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Get the private proxy connection info (host, port, username; never the password) for a LinkedIn account'. It clearly distinguishes this read operation from sibling tools like set_private_proxy and remove_private_proxy by focusing on retrieval and explicitly noting the null case for shared-pool proxies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when the tool is relevant: when reading proxy connection info for a LinkedIn account, and it explains that null indicates a shared proxy. It also states the workspace authorization restriction. However, it doesn't explicitly name sibling alternatives or say 'use this instead of set/remove_private_proxy when you only need to view', so the guidance is context-rich but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_signal_agentARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes |
TDQS
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.
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.
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.
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.
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.
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_statsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes |
TDQS
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.
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.
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.
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.
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.
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_warmup_statusARead-onlyIdempotentInspect
Check the email warmup status for a single Google account. Returns provider, status, warmupEmail, score, and daysSinceStart. For MailReach warmup, also returns totalMessagesSent, totalMessagesReceived, and rampupTarget from the last sync. For manual warmup entries, returns a note explaining that no progression data is available. Returns an informational message if no warmup is configured. Use campaignstack_list_workspace_warmups for a workspace-wide overview. Use campaignstack_enable_warmup to start automated warmup.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | Yes | Google account ID to check warmup status for. Use campaignstack_list_integrations to find valid account IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds meaningful behavioral detail beyond those annotations: exact returned fields, provider-specific extra fields, the manual-entry note, and the behavior when no warmup is configured. This is substantial value-add.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first states the core purpose, the next details return fields, and the final two provide alternative-tool routing. There is no filler or redundancy, and the key scope is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description enumerates the return fields and all noted edge cases (MailReach, manual warmup, no warmup configured). Combined with the annotations, this gives an agent everything needed to invoke the tool and interpret its result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters, including guidance to use campaignstack_list_integrations for valid account IDs. The description adds no parameter-level detail beyond confirming the target is a Google account, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Check the email warmup status for a single Google account.' It clearly distinguishes this tool from workspace-wide warmup listing and from enabling warmup, so an agent can select it correctly even among the large sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 alternatives: campaignstack_list_workspace_warmups for a workspace-wide overview and campaignstack_enable_warmup to start automated warmup. This gives direct routing guidance without requiring inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_get_workflowARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workflowId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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_typesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_statsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workflowId | Yes |
TDQS
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.
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.
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.
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.
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.
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_workspaceARead-onlyIdempotentInspect
Get workspace details including name, company info, industry, and settings. The workspaceId is returned by campaignstack_whoami.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_billingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is 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.
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.
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.
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.
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.
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_brandingARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
TDQS
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.
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.
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.
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.
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.
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_metricsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of calendar days to include in the range (default 30, max 90) | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so 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.
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.
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.
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.
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.
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_voiceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| listId | Yes | ||
| listName | No | Display name for the Apollo list (for progress tracking) | |
| listCount | No | Expected total contact count (for progress display) | |
| campaignId | No | Campaign ID to filter by ICP (requires onlyMatchingIcp: true) | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| onlyMatchingIcp | No | Import only contacts matching the campaign ICP |
TDQS
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.
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.
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.
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.
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.
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_leadsAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Integration provider to import from. | |
| sourceId | Yes | Provider-side source id (from campaignstack_list_external_lead_lists or campaignstack_list_external_sequences). Pass "portal" for sourceKind portal. | |
| campaignId | No | Optional CampaignStack campaign whose default lead list receives the imported leads. | |
| sourceKind | Yes | Whether sourceId is a provider lead list, a provider campaign (instantly only), or the whole portal (hubspot only: every contact). | |
| sourceName | No | Display name for progress tracking. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| csvData | Yes | ||
| mapping | No | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Only "member" invitations can be created via MCP | |
| Yes | |||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_link_lead_profileAIdempotentInspect
Attach a platform profile (LinkedIn or X) to an existing PRIVATE lead so one person is sequenceable across channels. Provide at least one of url, externalId, or handle. Fails with PROFILE_ALREADY_LINKED if the profile is attached to a different lead. API-key callers may only link profiles on private (workspace-scoped) leads. Global leads are read-only for user-supplied data.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Profile URL (e.g. https://linkedin.com/in/jane or https://x.com/jane) | |
| handle | No | X handle (with or without @) | |
| leadId | Yes | Private lead id (API-key callers may only link on private leads) | |
| platform | Yes | Platform of the profile being linked | |
| externalId | No | Platform-native external id | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a non-read-only, non-destructive, idempotent operation, and the description adds meaningful behavior beyond that: the PROFILE_ALREADY_LINKED failure mode, the restriction that API-key callers may only link private leads, and that global leads are read-only for user-supplied data. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the action and purpose, followed by input requirement, failure behavior, and permission constraints. Every sentence earns its place and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a moderate-complexity mutation with six parameters and no output schema, the description covers intent, input requirements, failure mode, and authorization boundaries. It could additionally describe the successful result/return value, but the core information needed to select and invoke the tool correctly is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds a valuable constraint not expressed in the JSON schema: at least one of url, externalId, or handle is required, even though only leadId and platform are marked required. This materially helps an agent avoid an invalid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Attach a platform profile') with a clear resource and scope ('existing PRIVATE lead'), and explains the outcome ('sequenceable across channels'). It is immediately distinguishable from the sibling unlink_lead_profile and other lead-related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: when to use (to link LinkedIn/X profiles to a private lead), a required input condition ('Provide at least one of url, externalId, or handle'), and caller restrictions. It does not explicitly name the alternative unlink_lead_profile or state 'use this instead of X', so it stops short of full when-to-use versus alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_list_accountsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Filter by platform. Omit to return all accounts. | |
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_ad_accountsARead-onlyIdempotentInspect
List the workspace's managed ad accounts (LinkedIn). Returns account _id, external account ID, name, currency, status, default flag, and the monthly spend ceiling. Use the returned _id as adAccountId for campaignstack_create_ad_campaign and campaignstack_generate_ad_campaign. Requires the linkedin_ads feature flag (enforced server-side).
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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 valuable behavior context beyond annotations: the server-side linkedin_ads feature flag requirement and the exact return payload, which is useful because no output schema 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three focused sentences with no filler. The main action and scope are front-loaded, the return fields are listed compactly, and the downstream usage and prerequisite are stated efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema, rich annotations, and no output schema, the description is complete: it states what is returned, how to use the returned value, and the feature flag requirement. There is no critical missing information for an agent to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters, including the platform enum and workspaceId default. The description's mention of 'workspace's' managed ad accounts loosely reinforces workspaceId but does not add meaningful semantic detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'the workspace's managed ad accounts (LinkedIn)', and enumerates the exact returned fields. It is immediately distinguishable from sibling list tools like list_ad_campaigns and list_accounts by mentioning managed ad accounts and LinkedIn.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool: to retrieve managed LinkedIn ad accounts and obtain the _id needed for downstream ad campaign tools. It does not explicitly state when not to use it or name alternative listing tools, but the intended 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_list_ad_campaignsARead-onlyIdempotentInspect
List the workspace's ad campaigns (LinkedIn), grouped with their campaign groups. Use the returned adCampaignId with campaignstack_get_ad_campaign, campaignstack_list_ad_creatives, campaignstack_update_ad_campaign, or campaignstack_set_ad_autopilot.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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 that results are grouped with campaign groups, which is a useful structural detail, but it does not mention pagination, ordering, or other behavioral aspects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It leads with the core purpose and immediately provides actionable follow-up usage, making it easy for an agent to scan and apply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with well-covered parameters and safety annotations, the description sufficiently covers scope, grouping, and downstream ID usage. It could additionally mention pagination or result limits, but those are not necessary for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both platform and workspaceId are already well documented in the schema. The description adds no parameter-level meaning, which is acceptable but not exceptional given the schema already carries the full burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with a clear resource: the workspace's LinkedIn ad campaigns, and adds that they are grouped with their campaign groups. This clearly distinguishes the tool from sibling list tools like campaignstack_list_ad_creatives and campaignstack_list_campaigns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful follow-up guidance by telling the agent to use the returned adCampaignId with related tools, but it does not explicitly state when to choose this tool over alternatives or when not to use it. Usage context is 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_list_ad_creativesARead-onlyIdempotentInspect
List the creatives of an ad campaign with their status, approval status (creatives always land as pending_approval and must be approved before publishing), platform review status, and copy (headline, body text, call to action). Use campaignstack_approve_ad_creative / campaignstack_reject_ad_creative on the results.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace | |
| adCampaignId | Yes |
TDQS
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 useful behavioral context beyond those flags: creatives always land as pending_approval and must be approved before publishing, and it lists the fields returned. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the first clause names the action and object. Every subsequent clause adds meaningful detail about returned fields, approval behavior, or follow-up tools. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no output schema, the description adequately explains what will be returned and what the agent should do next. It does not mention pagination or empty-result behavior, but the required parameter and platform constraints are already covered by the schema, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with platform and workspaceId already documented. The description adds campaign-level context but does not provide additional meaning for adCampaignId or workspace fallback beyond what the schema already states. Baseline 3 is appropriate since the schema does most of the parameter work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List the creatives of an ad campaign'. It also enumerates the exact return dimensions (status, approval status, platform review status, copy), making it clearly distinct from sibling tools like list_ad_campaigns or get_ad_campaign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to call the tool and explicitly directs the agent to use campaignstack_approve_ad_creative / campaignstack_reject_ad_creative on the results. It does not spell out explicit exclusions or alternatives, but the intended workflow 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_ad_lead_formsARead-onlyIdempotentInspect
List the workspace's mirrored lead-gen forms (LinkedIn Lead Gen Forms): form name, questions, external ID, owning ad account, and the CampaignStack lead list the form's submissions flow into (if wired).
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about the data returned (questions, external ID, owning ad account, wired lead list) and the 'mirrored' nature of the forms, but it does not disclose pagination, ordering, limits, or whether results are live-fetched or cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly written sentence that front-loads the action and resource, then packs the key returned fields into a compact list. Every word earns its place with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with two optional parameters, full schema coverage, and strong annotations, the description is complete. It compensates for the lack of an output schema by naming the fields the agent can expect, and it clarifies the optional 'wired' lead list relationship.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already well documented in the schema. The description adds no additional parameter-level detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('List') and a specific resource ('the workspace's mirrored lead-gen forms (LinkedIn Lead Gen Forms)') and enumerates the returned fields, so an agent knows exactly what this tool does. It does not explicitly name or differentiate itself from sibling list tools, though the specific resource makes confusion unlikely.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like list_ad_creatives or list_external_lead_lists, nor does it state any prerequisites or exclusions. Usage is only implied by the tool name and generic 'list' convention.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_list_ai_suggestionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_sourcesARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_automationsARead-onlyIdempotentInspect
List scheduled automations for a campaign. Shows automation name, schedule, enabled status, and last run outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_campaignsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| workspaceId | No | Defaults to the API key's workspace | |
| includeArchived | No | Include archived campaigns. Off by default, so archived campaigns are hidden. Turn it on to find one you want to unarchive. |
TDQS
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.
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.
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.
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.
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.
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_companiesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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_discoveriesARead-onlyIdempotentInspect
List companies the discovery crawl has found, newest first: the LinkedIn slug, how it was discovered (seed, similar_of, serper, lead_experience, website), crawl depth, and where it got to. A candidate is a slug we have not fetched yet; it becomes a real company only after a fetch returns an organization id. Status tells you which: pending and queued are waiting, promoted became a company, out_of_market was fetched and refused by the market gate, unreachable could not be read. Filter by source to compare yield per discovery channel.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| source | No | Filter by how the slug was discovered | |
| status | No | Filter by candidate lifecycle status |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The read-only and non-destructive nature is already covered by annotations, and the description adds useful behavioral context on top: newest-first ordering, enumeration of discovery sources, and precise meanings of each status (pending, queued, promoted, out_of_market, unreachable). It does not describe every possible edge case, but the annotations already carry the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the first defines the result set and ordering, the second explains lifecycle semantics, and the third gives a concrete use case. No structured data is repeated, and the key distinctions are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list operation with three optional parameters, this is complete: the description covers returned fields, ordering, status semantics, and filtering rationale. Even without an output schema, an agent knows what it will receive and what the status values mean, and the schema covers limits and enums.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; source and status already have descriptions, and the tool description deepens them by explaining when each status occurs and what filtering by source is for. Limit is not described in the text, but its min/max constraints are already in the schema and its meaning is conventional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'List companies the discovery crawl has found, newest first' names a specific resource and action, then enumerates the returned fields (slug, discovery source, crawl depth, status). It also explains the candidate-vs-company lifecycle, which sets it apart from the sibling list_companies without needing to open that tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is for discovery-crawl output and the filter use case is explicit ('Filter by source to compare yield per discovery channel'). It does not explicitly name an alternative or a when-not-to-use condition, but the candidate/company distinction makes the intended scope obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_list_company_employeesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| companyId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | all | |
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_funding_eventsARead-onlyIdempotentInspect
List a company's funding rounds, newest first: event date, round type, amount, currency, observing source (apollo/news/registry/linkedin_post) and source URL. These rows are the facts the funding_event company signal derives from, so history stays visible after the signal expires. Use campaignstack_list_companies or campaignstack_get_company to find company IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| companyId | Yes |
TDQS
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 meaningful behavioral context: results are sorted newest first, source types are enumerated, and rows are the underlying facts for the funding_event signal. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first defines the core operation and return fields, the second explains provenance and retention value, and the third points to tools for finding the required ID. 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.
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 required parameter, the description is largely complete: resource, ordering, fields, source types, provenance, and ID lookup are all covered. The main gap is the undefined limit parameter, but the tool's overall context is adequate for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate for missing parameter documentation. It implicitly explains companyId by saying 'a company's funding rounds,' but the optional limit parameter is not described at all. With no schema descriptions and no mention of what limit controls, parameter semantics are only partially covered.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('List'), the resource ('a company's funding rounds'), the ordering ('newest first'), and the specific fields returned. It distinguishes itself from related siblings like list_company_signals and list_company_news_events by clarifying that these are raw funding facts that feed the funding_event signal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when this tool is useful: after the derived funding_event signal expires, this history remains visible. It also provides direct guidance for finding company IDs via campaignstack_list_companies or campaignstack_get_company. It doesn't explicitly contrast with sibling list tools, but the context is clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_list_company_news_eventsARead-onlyIdempotentInspect
List a company's classified news and registry events, newest first: event type (funding, acquisition, launch, leadership, partnership, expansion, layoff), event date, headline, source URL and a 0-1 match confidence. Funding and leadership are positive buying triggers; layoff is a negative indicator that freezes budgets. These rows are the facts the leadership_change and layoff_announced signals derive from. Use campaignstack_list_companies or campaignstack_get_company to find company IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| companyId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds meaningful behavioral detail beyond that: newest-first ordering, the specific event types returned, the 0-1 confidence score, and the relationship to derived signals. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: return contents, event types, ordering, confidence semantics, buying-intent interpretation, signal provenance, and ID lookup guidance are all included without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given only two parameters, no output schema, and annotations covering safety, the description supplies the necessary output contract: fields, ordering, allowed event types, confidence meaning, and how rows relate to signals. This is sufficient for an agent to invoke and interpret the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description partially compensates by explaining that the tool is scoped to a company and by pointing to tools for finding company IDs. The companyId parameter is effectively documented, but the optional limit parameter is not described in prose, leaving it to be inferred from the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists a company's classified news and registry events, with specific event types, newest-first ordering, and output fields. It is clear enough to be distinguished from list_company_funding_events by covering all event types, but it does not explicitly differentiate itself from the similar-sounding check_company_news sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context about when the events matter (funding/leadership positive, layoff negative) and directs the agent to list_companies or get_company for company IDs. However, it does not explicitly state when to choose this tool over alternatives like check_company_news or list_company_funding_events, so usage guidance is mostly 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_list_company_reviewsARead-onlyIdempotentInspect
List a company's Trustpilot reviews and current aggregates: trust score, total review count, negative (1-2 star) count, the star histogram, and recent reviews (rating, title, truncated text, publish date - never reviewer identities). status is 'matched' when the company is on Trustpilot, 'not_found' when it was looked up and has no page, or null when it has never been checked. Aggregates are software-weighted: treat a thin review base as weak signal. Use campaignstack_list_companies or campaignstack_get_company to find IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| companyId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses meaningful behavioral and interpretational details: reviewer identities are never included, aggregates are 'software-weighted' and should be treated cautiously with a thin review base, and the exact status semantics (matched/not_found/null) are defined.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose and data fields first, then status semantics, then an important caveat, then ID-source guidance. Every sentence carries necessary information 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.
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 describing return values; it does so thoroughly by listing aggregates, recent review fields, and status values. It also includes the data-quality caveat and prerequisite ID lookup, making the tool safe and actionable for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates for companyId by explaining that IDs come from campaignstack_list_companies or campaignstack_get_company. However, it never explains the `limit` parameter, its default behavior, or its effect on the 'recent reviews' portion of the response, leaving an optional parameter under-documented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('List') and a precise resource ('a company's Trustpilot reviews and current aggregates'), then enumerates exactly what is returned. This clearly distinguishes it from sibling list_company_* tools because it is specifically about Trustpilot review data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use is clear: retrieve Trustpilot reviews and aggregate scores for a specific company. It also provides practical prerequisite guidance by naming the tools to use to find company IDs. It does not explicitly discuss when-not-to-use or alternative review-related 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_list_company_signalsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| companyId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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_watchesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Filter by status. Omit to list all watches. | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_requestsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return, newest first (default 25, max 100). | |
| status | No | Only requests in this status (queued, linked, submitted, completed, failed). | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_calendarARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| endMs | Yes | ||
| startMs | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_postsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| cursor | No | Opaque pagination cursor from a previous response's nextCursor | |
| status | No | ||
| platform | No | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_accountsARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Integration provider whose sending mailboxes to list. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_listsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Integration provider whose lead lists to list. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_sequencesARead-onlyInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | Integration provider whose sequences to list. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_icpsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_conversationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| unreadOnly | No | ||
| workspaceId | No | ||
| identityFilter | No |
TDQS
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.
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.
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.
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.
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.
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_integrationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
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.
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.
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.
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.
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.
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_invitationsBRead-onlyIdempotentInspect
List pending invitations for a workspace. Returns email, role, and invitation date.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_listsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the 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.
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.
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.
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.
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.
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_lead_magnet_creatorsARead-onlyIdempotentInspect
List the workspace's creator roster: people repeatedly running magnet posts, with topics, magnet post counts, and status (candidate/promoted/dismissed). A creator auto-promotes at two independent magnet sightings; promoted creators' future posts skip the relevance gate.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | ||
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only and idempotent. The description adds meaningful behavioral context by explaining the auto-promotion rule and the consequence that promoted creators' future posts skip the relevance gate, which is not visible in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences front-load the core action and immediately specify the returned data. The extra auto-promotion detail earns its place because it clarifies status semantics and downstream behavior. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list with optional parameters and no output schema, the description covers the resource scope, key fields, and an important domain rule. Minor gaps remain around pagination, ordering, and default behavior when status is omitted, but these are not critical for the tool's use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It partially does by explaining the meaning of status values through creator lifecycle context, and 'workspace's' implies workspace scoping. However, it does not explicitly describe how workspaceId or the optional status filter should be used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List the workspace's creator roster.' It clearly distinguishes this from sibling tools by specifying that it returns people/creators, their topics, magnet post counts, and statuses, rather than listing posts or magnets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when to use this tool versus alternatives such as list_lead_magnet_posts or discover_lead_magnets. It provides useful context about creator auto-promotion, but no explicit guidance on selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_list_lead_magnet_postsARead-onlyIdempotentInspect
List discovered lead magnet candidates for a workspace, ranked by live comment count (reachable commenters), with author, post age, discovering topic, classified deliverable, and status. Filter by status (candidate/sourced/dismissed) or topic substring.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No | Substring filter on the discovering topic or classified magnet topic | |
| status | No | Filter by junction status (default candidate) | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive behavior, so the bar is lower. The description adds behavioral value by disclosing ranking by live comment count ('reachable commenters') and enumerating the returned dimensions such as author, post age, discovering topic, classified deliverable, and status.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose and packs in ranked ordering, returned fields, and filter options without wasted words. Every clause contributes useful selection or invocation information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with no output schema, the description adequately covers what is returned, how results are ranked, and available filters. It does not mention default status, pagination, or combining filters, but those gaps are minor given the schema and annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%; status and topic are described in both schema and tool description, so the tool repeats that meaning. The description does not add much about 'limit' or 'workspaceId', though those names are reasonably self-explanatory and 'for a workspace' gives context for workspaceId. Overall it provides some value but does not fully compensate for the undocumented parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a distinct resource ('discovered lead magnet candidates for a workspace'), and the key distinguishing attributes (ranking by live comment count, returned fields, available filters). This clearly separates it from related tools like campaignstack_list_lead_magnet_creators and campaignstack_get_lead_magnet_run.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: listing lead magnet candidates filtered by status or topic. It does not explicitly name alternative tools or state when not to use it, but the scope and filter guidance make intended usage obvious.
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_nodeARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
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.
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.
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.
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.
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.
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_signalsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| leadId | Yes | ||
| leadSource | No | global |
TDQS
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.
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.
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.
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.
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.
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_urlsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| exclusionId | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_membersARead-onlyIdempotentInspect
List all members of a workspace with their roles (owner, admin, member), names, and emails.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_notificationsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| cursor | No | ||
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds 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.
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.
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.
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.
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.
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_reviewsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| accountId | No | Scope 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. | |
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_personasARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no 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.
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.
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.
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.
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.
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_phasesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_versionsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_topicsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_leadsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| agentId | Yes |
TDQS
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.
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.
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.
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.
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.
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_agentsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | ||
| includeArchived | No | ||
| includeAccountMaintenance | No |
TDQS
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.
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.
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.
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.
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.
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_watchesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | all | |
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_logsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_resultsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Slice by channel, e.g. linkedin | |
| craftKind | No | Slice by craft kind: note, message, comment, reply | |
| workspaceId | No | Defaults to the API key's workspace | |
| profileVersion | No | Slice by voice profile version |
TDQS
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.
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.
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.
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.
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.
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_templatesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_workflowsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_list_workspace_warmupsARead-onlyIdempotentInspect
List all Google accounts in a workspace with their warmup status. Returns every account (even those without warmup), with status: 'not_started', 'warming', 'warmed', or 'disabled'. Includes score, daysSinceStart, provider, warmupEmail, and whether an App Password is configured. Use this to get a workspace-wide warmup overview before enabling or disabling warmup on specific accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (defaults to the bound workspace) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only and idempotent behavior. The description adds useful behavioral detail beyond annotations: it returns all accounts, including those without warmup, enumerates the possible status values, and lists the included fields such as score, daysSinceStart, provider, warmupEmail, and App Password configuration. It does not mention pagination or response shape limitations, but the added context is substantive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose, followed by return details and a usage note. It is slightly redundant in repeating 'warmup status' multiple times, but each sentence contributes meaningful information without excessive bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with one optional parameter and no output schema, the description is complete: it explains what is returned, the account coverage, possible status values, included fields, and a concrete use case. The schema covers the only parameter, and annotations cover the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter, workspaceId, is fully documented in the schema with 'Workspace ID (defaults to the bound workspace).' Schema coverage is 100%, so the description does not need to add parameter details. The description adds no extra parameter-specific semantics, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List all Google accounts in a workspace with their warmup status.' It clearly distinguishes this from per-account or mutation tools by emphasizing 'workspace-wide' and 'Returns every account (even those without warmup).' This makes its scope unambiguous relative to siblings like enable/disable warmup or a single-account status tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'Use this to get a workspace-wide warmup overview before enabling or disabling warmup on specific accounts.' This is a clear when-to-use statement, though it does not explicitly name alternative tools or provide when-not-to-use exclusions.
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_readAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
TDQS
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.
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.
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.
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.
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.
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_as_warmed_upAIdempotentInspect
Mark a Google account as already warmed up without using MailReach. Use this when the inbox was warmed externally (another tool, manual warmup, or aged inbox with good reputation). Free. Does not cost credits (no MailReach involvement). Fails if this email address already has an active warmup on another account. Returns { ok: true, alreadyEnabled } on success. Use campaignstack_enable_warmup instead to start automated warmup via MailReach.
| Name | Required | Description | Default |
|---|---|---|---|
| warmupEmail | No | Email address to mark as warmed (defaults to the account's primary email). Can be a verified alias. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | Yes | Google account ID to mark as warmed up. Use campaignstack_list_integrations to find valid account IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true but no safety profile beyond that. The description adds meaningful behavioral context: it is free and does not cost credits, it fails if the email already has active warmup on another account, and it returns { ok: true, alreadyEnabled } on success. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, and is mostly efficient. However, it contains redundancy: 'Free.' and 'Does not cost credits (no MailReach involvement)' say the same thing twice, and 'without using MailReach' is repeated later. Slightly repetitive but still compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, idempotent mutation tool with one required parameter and no output schema, the description covers the key gaps: when to use, when not to use, cost, failure condition, and return shape. It is not missing critical information, though it could have mentioned how marking as warmed interacts with existing warmup state beyond the alreadyEnabled return flag.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents googleAccountId, warmupEmail, and workspaceId with defaults and lookup guidance. The description does not add much parameter-level meaning, though the failure condition about 'email address already has an active warmup' gives some indirect context for warmupEmail. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Mark a Google account as already warmed up'), a clear resource ('Google account'), and distinguishes itself from the sibling 'campaignstack_enable_warmup' by noting it works 'without using MailReach'. This makes the tool's purpose immediately identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool ('when the inbox was warmed externally, another tool, manual warmup, or aged inbox with good reputation') and names the alternative ('Use campaignstack_enable_warmup instead to start automated warmup via MailReach'). It also warns about a key failure condition, giving clear usage boundaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_mark_conversation_readAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| conversationRef | Yes |
TDQS
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.
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.
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.
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.
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.
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_readAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| notificationId | Yes |
TDQS
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.
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.
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.
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.
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.
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_onboard_workspaceAIdempotentInspect
Set up a CampaignStack workspace: who the user works for, what that company sells, why it exists, how they write, and who they sell to.
Call this with no arguments FIRST. It returns what CampaignStack already knows, including the employer company resolved from the user's LinkedIn profile and any facts already gathered on it, plus every field you can write and its current value. Read that before you propose anything: your job is to correct and complete what is there, not to describe the company from scratch.
Then call it again with the fields you are confident about. Confidence means you can point to something specific: their profile, their company page, their site, something they told you. When you are not confident about a field, leave it out. An empty field is fixed in ten seconds by the user. A plausible sentence that is wrong gets read into every message the system writes for them, and nobody catches it until a prospect does.
Report back in plain language what you set and what you left empty, so the user can correct you before any of it reaches a message.
| Name | Required | Description | Default |
|---|---|---|---|
| voice | No | How this person writes: sentence length, formality, punctuation habits, phrases they reuse. Describe, never instruct. | |
| firstIcp | No | A first ideal customer profile. At least one list is required for it to be written. | |
| whatWeSell | No | What the company sells, in one or two plain sentences. Facts only. | |
| companyName | No | The company the user works for. | |
| workspaceId | No | Defaults to the workspace the extension set up for this key, or the key's workspace. | |
| whyWeBuiltIt | No | Why the company exists: the specific thing the founder saw that made it worth building. Omit unless it is concrete and checkable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
This is a standout description for behavioral transparency. It reveals that the first call is a read operation returning known facts and current field values, that subsequent calls write, and that incorrect plausible sentences will propagate into messages unnoticed. This goes well beyond the annotations and discloses real consequences of misuse.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place: purpose, first-call behavior, confidence criteria, risk warning, and reporting requirement. The structure is logical and front-loaded, starting with what the tool does and immediately giving the mandatory first action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return behavior, and it does so thoroughly: it describes what the no-arg call returns, what the agent should do with it, and what final reporting the user expects. Nothing essential is missing for safe and effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents every parameter well. The description adds valuable field-level guidance by mapping the fields to user/company facts and by instructing the agent to only include fields it can support with evidence. This is meaningful added semantic context beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: setting up a CampaignStack workspace with employer, company facts, voice, and first ICP. It is unambiguous about what the tool does, though it does not explicitly distinguish itself from sibling tools like update_workspace or get_workspace, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong, explicit usage context: call with no arguments first, read what is returned, then call again only with confident fields, and report back what was set or left empty. It does not name alternatives or exclusion cases, but the workflow guidance is clear enough that an agent knows exactly when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_optimize_split_nodeAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchAIdempotentInspect
Pause a company employee watch: weekly re-reads stop, the record stays. Resume with campaignstack_resume_company_employee_watch.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchAIdempotentInspect
Pauses a competitor watch and disables its associated automations. Use campaignstack_resume_competitor_watch to resume monitoring.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes |
TDQS
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.
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.
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.
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.
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.
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_agentAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_enrichAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| slugs | Yes | ||
| platform | No | ||
| accountId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_promote_lead_magnet_creatorAIdempotentInspect
Promote a creator by hand: their future magnet posts enter the candidate list directly. Use campaignstack_list_lead_magnet_creators to find creator IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| creatorId | Yes | Creator ID from campaignstack_list_lead_magnet_creators | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reveals the key behavioral consequence—only future magnet posts are affected and they enter the candidate list directly—which is valuable context beyond the annotation hints. Annotations already declare readOnlyHint=false and destructiveHint=false, and the description aligns rather than contradicts them. It does not address reversibility or auth requirements, but the idempotentHint=true annotation partially covers the repeat-call concern.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads the action and its effect; the second adds a directly actionable lookup tip. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter, one-required mutation, the description communicates the core effect and prerequisite lookup step adequately. With no output schema, it omits any indication of what the call returns, and workspaceId semantics are left to inference. It is minimally viable but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: creatorId is well-documented in the schema and reinforced by the description's pointer to the list tool, but workspaceId is undocumented. The description compensates for one parameter but leaves the other semantically empty. This is a partial, not complete, contribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('promote'), the resource (lead magnet creator), and the precise consequence: the creator's future magnet posts enter the candidate list directly. The 'by hand' qualifier distinguishes this manual action from automatic promotion flows, and the action contrasts clearly with siblings like campaignstack_dismiss_lead_magnet_creator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one explicit workflow pointer: use campaignstack_list_lead_magnet_creators to obtain creator IDs, which is a concrete prerequisite step. However, it does not state when to prefer this over related siblings (e.g., source_lead_magnet_post, dismiss_lead_magnet_creator) or provide any exclusion criteria. Usage context is implied by 'by hand' rather than explicitly stated.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | What should change about how the workspace writes, in plain words, e.g. 'stop mentioning pricing in openers' or 'sound less corporate' | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_leadsAIdempotentInspect
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| results | Yes | ||
| platform | No | ||
| accountId | Yes | ||
| campaignId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_companyAIdempotentInspect
Queue a fresh fetch of a company's public LinkedIn page: headcount, follower count, firmographics, a metric snapshot and any growth/decline signals the new data produces. Charges the company_refresh credit action (refunded if the fetch fails); a refresh already queued for the company is reused and charges nothing. The fetch runs through the globally paced queue, so results land shortly after, not synchronously. Read them with campaignstack_get_company_metric_history or campaignstack_get_company.
| Name | Required | Description | Default |
|---|---|---|---|
| companyId | Yes | ||
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already marking the call as non-read-only and idempotent, the description adds meaningful behavior: it charges the company_refresh credit action, refunds on fetch failure, reuses an already-queued refresh at no charge, and routes through a globally paced queue so results are asynchronous. This is exactly the kind of side-effect and timing disclosure an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: first defines the action and payload, second covers cost/refund/idempotency, third covers async behavior and read-back paths. The most decision-relevant fact (queue a fresh fetch) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a side-effecting async queue operation with no output schema, the description covers the essentials: what data will be produced, that it is not synchronous, that a duplicate request is harmless, what it costs, what happens on failure, and where to retrieve results. No critical decision or invocation detail is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The required companyId is not described in the schema, and the description only indirectly identifies it as the company whose LinkedIn page is fetched; the optional workspaceId is documented in the schema. The description adds little parameter-specific meaning beyond what the input schema and tool name already imply.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb-object pair 'Queue a fresh fetch of a company's public LinkedIn page' and enumerates the data produced (headcount, follower count, firmographics, metric snapshot, growth/decline signals). This clearly differentiates the tool from read-only getters in the sibling list: it schedules a refresh rather than returning current data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this when a fresh asynchronous fetch of company data is needed, and read the results later via campaignstack_get_company_metric_history or campaignstack_get_company. It does not explicitly state when not to use it or name alternative refresh/enrichment tools, so it stops short of a full when/when-not guide.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_ad_creativeAIdempotentInspect
Reject a pending ad creative. The creative stays in CampaignStack as rejected and is never published to LinkedIn. Use campaignstack_list_ad_creatives to find adCreativeId.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace | |
| adCreativeId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds valuable behavioral context beyond the annotations by stating that the creative remains in CampaignStack as rejected and is never published to LinkedIn. This communicates the post-condition and the important consequence of rejection. It aligns 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler: action, consequence, and lookup instruction. The description is front-loaded with the main purpose and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with no output schema, the description states the post-condition, clarifies the LinkedIn publication consequence, and explains how to source the required identifier. Annotations cover idempotency and non-destructiveness, so 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents platform and workspaceId, but adCreativeId has no description. The description compensates for that gap by telling the agent to obtain adCreativeId from campaignstack_list_ad_creatives, which adds meaning to the required parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Reject' and the target resource 'pending ad creative,' then clarifies the outcome: the creative stays in CampaignStack as rejected and is never published to LinkedIn. This is distinct from related tools like approve_ad_creative or create_ad_creative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to use campaignstack_list_ad_creatives to find adCreativeId, which is the key prerequisite. It does not enumerate exclusions such as 'do not use for approved creatives,' but the 'pending' qualifier implies the intended state.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | ||
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| checkupId | Yes | Pending checkup id from campaignstack_get_draft_checkup | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchADestructiveInspect
Remove a company employee watch (archives it, one-way; the company, its employees and their signals are untouched). To stop temporarily, pause instead.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_listADestructiveInspect
Permanently delete a lead list. This is destructive and cannot be undone. Use campaignstack_list_lead_lists to find valid lead list IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| leadListId | Yes |
TDQS
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.
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.
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.
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.
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.
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_listADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| leadRefs | Yes | ||
| leadListId | Yes |
TDQS
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.
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.
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.
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.
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.
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_urlADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| exclusionId | Yes | ||
| workspaceId | No | Defaults to the API key's workspace | |
| importedLeadId | Yes |
TDQS
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.
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.
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.
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.
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.
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_memberADestructiveInspect
Remove a member from the workspace. Cannot remove the workspace owner or admins (admin removal requires the workspace settings UI). This action is irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
| memberId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_private_proxyADestructiveIdempotentInspect
Remove the private proxy from a LinkedIn account and revert it to a shared pool proxy. No-op if the account is already on a shared proxy.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | ||
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the concrete effect (removal and revert to shared pool) and the idempotent no-op behavior, which complements the idempotentHint and destructiveHint annotations. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences front-load the core action and state the no-op exception without filler. Every sentence adds useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple destructive, idempotent tool with two params and no output schema, the description covers the effect and the edge case. It could additionally note the workspace scoping or the set_private_proxy sibling, but it is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies that accountId refers to a LinkedIn account, but workspaceId is not explained and the schema has no parameter descriptions (0% coverage). The parameter names are reasonably self-explanatory, so this is adequate with a gap rather than absent guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action (remove the private proxy), the target resource (a LinkedIn account), and the resulting state (reverted to a shared pool proxy). This clearly differentiates it from siblings such as campaignstack_set_private_proxy and campaignstack_get_private_proxy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation's intended use is clear: call it when a LinkedIn account should stop using a private proxy. The no-op condition adds context about when it is safe to invoke, though it does not explicitly name the set_private_proxy alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_remove_signal_watchADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_reviewAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_commentARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_reread_review_linkAInspect
Re-open the link the lead shared, then rewrite the pending draft with what the page actually says. Use this instead of campaignstack_retry_review when the draft answers a message containing a link and reads like it never saw the page (campaignstack_list_pending_reviews reports sharedLinkUrl and sharedLinkGrounded per entry). Retry alone reuses the stored page content and never re-fetches. Costs one link read (credits plus a LinkedIn read action on the receiving account). The entry returns to PROCESSING, then comes back to PENDING_REVIEW with the new draft.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important side effects beyond the annotations: it costs credits plus a LinkedIn read action, changes the entry to PROCESSING, and later returns it to PENDING_REVIEW with a new draft. It also clarifies that retry alone does not re-fetch the page, adding meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and every sentence earns its place: purpose, when to use it, why the alternative is insufficient, cost, and state transition. It is front-loaded with the core action and then provides necessary supporting detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter action tool, the description covers what the tool does, when to use it, what it costs, how it changes the entry state, and where the needed link details come from. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions for entryId or workspaceId (0% coverage). The description refers to 'the pending draft' and 'per entry', so entryId can be inferred as the pending review entry ID, but workspaceId is not explained at all. Some meaning is added, 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: re-open the shared link and rewrite the pending draft based on the page's actual content. It clearly distinguishes itself from campaignstack_retry_review by explaining the exact scenario in which it should be used.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool instead of campaignstack_retry_review: when the draft answers a message containing a link and appears not to have seen the page. It also explains why retry is not a substitute, since retry reuses stored content and never re-fetches.
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_watchAIdempotentInspect
Resume a paused company employee watch (also retries one the system paused as company-unreachable; the failure counter resets).
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchAIdempotentInspect
Resumes a paused competitor watch and re-enables its associated automations. Use campaignstack_pause_competitor_watch to pause monitoring.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes |
TDQS
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.
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.
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.
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.
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.
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_agentAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| agentId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watchAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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_nodeAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_entryAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_playbookAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| versionId | Yes | Playbook version id from campaignstack_list_playbook_versions | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_invitationADestructiveInspect
Revoke a pending invitation. The invitation link becomes invalid immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes | ||
| invitationId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scheduledAt | No | Exact publish time. Omit (or set autoSchedule) for the next valid slot. | |
| autoSchedule | No | Auto-place into the next valid posting slot instead of an exact time. Default when scheduledAt is omitted. | |
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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_console_dead_pagesARead-onlyIdempotentInspect
List pages that earned Google impressions over the retained history and now return 404 or 410, most demand first, with a suggested redirect target when an obviously similar live page exists. Derived by joining Search Console page history against the latest SEO audit crawl, so an audit must have run. Pages that never ranked cannot appear here.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max page rows scanned (default 200) | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent hints, the description adds rich behavioral context: data provenance (join of Search Console history against audit crawl), the audit prerequisite, output characteristics (demand-ranked, conditional redirect suggestions), and a meaningful exclusion rule ('Pages that never ranked cannot appear here'). This substantially helps the agent predict what the tool will return and what conditions affect it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: the first front-loads the core purpose and sort behavior, the second adds the prerequisite and data source, the third clarifies an exclusion. No filler, repetition, or schema echo.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, 2-param list tool with no output schema, the description is nearly complete: it conveys what is listed, the ordering, the conditional redirect suggestions, the prerequisite, and what cannot appear. The only gap is not stating what happens when no audit has run (empty result vs. error), which an agent might need to know to decide whether to trigger an audit first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: limit is well documented in the schema with min/max and default, but workspaceId has no schema description. The description does not compensate for the undocumented workspaceId param, though it follows a standard workspace-scoping pattern across the campaignstack suite. The description adds no parameter-level detail beyond what the schema already provides for limit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List pages that earned Google impressions over the retained history and now return 404 or 410.' It clearly differentiates this tool from sibling search_console tools (list_queries, get_demand, status) by focusing on dead pages with historical demand, and it even specifies sort order and the conditional redirect-suggestion feature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on prerequisites: 'Derived by joining Search Console page history against the latest SEO audit crawl, so an audit must have run.' This tells the agent when results will be available and implicitly points toward running seo_run_audit or checking seo_get_latest_report first. It stops short of explicitly naming alternatives or stating when-not-to-use cases relative to specific siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_search_console_draft_postAInspect
Draft a LinkedIn post about one competitor from the demand ranking, landing it as a draft content post with an image requested. The draft is grounded ONLY in demand data (what people search, what AI assistants answer) and is explicitly told it knows nothing about the competitor's features or pricing, so it writes about the buying decision rather than a feature comparison. Refuses when a post about the same competitor exists from the last 30 days unless force is set, and refuses outright for competitors under a standing block. Costs AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Competitor slug from campaignstack_search_console_get_demand (e.g. "heyreach") | |
| force | No | Draft again even if a post about this competitor exists from the last 30 days | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses important behavioral traits beyond the annotations: it creates a draft, requests an image, costs AI credits, refuses duplicates within 30 days unless force is set, and refuses competitors under a standing block. These details help an agent predict side effects and failure modes, especially since the annotations only signal non-read-only, non-idempotent, non-destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: the action, the grounding rules, the refusal conditions, and the cost warning. It is front-loaded with the main purpose and avoids filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no output schema, the description provides enough context for correct invocation: what the tool does, what inputs matter, key edge cases (duplicate and block), and the side-effect cost. An agent can confidently decide when to call it and what to expect afterward.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents slug and force well, covering 67% of parameters. The description reinforces the force behavior but adds little about workspaceId, which remains undocumented. This is adequate but not exceptional; the description does not go beyond the schema in a meaningful way for parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Draft a LinkedIn post about one competitor from the demand ranking') and a clear deliverable ('draft content post with an image requested'). It also distinguishes this from generic post-creation tools by emphasizing grounding in demand data and exclusion of feature/pricing comparisons.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is explicit: this tool is for drafting LinkedIn posts about competitors ranked by demand data. It adds practical usage constraints, such as the 30-day duplicate refusal and the force flag to override, which guides when to call it. It stops short of naming alternative sibling tools, but the use case 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_search_console_get_demandARead-onlyIdempotentInspect
Rank the tools buyers weigh against this workspace, from two independent sources: what humans type into a search engine next to us, and what AI assistants recommend instead of us (the audit's probe results). A tool named by BOTH families is marked corroborated and ranks above one with far more search volume alone, because two populations that cannot have influenced each other agreeing is the stronger signal. Two search engines agreeing is NOT corroboration: that is the same population indexed twice. Each item carries a relationship: rival (substitutable), complement (we ship an integration, so a page about it argues composition rather than a scoreboard) or substrate (the platform we run on). Also returns vsCandidates with the angle each page must take, and vsSkipped with the reason each was excluded. Names flagged discovered: true were inferred from query grammar and are leads to confirm, not established competitors.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max comparison-bucket query rows read before ranking (default 200) | |
| scope | No | Narrow to one side of the join: "all" (default), "search" (Google, later Bing), "ai" (every probe engine), or one source id such as "openai". A single-family view honestly reports nothing as corroborated. | |
| workspaceId | No |
TDQS
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 substantial behavioral context beyond those: the corroboration rule, the explicit warning that two search engines are not corroboration, the rival/complement/substrate relationship taxonomy, and the discovered flag semantics. This meaningfully informs the agent about ranking behavior and return semantics without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense, with the primary purpose front-loaded in the first sentence. Each subsequent sentence adds useful information about ranking logic, relationship types, or returned fields. Some methodological rationale could be tightened, but there is no significant redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description compensates by naming vsCandidates, vsSkipped, relationship labels, and discovered flags. Combined with the read-only and idempotent annotations, an agent has enough context to invoke the tool and interpret results. It stops short of spelling out the exact output shape, but the missing details are minor given the description's richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides meaningful descriptions for limit and scope, covering 2 of 3 parameters, while workspaceId remains undocumented. The tool description does not add any parameter-level guidance. Since schema coverage is moderate and the missing workspaceId is self-evident from context, the description neither helps nor hurts parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: it ranks the tools buyers weigh against this workspace. It specifies the ranking basis (human search input and AI assistant recommendations) and distinguishes this from sibling list tools by focusing on demand/ranking rather than raw queries or simple competitor listings. It also names distinct output categories, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended use case—competitive demand analysis using search and AI probe sources—is clearly implied, but the description never explicitly says when to prefer this tool over siblings like search_console_list_competitors or search_console_list_queries. There are no exclusion criteria or alternative routing statements. The guidance is implicit rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_search_console_list_competitorsARead-onlyIdempotentInspect
List this workspace's competitor roster with each entry's relationship and whether it is confirmed or merely suggested. The roster is per-workspace data, never a built-in list: who competes with a tenant is a fact about their market. Suggested entries come from the workspace's own competitor watches and probe answers and are inert until confirmed. An empty roster still finds competitors through query grammar (" alternative"), just not by name.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent, and non-destructive, and the description adds meaningful behavioral detail: entries have relationship and confirmation state, suggested entries are inert until confirmed, and an empty roster still discovers competitors via query grammar but not by name. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The main purpose is front-loaded and each sentence contributes distinct context. However, the unresolved placeholder in 'query grammar ("<tool> alternative")' is a minor clarity defect that keeps it from being perfectly polished.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter read-only listing tool with no output schema, this is complete: it describes the returned fields, the data source, confirmation semantics, and the empty-roster edge case. Nothing an agent needs to interpret the result is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the single parameter with 100% detail, including the user-key vs workspace-key binding distinction. The description adds no parameter-specific semantics, but the schema already carries that burden, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states an explicit verb-resource pair: 'List this workspace's competitor roster,' and specifies what each entry includes (relationship and confirmed/suggested status). This makes the tool's purpose unambiguous and distinguishes it from related siblings like search_console_set_competitor and list_competitor_watches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to call the tool: it returns per-workspace roster data, explains that suggestions come from competitor watches and probe answers, and notes that they are inert until confirmed. It does not explicitly name alternatives or state when not to use it, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_search_console_list_queriesARead-onlyIdempotentInspect
List Search Console queries for the connected property with their gap-analysis bucket, current and prior 28-day impressions, clicks and average position, plus the page that ranks for each. The buckets are not interchangeable: only comparison queries justify new content, striking_distance means edit the page that already ranks, and gap means a human decides. Every response carries a caveat about Google withholding low-volume queries, which must not be read as absence of demand.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (default 100) | |
| bucket | No | comparison = someone is shopping, the only bucket that may produce a new page or post. striking_distance = we rank 5-20 already, so edit that page and never write a second one. gap = real demand with nothing of ours ranking, a human triages it. other = brand terms and noise. | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as read-only, idempotent, and non-destructive, and the description adds meaningful behavioral context beyond that. It warns that Google withholds low-volume queries, clarifies that absence of data must not be read as absence of demand, and explains the decision implications of each bucket.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: three sentences that front-load the core listing behavior, then add the decision-critical bucket definitions and the data caveat. Every sentence contributes information an agent needs for correct interpretation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description adequately covers the return shape, including bucket, impression periods, clicks, position, and ranking page. It also covers the important caveat about missing query data, making it complete enough for an agent to invoke the tool and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with limit and bucket already well described in the schema. The description reinforces the bucket semantics but does not clarify workspaceId, which remains undocumented; it also adds no new parameter-level details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: listing Search Console queries for the connected property, and it enumerates the returned fields (bucket, impressions, clicks, average position, ranking page). It is clearly differentiated from unrelated list tools by the gap-analysis bucket focus, though it does not explicitly name or contrast any sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong operational guidance for interpreting buckets, explaining which bucket justifies new content, which calls for editing an existing page, and which requires human triage. However, it does not explicitly state when to choose this tool over related Search Console siblings like search_console_get_demand or search_console_dead_pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_search_console_set_competitorBIdempotentInspect
Add a competitor to this workspace's roster, or change an existing one's relationship or status. Confirming an entry is what makes a comparison page suggestable for it: being named by an AI engine shows a tool was mentioned, never that a buyer weighs it against this workspace. Relationship never controls whether a page is worth writing, only what it says: the versus query gets typed either way, and a page that strawmans an integration partner reads as dishonest to the people who use both.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Tool name, e.g. "HeyReach" | |
| status | No | confirmed (default) makes the entry count as a competitor, which is what lets a page be suggested for it. dismissed keeps the name out of suggestions permanently, so a tool an AI engine keeps naming stops coming back. | |
| workspaceId | No | ||
| relationship | Yes | rival = a buyer could pick it instead of you, so its page compares honestly. complement = you ship an integration with it, so its page argues composition rather than a scoreboard. substrate = the platform you run on or plug into, so its page explains the boundary. | |
| blockedReason | No | Set to forbid publishing about this tool, with the reason (a partner, an employer, an ongoing deal). Pass null to clear an existing block; omit to leave it as it is. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is non-read-only, non-destructive, and idempotent. The description adds meaningful behavioral nuance beyond those annotations: it explains that confirming an entry is what makes a comparison page suggestable and clarifies the semantic consequences of relationship values. This helps an agent understand the side effects of the operation without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is an effective front-loaded summary, but the subsequent two sentences are long and dense, mixing conceptual explanation with behavioral guidance. The content is relevant, but it could be tightened. It is not as efficient as it could be, though it is not bloated with filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the operation's conceptual model and ties into the schema well, but it misses guidance on when to use this tool compared to related competitor-watch tools. With no output schema, the description also does not hint at what the tool returns. For a mutation with 5 parameters and only 2 required, the description is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high at 80%, so the baseline is 3. The description goes beyond the schema by explaining the real-world meaning of relationship values ('rival = could pick it instead of you', 'complement = integration', 'substrate = platform you run on') and the status concept ('confirmed' vs 'dismissed'). This adds value in understanding how to choose the right enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the operation: 'Add a competitor to this workspace's roster, or change an existing one's relationship or status.' It names the resource (competitor roster) and the actions (add/change), which is specific and understandable. It does not explicitly distinguish itself from sibling tools like campaignstack_create_competitor_watch, but the focus on the search console competitor roster is different enough to orient an agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives context about what the tool is for, but it never states when to use this tool versus a sibling such as campaignstack_create_competitor_watch or campaignstack_search_console_list_competitors. There are no explicit alternatives, exclusions, or conditions that would help an agent decide between this and related roster-management tools. Usage 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_search_console_statusARead-onlyIdempotentInspect
Check whether a Search Console property is connected to this workspace, and when it last synced. Returns connected: false with a hint when no property is mapped. Connecting requires OAuth in the dashboard (verified domain ownership), so it cannot be done from here.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
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 valuable behavioral detail beyond that: it specifies the connected: false response shape with a hint when no property is mapped, and it discloses the OAuth/dashboard limitation. This gives an agent accurate expectations for both success and failure cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, each earning its place: the first states the core purpose, the second describes the unconnected return behavior, and the third explains the OAuth constraint. The most important 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with one optional parameter and no output schema, the description covers what an agent needs: what it checks, what the failure response looks like, and what actions are out of scope. No critical behavioral or return information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the single workspaceId parameter with a clear description, so schema coverage is 100%. The tool description itself does not add parameter-level meaning, but it does not need to because the schema already carries the necessary information. This meets the baseline rather than exceeding it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise operation: check whether a Search Console property is connected and when it last synced. It clearly distinguishes itself from related search_console_* tools by describing a status check rather than a sync or mutation, and it explicitly notes that connecting cannot be done from here.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when this tool is relevant: when an agent needs to know connection status or last-sync time. It also provides an explicit exclusion by stating that OAuth-based connection must happen in the dashboard, not through this tool. It does not name or route to a specific alternative tool, 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_search_console_syncAIdempotentInspect
Pull fresh Search Console data for the connected property now, rebuilding the 28-day query rollups and the long-history page rows. Free (Google charges nothing per call). A daily job already does this, so use it when you need data newer than the last sync rather than on every read. Google's own data lags 2 to 3 days, so syncing more often does not produce newer numbers.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as non-readOnly, idempotent, and non-destructive. The description adds valuable behavioral context: it rebuilds specific rollups and page rows, is free, and will not produce fresher data beyond Google's 2-3 day lag. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four focused sentences, each earning its place: the action, the cost, the existing daily cadence, and the upstream data limitation. The core 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-optional-parameter sync tool with no output schema, the description covers the trigger, side effects, cost, freshness constraints, and relationship to the existing scheduled job. An agent has enough context to select and invoke it correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the single optional workspaceId parameter is already documented in the schema, including the distinction between user keys and workspace keys. The description adds no parameter-specific detail, but none is needed given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Pull') and resource ('fresh Search Console data'), then names the concrete outputs ('28-day query rollups' and 'long-history page rows'). This clearly distinguishes it from the many getter/list sibling tools by framing it as an active sync operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use it: when data newer than the last sync is needed, not on every read. It also explains that a daily job already handles this and that Google lags 2-3 days, giving strong, actionable context for deciding whether invoking this tool is worthwhile.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_search_leadsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | A person's name, an email address, or a LinkedIn profile URL. Job titles are not searchable here. | |
| cursor | No | ||
| companyId | No | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_requestADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_gmailAInspect
Send an email via Gmail using a connected Google account. Requires a Google account to be connected and linked to the workspace. Use the Google integrations settings in the app to connect one first. If googleAccountId is omitted, uses the first connected Google account linked to the workspace. Returns the Gmail messageId and threadId on success. Provide htmlBody for rich formatting; body is used as the plain-text fallback. Optional attachments are passed as public URLs and downloaded server-side.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Recipient email address | |
| body | Yes | Plain-text email body | |
| subject | Yes | Email subject line | |
| htmlBody | No | Optional HTML email body (used instead of body for rich formatting) | |
| attachments | No | Up to 5 files to attach (18 MB total). Downloaded server-side into storage before sending. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | No | Google account ID to send from. Defaults to the first connected Google account linked to the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explaining the server-side download of attachments, the plain-text fallback behavior of body when htmlBody is provided, and the return of Gmail messageId/threadId on success. It also clearly signals the external side effect of sending an email, consistent with openWorldHint=true and readOnlyHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no wasted words. It front-loads the core action, then covers prerequisites, default behavior, return value, and attachment handling in a compact and logical order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema, the description still explains what is returned on success. It covers prerequisites, default account selection, HTML/plain-text behavior, attachments limits and download semantics, making it complete enough for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful behavioral detail: body serves as the plain-text fallback to htmlBody, attachments are downloaded server-side, and the return value includes messageId/threadId. This supplements the schema descriptions without repeating them verbatim.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends an email via Gmail using a connected Google account, with a specific verb, resource, and channel. It distinguishes itself from sibling messaging tools like campaignstack_send_message and campaignstack_send_inmail by explicitly naming Gmail as the delivery mechanism.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on prerequisites: a Google account must be connected and linked to the workspace, and it explains the default account selection behavior when googleAccountId is omitted. It does not explicitly name alternatives or state when not to use this tool versus send_message/send_inmail, but the Gmail-specific wording 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_send_inmailADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_messageADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| attachments | No | Up to 5 files to attach (images or documents). Downloaded server-side and validated against the LinkedIn attachment policy. | |
| conversationRef | Yes | ||
| dangerouslyBypassSafetySystem | No |
TDQS
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.
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.
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.
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.
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.
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_seo_get_advisoryARead-onlyIdempotentInspect
Get the latest completed audit's top recommendations as an action list (up to 5, rank order). This is the same content the weekly report email carries; nothing is withheld.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
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 by specifying the output cap of 5 items, rank ordering, and the guarantee that the content matches the weekly report email with nothing withheld.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the action and output format, then adds one clarifying completeness guarantee. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one optional parameter and no output schema, the description is largely sufficient: it states the data source, output type, item limit, ordering, and completeness. The only minor gap is not addressing what to do when no completed audit exists, such as pointing the agent to campaignstack_seo_run_audit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, workspaceId, is already clearly described as required for user keys while workspace keys are bound. The tool description adds no additional parameter-specific 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the exact action ('Get'), the specific resource ('latest completed audit's top recommendations'), and the output format ('action list, up to 5, rank order'). This is specific enough to distinguish it from the sibling campaignstack_seo_get_latest_report, which would return the full report rather than the capped recommendations list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: retrieve the top action items from the most recent completed audit. However, it does not explicitly name alternatives such as campaignstack_seo_get_latest_report or campaignstack_seo_run_audit, nor does it state when not to use this tool, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_seo_get_latest_reportARead-onlyIdempotentInspect
Get the latest SEO audit report for a workspace: run status, category scores (technical/content/GEO readiness/AI visibility/overall), Core Web Vitals (performance: real-user CrUX or Lighthouse lab), Google SERP presence aggregates (serpSummary), every finding with guidance, and prioritized recommendations incl. before/after copy rewrites; kind=content_gap recommendations name pages to create/expand based on what outranking pages cover. Non-terminal status means the run is still in progress.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
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 useful behavioral context by explaining that non-terminal status indicates an in-progress run and by detailing the report contents, which helps an agent interpret status and results correctly without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a long, dense sentence, but every clause adds a meaningful detail about the report's contents. It front-loads the core purpose before enumerating sections, and the closing status note earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Since there is no output schema, the description carries the burden of explaining return values, and it does so thoroughly: run status, category scores, Core Web Vitals source, SERP aggregates, findings, and recommendations with content_gap nuance. For a read-only tool with one optional parameter, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single optional workspaceId, so the schema already documents the parameter. The description only repeats the workspace scope and adds no format, source, or binding details beyond what the schema provides, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Get' and the resource 'latest SEO audit report for a workspace,' then enumerates the report's contents. This clearly separates it from sibling tools like seo_run_audit, seo_get_advisory, and seo_get_visibility without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'latest' and the note that non-terminal status means the run is still in progress give an agent clear context for when this read is appropriate. However, it does not explicitly name alternatives or exclusion conditions, so it stops short of full sibling-routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_seo_get_visibilityARead-onlyIdempotentInspect
Get AI-visibility probe results from the latest completed audit: probeSummary aggregates over the whole battery (per-engine totals, mention types, top competitors), serpSummary (the Google mirror: same buyer questions checked on the real SERP - top-10 presence, top-3 count, snippet ownership), plus up to limit (default 100, max 500) per-prompt × per-engine rows with classification, positions, competitors, and citations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max per-prompt probe rows returned (default 100); probeSummary always covers the full battery | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), and the description adds genuine behavioral context beyond that: the data is scoped to the latest completed audit, `limit` caps only the per-prompt rows while 'probeSummary always covers the full battery', and the probeSummary/serpSummary contrast explains the data's dual source (AI probe battery vs Google SERP mirror). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The primary purpose is front-loaded in the first clause, and all subsequent detail about probeSummary, serpSummary, and limit behavior is useful rather than padding. The cost is a single long sentence with nested parentheticals that is denser to parse than ideal, but no element is wasted and the length is justified by the complexity of the return payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values and does so thoroughly, enumerating probeSummary fields (per-engine totals, mention types, top competitors), serpSummary fields (top-10 presence, top-3 count, snippet ownership), and per-row contents. Remaining gaps: `workspaceId` semantics are unexplained, the no-completed-audit-yet edge case is unaddressed, and the overlap with campaignstack_seo_get_latest_report is unresolved.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: `limit` is documented in the schema, but `workspaceId` has no schema description. The tool description reinforces limit's default/max and adds the 'per-prompt × per-engine' framing that clarifies what the limit applies to, slightly exceeding the schema. However, it adds nothing about `workspaceId`, which remains undocumented in both the schema and the description, so the description does not fully compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get AI-visibility probe results from the latest completed audit', and concretizes it by enumerating the payload sections (probeSummary, serpSummary, per-prompt rows with classification, positions, competitors, citations). This is clearly a read operation for visibility probe data, distinct from the many create/update/list siblings. It stops short of a 5 because it never names or contrasts an overlapping sibling such as campaignstack_seo_get_latest_report or campaignstack_seo_get_advisory, leaving some boundary inference to the agent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The recency qualifier 'from the latest completed audit' implies the tool only applies to the most recently finished audit, and the level of payload detail implies it serves visibility-analysis queries. However, there is no explicit when-to-use/when-not-to-use guidance and no alternative tools are named. The agent must infer the boundary against campaignstack_seo_get_latest_report, campaignstack_seo_get_advisory, and campaignstack_seo_run_audit on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_seo_list_promptsARead-onlyIdempotentInspect
List the workspace's AI-visibility probe prompts (buyer questions asked to AI assistants each audit), with source (auto = generated from ICP data, user = hand-written), active state, and brand detection terms. Also returns the cost state: weekly-run settings, overagePromptCount, weeklyOverageCredits (per week when the overage opt-in is on), and perAuditProbeCredits for a manual audit at the current set.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace ID (required for user keys; workspace keys are bound) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, and non-destructive behavior. The description adds useful behavioral context by explaining what data is returned, what 'source' means, and clarifying cost-state semantics such as weeklyOverageCredits and perAuditProbeCredits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the primary listing purpose and then adds the secondary cost-state returns, with parentheticals that clarify technical terms without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and only one optional parameter, the description provides enough detail about return contents (prompts, source, active state, brand terms, cost settings) for an agent to select and invoke the tool correctly. It doesn't discuss pagination or response structure, but for this simple read-only list tool, the provided context is strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter (workspaceId) is already well-documented in the schema. The tool description adds no new parameter-specific meaning, so the baseline of 3 is appropriate since 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the workspace's AI-visibility probe prompts, with specific fields (source, active state, brand detection terms) and cost state details. This is a specific verb+resource combination that distinguishes it from the many other list tools and from seo_update_prompts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes its use case clear: when you need to view AI-visibility probe prompts and associated cost/run settings. It doesn't explicitly name alternatives or exclusions, but the read/list nature is evident from the phrasing and contrasts implicitly with update/run siblings, providing adequate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_seo_run_auditAInspect
Start an SEO & AI-visibility audit of the workspace's website: crawls up to 30 pages, evaluates the versioned SEO/GEO ruleset, writes AI recommendations, and probes AI assistants (ChatGPT/Claude/Perplexity) with every ACTIVE buyer-intent prompt. Also fetches Core Web Vitals (PageSpeed Insights, free) and checks the same buyer questions on Google (SERP presence, first 50 prompts, charged per check), feeding content-gap recommendations from pages that outrank the site. Charges credits: audit base + active prompts × engines × per-call cost + SERP checks, so large prompt sets are expensive by design. One concurrent run per workspace; big batteries drain over hours via the probe queue. Poll campaignstack_seo_get_latest_report for progress/results.
| Name | Required | Description | Default |
|---|---|---|---|
| websiteUrl | No | Website to audit; defaults to the workspace's saved website URL | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnly=false, idempotent=false, destructive=false, so the description carries the disclosure burden and does it thoroughly. It reveals that the tool crawls, writes AI recommendations, probes external engines, checks SERP, charges credits, enforces one concurrent run, can take hours, and that results must be fetched via the report tool. This is rich, non-obvious behavioral context beyond any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries operational value: scope, engines, cost model, concurrency, duration, and result retrieval. It is front-loaded with the core purpose, then layers constraints and follow-up. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex, side-effectful, cost-incurring tool with no output schema and minimal parameter docs, the description covers what the tool does, what it costs, how long it may take, its concurrency limit, and exactly where to get progress/results. An agent has enough information to invoke it correctly and manage expectations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: websiteUrl is documented, workspaceId is not. The description compensates by stating websiteUrl defaults to the workspace's saved URL and repeatedly references workspace scoping ('the workspace's website', 'one concurrent run per workspace'), letting the agent infer workspaceId selects the target workspace. It adds meaning beyond the schema but does not fully spell out workspaceId semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific action and resource: 'Start an SEO & AI-visibility audit of the workspace's website.' It names the concrete scope (30 pages, ruleset, AI assistants, SERP) and differentiates itself from the reporting sibling by pointing to campaignstack_seo_get_latest_report for results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states when this is the tool to call: when starting a website audit. It also gives practical constraints around concurrency ('One concurrent run per workspace'), cost, and follow-up polling. It does not explicitly enumerate when-not-to-use alternatives like campaignstack_analyze_website or campaignstack_seo_get_advisory, 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_seo_update_promptsADestructiveInspect
Batch-update probe prompts: add (text, 10-300 chars), edit (promptId + text), toggle (promptId + active), or delete (promptId). Up to 200 operations per call. Active prompts are unlimited (5,000 total per workspace); every active prompt is probed on each engine per audit and charged per call, so cost scales with the active set. Free weekly runs cover only the first 20 active prompts (user prompts first). Every response echoes the cost state: overagePromptCount and weeklyOverageCredits (what the set costs per week when the overage opt-in is on) plus perAuditProbeCredits — check it after adding prompts so charges are never a surprise. Use campaignstack_seo_list_prompts to find prompt IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| operations | Yes | ||
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses important behavioral details: operation limits (up to 200), cost scaling with active prompts, free-run coverage of only the first 20 active prompts, and the cost-related response fields (overagePromptCount, weeklyOverageCredits, perAuditProbeCredits). This is substantial value-add over the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: operation semantics first, then limits, then cost implications, then response fields, then a pointer to the sibling tool for IDs. Every sentence contributes useful information and there is minimal fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batch mutation tool with no output schema, the description covers input rules, cost behavior, response cost fields, and prompt ID discovery. It falls slightly short on describing the overall response shape beyond cost fields and does not clarify workspaceId usage, but overall it is unusually complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description compensates for the low schema description coverage by explaining which parameters each operation requires, including text length constraints and the promptId/active relationships. However, workspaceId is not explained in the description, leaving one optional parameter without semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Batch-update probe prompts' and then enumerates the four supported operations (add, edit, toggle, delete) with their required inputs. This clearly distinguishes it from siblings like campaignstack_seo_list_prompts and campaignstack_seo_run_audit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use this tool and explicitly points to campaignstack_seo_list_prompts as the way to find prompt IDs. It does not provide explicit 'when not to use' exclusions, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_seo_white_label_reportAIdempotentInspect
Unlock white-label distribution of a FREE weekly audit report (one-time charge: the price the same audit costs when run manually, base + the run's real probe battery). Share links and PDF exports exist only for white-labeled runs; the unlock re-renders the data already collected with the workspace's branding, nothing is re-crawled. Manually paid audits are white-labeled already and never need this. Defaults to the latest completed free weekly run.
| Name | Required | Description | Default |
|---|---|---|---|
| runId | No | Run to unlock; defaults to the latest completed free weekly run | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses important behavioral context: it involves a one-time charge, it does not re-crawl, it re-renders existing data, and share links/PDF exports only exist for white-labeled runs. This meaningfully enriches the idempotentHint=true and destructiveHint=false annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and then adds necessary behavioral and exclusion details. Each sentence contributes value, though the parenthetical pricing explanation is slightly dense and could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two optional parameters and no output schema, the description covers the core behavior, cost, side effects, default behavior, and when it is unnecessary. The main remaining gap is not stating what the tool returns or how the agent can confirm the unlock succeeded.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents runId but leaves workspaceId undescribed. The description adds useful context by mentioning defaulting to the latest completed free weekly run and tying the operation to 'the workspace's branding,' which gives some meaning to workspaceId. However, it does not clarify whether workspaceId is required, what values it accepts, or what happens when no free run exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action: 'Unlock white-label distribution of a FREE weekly audit report.' It distinguishes this from related flows by explaining that it re-renders already-collected data with workspace branding and 'nothing is re-crawled,' and that manually paid audits are already white-labeled and never need this.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: to enable share links and PDF exports for white-labeled runs. It also gives a clear when-not: 'Manually paid audits are white-labeled already and never need this.' However, it does not name specific sibling tools like seo_run_audit or export_craft_audit, so an agent still has some routing to infer.
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_workspaceAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | Yes | ||
| linkedinAccountId | Yes |
TDQS
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.
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.
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.
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.
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.
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_watcherAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| enabled | Yes | ||
| workspaceId | No | ||
| linkedinAccountId | Yes |
TDQS
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.
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.
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.
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.
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.
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_ad_autopilotAIdempotentInspect
Set an ad campaign's automation mode: 'copilot' (AI suggests, human acts) or 'autopilot' (AI acts within explicitly granted capabilities). Autopilot requires an autopilotConfig with a goal and capability booleans; its optional budgetCeiling is validated server-side against the ad account's monthly spend ceiling (AD_BUDGET_CEILING_EXCEEDED when over). AI-generated creatives still require approval before publish, even on autopilot.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace | |
| adCampaignId | Yes | ||
| automationMode | Yes | 'copilot' = AI suggests only; 'autopilot' = AI acts within the granted capabilities | |
| autopilotConfig | No | Required when automationMode is 'autopilot' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses two substantive behaviors an agent cannot infer: the server-side budgetCeiling validation against the account's monthly spend ceiling with the specific AD_BUDGET_CEILING_EXCEEDED error, and the caveat that AI-generated creatives still require approval before publish even on autopilot. These are exactly the kind of failure-mode and expectation-setting details that matter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero filler: purpose is front-loaded in sentence one, the config requirement and validation behavior follow, and the creative-approval caveat closes. The structure mirrors how an agent should reason about the call — what it does, what it requires, and what to watch out for.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a conditional nested object and no output schema, the description covers mode semantics, config requirements, a failure mode, and a behavioral caveat — enough to invoke it correctly. It stops short only of describing the return value and how an autopilotConfig is handled when mode is 'copilot', which are minor gaps given the schema and annotations carry the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80% (only adCampaignId is undocumented, and its name is self-explanatory). The description adds genuine value beyond the schema by explaining that budgetCeiling is validated server-side against the account's monthly spend ceiling and reinforcing the dependency between automationMode='autopilot' and the autopilotConfig fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Set an ad campaign's automation mode') and precisely defines the two modes — 'copilot' (AI suggests, human acts) vs 'autopilot' (AI acts within explicitly granted capabilities) — differentiating it from the more generic campaignstack_update_ad_campaign sibling. An agent can tell exactly what this tool is for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description conveys clear operational context: it states when the tool applies (switching automation mode) and gives the conditional rule that autopilot requires autopilotConfig with a goal and capability booleans. It doesn't explicitly name alternative tools or state when not to use it, but the mode semantics and config requirements make the intended usage unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_set_agent_exclusionsADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| exclusions | Yes | The 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. | |
| workspaceId | No | Defaults to the API key's workspace | |
| signalAgentId | Yes |
TDQS
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.
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.
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.
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.
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.
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_google_app_passwordAIdempotentInspect
Set or update the Google App Password for a connected Google account. Validates the App Password via IMAP before storing it encrypted. Required for email warmup (MailReach integration) and future IMAP-based features. Generate an App Password at myaccount.google.com > Security > App Passwords. IMAP must be enabled in Gmail settings. Returns { success: true, status: 'valid', authenticatedEmail } on success. Use campaignstack_list_integrations to find valid googleAccountId values.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Email address to associate with this App Password (defaults to the account's primary email). Used to verify IMAP authentication matches the correct account. | ||
| appPassword | Yes | 16-character Google App Password (without spaces). Generate one at myaccount.google.com > Security > App Passwords. | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| googleAccountId | Yes | Google account ID to configure the App Password for. Use campaignstack_list_integrations to find valid account IDs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotentHind and non-read-only, and the description goes beyond them by describing IMAP validation before encrypted storage, the success return shape, and prerequisites. This gives the agent a clear behavioral model of what happens on success. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Six short sentences, each carrying distinct value: purpose, validation/storage, use case, how to generate the password, IMAP prerequisite, and success response. Front-loaded with the core action and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a write tool with no output schema, it covers prerequisites, return contract, and lookup path for required IDs, so an agent can call it correctly. Remaining gaps like failure handling are minor given the idempotent annotation. Complete enough for autonomous invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already documents appPassword format, googleAccountId lookup, email verification, and workspaceId defaulting. The description mostly repeats or echoes those schema notes (e.g., list_integrations, Google App Passwords page), adding little new parameter-specific meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Set or update') and resource ('Google App Password for a connected Google account'), plus the validation and storage behavior. This clearly distinguishes it from other set_* siblings like set_private_proxy and positions it as the prerequisite for warmup features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says this is required for email warmup (MailReach integration) and future IMAP features, giving concrete when-to-use context. It also directs the agent to campaignstack_list_integrations for valid IDs and lists IMAP/App Password prerequisites. It doesn't spell out when-not-to-use alternatives, so not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_set_lead_magnet_scheduleAIdempotentInspect
Turn the weekly magnet search on or off and optionally replace the topic selection it reuses. Every weekly run charges the standard run price (500 credits) and skips the week when credits are exhausted or another run is in flight.
| Name | Required | Description | Default |
|---|---|---|---|
| topics | No | Topic selection the weekly run reuses; omit to keep the stored one | |
| enabled | Yes | Turn the paid weekly search on or off | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses meaningful side effects: every weekly run costs 500 credits and is skipped when credits are exhausted or another run is in flight. This is valuable operational 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences cover the action, the optional parameter behavior, and key side effects with no filler. The core operation is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter mutation, the description provides enough context to understand the action, the optional topics behavior, and the cost/skip implications. The only notable gap is the undocumented workspaceId parameter, but overall the tool is well contextualized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes enabled and topics, and the description reinforces the semantic of topics as the reused selection. However, workspaceId has no description in either the schema or the description, and the description adds little parameter-specific meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('turn the weekly magnet search on or off') and the optional resource modification ('replace the topic selection it reuses'). It distinguishes the tool from a read-only schedule getter, though it does not explicitly contrast it with the sibling update_lead_magnet_topics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool's purpose: toggling the weekly schedule and optionally updating the topics it reuses. However, it provides no explicit guidance about when to prefer this over update_lead_magnet_topics or get_lead_magnet_schedule, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_set_private_proxyAIdempotentInspect
Set (or replace) a private 'bring-your-own' HTTP proxy on a LinkedIn account. The proxy is TESTED first; if it cannot reach LinkedIn, NOTHING changes (the current proxy keeps serving runs) and an error is returned. On success the account uses your proxy and any shared pool proxy is released. Use campaignstack_list_accounts to find valid accountId values (platform: 'linkedin').
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | ||
| port | Yes | ||
| password | No | ||
| username | No | ||
| accountId | Yes | ||
| workspaceId | Yes |
TDQS
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 that the proxy is tested first, that failures leave the current proxy untouched, and that success releases any shared pool proxy. These are important side effects and atomicity guarantees an agent needs to reason about safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, with the core action first, then the critical test-first behavior, then the success side effect and account lookup pointer. Every sentence adds necessary information with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key behavioral contract: preconditions (accountId lookup), failure mode, success side effects, and the scope of the change. It is slightly incomplete on optional proxy auth parameters and the success return shape, but an agent can confidently select and invoke the tool with the information given.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining parameters. It only explains accountId via the list_accounts pointer; host, port, username, and password are left to inference from the schema field names and types. The optional username/password authentication semantics deserve explicit mention.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-resource pair ('Set (or replace) ... HTTP proxy on a LinkedIn account') and clearly differentiates the operation from sibling get/remove proxy tools. The 'bring-your-own' and 'private' qualifiers further pin down exactly what the tool manages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear practical guidance by telling the agent to use campaignstack_list_accounts with platform 'linkedin' to find valid accountId values. It does not explicitly contrast with remove_private_proxy or get_private_proxy, but the set/replace framing and tested-proxy behavior make the appropriate context obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_set_workflow_accountsAIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Platform of the account pool to set | |
| accountIds | Yes | Account ids for the workflow's act/rotation pool. Empty array clears the pool; a pool-less workflow never dispatches actions on this platform. | |
| workflowId | Yes |
TDQS
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.
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.
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.
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.
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.
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_source_lead_magnet_postAIdempotentInspect
Source a magnet candidate: provisions a post-engagement signal agent watching the post, so its commenters flow into the existing engagement machinery as leads. Sourcing an already-sourced post is a no-op. Requires a connected LinkedIn account. Use campaignstack_list_lead_magnet_posts to find junction IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| junctionId | Yes | Candidate junction ID from campaignstack_list_lead_magnet_posts | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal idempotent, non-read-only, and non-destructive behavior, and the description adds behavioral detail beyond that: it provisions an agent, states that re-sourcing is a no-op, and requires a connected LinkedIn account. It does not contradict the annotations. It omits cost/reversibility details, but the core side effect and prerequisite are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: the core behavior, idempotent no-op behavior, and prerequisite/ID lookup routing. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-param action with annotations and no output schema, the description gives enough to invoke correctly: required ID source, LinkedIn prerequisite, and side-effect/no-op behavior. The notable gaps are the undocumented workspaceId and no indication of what the tool returns, but the invocation path is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: junctionId is documented in the schema, but workspaceId has no description. The description mainly repeats that junction IDs come from campaignstack_list_lead_magnet_posts without adding new semantics for either parameter, and it does not compensate for the undocumented workspaceId.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action, 'Source a magnet candidate', then defines it concretely: it provisions a post-engagement signal agent so commenters become leads. This clearly differentiates it from sibling tools like campaignstack_discover_lead_magnets, campaignstack_list_lead_magnet_posts, and campaignstack_dismiss_lead_magnet_post.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context: use this when you want to source a lead-magnet post and turn its commenters into leads, and it routes the agent to campaignstack_list_lead_magnet_posts for junction IDs. It also states the LinkedIn-account prerequisite. It does not explicitly say when not to use it or name alternative actions such as discover/dismiss, 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_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').
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | Yes | ||
| workspaceId | Yes | ||
| maxConnections | No | Maximum number of connections to export (default 2500) |
TDQS
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.
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.
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.
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.
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.
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_approvalAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | The app route or context where the feedback originates (e.g. '/dashboard/campaigns' or 'mcp-agent') | |
| message | Yes | The feedback body text | |
| category | Yes | Feedback category: bug (something broken), feature (new capability request), question (how-to), other | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_hubspotAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional outreach note to log on the contact's HubSpot timeline | |
| leadId | Yes | ||
| leadSource | No | Lead source table (defaults to trying global, then private) | |
| syncCompany | No | Associate the lead's company when a real domain resolves (default true) | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| lifecycleStage | No | HubSpot lifecyclestage to set (e.g. 'lead'). NEVER sent unless provided — sending it can downgrade an existing customer contact |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| automationId | Yes |
TDQS
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.
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.
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.
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.
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.
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_exclusionAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | Whether the exclusion should be active | |
| exclusionId | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_scoringAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| icpId | Yes | ||
| leadIds | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| leadIds | No | ||
| workflowId | Yes |
TDQS
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.
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.
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.
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.
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.
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_campaignAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes |
TDQS
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.
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.
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.
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.
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.
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_unlink_lead_profileAInspect
Detach a platform profile from a PRIVATE lead into a new standalone lead in the same workspace. Scraped data is never deleted; the profile row is repointed at the new lead. Returns the new lead's id. API-key callers may only unlink on private leads.
| Name | Required | Description | Default |
|---|---|---|---|
| leadId | Yes | Private lead id currently holding the profile | |
| platform | Yes | Platform of the profile being detached | |
| workspaceId | No | Defaults to the API key's workspace |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only indicate the operation is not read-only and not idempotent; the description adds meaningful behavioral detail by stating scraped data is never deleted, the profile row is repointed, and the new lead's id is returned. This aligns with annotations, so 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: the main action is front-loaded, followed by data-safety behavior, return value, and an API-key constraint. Every sentence provides necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only three parameters and no output schema, the description covers the mutation's effect, data preservation, return value, workspace scope, and caller restriction. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all three parameters with 100% coverage, including the workspaceId default. The description reinforces workspace scope and the private-lead requirement but does not add significant parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Detach,' and clearly identifies the resource and transformation: moving a platform profile from a PRIVATE lead into a new standalone lead. It is easily distinguished from the sibling link_lead_profile operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives useful context: the operation applies to private leads and API-key callers may only unlink on private leads. However, it does not explicitly name the inverse sibling tool campaignstack_link_lead_profile or state when to use that alternative instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_unschedule_content_postAIdempotentInspect
Moves a 'scheduled' content post back to 'draft' status, clearing the scheduled time. Use campaignstack_schedule_content_post to reschedule it.
| Name | Required | Description | Default |
|---|---|---|---|
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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_ad_campaignAIdempotentInspect
Update an ad campaign. This is a WRITE-THROUGH to LinkedIn. Pause/resume (patch.status: 'paused'/'active'), archive, rename, change budgets, bid strategy, schedule, or targeting via the patch object; only provided fields change. Budgets are money objects: { amount: string, currencyCode: string }. Spend ceilings and the linkedin_ads feature flag are enforced server-side. Use campaignstack_list_ad_campaigns to find IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| patch | Yes | Fields to change; only provided fields are updated | |
| platform | No | Ad platform. Only 'linkedin' is supported today. | |
| workspaceId | No | Defaults to the API key's workspace | |
| adCampaignId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavior beyond annotations: it's a WRITE-THROUGH to LinkedIn, only provided fields change, budgets use a money object format, and spend ceilings plus the linkedin_ads feature flag are enforced server-side. It does not contradict the idempotentHint or destructiveHint annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but efficient: the primary action is front-loaded, followed by the patch capabilities, financial format note, server-side constraints, and ID lookup pointer. Every sentence contributes useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the key operational context: real write-through behavior, partial update semantics, budget format, server-side enforcement, and how to locate the campaign ID. It does not describe response/return values, but this is minor given the annotations and schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (75%) and most parameter semantics are already in the schema, including patch fields, status enum, and money object structure. The description reinforces these details but does not add substantial new parameter meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Update an ad campaign', clearly identifying the verb, resource, and scope. It enumerates specific capabilities (pause/resume, archive, rename, budgets, bid strategy, schedule, targeting), which distinguishes it from generic update_campaign and related create/get/list ad tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It says to use campaignstack_list_ad_campaigns to find IDs, providing a clear prerequisite for using this tool. Context around the patch object and write-through behavior implies typical update scenarios, though it does not explicitly state when to prefer this over dedicated archive/pause siblings or other alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_update_brand_identityAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| fontStyle | No | Font style description (e.g. bold sans-serif, geometric) | |
| voiceGuide | No | ||
| accentColor | No | Accent brand color as hex (e.g. #ff6b35) | |
| workspaceId | No | Defaults to the API key's workspace | |
| primaryColor | No | Primary brand color as hex (e.g. #1a2b3c) | |
| secondaryColor | No | Secondary brand color as hex (e.g. #4d5e6f) | |
| styleDescriptors | No | Style keywords (e.g. clean, minimal, corporate) |
TDQS
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.
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.
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.
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.
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.
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_calendar_eventAInspect
Update (reschedule) an existing Google Calendar event. All fields are optional; only the provided fields are changed (PATCH semantics). When attendeeEmails are provided, they replace the existing attendee list and Google sends update notifications automatically (sendUpdates=all). Requires a Google account to be connected and linked to the workspace. If googleAccountId is omitted, uses the first connected Google account linked to the workspace. Returns { eventId, htmlLink } on success.
| Name | Required | Description | Default |
|---|---|---|---|
| endTime | No | New event end time (ISO 8601, e.g. '2026-06-17T15:00:00Z') | |
| eventId | Yes | Google Calendar event ID to update | |
| summary | No | New event title | |
| location | No | New event location (address, room name, or video link) | |
| startTime | No | New event start time (ISO 8601, e.g. '2026-06-17T14:00:00Z') | |
| description | No | New event description / agenda | |
| workspaceId | No | Workspace ID (defaults to the bound workspace) | |
| attendeeEmails | No | New list of attendee email addresses (replaces existing attendees). Google Calendar sends update notifications automatically. | |
| googleAccountId | No | Google account ID to use. Defaults to the first connected Google account linked to the workspace. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations by disclosing PATCH semantics, attendee-list replacement, automatic sendUpdates=all notifications, account-linking requirements, default account selection, and the success return shape. These are exactly the non-obvious behaviors an agent needs to predict side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five dense sentences with no filler. Purpose is front-loaded, and each sentence earns its place: semantics, side effects, prerequisites, default behavior, and return value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no output schema, the description covers everything needed to call it correctly: prerequisites, defaults, PATCH behavior, attendee side effects, and the success response. No obvious operational gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds important cross-parameter meaning: only provided fields are changed, attendeeEmails replaces the whole list and triggers notifications, and googleAccountId defaults to the first connected account. This is meaningful value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Update (reschedule) an existing Google Calendar event.' This clearly identifies the operation as a mutation on an existing calendar entry and distinguishes it from sibling tools like create_calendar_event and delete_calendar_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames the tool for updating existing events and explains PATCH semantics plus the Google-account prerequisite. It does not explicitly name alternatives or state when not to use it, but the context is unambiguous enough that an agent can select it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_update_campaignAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| campaignId | Yes | ||
| description | No | ||
| outreachIntents | No | Acceptable 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
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.
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.
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.
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.
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.
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_weightAIdempotentInspect
Update the weight (score impact) of a signal type for a campaign. Use campaignstack_get_campaign_weights to see current weights.
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes | ||
| signalType | Yes | ||
| scoreImpact | Yes |
TDQS
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.
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.
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.
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.
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.
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_metadataAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| notes | No | ||
| companyId | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_accountsAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| watchId | Yes | ||
| accountIds | Yes | LinkedIn account IDs the watch reads and acts with. Replaces the current selection. Use campaignstack_list_accounts to find valid IDs. |
TDQS
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.
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.
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.
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.
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.
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_postAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | ||
| tags | No | ||
| mediaIds | No | ||
| postType | No | ||
| contentPostId | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | Yes | The full profile object to store. Read the current one first, edit fields, send it back whole. | |
| workspaceId | No | Defaults to the API key's workspace | |
| readableSummary | No | ||
| linkedinAccountId | Yes | LinkedIn account id |
TDQS
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.
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.
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.
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.
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.
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_rulesAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| logic | No | How 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 |
| rules | Yes | Complete replacement rule set | |
| exclusionId | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_icpAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| icpId | Yes | ||
| titles | No | ||
| keywords | No | ||
| industries | No | ||
| seniorities | No | ||
| companySizes | No |
TDQS
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.
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.
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.
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.
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.
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_infoAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| No | |||
| phone | No | ||
| leadId | Yes | ||
| website | No | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_listAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| query | No | ||
| leadListId | Yes |
TDQS
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.
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.
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.
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.
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.
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_magnet_topicsAInspect
Edit the workspace's free-text search topics for magnet discovery. Campaign topics (from active campaigns' topic tags) are always searched and cannot be removed here; user topics survive campaign changes. Returns the resolved topic union after the edit.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | Free-text search topics to add (on top of campaign topics) | |
| removeIds | No | User topic IDs to remove (campaign-derived topics cannot be removed here) | |
| workspaceId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false) already flag this as a mutating operation, and the description adds meaningful behavior beyond them: campaign topics are always searched regardless of edits, user topics persist across campaign changes, and the tool returns the resolved topic union. This gives the agent a clear mental model of post-edit state without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: the first states the action, the second clarifies constraints and persistence behavior, and the third discloses the return value. The core action is front-loaded with supporting details following logically.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, no-output-schema mutation tool, the description covers the essentials: what is edited, what cannot be edited, how user topics behave over time, and what is returned. It is slightly short on guidance about when this is the right tool among many topic/lead-magnet siblings, but the operational details an agent needs to call it correctly are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with add and removeIds already documented in the schema. The description adds modest context by framing the workspace as the edit scope (which loosely maps to workspaceId) and the 'magnet discovery' domain, but it does not meaningfully enrich parameter meaning beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Edit') and resource ('workspace's free-text search topics for magnet discovery'), making the tool's purpose immediately clear. It further distinguishes scope by carving out campaign topics as off-limits, which differentiates it from campaign-topic and search-topic listing tools even without naming a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: to manage user-contributed free-text topics rather than campaign-derived ones. It communicates an implicit exclusion ('campaign topics ... cannot be removed here') but stops short of naming alternatives like list_search_topics or get_campaign_topics, or stating when an agent should prefer those instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
campaignstack_update_lead_metadataAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| notes | No | ||
| leadId | Yes | ||
| workspaceId | No | Defaults to the API key's workspace |
TDQS
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.
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.
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.
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.
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.
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_roleAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | Only "member" can be set via MCP | |
| memberId | Yes | ||
| workspaceId | Yes |
TDQS
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.
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.
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.
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.
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.
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_preferencesAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| clear | No | ||
| value | No | ||
| category | No | ||
| workspaceId | No | ||
| weeklyReport | No |
TDQS
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.
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.
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.
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.
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.
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_personaAIdempotentInspect
Update a persona's name, description, pain points, goals, or objections. Only provided fields are updated. Returns the updated persona object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| goals | No | ||
| personaId | Yes | ||
| objections | No | ||
| painPoints | No | ||
| description | No |
TDQS
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.
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.
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.
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.
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.
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_phaseAIdempotentInspect
Update a campaign phase's name, description, objectives, phase type, or order. Only provided fields are updated. Returns the updated phase object.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| order | No | ||
| phaseId | Yes | ||
| phaseType | No | ||
| objectives | No | ||
| description | No |
TDQS
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.
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.
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.
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.
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.
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_agentAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| agentId | Yes | ||
| playbook | No | ||
| accountIds | No | ||
| responseMode | No | ||
| silenceHours | No | ||
| actAccountIds | No | ||
| publicReplyConfig | No | ||
| followUpDelaysHours | No |
TDQS
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.
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.
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.
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.
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.
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_workflowAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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_statusAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | ||
| workflowId | Yes |
TDQS
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.
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.
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.
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.
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.
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_workspaceAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| industry | No | ||
| companyName | No | ||
| workspaceId | Yes | ||
| capabilities | No | ||
| offerContext | No | ||
| outreachIntents | No | Acceptable 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. | |
| playbookSections | No | The 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. | |
| companyWebsiteUrl | No |
TDQS
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.
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.
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.
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.
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.
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_brandingAIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| brandName | No | ||
| workspaceId | No | ||
| primaryColor | No | ||
| hidePoweredBy | No |
TDQS
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.
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.
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.
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.
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.
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_whoamiARead-onlyIdempotentInspect
Returns information about the current API key: workspace name, available scopes, and key prefix. Useful for debugging permission issues.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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 tool update
- Added
campaignstack_onboard_workspace
5 tool updates
- Changed
campaignstack_create_signal_agent2 fields changed- added
Input schema / properties / followUpDelaysHoursAdded value: +{ + "items": { + "type": "number" + }, + "type": "array" +} - added
Input schema / properties / silenceHoursAdded value: +{ + "maximum": 720, + "minimum": 1, + "type": "integer" +}
- Added
campaignstack_edit_scheduled_message - Added
campaignstack_reopen_review - Added
campaignstack_set_account_owner_workspace - Changed
campaignstack_update_signal_agent3 fields changed- added
Input schema / properties / followUpDelaysHoursAdded value: +{ + "items": { + "type": "number" + }, + "type": "array" +} - added
Input schema / properties / playbookAdded value: +{ + "maxLength": 6000, + "type": "string" +} - added
Input schema / properties / silenceHoursAdded value: +{ + "maximum": 720, + "minimum": 1, + "type": "integer" +}
282 tool updates
- First observed
campaignstack_accept_draft_checkup - First observed
campaignstack_add_lead_to_external_list - First observed
campaignstack_add_lead_to_sequence - First observed
campaignstack_add_leads_to_list - First observed
campaignstack_add_manual_exclusion_urls - First observed
campaignstack_analyze_website - First observed
campaignstack_approve_ad_creative - First observed
campaignstack_approve_content_post - First observed
campaignstack_approve_review - First observed
campaignstack_archive_campaign - First observed
campaignstack_build_search_url - First observed
campaignstack_cancel_node_leads - First observed
campaignstack_check_calendar_availability - First observed
campaignstack_check_company_news - First observed
campaignstack_comment_on_post - First observed
campaignstack_connect_apollo - First observed
campaignstack_connect_hubspot - First observed
campaignstack_connect_instantly - First observed
campaignstack_count_pending_reviews - First observed
campaignstack_count_unread_notifications - First observed
campaignstack_craft_comment - First observed
campaignstack_craft_followup - First observed
campaignstack_craft_message - First observed
campaignstack_craft_note - First observed
campaignstack_create_ad_campaign - First observed
campaignstack_create_ad_creative - First observed
campaignstack_create_calendar_event - First observed
campaignstack_create_campaign - First observed
campaignstack_create_company_employee_watch - First observed
campaignstack_create_competitor_watch - First observed
campaignstack_create_connection_watch_agent - First observed
campaignstack_create_content_post - First observed
campaignstack_create_icp - First observed
campaignstack_create_lead_list - First observed
campaignstack_create_persona - First observed
campaignstack_create_phase - First observed
campaignstack_create_query_lead_list - First observed
campaignstack_create_search_watch - First observed
campaignstack_create_signal_agent - First observed
campaignstack_create_signal_watch - First observed
campaignstack_create_workflow - First observed
campaignstack_decide_playbook_proposal - First observed
campaignstack_delete_calendar_event - First observed
campaignstack_delete_campaign - First observed
campaignstack_delete_competitor_watch - First observed
campaignstack_delete_content_post - First observed
campaignstack_delete_icp - First observed
campaignstack_delete_persona - First observed
campaignstack_delete_phase - First observed
campaignstack_delete_signal_agent - First observed
campaignstack_delete_workflow - First observed
campaignstack_diagnose_lead_sourcing - First observed
campaignstack_disable_warmup - First observed
campaignstack_disconnect_integration - First observed
campaignstack_discover_lead_magnets - First observed
campaignstack_dismiss_lead_magnet_creator - First observed
campaignstack_dismiss_lead_magnet_post - First observed
campaignstack_duplicate_content_post - First observed
campaignstack_edit_and_approve_review - First observed
campaignstack_enable_warmup - First observed
campaignstack_enrich_company_info - First observed
campaignstack_enrich_lead_contact_info - First observed
campaignstack_export_craft_audit - First observed
campaignstack_extract_company_employees - First observed
campaignstack_extract_conversation_voice - First observed
campaignstack_fetch_mutual_connections - First observed
campaignstack_find_warm_paths - First observed
campaignstack_follow_profile - First observed
campaignstack_generate_ad_campaign - First observed
campaignstack_get_account - First observed
campaignstack_get_account_maintenance - First observed
campaignstack_get_ad_analytics - First observed
campaignstack_get_ad_campaign - First observed
campaignstack_get_ad_dashboard - First observed
campaignstack_get_apollo_import_progress - First observed
campaignstack_get_automation_jobs - First observed
campaignstack_get_campaign - First observed
campaignstack_get_campaign_metrics - First observed
campaignstack_get_campaign_topics - First observed
campaignstack_get_campaign_weights - First observed
campaignstack_get_company - First observed
campaignstack_get_company_metric_history - First observed
campaignstack_get_competitor_watch - First observed
campaignstack_get_contact_finder_request - First observed
campaignstack_get_content_analytics - First observed
campaignstack_get_content_post - First observed
campaignstack_get_conversation - First observed
campaignstack_get_conversation_voice - First observed
campaignstack_get_credit_balance - First observed
campaignstack_get_draft_checkup - First observed
campaignstack_get_enrichment_status - First observed
campaignstack_get_exclusions - First observed
campaignstack_get_external_import_progress - First observed
campaignstack_get_free_slots - First observed
campaignstack_get_icp_scores - First observed
campaignstack_get_inbox_unread_count - First observed
campaignstack_get_lead - First observed
campaignstack_get_lead_connections - First observed
campaignstack_get_lead_history - First observed
campaignstack_get_lead_list - First observed
campaignstack_get_lead_magnet_run - First observed
campaignstack_get_lead_magnet_schedule - First observed
campaignstack_get_lead_score_breakdown - First observed
campaignstack_get_node_activity - First observed
campaignstack_get_notification_preferences - First observed
campaignstack_get_persona - First observed
campaignstack_get_phase - First observed
campaignstack_get_platform_capabilities - First observed
campaignstack_get_playbook - First observed
campaignstack_get_playbook_proposal - First observed
campaignstack_get_private_proxy - First observed
campaignstack_get_signal_agent - First observed
campaignstack_get_signal_agent_stats - First observed
campaignstack_get_warmup_status - First observed
campaignstack_get_workflow - First observed
campaignstack_get_workflow_node_types - First observed
campaignstack_get_workflow_stats - First observed
campaignstack_get_workspace - First observed
campaignstack_get_workspace_billing - First observed
campaignstack_get_workspace_branding - First observed
campaignstack_get_workspace_metrics - First observed
campaignstack_get_workspace_voice - First observed
campaignstack_import_apollo_list - First observed
campaignstack_import_external_leads - First observed
campaignstack_import_leads_csv - First observed
campaignstack_invite_member - First observed
campaignstack_like_post - First observed
campaignstack_link_lead_profile - First observed
campaignstack_list_accounts - First observed
campaignstack_list_ad_accounts - First observed
campaignstack_list_ad_campaigns - First observed
campaignstack_list_ad_creatives - First observed
campaignstack_list_ad_lead_forms - First observed
campaignstack_list_ai_suggestions - First observed
campaignstack_list_apollo_sources - First observed
campaignstack_list_automations - First observed
campaignstack_list_campaigns - First observed
campaignstack_list_companies - First observed
campaignstack_list_company_discoveries - First observed
campaignstack_list_company_employee_watches - First observed
campaignstack_list_company_employees - First observed
campaignstack_list_company_funding_events - First observed
campaignstack_list_company_news_events - First observed
campaignstack_list_company_reviews - First observed
campaignstack_list_company_signals - First observed
campaignstack_list_competitor_watches - First observed
campaignstack_list_contact_finder_requests - First observed
campaignstack_list_content_calendar - First observed
campaignstack_list_content_posts - First observed
campaignstack_list_external_email_accounts - First observed
campaignstack_list_external_lead_lists - First observed
campaignstack_list_external_sequences - First observed
campaignstack_list_icps - First observed
campaignstack_list_inbox_conversations - First observed
campaignstack_list_integrations - First observed
campaignstack_list_invitations - First observed
campaignstack_list_lead_lists - First observed
campaignstack_list_lead_magnet_creators - First observed
campaignstack_list_lead_magnet_posts - First observed
campaignstack_list_lead_signals - First observed
campaignstack_list_leads_at_node - First observed
campaignstack_list_manual_exclusion_urls - First observed
campaignstack_list_members - First observed
campaignstack_list_notifications - First observed
campaignstack_list_pending_reviews - First observed
campaignstack_list_personas - First observed
campaignstack_list_phases - First observed
campaignstack_list_playbook_versions - First observed
campaignstack_list_search_topics - First observed
campaignstack_list_signal_agent_leads - First observed
campaignstack_list_signal_agents - First observed
campaignstack_list_signal_watches - First observed
campaignstack_list_split_optimization_logs - First observed
campaignstack_list_voice_experiment_results - First observed
campaignstack_list_webhook_templates - First observed
campaignstack_list_workflows - First observed
campaignstack_list_workspace_warmups - First observed
campaignstack_mark_all_notifications_read - First observed
campaignstack_mark_as_warmed_up - First observed
campaignstack_mark_conversation_read - First observed
campaignstack_mark_notification_read - First observed
campaignstack_optimize_split_node - First observed
campaignstack_pause_company_employee_watch - First observed
campaignstack_pause_competitor_watch - First observed
campaignstack_pause_signal_agent - First observed
campaignstack_pause_signal_watch - First observed
campaignstack_priority_enrich - First observed
campaignstack_promote_lead_magnet_creator - First observed
campaignstack_propose_playbook_change - First observed
campaignstack_queue_leads - First observed
campaignstack_refresh_company - First observed
campaignstack_refresh_inbox - First observed
campaignstack_regenerate_playbook - First observed
campaignstack_reject_ad_creative - First observed
campaignstack_reject_content_post - First observed
campaignstack_reject_draft_checkup - First observed
campaignstack_reject_review - First observed
campaignstack_remove_company_employee_watch - First observed
campaignstack_remove_lead_list - First observed
campaignstack_remove_leads_from_list - First observed
campaignstack_remove_manual_exclusion_url - First observed
campaignstack_remove_member - First observed
campaignstack_remove_private_proxy - First observed
campaignstack_remove_signal_watch - First observed
campaignstack_reply_to_comment - First observed
campaignstack_reread_review_link - First observed
campaignstack_resume_company_employee_watch - First observed
campaignstack_resume_competitor_watch - First observed
campaignstack_resume_signal_agent - First observed
campaignstack_resume_signal_watch - First observed
campaignstack_retry_content_post - First observed
campaignstack_retry_failed_entries_at_node - First observed
campaignstack_retry_failed_entry - First observed
campaignstack_retry_review - First observed
campaignstack_revert_playbook - First observed
campaignstack_revoke_invitation - First observed
campaignstack_run_draft_checkup - First observed
campaignstack_schedule_content_post - First observed
campaignstack_search_console_dead_pages - First observed
campaignstack_search_console_draft_post - First observed
campaignstack_search_console_get_demand - First observed
campaignstack_search_console_list_competitors - First observed
campaignstack_search_console_list_queries - First observed
campaignstack_search_console_set_competitor - First observed
campaignstack_search_console_status - First observed
campaignstack_search_console_sync - First observed
campaignstack_search_leads - First observed
campaignstack_send_connection_request - First observed
campaignstack_send_gmail - First observed
campaignstack_send_inmail - First observed
campaignstack_send_message - First observed
campaignstack_seo_get_advisory - First observed
campaignstack_seo_get_latest_report - First observed
campaignstack_seo_get_visibility - First observed
campaignstack_seo_list_prompts - First observed
campaignstack_seo_run_audit - First observed
campaignstack_seo_update_prompts - First observed
campaignstack_seo_white_label_report - First observed
campaignstack_set_account_watcher - First observed
campaignstack_set_ad_autopilot - First observed
campaignstack_set_agent_exclusions - First observed
campaignstack_set_google_app_password - First observed
campaignstack_set_lead_magnet_schedule - First observed
campaignstack_set_private_proxy - First observed
campaignstack_set_workflow_accounts - First observed
campaignstack_source_lead_magnet_post - First observed
campaignstack_start_connections_export - First observed
campaignstack_submit_content_for_approval - First observed
campaignstack_submit_feedback - First observed
campaignstack_sync_lead_to_hubspot - First observed
campaignstack_toggle_automation - First observed
campaignstack_toggle_exclusion - First observed
campaignstack_trigger_icp_scoring - First observed
campaignstack_trigger_workflow - First observed
campaignstack_unarchive_campaign - First observed
campaignstack_unlink_lead_profile - First observed
campaignstack_unschedule_content_post - First observed
campaignstack_update_ad_campaign - First observed
campaignstack_update_brand_identity - First observed
campaignstack_update_calendar_event - First observed
campaignstack_update_campaign - First observed
campaignstack_update_campaign_weight - First observed
campaignstack_update_company_metadata - First observed
campaignstack_update_competitor_watch_accounts - First observed
campaignstack_update_content_post - First observed
campaignstack_update_conversation_voice - First observed
campaignstack_update_filter_exclusion_rules - First observed
campaignstack_update_icp - First observed
campaignstack_update_lead_contact_info - First observed
campaignstack_update_lead_list - First observed
campaignstack_update_lead_magnet_topics - First observed
campaignstack_update_lead_metadata - First observed
campaignstack_update_member_role - First observed
campaignstack_update_notification_preferences - First observed
campaignstack_update_persona - First observed
campaignstack_update_phase - First observed
campaignstack_update_signal_agent - First observed
campaignstack_update_workflow - First observed
campaignstack_update_workflow_status - First observed
campaignstack_update_workspace - First observed
campaignstack_update_workspace_branding - First observed
campaignstack_whoami
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Give AI agents the LinkedIn tools to find, qualify, engage, and follow up with prospects.
Run LinkedIn outreach from your AI chat: find leads, launch campaigns, send, and reply.
Full LinkedIn access for AI agents: leads, messaging, and campaigns with safe limits built in.
Human-in-the-loop LinkedIn outreach and a built-in sales CRM for AI agents. Safety-gated, anti-spam.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceConnects AI assistants to LinkedIn outreach, enabling lead finding, campaign management, messaging, and analytics through natural language.MIT
- AlicenseAqualityCmaintenanceProvides AI agents with tools for structuring and auditing cold outreach messages, building follow-up sequences, handling replies, and detecting red flags.767MIT

Prospeo MCP Serverofficial
AlicenseAqualityFmaintenanceEnables AI tools to search and enrich B2B leads, including finding professional emails, company profiles, and filtering people and companies by various criteria.5227MIT- AlicenseAqualityAmaintenanceGTM 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.111621MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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).