Skip to main content
Glama

Server Details

Instagram comment-to-DM automation your AI can set up and leave running, on the official Meta API.

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
66.7% over 23 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL

TDQS

A4/5.0

Scored across 63 tools

Disambiguation4/5

Most tools target clearly distinct resources and actions, and descriptions explicitly separate close pairs like campaigns_create versus campaigns_create_full. However, campaigns_update overlaps with campaigns_set_links, campaigns_set_public_reply, and campaigns_set_steps by also changing link buttons, public replies, and follow-ups, creating some misselection risk.

Naming Consistency4/5

Names are mostly snake_case with domain prefixes and a verb_noun structure (campaigns_create, flows_publish, guard_rules_update). Minor inconsistencies exist, such as storefront_link_add versus storefront_links_list, instagram_posts versus instagram_post_stats, and mixed set_/update_ verbs for similar operations.

Tool Count1/5

At 63 tools, the server is far beyond the well-scoped 3-15 range and crosses the 50+ extreme-mismatch threshold. Even though the platform is broad, this many tools makes reliable selection difficult for an agent.

Completeness4/5

The surface covers campaigns, flows, comment guard, inbox, knowledge bases, storefront, leads, stats, and account usage, giving broad lifecycle support. Gaps are mostly deliberate or deferred to the dashboard, such as no campaign/flow delete and no PDF upload, but a few dead ends remain.

Available Tools

63 tools
account_ai_creditsAI credits leftA
Read-only
Inspect

How many AI credits the workspace has left, split into what the plan granted, what was bought as a top-up and what HookSend added by hand, plus when the next batch expires. AI credits are spent by the features that write or decide something: answering a DM from an uploaded document, the AI steps in a flow (an AI answer, or choosing a path), the AI rules in Comment Guard, reading an incoming DM for a brand collaboration, and writing campaign copy or building a campaign with AI in the dashboard. Use it for 'how many credits do I have left' or when an AI feature has stopped working.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful context beyond that: the internal breakdown of the credit total, the expiry behavior, and the list of features that actually consume credits, which supports the diagnostic use case. It omits auth requirements and any caching or refresh behavior.

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

Conciseness4/5

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

The main answer is front-loaded in the first clause, and the final sentence cleanly covers the two use triggers. The middle sentence enumerating every credit-consuming feature is long and listy, but it earns most of its place by grounding the 'an AI feature stopped working' scenario.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so by naming the three credit components and the expiry timing. For a zero-parameter, read-only query tool this is complete enough to call and interpret correctly.

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

Parameters4/5

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

The tool takes zero arguments, so per the rubric the baseline is 4. The schema itself documents 'This tool takes no arguments', and the description correctly adds no parameter detail because there is none to add.

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

Purpose5/5

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

The description states a precise verb and resource: reporting how many AI credits remain, broken into plan-granted, top-up-purchased, and manually-added amounts, plus expiry timing. The narrow AI-credit framing inherently separates it from the generic account_usage sibling, so an agent can identify scope without opening a schema.

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

Usage Guidelines4/5

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

It gives two explicit trigger conditions: 'how many credits do I have left' and 'when an AI feature has stopped working'. That is clear when-to-use guidance, though it names no alternative tool or exclusion, so it falls short of a full when/when-not/alternatives treatment.

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

account_instagram_accountsConnected Instagram accountsA
Read-only
Inspect

Lists the Instagram accounts connected to this HookSend workspace, with the id every other tool uses to narrow its answer to one account. Start here whenever a question names a particular account or handle, or when you need an account id for another tool. It is a quick lookup and does not call Instagram, so there is no reason to avoid it.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds genuine behavioral context: it 'does not call Instagram' and is a 'quick lookup,' signalling it is cheap and side-effect-free. It omits any return-shape or pagination detail, keeping it just short of 5.

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

Conciseness4/5

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

Three sentences, front-loaded with the core function, then routing guidance, then a reassurance about cost. All earn their place, though the final 'no reason to avoid it' sentence is slightly padding.

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

Completeness4/5

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

For a no-parameter, no-output-schema lookup tool, the description is nearly complete: it explains the purpose, the key returned field (the account id), and when to call it. A brief note on what other fields are returned would make it fully complete.

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

Parameters4/5

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

The tool takes zero parameters, so per the rubric the baseline is 4. The schema confirms 'This tool takes no arguments,' and there are no parameters for the description to otherwise clarify.

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

Purpose5/5

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

States a specific verb ('Lists') and resource ('the Instagram accounts connected to this HookSend workspace'), and uniquely positions itself as the source of the account id that 'every other tool uses to narrow its answer.' An agent can distinguish it from siblings like instagram_profile or account_usage without opening a schema.

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

Usage Guidelines5/5

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

Explicitly says to 'Start here whenever a question names a particular account or handle, or when you need an account id for another tool,' giving both the trigger condition and the downstream dependency. This is exactly the routing guidance an agent needs for a root lookup tool.

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

account_usagePlan and allowanceA
Read-only
Inspect

The workspace's current plan and how much of this month is left: direct messages used against the monthly allowance, extra messages bought on top, how many Instagram accounts and live campaigns the plan allows against how many are in use, and the knowledge base and flow slots. Use it for any question about limits, what is left, whether something is about to run out, or why HookSend has stopped sending. A limit of null means unlimited on this plan. It does not quote prices; the customer's billing page does that.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare a safe read operation, and the description adds genuinely new semantics: a null limit means unlimited on this plan, and pricing is deliberately excluded. It does not cover auth requirements or any pagination/refresh behavior, but for a zero-argument plan lookup those gaps are minor.

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

Conciseness4/5

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

Front-loaded with the resource and its contents, followed by usage triggers and two boundary clauses; almost every clause carries information. The first sentence is long and densely list-like, which slightly taxes readability but nothing is filler.

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

Completeness5/5

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

With no output schema, the description carries the full burden of describing return content, and it does so field-by-field (allowances, usage counts, slots) plus the null-means-unlimited convention. Nothing an agent needs to call or interpret this tool is missing.

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

Parameters4/5

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

The tool takes no arguments, so per the rubric the baseline is 4; there is nothing for the description to clarify beyond the schema's own 'This tool takes no arguments.'

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

Purpose5/5

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

The description states a specific resource (the workspace's current plan) and enumerates exactly what it reports: DM usage against the monthly allowance, extra messages purchased, Instagram account and live-campaign allowances vs. usage, and knowledge base/flow slots. An agent can distinguish it from account_ai_credits or account_instagram_accounts because those cover single counters while this is the consolidated limits view.

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

Usage Guidelines4/5

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

Explicit when-to-use is given: any question about limits, what is left, whether something is about to run out, or why HookSend stopped sending. It also draws one boundary (pricing belongs on the customer's billing page), but names no sibling alternative for overlapping questions, 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.

campaigns_createCreate a campaignAInspect

Creates a comment-to-DM campaign. The campaign watches an Instagram post, story or inbox for the keywords you give it and automatically sends the DM you write here to whoever matches. Unless you pass isActive: false it goes live immediately and starts messaging real people on its own, so say what it will do before you create it. Reversible: campaigns_pause switches it off again and keeps everything it has collected. Counts against the customer's plan exactly as creating one in the dashboard does — a paid-only feature (story triggers, the follow gate, lead capture, follow-up messages) or one live campaign too many is refused with a sentence naming the plan, which you should repeat to the customer as it is written.

NameRequiredDescriptionDefault
adIdNoAD only. The id of the one ad to watch.
goalNoOne line on what the campaign is for. Shown to the customer only.
nameYesWhat the customer will see this campaign called in their dashboard.
postIdNoThe Instagram media id of the one post or reel to watch.
postUrlNoThe public permalink of that post, so the dashboard can show it.
isActiveNoFalse to save the campaign without switching it on. Left out, it goes live straight away and starts answering comments.
keywordsNoThe words that trigger the DM, up to ten. Not needed when matchAnyWord or matchAnyReply is true.
dmMessageNoThe direct message sent to whoever comments.
matchAnyAdNoAD only. True to answer comments on any ad.
triggerTypeNoWhat starts the campaign. POST (the default) is a comment on a post or reel. STORY_REPLY is a reply to a story, STORY_MENTION a story that mentions the account, DM a direct message, LIVE a comment on a live video, AD a comment on an ad.
matchAnyLiveNoLIVE only. True to answer every live video rather than the current one.
matchAnyPostNoTrue to watch every post on the account instead of one.
matchAnyWordNoTrue to DM everyone who comments, whatever they wrote.
matchAnyReplyNoTrue to answer any story reply.
requireFollowNoTrue to ask a non-follower to follow before the DM is sent. A paid feature on some plans.
wholeWordMatchNoTrue (the default) matches a keyword only as a whole word, so PRICE does not fire on 'pricey'.
followUpEnabledNoTrue to send a second message later. A paid feature on some plans.
followUpMessageNoThat second message's text.
linkButtonLabelNoThe label on the button under the DM, at most 50 characters.
pendingNextReelNoTrue to attach the campaign to the next reel the customer posts, before that reel exists.
instagramAccountIdNoWhich connected Instagram account this runs for. Leave it out and the most recently connected account is used.
leadCaptureEnabledNoTrue to ask for an email address in the DM. A paid feature on some plans.
publicReplyEnabledNoTrue to also reply publicly under the comment.
publicReplyMessageNoThe public reply's text.
followUpDelayMinutesNoHow long to wait before the follow-up, in minutes. At most 1440, because Instagram closes the messaging window after a day.
trackedDestinationUrlNoWhere that button goes. Clicks on it are counted.

TDQS

A4/5.0
Behavior5/5

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

Despite annotations already marking it non-read-only and non-destructive, the description adds rich context: the campaign goes live immediately and messages real people on its own, it is reversible via campaigns_pause, it counts against the customer's plan, and paid-only features or plan limits are refused with a specific sentence the agent should relay verbatim. This goes well beyond the annotations and is exactly the behavioral detail 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.

Conciseness4/5

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

The description is a single dense paragraph, but it is front-loaded with the core action and then layers on live behavior, reversibility, and plan constraints. Every sentence carries operational weight for a 26-parameter creation tool, though the lack of structure makes it slightly harder to scan.

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

Completeness5/5

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

For a complex create operation with 26 parameters and no output schema, the description covers the critical agent-facing concerns: immediate live behavior, reversibility, plan accounting, paid feature restrictions, and how to handle refusals. The schema handles parameter details, so the description is complete for correct invocation.

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

Parameters3/5

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

With 100% schema description coverage, the schema already documents all 26 parameters. The description only adds a grouped note that story triggers, the follow gate, lead capture, and follow-up messages are paid-only features, which is useful but does not substantially extend parameter meaning beyond what the schema provides.

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

Purpose4/5

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

The description gives a specific verb and resource: creates a comment-to-DM campaign that watches an Instagram post/story/inbox for keywords and sends a DM. It clearly distinguishes its live-by-default behavior from campaigns_pause as the off-switch, but it does not differentiate itself from the sibling campaigns_create_full, which an agent may need to choose between.

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

Usage Guidelines3/5

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

It implies when to use it by describing the default live behavior and the isActive: false escape hatch, and it names campaigns_pause for reversal. However, it gives no explicit guidance on when to pick this tool over the sibling campaigns_create_full or campaigns_update, leaving that choice to inference.

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

campaigns_create_fullCreate a campaign with everything setAInspect

Creates a campaign with any part of the dashboard's builder filled in at once: a product carousel or a written message, the trigger (a comment on a post, a story reply, a story mention, a direct message, a live video or an ad), the keywords, the opening greeting, the follow gate, the email question, the delayed follow-up, up to three keyword buttons, two tracked link buttons and the public reply under the comment. Use this rather than campaigns_create whenever the customer wants more than a keyword and a message. Unless you pass isActive: false the campaign goes live immediately and starts messaging real people on its own, so tell the customer what it will do before you create it. Reversible: campaigns_pause switches it off again and keeps everything it has collected. Plan limits apply exactly as they do in the dashboard — a carousel, a story trigger, the follow gate, the email question and the follow-up are each paid features, and one live campaign too many is refused as well. A refusal is a sentence naming the plan; repeat it to the customer as it is written.

NameRequiredDescriptionDefault
adIdNoAD only. The id of the one ad whose comments to answer.
goalNoOne line on what the campaign is for. Shown to the customer only.
nameYesWhat the customer will see this campaign called in their dashboard.
postIdNoPOST only. The Instagram media id of the one post or reel to watch.
adTitleNoAD only. That ad's name, shown to the customer in their dashboard.
postUrlNoPOST only. The public permalink of that post, so the dashboard can show it.
isActiveNoFalse to save the campaign without switching it on. Left out, it goes live straight away and starts messaging real people.
keywordsNoThe words in a comment, reply or DM that set the campaign off, up to ten. Not needed when matchAnyWord or matchAnyReply is true, or for a STORY_MENTION campaign.
dmMessageNoThe direct message sent to whoever matches. For a carousel campaign this is the line that goes with the cards, or the wording of the invitation when the match came from a comment.
matchAnyAdNoAD only. True to answer comments on any ad.
triggerTypeNoWhat starts the campaign. POST is a comment on a post or reel. STORY_REPLY is a reply to one of the account's stories, STORY_MENTION a story that mentions the account, DM a direct message, LIVE a comment on a live video, AD a comment on an ad. STORY_REPLY and STORY_MENTION are a paid feature and are refused on a plan without it. Left out, it is POST.
matchAnyLiveNoLIVE only. True to answer comments on every live video. False, or left out, attaches the campaign to the live going out now, or the next one.
matchAnyPostNoPOST only. True to watch every post on the account instead of one.
matchAnyWordNoTrue to answer everyone who comments, whatever they wrote.
responseTypeNoSTANDARD (the default) sends a written message with up to two link buttons. CAROUSEL sends a swipeable set of product cards and needs cards to be given here. CAROUSEL is a paid feature and is refused on a plan without it.
carouselCardsNoThe cards, in the order they will be swiped through. Between one and 8 — HookSend sends the first 8 and no more.
matchAnyReplyNoSTORY_REPLY only. True to answer any reply, whatever it says, with no keyword.
matchAnyStoryNoSTORY_REPLY only. True to answer replies to every story the account posts, now and in future, instead of one.
requireFollowNoTrue to ask someone who does not follow the account to follow before the message is sent. A paid feature: on a plan without it this is refused. False switches it off and clears its wording.
targetStoryIdNoSTORY_REPLY only. The id of the one story to answer replies to. A story lives 24 hours, so a campaign pointed at one stops when it expires.
keywordButtonsNoUp to three buttons under the message that start a DM flow or an AI answer when tapped. Instagram shows three buttons at most and the campaign's own link buttons take their places first, so three is a ceiling rather than a promise.
wholeWordMatchNoTrue (the default) matches a keyword only as a whole word, so PRICE does not fire on 'pricey'.
followUpEnabledNoTrue to send a second message some minutes later. A paid feature: on a plan without it this is refused. False switches it off and clears its wording.
followUpMessageNoThat second message's text.
leadEmailPromptNoHow to ask for the email address.
linkButtonLabelNoThe label on the button under the message, at most 50 characters.
pendingNextReelNoPOST only. True to attach the campaign to the next reel the customer posts, before that reel exists.
dmTriggerEnabledNoTrue to answer the keyword in a direct message as well as in a comment. Left out, it is on for a keyword campaign and off for a match-anything one. Live and ad campaigns answer comments only and ignore this.
openingDmEnabledNoTrue to send a short greeting first, with a button the person taps to get the real message. It lifts delivery, because Instagram treats a reply as consent to keep messaging. False switches it off and clears its wording.
openingDmMessageNoThe greeting's text. Required when switching the greeting on for the first time.
instagramAccountIdNoWhich connected Instagram account this runs for. Leave it out and the most recently connected account is used.
leadCaptureEnabledNoTrue to ask for an email address in the conversation and save whoever answers as a lead. A paid feature: on a plan without it this is refused. False switches it off and clears its wording.
publicReplyEnabledNoTrue to also reply underneath the comment in public, where everyone reading the post sees it. Live campaigns never get one, because a live's comments scroll away with the broadcast.
earlierCommentsDaysNoHow many days back to reach, 1 to 7. 7 is a hard ceiling set by Instagram, not by HookSend: Instagram refuses a private reply to a comment more than 7 days old, so there is nothing further back that could be sent and no way to ask for more. Left out when switching the setting on, it is 1.
followPromptMessageNoWhat to say when asking them to follow.
publicReplyMessagesNoThe public replies to choose between, up to ten. HookSend rotates them so the post does not fill up with the same sentence, which Instagram treats as spam.
followUpDelayMinutesNoHow long to wait before it, in minutes. At most 1440: Instagram closes the messaging window a day after the person last wrote.
openingDmButtonLabelNoThe label on the greeting's button, at most 64 characters.
secondaryButtonLabelNoThe label on a second button, at most 50 characters.
targetStoryTimestampNoSTORY_REPLY only. When that story was posted, as an ISO timestamp, so HookSend knows when it expires. Left out, it counts 24 hours from now.
trackedDestinationUrlNoWhere that button goes. Every tap on it is counted for the customer.
earlierCommentsEnabledNoTrue to also answer comments left BEFORE the campaign was created, going back as far as earlierCommentsDays. Off for every campaign unless it is switched on here. Switching it on sends the campaign's DM to people who commented days ago, which can be a great many people on a post that did well, so say what it will do and roughly who it will reach before you turn it on. False switches it off again, and nothing further is sent.
followPromptButtonLabelNoThe label on the button that takes them to the profile, at most 50 characters.
leadConfirmationMessageNoWhat to reply once they have given it.
secondaryDestinationUrlNoWhere the second button goes. Its taps are counted separately.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false; the description carries far more: the campaign starts messaging real people immediately unless isActive:false, it is reversible via campaigns_pause which preserves collected data, paid features are itemized (carousel, story trigger, follow gate, email question, follow-up, one live campaign too many), and refusals are described as a plan-naming sentence to repeat as written.

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

Conciseness4/5

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

Purpose is front-loaded in the first sentence, followed by the sibling routing, then the go-live warning and plan-limit caveats. It is long, but for a 45-parameter mutation tool each sentence (live messaging risk, reversibility, plan refusals) earns its place. Slightly dense but not padded.

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

Completeness4/5

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

For a 45-param mutation with no output schema, the description covers the critical gaps an agent needs: default go-live behavior, reversibility path, paid-feature refusals, and the sibling choice. Return values are unnecessary since no output schema exists. Minor gap: it does not hint at which parameter clusters are mutually exclusive beyond what the schema states.

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

Parameters3/5

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

Schema description coverage is 100% with 45 well-documented parameters, so the schema already does the heavy lifting and the baseline is 3. The description adds little parameter-level syntax beyond schema — mostly grouping features by name — though it does reinforce the button ceiling and trigger set conceptually.

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

Purpose5/5

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

States a specific verb and resource ('Creates a campaign') and then enumerates the builder components it can fill at once — carousel/message, trigger, keywords, greeting, follow gate, email question, follow-up, buttons, public reply. It explicitly distinguishes itself from the sibling campaigns_create ('Use this rather than campaigns_create whenever the customer wants more than a keyword and a message').

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

Usage Guidelines5/5

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

Names the alternative (campaigns_create) and the exact condition that selects this tool over it. Adds operational guidance: the campaign goes live unless isActive:false, plan limits apply as in the dashboard, and a refusal sentence should be relayed verbatim. When-to-use, when-not, and prerequisites are all present.

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

campaigns_getOne campaign in fullA
Read-only
Inspect

Everything about one campaign: its trigger and which post it watches, its keywords and how they are matched, the messages it sends, the buttons on them, its links, and every switch — the opening message, the follow requirement, the follow-up, the public reply under the comment, email capture, whether it answers from an uploaded document, and whether it also answers comments left before it was created. Use it after campaigns_list when someone asks what a particular campaign says or does, or why it is not firing. Message text is shortened; results and per-campaign totals are in campaigns_list.

NameRequiredDescriptionDefault
campaignIdYesThe campaign's id, as returned by campaigns_list.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true/destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: message text is shortened in the response, and results/per-campaign totals live in campaigns_list — a real data-limitation caveat an agent needs to avoid misreporting.

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

Conciseness4/5

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

The lead phrase 'Everything about one campaign' is front-loaded and the routing sentence and truncation caveat are well placed. The middle enumeration is a long run-on list that overlaps with sibling setter names and could be tightened, but every element does describe a returned field, so it earns most of its length.

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

Completeness4/5

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

With no output schema, the description correctly compensates by enumerating the returned structure, and it adds the important truncation caveat plus the pointer to campaigns_list for totals. Only minor gaps remain (no mention of error cases for an invalid/foreign campaignId), which is acceptable for a simple single-item read.

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

Parameters3/5

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

Schema description coverage is 100% and campaignId is already documented as 'as returned by campaigns_list', so the schema fully carries the parameter. The description adds no format, sourcing, or constraint detail beyond it — baseline 3.

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

Purpose5/5

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

States a specific verb and resource ('Everything about one campaign') and then enumerates the exact contents returned: trigger, watched post, keywords, messages, buttons, links, and each switch. This is clearly distinguishable from the sibling setters (campaigns_set_*) that mutate those same fields.

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

Usage Guidelines5/5

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

Explicitly routes the agent: 'Use it after campaigns_list when someone asks what a particular campaign says or does, or why it is not firing.' It names the sibling to call first and the two motivating conditions, with no need for inference.

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

campaigns_listCampaignsA
Read-only
Inspect

Lists the workspace's campaigns, newest first, each with its id, whether it is live or paused, what triggers it, which post it watches, its keywords, and its own results: messages sent, skipped and failed, link clicks, click rate and its three best keywords. This is the right tool for 'how are my campaigns doing', 'which campaign sends the most', and for finding a campaign's id before calling campaigns_get. HookSend has no per-campaign date filter, so these totals are for the life of the campaign, not a chosen week.

NameRequiredDescriptionDefault
limitNoHow many campaigns to return, newest first. Defaults to 20; 50 is the most this tool will ever return.
liveOnlyNoTrue returns only campaigns that are switched on. The counts in the answer always describe every campaign, switched on or not.
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false, so the description's added value is its caveat that all counts are lifetime totals because HookSend has no per-campaign date filter. That is a genuine behavioral constraint not derivable from structured fields. It stops short of describing pagination or ordering tie-breaks, but covers the main trap an agent would hit.

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

Conciseness4/5

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

Front-loaded with the verb and resource, then usage guidance, then the lifetime-totals caveat, which is a sensible ordering. The long enumeration of returned fields is a little bloated for a single sentence, but it is doing real work because there is no output schema.

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

Completeness5/5

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

With no output schema, the description compensates by listing the returned fields, and it closes the main correctness risk (date filtering does not exist, so totals are lifetime) that a caller would otherwise assume. Combined with full schema coverage on the three parameters, an agent has everything needed to call this correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, liveOnly and instagramAccountId are already fully documented in the schema, including the note that counts always describe every campaign regardless of liveOnly. The description adds nothing beyond that for parameters, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (lists the workspace's campaigns) with scope (newest first) and enumerates exactly what each row contains. It also differentiates itself from the sibling campaigns_get by naming the lookup use case, so an agent can route correctly without opening either schema.

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

Usage Guidelines5/5

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

Explicitly names the user questions it answers ('how are my campaigns doing', 'which campaign sends the most') and the downstream action it enables (finding a campaign's id before calling campaigns_get). This is concrete routing guidance, not implied usage.

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

campaigns_pausePause a campaignAInspect

Switches one campaign off. It stops answering new comments straight away, and keeps everything it has — its leads, its statistics, its keywords and its messages. Fully reversible with campaigns_resume, and always allowed whatever the customer's plan. This is what to use when someone asks to stop, remove or get rid of a campaign: pausing loses nothing, and there is deliberately no tool here that deletes one.

NameRequiredDescriptionDefault
campaignIdYesThe id of the campaign.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only state it is not read-only and not destructive; the description adds substantial context beyond that — it stops answering new comments immediately, preserves leads/statistics/keywords/messages, is fully reversible with campaigns_resume, and is always allowed regardless of plan. This goes well past the annotation bar.

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

Conciseness4/5

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

It is front-loaded with the core action and scoping, and each sentence contributes (preservation, reversibility, plan independence, misuse routing). It is slightly verbose with some restatement of the 'stop/remove/get rid of' framing, but nothing is wasted.

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

Completeness5/5

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

For a single-parameter mutation tool with annotations and no output schema, the description covers behavior, side effects, reversibility, permission model, and sibling routing — everything an agent needs to invoke it correctly.

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

Parameters3/5

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

Schema coverage is 100% with a single documented campaignId, so the schema already carries parameter meaning. The description adds no format or syntax details about the id, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description gives a specific verb and resource ('Switches one campaign off') and immediately distinguishes it from siblings by naming campaigns_resume as the inverse and noting no delete tool exists. An agent can identify what this does without opening the schema.

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

Usage Guidelines5/5

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

It explicitly states when to use it ('when someone asks to stop, remove or get rid of a campaign') and names the alternative (campaigns_resume for reversal). It also pre-empts the misuse case by explaining no deletion tool exists, so the agent knows pausing is the correct substitute.

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

campaigns_resumeResume a campaignAInspect

Switches a paused campaign back on, so it answers comments again from now on. It does not go back and answer comments left while it was paused. Reversible with campaigns_pause. A live campaign takes one of the live-campaign slots the customer's plan allows, so this is refused when they are already at their limit — the refusal names the plan and the number, and you should tell them what it says.

NameRequiredDescriptionDefault
campaignIdYesThe id of the campaign.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnly=false, destructive=false) by disclosing non-obvious traits: it does not retroactively answer comments left while paused, the action is reversible via campaigns_pause, and it consumes a plan-limited live-campaign slot, causing a refusal that names the plan and number. This is exactly the behavioral 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.

Conciseness4/5

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

Front-loaded with the core action, then layered with the important caveats (no retroactive replies, reversibility, slot-limit refusal) in a logical order. Each sentence earns its place, though the final clause is slightly dense with instructions about relaying the refusal message.

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

Completeness5/5

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

For a single-parameter resume tool with no output schema, the description covers the action, its limits, reversibility, and the failure mode and expected response. Nothing an agent needs to call or handle errors correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single campaignId parameter is documented in the schema; the description adds no additional meaning about the parameter. Baseline 3 is appropriate when the schema already carries the parameter semantics.

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

Purpose5/5

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

States a specific verb+resource ('Switches a paused campaign back on') and clarifies the ongoing scope ('answers comments again from now on'). It explicitly names the sibling campaigns_pause as the reversible counterpart, letting an agent distinguish the pair without opening schemas.

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

Usage Guidelines4/5

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

The description makes clear this is for resuming a paused campaign and names the alternative (campaigns_pause) for the inverse action. It also flags the plan-slot condition under which the call will be refused, though it stops short of a fully explicit when-not statement.

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

campaigns_set_earlier_commentsAlso answer comments left before the campaign existedAInspect

Lets a campaign answer comments that were already on the post when it was created, going back a number of days the customer chooses, and reports what the campaign is set to now. Normally a campaign only answers comments left after it was made, which is why putting one on an old post appears to do nothing; this is the switch for the other behaviour. It is off on every campaign until somebody turns it on. Read it back by calling this with only the campaign id. Turning it on is the one thing here worth being careful about: it sends the campaign's direct message to everybody who commented a trigger word in that period, and on a post that did well that is not a handful of people — so tell the customer how far back they are about to reach and let them say yes before you call it. Reversible: call it again with enabled false and nothing further goes out, though messages already sent cannot be taken back. At most 7 days, and that ceiling is Instagram's: it refuses a private reply to a comment more than 7 days old, so there is nothing further back that could be sent. Only a campaign that watches a post has comments to go back through, so on a story, direct message, live or ad campaign the setting stays off and the confirmation shows it off. No plan check applies.

NameRequiredDescriptionDefault
daysNoHow many days back to reach, 1 to 7. 7 is a hard ceiling set by Instagram, not by HookSend: Instagram refuses a private reply to a comment more than 7 days old, so there is nothing further back that could be sent and no way to ask for more. Left out when switching the setting on, it is 1.
enabledNoTrue to also answer comments left BEFORE the campaign was created, going back as far as earlierCommentsDays. Off for every campaign unless it is switched on here. Switching it on sends the campaign's DM to people who commented days ago, which can be a great many people on a post that did well, so say what it will do and roughly who it will reach before you turn it on. False switches it off again, and nothing further is sent.
campaignIdYesThe id of the campaign to change.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and destructiveHint=false; the description carries the real behavioural weight: it DMs everyone who commented a trigger word in the window, can reach many people, is off by default, is reversible via enabled=false but already-sent messages cannot be recalled, and is capped at 7 days by Instagram. That is exactly the context the 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.

Conciseness4/5

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

Purpose is front-loaded and every clause earns its place, but the prose is dense and runs long across several semicolon-heavy sentences. Justified for a high-blast-radius switch, though slightly more than strictly needed.

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

Completeness5/5

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

No output schema exists, yet the description explains what the confirmation returns (what the campaign is set to now), the limits, reversibility, and the campaigns it does not apply to. An agent has everything needed to call it safely.

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

Parameters4/5

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

The schema already documents all three parameters at 100% coverage, including the days ceiling and the enabled default. The description reinforces the default-off behaviour and the read-back pattern (call with only campaignId), adding modestly beyond the schema rather than repeating it verbatim.

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

Purpose5/5

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

It states a precise verb and resource: letting a campaign answer comments that already existed when the post/campaign was made, and explicitly positions this against the default behaviour ('Normally a campaign only answers comments left after it was made'). Against siblings like campaigns_set_public_reply or campaigns_set_trigger, the scope is unmistakable.

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

Usage Guidelines5/5

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

It says exactly when this matters (putting a campaign on an old post that 'appears to do nothing'), how to read the current value (call with only the campaign id), and when it stays off (story, DM, live or ad campaigns). No plan check applies is also stated.

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

campaigns_set_keyword_buttonsSet a campaign's keyword buttonsAInspect

Sets the buttons under the campaign's message that start something else when tapped — a DM flow, or an AI answer from the customer's documents. Each button has a label and the keyword its tap sends, and that keyword is what the flow or the AI then answers, so it must be one they are listening for. Up to three: Instagram shows three buttons at most, and the campaign's own link buttons take their places first, so a fourth would never appear. This replaces the whole set, which is reversible — sending the old labels and keywords again restores it exactly, and nothing is counted against a button. Pass an empty list to take the buttons away. No plan check applies.

NameRequiredDescriptionDefault
buttonsYesThe buttons, in the order they appear. At most three, or an empty list for none.
campaignIdYesThe id of the campaign to change.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that the operation replaces the whole set, that it is reversible by resending old values, that nothing is counted against a button, that the Instagram limit is three, and that no plan check applies. These are exactly the mutation-consequence details the annotations (destructiveHint=false) cannot convey.

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

Conciseness4/5

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

Front-loaded with the core action, then limits, reversibility, and the empty-list case. Every sentence carries information, though the 'no plan check applies' and reversibility clauses make it slightly longer than strictly necessary.

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

Completeness5/5

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

For a mutation tool with no output schema, the description covers the consequence of the write (full replacement, reversibility, no counting, no plan check) and the limits an agent must respect. 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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: the keyword is what the flow or AI answers and must match what they are 'listening for', and the list ordering/three-item cap is reinforced. This complements the schema's per-field docs rather than merely repeating them.

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

Purpose5/5

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

States a specific verb+resource ('sets the buttons under the campaign's message') and immediately distinguishes it from the sibling set_links tools by naming the alternative button type that competes for the same slots. An agent can tell this apart from campaigns_set_links and campaigns_set_carousel without opening a schema.

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

Usage Guidelines4/5

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

Explains the operational context clearly — what the buttons do, the three-button cap, that link buttons take precedence, and that an empty list removes them. It stops short of explicitly naming the sibling to use for other button types, but the constraint that 'the campaign's own link buttons take their places first' effectively routes the agent.

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

campaigns_set_knowledge_baseAnswer a campaign's DMs from a knowledge baseAInspect

Points a campaign at one of the customer's knowledge bases so it answers direct messages out of their own documents — a product guide, an FAQ, a price list — instead of sending the same written message to everyone. When someone writes in, HookSend looks their question up in the documents and replies with what it finds; if it finds nothing, or the workspace has run out of AI credits, the campaign's written message is sent as usual, so nobody is left without a reply. Each answer spends AI credits from the workspace's balance; account_ai_credits reports how many are left. Attaching a base switches answering on in the same call, because a base attached with the switch left off is a campaign that looks set up and never asks the documents — pass aiReplyEnabled: false if the customer wants it ready but not live yet. Fully reversible: detach: true takes the base off again, and aiReplyEnabled: false pauses answering while leaving the base attached, with nothing to rebuild either way. Knowledge bases are part of the paid plans, and the base must belong to this customer: if HookSend refuses, it says why in one sentence, and you should repeat that sentence to them as it is written. knowledge_list gives the ids and says which bases are switched on.

NameRequiredDescriptionDefault
detachNoTrue to take the knowledge base off this campaign altogether, which also stops it answering from documents. The knowledge base itself and its documents are untouched and stay available to every other campaign.
campaignIdYesThe id of the campaign to change.
aiReplyEnabledNoTrue to answer from the documents, false to stop and go back to the campaign's written message. Passing false leaves the base attached, so it can be switched on again with nothing to set up.
knowledgeBaseIdNoThe id of the knowledge base this campaign should answer from. It has to be one of this customer's own — knowledge_list gives the ids. Attaching one switches answering on in the same call.

TDQS

A4.4/5.0
Behavior5/5

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

With only readOnlyHint=false and destructiveHint=false from annotations, the description carries substantial extra load: it discloses credit consumption per answer, the fallback to the written message when nothing is found or credits run out, full reversibility of both detach and pause, the paid-plan and ownership preconditions, and that a refusal returns a one-sentence reason to be relayed verbatim. This is rich behavioral context beyond the annotations.

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

Conciseness4/5

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

Front-loads the core purpose before detailing fallback, credits, and error handling, and every sentence carries information. It is on the verbose side with some redundant clauses, but nothing is wasted.

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

Completeness5/5

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

For a four-parameter mutation tool with no output schema, the description covers the side effects, failure modes, cost model, prerequisites, and reversal path, and points to knowledge_list for discovery. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100% and the schema descriptions already explain reversibility, ownership, and the attach-switches-on behavior, so the description largely restates them. It adds little parameter-level syntax or format 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.

Purpose5/5

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

States a specific verb and resource ('Points a campaign at one of the customer's knowledge bases') and immediately clarifies the effect: answering DMs from the customer's own documents rather than a fixed message. An agent can distinguish this from knowledge_create or campaigns_update without opening a schema.

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

Usage Guidelines4/5

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

Gives clear conditions for the main parameter modes — attach to switch answering on, aiReplyEnabled: false to stage it without going live, detach: true to remove it — and routes the agent to knowledge_list for ids. It does not explicitly compare against sibling set_* tools, 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.

campaigns_set_public_replySet a campaign's public comment replyAInspect

Sets the reply the campaign leaves underneath the comment in public, where everyone reading the post can see it, as well as the private message it sends. Give several wordings and HookSend rotates them: the same sentence repeated under every comment is what Instagram treats as spam, and it reads as a robot to anyone scrolling. Reversible — call this again with the old wordings to put them back — but switching the reply off clears the wordings it had, so bring them with you if it might go back on. A live campaign never gets a public reply, because a live's comments scroll away with the broadcast, and the confirmation will show it off. No plan check applies.

NameRequiredDescriptionDefault
enabledNoTrue to reply in public as well as in the DM, false to stop replying in public and clear the wordings.
messagesNoThe wordings to rotate between, up to ten. Each at most 1000 characters. Passing this replaces the whole list.
campaignIdYesThe id of the campaign to change.

TDQS

A4/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false / destructiveHint=false, so the description carries the real behavioral load and does it well: it discloses reversibility, warns that switching the reply off clears the stored wordings, explains the live-campaign exception, and notes that the confirmation reflects the state. This is well beyond what the 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.

Conciseness3/5

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

The critical operational facts — reversibility and the destructive clearing of wordings — are buried after a rhetorical aside about reading like a robot. Sentences like 'the same sentence repeated under every comment is what Instagram treats as spam' are colorful but consume space without adding callable information.

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

Completeness4/5

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

For a three-parameter mutation tool with full schema coverage, no output schema, and non-destructive annotations, the description is largely complete: it covers the mutation, its reversibility, the data-loss caveat, and a usage exclusion. Only the missing sibling differentiation keeps it short of full completeness.

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

Parameters3/5

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

Schema coverage is 100% and the field descriptions already explain enabled's public/clear semantics, the up-to-ten rotation list, and whole-list replacement. The description restates much of this and adds only the rationale for multiple wordings, so the schema is doing the heavy lifting.

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

Purpose4/5

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

The description states a specific verb and resource: it sets the public reply a campaign leaves under a comment, plus the private DM. It is understandable in isolation, but it never names or distinguishes itself from adjacent siblings like campaigns_use_standard_reply or campaigns_set_earlier_comments, so the agent must infer which one applies.

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

Usage Guidelines4/5

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

It gives a clear when-not ('A live campaign never gets a public reply') and explains why multiple wordings are supplied (rotation, spam avoidance). It also notes that no plan check applies and that re-calling restores old wordings. What it lacks is any explicit routing between this tool and the other reply-setting siblings.

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

campaigns_set_stepsSet a campaign's conversation stepsAInspect

Switches on or off, and writes the wording for, the four steps a campaign can add to a conversation: the opening greeting sent before the real message, the follow gate that asks a non-follower to follow first, the email question that saves whoever answers as a lead, and the follow-up sent some minutes later. Only the parts you pass are touched, and every change is reversible by calling this again with the old values. Two things to say to the customer first: switching a step off clears the wording it had, so bringing it back means writing it again; and a story campaign cannot have any of these — the route strips them, and the confirmation will show them off. The follow gate, the email question and the follow-up are each paid features, refused on a plan without them with a sentence naming the plan, which you should repeat as written.

NameRequiredDescriptionDefault
campaignIdYesThe id of the campaign to change.
requireFollowNoTrue to ask someone who does not follow the account to follow before the message is sent. A paid feature: on a plan without it this is refused. False switches it off and clears its wording.
followUpEnabledNoTrue to send a second message some minutes later. A paid feature: on a plan without it this is refused. False switches it off and clears its wording.
followUpMessageNoThat second message's text.
leadEmailPromptNoHow to ask for the email address.
openingDmEnabledNoTrue to send a short greeting first, with a button the person taps to get the real message. It lifts delivery, because Instagram treats a reply as consent to keep messaging. False switches it off and clears its wording.
openingDmMessageNoThe greeting's text. Required when switching the greeting on for the first time.
leadCaptureEnabledNoTrue to ask for an email address in the conversation and save whoever answers as a lead. A paid feature: on a plan without it this is refused. False switches it off and clears its wording.
followPromptMessageNoWhat to say when asking them to follow.
followUpDelayMinutesNoHow long to wait before it, in minutes. At most 1440: Instagram closes the messaging window a day after the person last wrote.
openingDmButtonLabelNoThe label on the greeting's button, at most 64 characters.
followPromptButtonLabelNoThe label on the button that takes them to the profile, at most 50 characters.
leadConfirmationMessageNoWhat to reply once they have given it.

TDQS

A4.3/5.0
Behavior5/5

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

Adds a great deal beyond the annotations (readOnlyHint=false, destructiveHint=false): only passed fields are touched, every change is reversible, switching a step off clears its wording, story campaigns strip these steps, and three steps are paid features refused with a sentence to repeat verbatim. These are exactly the behaviors an agent must know 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.

Conciseness4/5

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

Front-loaded with the purpose in the opening sentence, then the warnings, then the plan-level caveat. Dense and long, but nearly every clause carries operational information; the four-step enumeration could be tightened without loss.

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

Completeness4/5

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

For a 13-parameter mutation tool with no output schema and only safety annotations, the description covers partial-update behavior, reversibility, plan gating, and the story-campaign edge case. It refers to a 'confirmation' response but does not otherwise say what the tool returns, which is the only real gap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter with constraints and paid-feature notes. The description groups the parameters into the four conceptual steps, which adds light meaning, but adds no syntax, format, or constraint detail the schema lacks.

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

Purpose5/5

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

Names a specific verb (switches on/off, writes wording) applied to a specific resource (the four conversation steps of a campaign), and enumerates those steps so the agent knows exactly what is being configured. This cleanly separates it from siblings like campaigns_set_trigger, campaigns_set_links or campaigns_update.

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

Usage Guidelines4/5

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

Establishes context well: partial-update semantics, the story-campaign exclusion, and the paid-plan refusal path. It does not name a sibling alternative for any of those cases, so it stops short of explicit when-to-use-this-vs-that routing, but the boundaries are clear.

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

campaigns_set_triggerChange what sets a campaign offAInspect

Changes what starts an existing campaign: a comment on one post, on every post or on the next reel the customer publishes; a reply to one story or to any story; a story that mentions the account; a direct message; a comment on a live video; or a comment on an ad. Reversible by calling it again with the old trigger. Two warnings worth passing on before you call it. Moving a campaign to a story trigger switches off its opening greeting, follow gate, email question and follow-up and clears their wording, because a story reply can only carry the one message — the confirmation shows what survived. And the campaign keeps its keywords, so a campaign moved from a story mention to a post trigger needs at least one keyword, or matchAnyWord, set with campaigns_update. Story triggers are a paid feature and are refused on a plan without them with a sentence naming the plan; repeat it as written.

NameRequiredDescriptionDefault
adIdNoAD only. The id of the one ad whose comments to answer.
postIdNoPOST only. The Instagram media id of the one post or reel to watch.
adTitleNoAD only. That ad's name, shown to the customer in their dashboard.
postUrlNoPOST only. The public permalink of that post, so the dashboard can show it.
campaignIdYesThe id of the campaign to change.
matchAnyAdNoAD only. True to answer comments on any ad.
triggerTypeYesWhat starts the campaign. POST is a comment on a post or reel. STORY_REPLY is a reply to one of the account's stories, STORY_MENTION a story that mentions the account, DM a direct message, LIVE a comment on a live video, AD a comment on an ad. STORY_REPLY and STORY_MENTION are a paid feature and are refused on a plan without it.
matchAnyLiveNoLIVE only. True to answer comments on every live video. False, or left out, attaches the campaign to the live going out now, or the next one.
matchAnyPostNoPOST only. True to watch every post on the account instead of one.
matchAnyReplyNoSTORY_REPLY only. True to answer any reply, whatever it says, with no keyword.
matchAnyStoryNoSTORY_REPLY only. True to answer replies to every story the account posts, now and in future, instead of one.
targetStoryIdNoSTORY_REPLY only. The id of the one story to answer replies to. A story lives 24 hours, so a campaign pointed at one stops when it expires.
pendingNextReelNoPOST only. True to attach the campaign to the next reel the customer posts, before that reel exists.
targetStoryTimestampNoSTORY_REPLY only. When that story was posted, as an ISO timestamp, so HookSend knows when it expires. Left out, it counts 24 hours from now.

TDQS

A4.6/5.0
Behavior5/5

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

With only readOnlyHint=false and destructiveHint=false from annotations, the description carries the real behavioral load: it discloses that story triggers silently switch off and clear the opening greeting, follow gate, email question and follow-up wording, that the confirmation reports what survived, that keywords are retained across moves, and that a paid-plan refusal returns a sentence to repeat verbatim. This is far more than 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.

Conciseness4/5

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

Front-loaded with the core action and then the two warnings, with no filler or marketing language. The trigger enumeration in the first sentence duplicates the triggerType enum, so a little length is spent on information the schema already carries.

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

Completeness5/5

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

For a 14-parameter mutation tool with no output schema and thin annotations, the description covers reversibility, destructive side effects, cross-tool follow-up, and the paid-feature error path, plus a note on what the confirmation returns. An agent has everything needed to call it and to warn the user beforehand.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description adds genuine cross-parameter meaning the schema cannot express — the keyword/matchAnyWord carry-over requirement after a trigger move, and the interaction where a story trigger wipes unrelated message settings. It does not restate the per-field POST/AD/LIVE gating, which the schema already handles well.

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

Purpose5/5

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

States a precise verb (changes) plus the resource (what starts an existing campaign) and then enumerates every accepted trigger, so an agent can distinguish it from campaigns_update and campaigns_create without opening a schema. The scope word 'existing' correctly excludes creation.

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

Usage Guidelines4/5

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

Gives clear conditional guidance (reversible by calling again; story triggers refused on unpaid plans; a campaign moved from story mention to post trigger needs a keyword set via campaigns_update), which routes the agent to a sibling for the keyword step. It stops short of an explicit when-not-to-use statement or a direct contrast with campaigns_update's broader remit.

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

campaigns_updateUpdate a campaignAInspect

Changes the settings of an existing campaign: its name, its keywords, the DM it sends, its link button, its public reply, its follow-up. Only the fields you pass are changed, and every change is reversible by calling this again with the old values. It cannot switch a campaign on or off — use campaigns_pause and campaigns_resume for that. Turning on a paid-only feature here is refused by the plan exactly as it would be in the dashboard; pass the refusal back as written.

NameRequiredDescriptionDefault
adIdNoAD only. The id of the one ad to watch.
goalNoOne line on what the campaign is for. Shown to the customer only.
nameNoWhat the customer will see this campaign called in their dashboard.
postIdNoThe Instagram media id of the one post or reel to watch.
postUrlNoThe public permalink of that post, so the dashboard can show it.
keywordsNoThe words that trigger the DM, up to ten. Not needed when matchAnyWord or matchAnyReply is true.
dmMessageNoThe direct message sent to whoever comments.
campaignIdYesThe id of the campaign to change.
matchAnyAdNoAD only. True to answer comments on any ad.
triggerTypeNoWhat starts the campaign. POST (the default) is a comment on a post or reel. STORY_REPLY is a reply to a story, STORY_MENTION a story that mentions the account, DM a direct message, LIVE a comment on a live video, AD a comment on an ad.
matchAnyLiveNoLIVE only. True to answer every live video rather than the current one.
matchAnyPostNoTrue to watch every post on the account instead of one.
matchAnyWordNoTrue to DM everyone who comments, whatever they wrote.
matchAnyReplyNoTrue to answer any story reply.
requireFollowNoTrue to ask a non-follower to follow before the DM is sent. A paid feature on some plans.
wholeWordMatchNoTrue (the default) matches a keyword only as a whole word, so PRICE does not fire on 'pricey'.
followUpEnabledNoTrue to send a second message later. A paid feature on some plans.
followUpMessageNoThat second message's text.
linkButtonLabelNoThe label on the button under the DM, at most 50 characters.
pendingNextReelNoTrue to attach the campaign to the next reel the customer posts, before that reel exists.
instagramAccountIdNoWhich connected Instagram account this runs for. Leave it out and the most recently connected account is used.
leadCaptureEnabledNoTrue to ask for an email address in the DM. A paid feature on some plans.
publicReplyEnabledNoTrue to also reply publicly under the comment.
publicReplyMessageNoThe public reply's text.
followUpDelayMinutesNoHow long to wait before the follow-up, in minutes. At most 1440, because Instagram closes the messaging window after a day.
trackedDestinationUrlNoWhere that button goes. Clicks on it are counted.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only supply readOnlyHint=false and destructiveHint=false; the description goes well beyond them by stating partial-update semantics ('Only the fields you pass are changed'), reversibility ('every change is reversible by calling this again with the old values'), and, most valuably, that paid-feature refusals come back from the plan and should be 'pass[ed] back as written.' That last point is real behavioral guidance an agent cannot get from 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.

Conciseness5/5

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

Three sentences, front-loaded with the mutation scope, then the partial-update/reversibility semantics, then the routing exclusion and the plan-refusal rule. No sentence is filler and each adds a distinct, decision-relevant fact.

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

Completeness4/5

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

For a 26-parameter partial-update tool with 100% schema coverage and no output schema, the description supplies the mutation semantics, reversibility, sibling routing for on/off, and plan-refusal handling an agent needs. The only gap is not addressing the overlapping set_* siblings, which is a genuine but secondary omission.

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

Parameters3/5

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

Schema description coverage is 100% and every one of the 26 properties is documented in-schema, including enums and paid-feature flags, so the schema carries the parameter burden. The description's field list (name, keywords, DM, link button, public reply, follow-up) lightly mirrors that without adding syntax, formats, or default semantics beyond it.

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

Purpose5/5

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

Opens with a specific verb+resource ('Changes the settings of an existing campaign') and enumerates the field families it touches (name, keywords, DM, link button, public reply, follow-up). It also explicitly distinguishes itself from campaigns_pause/campaigns_resume, so an agent can separate it from the most confusable siblings without opening a schema.

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

Usage Guidelines4/5

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

Gives an explicit when-not with the correct alternative: 'It cannot switch a campaign on or off — use campaigns_pause and campaigns_resume for that.' However, it is silent on the many overlapping set_* siblings (campaigns_set_public_reply, campaigns_set_links, campaigns_set_trigger, campaigns_set_keyword_buttons, campaigns_set_steps), whose fields this tool also appears to change, leaving that routing ambiguity unresolved.

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

campaigns_use_standard_replySend a written message instead of a carouselAInspect

Switches a carousel campaign back to a plain written message with its link buttons. The cards stay saved on the campaign and are simply not sent, so this is reversible: campaigns_set_carousel with the same cards puts the carousel back (removing any link buttons, keyword buttons or email question added in the meantime, as the dashboard does). Pass dmMessage to write the message it should send from now on, since a campaign that was sending cards may have nothing else to say. No plan check applies to switching a paid feature off.

NameRequiredDescriptionDefault
dmMessageNoThe direct message sent to whoever matches. For a carousel campaign this is the line that goes with the cards, or the wording of the invitation when the match came from a comment.
campaignIdYesThe id of the campaign to change.

TDQS

A4.6/5.0
Behavior5/5

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

With annotations only covering readOnlyHint=false and destructiveHint=false, the description adds rich behavioral detail: cards are retained and not sent, the change is reversible, and restoring via campaigns_set_carousel removes any link/keyword buttons or email questions added meanwhile. It also discloses that no plan check applies.

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

Conciseness4/5

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

The purpose is front-loaded in the first sentence, and each subsequent sentence adds useful constraints or alternatives. It is slightly dense but no sentence is wasted.

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

Completeness5/5

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

No output schema exists, and annotations are sparse, but the description covers the reversibility, side effects, alternative tool, parameter guidance, and pricing note needed to invoke the tool correctly. Nothing critical is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds rationale for dmMessage — that a campaign previously sending cards may have no other message, so you should pass the new text — which goes beyond the schema's definition of the field.

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

Purpose5/5

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

The description states a specific verb (switches back) and resource (carousel campaign to plain written message), and explicitly names the sibling it relates to (campaigns_set_carousel). An agent can distinguish this from other campaign update tools without opening schemas.

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

Usage Guidelines4/5

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

It clearly describes the operation's context and the reverse operation, and notes that no plan check applies when switching a paid feature off. However, it stops short of an explicit 'use this when…' directive or stating when not to use it beyond the named alternative.

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

collabs_listBrand collaboration offersA
Read-only
Inspect

The brand collaboration approaches HookSend spotted in the account's direct messages, newest first, with what it managed to read out of each one: the brand, whether the offer is paid or barter, the budget, what they want made, any deadline, a one-line summary and where the conversation stands. Also returns this month's totals and how many are still unanswered. Use it for 'has anyone offered me a collab', 'what brands have written to me', 'how much have I been offered this month', or to check what is waiting for a reply. The brand, budget and deliverables were read out of prose by a model and can be wrong, so quote them as what the message appeared to say and check the confidence score before treating a figure as real. Detection needs an AI provider configured; the answer says whether one is, so an empty list is not mistaken for no interest.

NameRequiredDescriptionDefault
pageNoPage of the list, 1 being the newest. 25 offers per page.
showNoWhich offers to return: 'new' for the unanswered ones (the default), 'talking' for conversations under way, 'agreed' for the ones settled, 'passed' for the ones turned down, 'spam' for the pay-us-to-feature-you kind, or 'all' for everything except spam.
limitNoHow many offers to return, newest first. Defaults to 25; 25 is the most this tool will ever return.
instagramAccountIdNoWhich connected Instagram account to look at, using the id from account_instagram_accounts. Leave it out for the workspace's first connected account.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/non-destructive, and the description goes well beyond them: brand, budget and deliverables are model-extracted from prose and may be wrong, confidence scores should be checked, and an AI provider must be configured. This is exactly the kind of caveat an agent needs before quoting figures.

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

Conciseness4/5

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

Content is dense and complete, but the opening sentence is a long run-on that crams the return shape into one clause chain. Information is front-loaded with the primary output, so it remains usable despite the length.

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

Completeness5/5

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

With no output schema and no annotations beyond read-only hints, the description carries the full burden and delivers: it enumerates returned fields, notes the monthly aggregates, discloses the AI extraction risk, and covers the provider requirement. Nothing an agent needs to call or interpret this tool is missing.

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

Parameters3/5

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

Schema coverage is 100%, so page, show, limit and instagramAccountId are fully documented in the schema itself. The description adds only indirect hints (newest first, monthly totals) and no per-parameter syntax beyond what the schema provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (lists brand collaboration offers found in DMs) plus the exact fields returned and ordering ('newest first'). It is clearly distinguishable from siblings like inbox_conversations or leads_recent, which cover different data domains.

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

Usage Guidelines5/5

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

Gives explicit user phrasings that should route here ('has anyone offered me a collab', 'how much have I been offered this month') and a distinct use case (checking what awaits a reply). It also warns that detection requires an AI provider and that an empty list is not equivalent to no interest, which prevents a misread of results.

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

flows_createCreate a DM flowAInspect

Creates a DM flow: a branching script that answers a direct message step by step, asking questions and offering buttons. The new flow starts unpublished with one trigger and one reply in it, so nothing reaches anyone until flows_publish is called — creating one is always safe. Flows are part of the paid plans, so a customer whose plan has none is refused here with the reason; repeat it to them as written. Building the steps themselves is done by the customer on the flow canvas, not through this tool.

NameRequiredDescriptionDefault
nameYesWhat to call the flow.
templateNoThe id of a starter template to build the flow from, if the customer named one. Leave it out for a blank flow.
timezoneNoThe customer's IANA time zone, used only by templates that have opening hours.
instagramAccountIdNoWhich connected Instagram account the flow answers for. Leave it out for all of them.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only say readOnlyHint=false and destructiveHint=false. The description goes well beyond: it discloses the initial state (unpublished, one trigger, one reply), that nothing reaches anyone until flows_publish is called, that the operation is safe, and that a paid-plan gate can refuse the call with a customer-facing reason string. That is exactly the side-effect and failure context an agent needs.

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

Conciseness5/5

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

Front-loaded with the core action and resource, then the safety/state facts, then the plan gate, then the boundary against flows_set_steps. Every sentence carries information an agent would otherwise have to guess.

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

Completeness5/5

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

With no output schema, the description still covers the resulting state of the created resource, the safety profile, and the error/refusal path, which is everything needed to call it correctly. Nothing material is missing for a single required-parameter create tool.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter already has a clear description, so the baseline is 3. The description adds no syntax or format detail beyond the schema (it only alludes to templates indirectly), so it does not earn above baseline.

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

Purpose5/5

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

States a specific verb and resource ("Creates a DM flow") and then defines what a DM flow actually is — a branching script that answers a DM step by step with questions and buttons. It also distinguishes itself from flows_publish and flows_set_steps by naming the publishing step and the canvas as the place steps are built.

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

Usage Guidelines5/5

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

Explicitly says when this is safe ("creating one is always safe" because the flow starts unpublished), what to do instead of building steps here ("done by the customer on the flow canvas, not through this tool"), and what to do on refusal (repeat the reason as written). Alternatives and conditions are all named.

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

flows_getRead a DM flow's stepsA
Read-only
Inspect

Reads one DM flow in full: every step, how the steps join up, its name, whether it is live, which connected Instagram account it answers for, and what happens when somebody triggers it a second time. Also lists what would stop it being published, in the words the customer's own dashboard uses. ALWAYS call this before flows_set_steps on a flow that already has steps in it — flows_set_steps replaces the whole flow, so anything you did not read you will delete. Use it as well for 'what does my flow say', 'why can I not publish this', or before quoting a flow's wording back to someone. The steps come back in the exact shape flows_set_steps takes, so you can read a flow, change one step, and send the whole thing back unaltered otherwise. Reading costs nothing and sends no messages.

NameRequiredDescriptionDefault
flowIdYesThe id of the flow to read, from flows_list or from flows_create.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the readOnly/destructive annotations, it discloses that reading is free, sends no messages, returns publish blockers in the dashboard's own wording, and returns steps in the exact shape flows_set_steps accepts. These are behavioral facts an agent cannot infer from the annotations or schema.

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

Conciseness4/5

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

Front-loads what the tool returns before moving to usage rules, and every sentence carries routing or safety information. It is on the longer side, but nothing is filler or restated from the name/title.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of explaining the return value, which it does thoroughly (contents, publish blockers, compatibility with flows_set_steps). Combined with the explicit pre-mutation workflow rule, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema coverage is 100% and the single flowId parameter is already documented in the schema with its source (flows_list or flows_create). The description adds no additional syntax or format detail about the parameter, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific verb (reads) and resource (one DM flow) and enumerates exactly what is returned: steps, their joins, name, live status, the connected Instagram account, and re-trigger behavior. This is clearly distinguishable from flows_list, which enumerates flows rather than reading one in full.

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

Usage Guidelines5/5

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

Gives an explicit must-do rule ('ALWAYS call this before flows_set_steps on a flow that already has steps') with the reason (flows_set_steps replaces the whole flow, so unread content is deleted). It also names concrete user intents ('what does my flow say', 'why can I not publish this', quoting wording) that select this tool over siblings.

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

flows_listDM flowsA
Read-only
Inspect

Lists the DM flows in the workspace: the step-by-step conversations HookSend can run in direct messages. Each one reports whether it is published or still a draft, how many steps it has, how many unresolved problems would stop it being published, how many times people have entered a step and how many link buttons were tapped. Use it for 'what flows do I have', 'is my flow live', or 'is anyone getting through it'. The flow's own step-by-step contents are not included: they are a large diagram, and this answers the questions that get asked about flows instead.

NameRequiredDescriptionDefault
limitNoHow many flows to return, newest first. Defaults to 25; 50 is the most this tool will ever return.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: exactly what each row reports (published/draft status, step count, unresolved problems, entry counts, link-button taps) and what is deliberately omitted. Return-shape disclosure is 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.

Conciseness4/5

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

Front-loaded with the core purpose, then return details, then usage cues, then the exclusion. Slightly long but each sentence carries distinct information; the final sentence justifies why contents are omitted rather than padding.

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

Completeness4/5

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

No output schema exists, so the description must carry the return-value burden, and it does so thoroughly by enumerating the reported fields and the deliberate exclusion. Complete for an agent deciding whether to call it, with only minor room to name the alternative detail tool explicitly.

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

Parameters3/5

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

Only one parameter (limit) with 100% schema description coverage, so the schema fully documents it. The description adds nothing about the limit or ordering beyond what the schema states, so the baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb (Lists) and resource (DM flows in the workspace) and clarifies what a 'flow' is. It also distinguishes itself from flows_get by explicitly stating the step-by-step contents are NOT included, so an agent can separate the two list/detail siblings without opening either schema.

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

Usage Guidelines4/5

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

Gives concrete usage contexts ('what flows do I have', 'is my flow live', 'is anyone getting through it'), which maps well to likely intents. It does not explicitly name flows_get as the alternative for step contents, though the exclusion note implies it.

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

flows_pausePause a DM flowAInspect

Switches a DM flow off. It stops answering new messages immediately and keeps all of its steps, so nothing the customer built is lost. Fully reversible with flows_publish, and always allowed. Use this when someone asks to stop, disable or remove a flow — there is deliberately no tool here that deletes one.

NameRequiredDescriptionDefault
flowIdYesThe id of the flow.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=false, and the description reinforces this with concrete behavioral detail: it stops answering new messages immediately, retains all steps, is fully reversible via flows_publish, and is always permitted. This adds real value beyond the annotations, though it says nothing about what the call returns or any rate limits.

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

Conciseness4/5

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

Front-loads the core action, then layers reversibility, permission posture, and usage guidance in short sentences. Each sentence carries information, though the closing clause about there being no delete tool is slightly tangential for a description.

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

Completeness5/5

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

For a single-parameter toggle with no output schema, the description covers state effects, reversibility, and permission posture, which is everything an agent needs to call it correctly. No material gap remains.

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

Parameters3/5

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

Only one parameter, flowId, and schema description coverage is 100%, so the schema fully documents it. The description implies which flow is being acted on but adds no format or lookup guidance beyond the schema, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb and resource ('Switches a DM flow off') and immediately differentiates itself from siblings by naming flows_publish as the reverse operation and noting no delete tool exists. An agent can distinguish this from flows_update or flows_publish without opening any schema.

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

Usage Guidelines5/5

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

Explicitly says when to use it ('when someone asks to stop, disable or remove a flow'), names the tool that undoes it (flows_publish), and states the exclusion that no deletion tool exists. Both the when and the alternatives are spelled out.

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

flows_publishPublish a DM flowAInspect

Switches a DM flow on, so from now on it answers the direct messages its trigger matches. Reversible with flows_pause. Two things can refuse it, and both give a sentence worth repeating: a flow with unfinished steps cannot be published at all, because a broken flow fails silently and the sender simply gets nothing; and a plan allows only so many flows live at once. Neither refusal changes anything, so the customer can fix the flow and try again.

NameRequiredDescriptionDefault
flowIdYesThe id of the flow.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false. The description goes well beyond that: it discloses reversibility, the two distinct refusal modes (unfinished steps, live-flow plan limit), the rationale for the silent-failure rule, and the important fact that a refusal leaves state unchanged so the user can retry. Only auth/permission behavior is unstated.

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

Conciseness4/5

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

Front-loaded with the action and its effect, then the reversal path, then the failure modes. Every sentence adds operational value, though phrasing like 'a sentence worth repeating' is slightly editorial and could be tightened.

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

Completeness4/5

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

For a single-parameter mutation with annotations covering the safety profile and no output schema, the description is nearly complete: action, effect, reversal, and failure conditions are all covered. The missing piece is permission/auth requirements.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single required 'flowId' parameter, so the schema already carries the parameter semantics. The description adds nothing about the id format or where to obtain it, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb+resource ('Switches a DM flow on') plus the concrete effect (it will answer matching direct messages). It explicitly names flows_pause as the counterpart, so an agent can separate this from the other flows_* siblings without opening a schema.

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

Usage Guidelines4/5

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

Names the alternative for the reverse operation ('Reversible with flows_pause') and lays out the two conditions under which the call is rejected. It gives clear context for when the tool applies, though it doesn't spell out prerequisites like required scopes or trigger configuration.

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

flows_set_stepsReplace a DM flow's stepsA
Destructive
Inspect

Writes the steps of a DM flow from a description: the whole conversation, in one call. THIS REPLACES THE ENTIRE FLOW. Every step you leave out is deleted, so unless the flow was only just created by flows_create and still holds nothing but its starter trigger and reply, call flows_get first, and send back the steps it gave you with your changes folded in. Read the flow, do not remember it. HookSend checks the flow before saving it and refuses the whole write if it could not run, naming what is wrong, so nothing is half-saved; it also draws the lines between the steps for you, from the steps themselves.

A flow is a list of steps. Each has an id you choose, a kind, and the fields that kind needs. A step that carries straight on (trigger, message, collect, ai_answer, tag, wait) goes to next, or to the step below it in the list when next is left out, or stops when next is null. A step that branches (buttons, quick_replies, condition, time_check, ai_route) names its own targets instead. A conversation finishes when a step points nowhere, at an end step, at a handoff step, which stops automating and lets a person take the thread over, or at a jump step, which carries it on in another of the customer's flows.

Three things worth knowing before you use them. A wait step holds the chat for up to a day, but Instagram only allows a message within 24 hours of the person's LAST message, so a long pause may arrive too late to send anything — keep one that matters well under 12 hours. A condition step can compare a collected answer as a number or a date, which is usually better than offering buttons for every amount. And any step can carry notify: true, which tells the customer in their inbox when somebody reaches it.

A flow that asks two questions:

{"nodes":[{"id":"start","kind":"trigger","keywords":["price","pricing"],"matchAny":true},{"id":"ask_size","kind":"buttons","prompt":"Happy to help! Which size are you after?","choices":[{"label":"Small","target":"ask_email"},{"label":"Large","target":"ask_email"}]},{"id":"ask_email","kind":"collect","prompt":"Where should I send the price list?","field":"email","variable":"email","next":"thanks"},{"id":"thanks","kind":"message","text":"Thanks! It is on its way.","next":null}]}

Saving never sends a message to anybody: the flow only starts answering once flows_publish switches it on, and a flow that is already live keeps answering with the new steps from the moment this returns. Steps needing a photo (cards) or the customer's own webhook address are built on the canvas, not here.

NameRequiredDescriptionDefault
edgesNoLeave this out. HookSend works out the lines between the steps from the steps themselves. It is here only so the flow flows_get handed you can be sent straight back: if you pass lines that disagree with your steps, the write is refused rather than saved with the two halves out of step.
nodesYesEvery step in the flow, in the order a conversation meets them. This is the whole flow: anything missing here is deleted. It needs at least one trigger, or nothing can start it.
flowIdYesThe id of the flow whose steps are being replaced.
confirmNoSet to true to confirm this cannot be undone.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds substantial context beyond them: omitted steps are deleted, HookSend validates and refuses the whole write atomically ("nothing is half-saved"), edges are auto-derived, saving never sends messages and a live flow updates the instant it returns. These are the exact behavioral traits an agent needs for a destructive full-replace call.

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

Conciseness4/5

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

Front-loaded with the critical warning ("THIS REPLACES THE ENTIRE FLOW") and organized into purpose, step model, three gotchas, a worked example, and save semantics. It is long, but for a destructive full-replace tool with 17 step kinds the length is largely justified; a few of the gotchas overlap schema field text.

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

Completeness5/5

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

No output schema exists, yet the description covers what the agent needs: atomic validation behavior, canvas-only step kinds, publish gating, flowId semantics, and a concrete example payload. Nothing material is missing for correct invocation of a complex destructive tool.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds a conceptual model beyond the field docs: how straight-through steps use `next` vs branching steps naming targets, how a conversation terminates (end/handoff/jump), and the wait/24-hour Instagram constraint. This framing meaningfully exceeds what the per-field schema text conveys.

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

Purpose5/5

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

States a specific verb and resource ("Writes the steps of a DM flow") and immediately scopes it ("the whole conversation, in one call"), then flags the destructive scope in caps. An agent can distinguish it from flows_update, flows_create, and campaigns_set_steps without opening a schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-call guidance: call flows_get first unless the flow was just created by flows_create and holds only the starter trigger/reply, and send back the steps with changes folded in ("Read the flow, do not remember it"). It also states when-not to use it — steps needing a photo (cards) or the customer's webhook address are built on the canvas, not here.

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

flows_templatesDM flow starter templatesA
Read-only
Inspect

Lists the ready-made flows a new one can be built from, with the id flows_create takes as its template. Each is a complete, working flow that only needs its words changed, so starting from the closest one and adjusting it is usually quicker and safer than writing a flow from nothing. Call this before flows_create whenever the customer describes something a template already does, then flows_get the new flow to see the steps it came with. It reads a fixed list built into HookSend: no account of theirs is touched and nothing is charged.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds genuinely new behavioral context: the list is fixed and built into HookSend, no customer account is touched, and nothing is charged. It does not describe the returned shape, but the safety profile is more than adequately covered.

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

Conciseness5/5

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

Front-loads the purpose, then the workflow guidance, then the side-effect reassurance, in four compact sentences. Nothing is repeated from the title or restated tautologically.

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

Completeness4/5

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

For a no-argument read tool with no output schema, the description supplies what an agent needs: what it returns, how to consume the id, and that it is side-effect free. Only the precise content/shape of each template entry is left implicit, which is minor given no output schema is declared.

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

Parameters4/5

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

Zero parameters, so the baseline is 4 and the schema already declares that it takes no arguments. The description adds cross-tool value by explaining what the returned template id is used for in flows_create, which the empty schema cannot convey.

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

Purpose5/5

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

States a specific verb and resource ('Lists the ready-made flows') and immediately ties its output to a sibling's parameter ('the id flows_create takes as its template'). An agent can distinguish it from flows_list, flows_get, and flows_create without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit sequencing ('Call this before flows_create whenever the customer describes something a template already does') and names the follow-up call ('then flows_get the new flow'). It also states when not to bother writing from scratch, which is a real routing decision.

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

flows_updateRename or reassign a DM flowAInspect

Renames a DM flow, moves it to a different connected Instagram account, or changes what happens when somebody triggers it a second time. It does not change the flow's steps — use flows_set_steps for those. Reversible by calling it again with the old value, and free of any plan check.

NameRequiredDescriptionDefault
nameNoThe flow's new name.
flowIdYesThe id of the flow to change.
reentryNoWhat happens when somebody who has already been through this flow sends its trigger word again. restart is the default and what every flow does today: the chat starts over from the top and the answers from last time are dropped. keep_answers starts over but remembers what they told you, so a returning customer can be sent down a different path instead of being asked their size a third time. once leaves them alone — the flow stays quiet and whatever else you have set up answers them instead, which is what a welcome sequence or a one-per-person offer wants. Change it when the customer describes either of those; do not change it on a guess.
instagramAccountIdNoThe connected account the flow should answer for. Pass null to have it answer for all of them.

TDQS

A4.4/5.0
Behavior4/5

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

Goes beyond the annotations by disclosing that the operation is reversible ('Reversible by calling it again with the old value') and that it is 'free of any plan check' — both are non-obvious behavioral traits for a write tool that the destructiveHint=false annotation alone does not convey. It does not describe permissions or what the response returns.

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

Conciseness5/5

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

Three sentences, no filler: capability list first, sibling exclusion second, reversibility/cost third. Every sentence carries information an agent needs.

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

Completeness4/5

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

Covers scope, the sibling boundary, reversibility and the absence of a plan gate for a mutation tool with no output schema. The main omission is any mention of required permissions or account-scope preconditions, which an agent may need to call this correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description maps each capability to a parameter (rename, reassign account, change re-entry behavior), adding intent-level meaning on top of the already detailed schema text. The instagramAccountId=null semantics are left entirely to the schema.

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

Purpose5/5

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

States a precise verb set and resource ('Renames a DM flow, moves it to a different connected Instagram account, or changes what happens when somebody triggers it a second time') and explicitly disambiguates from the sibling flows_set_steps. An agent can distinguish it from flows_create, flows_pause or flows_set_steps without opening any schema.

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

Usage Guidelines4/5

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

Explicitly routes step-editing work to flows_set_steps ('It does not change the flow's steps'), which is a clear when-not-this-tool rule. It gives no guidance on ordering versus flows_publish or flows_create, but the primary boundary with the closest sibling is stated.

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

guard_cleanup_previewPreview a comment cleanupA
Read-only
Inspect

Reads the existing comments on one of the customer's posts and reports what Comment Guard's current rules WOULD do to each, without touching anything. This is where the comment ids for guard_cleanup_run come from, so a sweep is always shown to the customer before it is run. It covers up to 500 comments on the post; the AI rules score the first 150 of those and the rest are judged by the pattern rules alone, which the answer reports as aiNotScored. Comments the account posted itself come back as KEEP and are not offered, because Guard is set to skip them — so the number read and the number flagged will not add up, and that is correct rather than a fault. It reads live from Instagram and runs every enabled rule, so it is slower than the other tools. Nothing here is a plan limit.

NameRequiredDescriptionDefault
limitNoHow many of the flagged comments to list, worst first as the rules found them. Defaults to 50; 200 is the most this tool will return. The counts always cover the whole post whatever this is set to.
mediaIdYesThe Instagram media id of the post to look at, from instagram_posts. Guard reads its comments live.
accountIdNoWhich connected Instagram account this is about, using the id from account_instagram_accounts. Leave it out for the customer's first connected account.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already mark it read-only and non-destructive, but the description adds substantial behavioral detail beyond that: it reads live from Instagram, runs every enabled rule, is slower than other tools, covers up to 500 comments, scores only the first 150 with AI rules, reports unscored comments as aiNotScored, returns account-authored comments as KEEP, and warns that read and flagged counts will not add up. It also states that nothing here counts against plan limits.

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

Conciseness5/5

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

The description is front-loaded with the core read-only preview behavior, then layers in necessary caveats about coverage, scoring, KEEP comments, and plan limits. Every sentence adds operational context for a tool with unusual counting behavior, and none appears redundant.

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

Completeness5/5

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

Given no output schema and only read-only annotations, the description compensates fully by explaining return semantics (aiNotScored, KEEP), scope limits, live-read behavior, and how counts may differ. An agent has enough context to call it correctly and interpret the results.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents mediaId, accountId, and limit thoroughly. The description does not add parameter-specific syntax or defaults beyond what the schema provides, so the baseline of 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb and resource: it reads existing comments on a customer's post and reports what Comment Guard's current rules would do, without modifying anything. It also distinguishes itself from guard_cleanup_run by explaining that this is the source of comment ids for that tool, so an agent can tell them apart.

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

Usage Guidelines4/5

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

It clearly frames the tool as a required preview step before guard_cleanup_run, saying a sweep is always shown to the customer before it is run. That gives strong context for when to use it, but it does not explicitly state when not to use it or name other guard siblings as alternatives.

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

guard_cleanup_runClean up comments on a postA
Destructive
Inspect

Hides or deletes a list of existing comments on one of the customer's posts, in the background, as one sweep. This reaches real people: with action DELETE the comments are removed from Instagram permanently and nobody can restore them, and even HIDE is visible to the commenter as their comment vanishing. Get the comment ids from a Comment Guard cleanup preview first and read the customer the list, or at least the count, before confirming. Only one sweep runs per account at a time, and a second one is refused while the first is going. Up to 500 comments in one call. No plan check applies.

NameRequiredDescriptionDefault
actionNoHIDE (the default) leaves the comment in place but visible only to its author. DELETE removes it from Instagram permanently.
confirmNoSet to true to confirm this cannot be undone.
mediaIdYesThe Instagram media id of the post whose comments these are.
accountIdNoWhich connected Instagram account the post belongs to. Leave it out for the customer's first account.
commentIdsYesThe ids of the comments to hide or delete, from the cleanup preview.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description goes well beyond them: it spells out that DELETE is permanent and unrecoverable on Instagram, that even HIDE is visible to the commenter, that work happens asynchronously in the background, that concurrency is limited to one sweep per account, and that no plan check applies. This is exactly the operational context an agent needs before an irreversible action.

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

Conciseness5/5

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

Front-loads the action and its scope in the first clause, then layers risk, prerequisite, and limits. Every sentence carries distinct operational weight — nothing is filler, including the plan-check note.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers risk, prerequisites, batch limits, and concurrency. It does not address partial-failure behavior (e.g., some ids invalid) or what the call returns, which is a minor remaining gap given no output schema exists to define the response.

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

Parameters3/5

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

Schema description coverage is 100%, so the enum semantics for action, the confirm flag, and the 500-item cap are already documented in the schema. The description reinforces the permanence of DELETE and the confirmation step but adds no syntax or format detail beyond what the schema supplies, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (hides or deletes) plus resource (existing comments on a post) and scope (one sweep, in the background). It also implicitly distinguishes itself from the sibling guard_cleanup_preview by telling the agent to source comment ids from that preview rather than calling this blind.

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

Usage Guidelines5/5

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

Gives explicit prerequisites and ordering: fetch ids from a cleanup preview first, show the customer the list or count before confirming, and note that only one sweep per account runs at a time so a second call is refused. That is clear when-to-use and when-it-will-fail guidance rather than inference.

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

guard_recent_decisionsComment Guard decisionsA
Read-only
Inspect

What Comment Guard has decided about recent comments on one Instagram account, newest first: the handle, the comment, the verdict, the rule that decided it and how confident it was. Verdicts are HIDDEN, DELETED, REVIEW (held for the owner), KEPT (let through), WOULD_HIDE and WOULD_DELETE (recorded during watch-only, so the comment was never touched) and FAILED (the rules ran but Instagram refused). Kept comments are included on purpose: a moderation log that showed only removals gives no way to tell quiet from broken. The answer also carries a count per verdict, which rules fired in the last day, and handles that keep coming back. Deleted comments keep their text for 48 hours only, so older rows may have none.

NameRequiredDescriptionDefault
pageNoPage of the log, 1 being the newest. HookSend reads it 25 rows at a time.
limitNoHow many decisions to return, newest first. Defaults to 10; 25 is the most this tool will ever return.
filterNoWhich decisions to return. 'watch' is what Guard would have done during watch-only. Defaults to all of them.
searchNoMatches part of the comment text or the commenter's handle.
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare a safe read, yet the description still adds substantial behaviour: the full verdict vocabulary, the fact that WOULD_HIDE/WOULD_DELETE mean the comment was never touched, that FAILED means Instagram refused the action, and the 48-hour text-retention window that makes older rows incomplete. This is exactly the context an agent needs to interpret results honestly.

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

Conciseness4/5

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

Front-loaded with what the tool returns before going into verdict semantics, and every clause carries information since no output schema exists to carry the return shape. It is long, but the enumeration of verdicts and retention caveat are load-bearing rather than filler.

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

Completeness5/5

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

With no output schema, the description takes on the full burden of describing the return payload — handle, comment, verdict, deciding rule, confidence, per-verdict counts, rules fired in the last day, and repeat handles — plus the data-retention caveat. Nothing an agent needs to interpret the response is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description earns more by mapping the filter enum values to concrete verdicts — notably that 'watch' corresponds to WOULD_HIDE/WOULD_DELETE, which the enum label alone does not convey. It also explains the default scope of instagramAccountId (whole workspace when omitted).

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

Purpose5/5

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

Names a specific verb (reports what Guard decided), a specific resource (recent comment decisions) and a scope (one Instagram account, newest first). An agent can distinguish it immediately from guard_rules_* (rule management) and logs_recent (generic activity log) without opening a schema.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: this is the moderation-log reader, and the description justifies why kept comments appear ('a moderation log that showed only removals gives no way to tell quiet from broken'). It never names an alternative tool or an explicit when-not-to-use, and the only routing guidance ('leave it out to cover every account') is attached to a parameter rather than to the tool.

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

guard_rules_createCreate a Comment Guard ruleAInspect

Writes a new Comment Guard rule for one Instagram account. A rule can look for words and phrases, for a description the AI judges each comment against, or for a regular expression, and it decides whether a matching comment is hidden, deleted, held for review or deliberately kept. The rule is always saved switched OFF, so creating one is safe and touches nothing: guard_rules_set_enabled switches it on once the customer has agreed to what it will do. Tell them the action before that, because a rule set to DELETE removes real comments from Instagram for good. HookSend allows up to 60 rules per account and refuses a 61st with a sentence to repeat; only an admin or the owner can add one.

NameRequiredDescriptionDefault
kindNoHow the rule decides. WORDS (the default) matches the words and phrases in `words`. PROMPT hands each comment to the AI with your `prompt` and needs the account's AI rules switched on and AI allowance left. REGEX matches the regular expression in `pattern`.
nameYesWhat the customer will see this rule called in their list, at most 80 characters, for example 'Crypto spam' or 'Competitor handles'.
fuzzyNoWORDS rules only. True (the default) also catches a word spelt with padding or symbols in it, such as f-r-e-e.
scopeNoWhich posts the rule watches. ALL is every post on the account. SELECTED is only the posts named in mediaIds. BOOSTED is only ads and boosted posts. ALL is the default.
wordsNoFor a WORDS rule: the words and phrases to look for, up to 500. A phrase is matched as a phrase.
actionNoWhat happens to a comment this rule matches. HIDE leaves it in place but visible only to whoever wrote it, and can be undone. DELETE removes it from Instagram permanently and nobody can restore it. REVIEW touches nothing and holds it for the customer to decide. KEEP lets it through, which is how an exception to another rule is written. HIDE is the default and the safe choice.
promptNoFor a PROMPT rule: what the customer wants gone, in plain words, for example 'comments offering to grow my followers'. At most 600 characters.
patternNoFor a REGEX rule: the expression, at most 200 characters, matched case-insensitively. HookSend refuses a pattern that could hang its workers — nested repetition, backreferences and look-behind — and says which, so simplify and try again rather than repeating it.
mediaIdsNoWith scope SELECTED, the Instagram media ids of the posts this rule watches, up to 200. Ignored for the other scopes.
accountIdNoWhich connected Instagram account this is about, using the id from account_instagram_accounts. Leave it out for the customer's first connected account.
anyScriptNoWORDS rules only. True (the default) also catches a word written in another alphabet or with accented and look-alike characters.
insideWordsNoWORDS rules only. False (the default) matches a word only on its own, so 'ass' does not fire on 'class'. True matches it inside longer words as well, which catches more and is wrong more often.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false / destructiveHint=false, so the safe-create profile is covered; the description usefully adds the off-by-default behavior, the 60-rule ceiling with a repeatable error sentence, and the permission requirement. However it does not describe the response (returned rule id/shape), so the add-on value is real but not comprehensive.

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

Conciseness4/5

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

Front-loaded with what the tool does, then constraints and safety in descending priority. Dense but each sentence carries a distinct fact; the closing sentence on the rule limit and permissions is slightly trailing but not wasteful.

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

Completeness5/5

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

For a 12-parameter mutation tool with no output schema, the description covers the critical facts an agent needs: the rule is inert until enabled, deletion is irreversible, quota and permission limits, and the sibling that activates it. No meaningful gap remains.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter, including all three enums, is already documented in detail. The description paraphrases the kind-to-field relationship (words/prompt/pattern) and the permanence of DELETE, but adds no semantics the schema does not already carry, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Writes a new Comment Guard rule for one Instagram account') and enumerates the three matching modes (WORDS, PROMPT, REGEX), which cleanly separates it from guard_rules_update, guard_rules_delete and guard_rules_set_enabled.

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

Usage Guidelines5/5

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

Explicitly names the follow-up tool and condition ('guard_rules_set_enabled switches it on once the customer has agreed'), warns to disclose the action first, and states prerequisites (admin/owner only, 60 rules per account). Nothing about when-to-use 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.

guard_rules_deleteDelete a Comment Guard ruleA
Destructive
Inspect

Deletes one of the customer's own Comment Guard rules. This cannot be undone: the words, description or pattern in it are gone and would have to be written again from scratch. Prefer guard_rules_set_enabled with enabled false — a rule that is switched off stops being applied immediately, keeps everything in it, and can be switched back on, which is what somebody asking to 'get rid of' a rule almost always means. HookSend's built-in rules cannot be deleted at all and the refusal says so. Only an admin or the owner can delete a rule. Read the rule's name back to the customer before confirming.

NameRequiredDescriptionDefault
ruleIdYesThe id of the rule to delete, from guard_settings.
confirmNoSet to true to confirm this cannot be undone.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds substantially more: irreversibility with the concrete loss ('words, description or pattern... gone and would have to be written again from scratch'), the hard restriction on built-in rules including the refusal behavior, the permission requirement, and a confirmation workflow. This goes well beyond the annotation payload.

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

Conciseness5/5

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

Front-loaded with the action and its irreversibility, then the preferred alternative, then restrictions and permissions, then the UX confirmation step. Every sentence carries distinct operational value; there is no filler or repetition of the title.

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

Completeness5/5

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

For a destructive two-parameter mutation with no output schema, the description covers the safety profile, the recommended alternative, the failure mode (built-in rules), authorization, and the confirmation requirement. Nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so ruleId and confirm are already documented, including that ruleId comes from guard_settings. The description adds no syntax or format detail beyond the schema, and the 'read the rule's name back before confirming' instruction is workflow rather than parameter semantics. Baseline 3 is correct.

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

Purpose5/5

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

States a specific verb and resource ('Deletes one of the customer's own Comment Guard rules') and implicitly scopes it against guard_rules_create/update and guard_rules_set_enabled, which the description names directly. An agent can distinguish this from every sibling without opening a schema.

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

Usage Guidelines5/5

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

Explicitly tells the agent to prefer guard_rules_set_enabled with enabled false, and explains why ('a rule that is switched off stops being applied immediately, keeps everything in it') plus the user intent that selects it ('what somebody asking to "get rid of" a rule almost always means'). It also states when the tool cannot be used at all (built-in rules) and who may call it (admin or owner).

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

guard_rules_set_enabledSwitch a Comment Guard rule on or offA
Destructive
Inspect

Switches one Comment Guard rule on or off. A rule that is on is applied to every new comment on the customer's posts from then on, and depending on how the rule is set it may hide the comment or delete it — a deleted comment is gone from Instagram for good and cannot be brought back, which is why this needs confirming. Switching a rule off is immediate and safe. Ask the customer first, and tell them which rule and whether it hides or deletes; the Comment Guard screen lists the rules with their actions. No plan check applies.

NameRequiredDescriptionDefault
ruleIdYesThe id of the Comment Guard rule.
confirmNoSet to true to confirm this cannot be undone.
enabledYesTrue to switch the rule on, false to switch it off.
accountIdNoWhich connected Instagram account the rule belongs to. Leave it out for the customer's first account.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, but the description adds real consequence detail: an enabled rule deletes future comments permanently from Instagram, deletion cannot be undone, hence confirmation; switching off is immediate and safe. It also discloses no plan check applies, going well past the safety hints.

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

Conciseness4/5

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

Purpose is front-loaded and every clause carries weight (consequence, confirmation, off-is-safe, plan check). It is fairly dense with em-dash clauses, slightly heavier than necessary, but no wasted sentences.

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

Completeness5/5

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

For a destructive, non-read-only mutation with no output schema, the description covers the irreversible consequence, the confirmation requirement, the safe direction (off), and the billing exception. 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.

Parameters3/5

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

Schema coverage is 100% and all four parameters (ruleId, enabled, confirm, accountId) are already documented in the schema. The description adds only implicit framing around confirming and which rule, so baseline 3 is correct.

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

Purpose5/5

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

States a specific verb (switch on/off) and resource (one Comment Guard rule), and the 'one rule' scoping distinguishes it from guard_rules_create/delete/update siblings. An agent can tell what it does without opening the schema.

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

Usage Guidelines4/5

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

Gives clear operational guidance: confirm with the customer first, tell them which rule and whether it hides or deletes, and notes 'No plan check applies.' It doesn't explicitly name alternative tools (e.g. guard_rules_update for changing a rule's action), so it stops short of full when/when-not routing.

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

guard_rules_updateUpdate a Comment Guard ruleA
Destructive
Inspect

Changes an existing Comment Guard rule: its name, what it looks for, what it does to a comment that matches, and which posts it watches. Most of it is reversible by calling this again with the old value, which guard_settings will tell you. It cannot switch a rule on or off — guard_rules_set_enabled does that, and keeping them apart means editing a rule's wording can never start it running by accident. It asks for confirmation because of one change it can make: setting the action to DELETE on a rule that is already switched on means every comment it matches from then on is removed from Instagram permanently, and no edit afterwards brings those back. Tell the customer what the rule will do before confirming. HookSend's own built-in rules keep their name and what they look for and will ignore those fields; their action and scope can be changed. Only an admin or the owner can change a rule.

NameRequiredDescriptionDefault
nameNoA new name for the rule. Ignored for one of HookSend's built-in rules.
fuzzyNoAlso catch a word spelt with padding or symbols in it, such as f-r-e-e.
scopeNoWhich posts the rule watches. ALL is every post on the account. SELECTED is only the posts named in mediaIds. BOOSTED is only ads and boosted posts. ALL is the default.
wordsNoFor a rule that matches words: the complete new list, up to 500. It replaces the old list rather than adding to it, so include the words the customer is keeping.
actionNoWhat happens to a comment this rule matches. HIDE leaves it in place but visible only to whoever wrote it, and can be undone. DELETE removes it from Instagram permanently and nobody can restore it. REVIEW touches nothing and holds it for the customer to decide. KEEP lets it through, which is how an exception to another rule is written. HIDE is the default and the safe choice.
promptNoFor an AI rule: a new description of what the customer wants gone.
ruleIdYesThe id of the rule to change, from guard_settings.
confirmNoSet to true to confirm this cannot be undone.
patternNoFor a pattern rule: the new regular expression. One that could hang the workers is refused with the reason.
mediaIdsNoWith scope SELECTED, the Instagram media ids this rule watches, up to 200. The list replaces whatever was there.
accountIdNoWhich connected Instagram account this is about, using the id from account_instagram_accounts. Leave it out for the customer's first connected account.
anyScriptNoAlso catch a word written in another alphabet or with look-alike characters.
insideWordsNoMatch a word inside longer words as well, not only on its own.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true, and the description substantially enriches that: it explains which changes are reversible, why confirmation is required (DELETE on an already-enabled rule permanently removes matched comments with no recovery), and that built-in rules ignore name/words fields. This is exactly the beyond-annotation context the rubric rewards.

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

Conciseness4/5

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

Front-loaded with the core action and the destructive exception is clearly signposted. It is dense across five sentences and the 'Tell the customer what the rule will do before confirming' sentence is more workflow instruction than tool semantics, but no sentence is filler.

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

Completeness5/5

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

For a 13-parameter mutation tool with no output schema, the description covers the safety profile, reversibility, confirmation trigger, permission model, sibling routing, and built-in rule edge cases. An agent has everything needed to call it correctly and safely.

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

Parameters4/5

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

Schema coverage is 100%, so the schema carries the per-field detail and the baseline is 3. The description adds framing value by grouping the 13 parameters into conceptual categories (name, what it looks for, what it does, which posts) and flagging that built-in rules ignore the name/matching fields, going slightly beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb (changes) and resource (an existing Comment Guard rule) and enumerates the four editable dimensions (name, matching criteria, action, watched posts). It distinguishes itself from siblings by explicitly naming guard_rules_set_enabled as the tool that toggles rules on/off.

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

Usage Guidelines5/5

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

Explicit routing: 'It cannot switch a rule on or off — guard_rules_set_enabled does that,' plus the rationale for the separation. It also states the permission prerequisite (admin or owner) and the confirmation workflow, so an agent knows when this tool applies and when it does not.

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

guard_settingsComment Guard setupA
Read-only
Inspect

How Comment Guard is set up for one Instagram account: whether it is switched on, whether it is in watch-only mode (recording what it would do without touching a comment), whether the AI rules are on and how confident they must be before acting, who is protected from it, the allow lists, and every rule with its action and whether it is enabled. Also reports the AI allowance, since a rule that needs AI does nothing once that runs out. Use it for 'is Comment Guard on', 'what is it set to do' or 'why did it not catch this'. With no account given it answers for the workspace's first connected account.

NameRequiredDescriptionDefault
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine behavioral context beyond that: watch-only mode is explained as recording intent without touching comments, and it notes that AI-dependent rules become inert once the AI allowance is exhausted, which is a non-obvious operational constraint an agent would otherwise miss.

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

Conciseness4/5

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

The opening clause states the scope immediately and the usage phrases are tacked on at the end, so it is front-loaded. The first sentence is a long comma-separated enumeration that is dense but each item is a real returned field, so little is wasted; only slight trimming of the field list would tighten it.

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

Completeness4/5

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

There is no output schema, so the description correctly carries the burden of describing the return shape, and it does so thoroughly with the enumerated configuration fields. The one material gap is the account-fallback behavior, where description and schema disagree, leaving the agent unsure whether omitting the id returns one account or all accounts.

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

Parameters2/5

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

Schema coverage is 100% and the parameter is fully documented, so the baseline would be 3. However, the description's statement that omitting the account 'answers for the workspace's first connected account' directly conflicts with the schema description, which says leaving it out 'covers every account in the workspace.' This contradiction adds confusion rather than meaning, so it scores below baseline.

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

Purpose5/5

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

The description names the exact resource (Comment Guard configuration for one Instagram account) and enumerates the concrete fields returned: on/off state, watch-only mode, AI rule enablement and confidence threshold, protected users, allow lists, per-rule action and enabled flag, plus the AI allowance. This level of detail cleanly separates it from guard_settings_update (writes), guard_rules_* (rule CRUD) and guard_recent_decisions (decision log) without opening any schema.

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

Usage Guidelines4/5

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

It supplies three natural-language trigger phrases ('is Comment Guard on', 'what is it set to do', 'why did it not catch this') and states the no-argument behavior, which is solid context for selecting the tool. It stops short of explicitly naming alternatives or when-not-to-use conditions (e.g. 'use guard_recent_decisions for the actual decision history'), so it is clear but not fully routing.

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

guard_settings_updateChange the Comment Guard settingsAInspect

Changes how Comment Guard works for one Instagram account: whether it is on at all, whether it only watches and records instead of acting, whether the AI rules run and how sure they must be, who it never acts against, and the words, handles and domains it always lets through. Only the fields you pass are changed and every one of them can be set back, so nothing here is irreversible on its own — but switching Guard on hands every new comment to the rules that are enabled, and a rule set to DELETE removes comments from Instagram permanently. Tell the customer which rules are live, from guard_settings, before switching it on. watchOnlyHours is the cautious way to start: Guard records what it would have done and touches nothing. Only an admin or the owner can change these settings.

NameRequiredDescriptionDefault
enabledNoTrue to have Comment Guard check every new comment against the rules that are switched on. False stops it checking anything, immediately, and keeps all the rules and settings.
timezoneNoThe customer's IANA time zone, such as Asia/Kolkata, which decides where their day ends in the Guard reports.
accountIdNoWhich connected Instagram account this is about, using the id from account_instagram_accounts. Leave it out for the customer's first connected account.
aiEnabledNoTrue to run the rules that ask the AI to judge a comment. They stop working when the workspace's AI allowance runs out, whatever this is set to; guard_settings reports what is left.
allowWordsNoWords and phrases that make Guard leave a comment alone whatever the rules say, up to 300. The complete list, which replaces the old one.
allowDomainsNoDomains a comment may link to without being treated as spam, up to 300, for example the customer's own shop. The complete list, which replaces the old one.
allowHandlesNoInstagram handles Guard never acts against, up to 300, with or without the @. The complete list, which replaces the old one.
protectLeadsNoTrue means Guard never acts on a comment from somebody already in the customer's leads.
watchOnlyHoursNoPut Guard in watch-only mode for this many hours from now, up to 336 (fourteen days). While it is on, Guard records what it would have done and does not touch a single comment, which is how to show a nervous customer what it would catch. Pass 0 to end watch-only and let it start acting.
businessContextNoA line or two on what the business does, at most 400 characters, given to the AI rules so they can tell a real question from spam. Pass an empty string to clear it.
protectVerifiedNoTrue means Guard never acts on a comment from a verified account.
skipOwnCommentsNoTrue (the usual setting) means Guard never acts on comments the account itself posted, including its own replies. It also keeps them out of what a cleanup sweep offers to remove.
protectCustomersNoTrue means Guard never acts on a comment from somebody recorded as a customer.
confidenceThresholdNoHow sure the AI must be, from 50 to 99, before its verdict is acted on. Higher means fewer wrong removals and more spam let through. Most customers sit around 80.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, it discloses the real risk model: only passed fields change, everything is reversible on its own, but enabling Guard hands comments to live rules and a DELETE rule removes comments permanently from Instagram. It also notes the AI allowance dependency and the admin/owner authorization requirement.

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

Conciseness4/5

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

The opening sentence is long but front-loads the scope, and subsequent sentences add privileged operational context (reversibility, permanence, prerequisite, permission) with little waste. Slightly dense, but every clause earns its place.

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

Completeness5/5

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

For a 14-parameter mutation tool with no output schema and minimal annotations, the description supplies the missing safety, permission, prerequisite, and rollback context an agent needs before invoking. Nothing essential to correct invocation is omitted.

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

Parameters4/5

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

Schema coverage is 100%, so the schema carries the bulk of parameter documentation and baseline is 3. The description adds framing value by grouping parameters by intent (allow-lists, protected parties, AI certainty) and by positioning watchOnlyHours and enabled in operational terms, though it does not add syntax the schema lacks.

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

Purpose5/5

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

The description states a specific verb (changes) and resource (Comment Guard settings) and enumerates the exact aspects it controls: on/off, watch-only, AI rules and confidence, protected parties, and allow-lists. It is clearly distinguishable from siblings like guard_rules_update or guard_settings.

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

Usage Guidelines5/5

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

It gives explicit when-to-use guidance and prerequisites: consult guard_settings for live rules before enabling, use watchOnlyHours as the cautious way to start, and only admins/owners may change settings. It also recognizes the nervous-customer scenario and the alternative ramping path.

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

inbox_conversationsRecent DM conversationsA
Read-only
Inspect

The Instagram direct message conversations on a connected account, most recently active first: who it is with, when it last moved, one clipped line of the last message, and whether that last message came from the account or from the other person. A row carrying handedOverByFlow is one a DM flow deliberately passed to a person to answer, naming the flow that did it; the AI is staying out of those, so they are the ones actually waiting on the account's owner. A row carrying flowNotice is one a flow has left something to read about within the last day: what is reached when somebody got to a step the customer asked to hear about, and anything else means a flow stopped part way through that chat, which is worth telling them along with which flow and which step. A row carrying cameFrom is one whose conversation began on a click-to-DM ad or on a link the customer tagged, naming the ad or the tag; nothing to do with referrals_overview, which is the affiliate programme. Use it for 'what is in my inbox', 'who has written to me', 'is anyone waiting for a reply', 'which of my ads are people messaging me from', or to find the thread id and person id the other inbox tools need. It reads live from Instagram, so it is slower than most tools and covers one account at a time. Each row carries only a short excerpt; call inbox_thread for the actual messages of one conversation.

NameRequiredDescriptionDefault
limitNoHow many conversations to return, newest first. Defaults to 20; 50 is the most this tool will ever return.
instagramAccountIdNoWhich connected Instagram account to look at, using the id from account_instagram_accounts. Leave it out for the workspace's first connected account.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds important behavioral context: it reads live from Instagram, is slower than most tools, covers one account at a time, and returns only short excerpts. It also explains the meaning of the handedOverByFlow, flowNotice, and cameFrom flags, which is valuable for interpreting rows.

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

Conciseness4/5

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

The purpose is front-loaded and every sentence mostly earns its place by explaining return fields, flags, and limitations. However, the description is long and uses dense semicolon-linked clauses rather than a more scannable structure, so it is informative but not maximally concise.

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

Completeness5/5

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

Given no output schema and only two simple annotations, the description provides a thorough account of what rows represent, what the key flags mean, what is not included, and which sibling to call for full messages. It also covers the live-read performance trade-off and single-account scope, making it complete for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the limit and instagramAccountId parameters are fully documented in the schema itself. The description mentions one account at a time and most recently active first, but does not add parameter-level syntax or constraints beyond what the schema already provides; baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb (read/list) and resource (Instagram direct message conversations on a connected account), with ordering and key fields. It clearly distinguishes itself from inbox_thread for actual messages and from referrals_overview for the affiliate programme, so an agent can identify the right tool without opening schemas.

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

Usage Guidelines5/5

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

It gives explicit use cases such as 'what is in my inbox', 'who has written to me', 'is anyone waiting for a reply', and 'which of my ads are people messaging me from', plus finding thread and person ids for other inbox tools. It also names the alternative inbox_thread for actual message content and clarifies the relationship to referrals_overview, 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.

inbox_send_replyReply to a direct messageA
Destructive
Inspect

Sends an Instagram direct message from a connected account to one person, as a reply in an existing conversation. This reaches a real customer on their phone: a sent message cannot be unsent, edited or recalled, which is why it has to be confirmed. It also spends one message from the workspace's monthly DM allowance (account_usage shows what is left) and HookSend refuses the send when that allowance is used up. After it goes out, HookSend's automatic replies pause for this person for a while, on the assumption a human has taken the conversation over. Instagram only allows a reply within 24 hours of the person's last message, and refuses it afterwards with an explanation. Read the customer the exact words and the handle, and get their agreement, before confirming. Get personId from inbox_conversations.

NameRequiredDescriptionDefault
confirmNoSet to true to confirm this cannot be undone.
messageYesExactly what to send, as the customer approved it. Plain text, up to 1000 characters, which is Instagram's limit.
personIdYesWho to reply to: the personId from inbox_conversations for that conversation. This is not an Instagram handle.
instagramAccountIdNoWhich connected Instagram account to look at, using the id from account_instagram_accounts. Leave it out for the workspace's first connected account.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructive/not-readOnly, but the description adds substantial context beyond them: the message cannot be unsent, edited or recalled; it consumes one unit of the workspace's monthly DM allowance and HookSend refuses when exhausted; and automatic replies pause for that person afterward. This is exactly the behavioral disclosure an agent needs before a destructive send.

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

Conciseness4/5

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

Front-loaded with what the tool does and its irreversible nature, and nearly every sentence earns its place. Slightly long, with some overlap between the confirmation guidance and the schema's confirm description.

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

Completeness5/5

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

No output schema exists, and the description covers the full calling context: identity of the sender, source of personId, the irreversible-send constraint, rate/allowance gating, the 24-hour window, and the confirmation workflow. 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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description adds marginal value by reinforcing the confirm semantics ('get their agreement, before confirming') and restating the personId source, though much of that duplicates the schema text.

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

Purpose5/5

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

States a specific verb+resource+scope: sends an Instagram DM from a connected account to one person as a reply in an existing conversation. It is clearly distinguishable from siblings like inbox_conversations and inbox_thread, which only read.

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

Usage Guidelines5/5

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

Explicit when-to-use and prerequisites: get personId from inbox_conversations, confirm with the customer first, the 24-hour reply window, and the monthly DM allowance gate. It also names account_usage as the place to check remaining allowance.

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

inbox_threadRead one conversationA
Read-only
Inspect

The messages of one Instagram direct message conversation, oldest first, each with who sent it and when. Use it after inbox_conversations when somebody asks what a particular person said, what was already answered, or wants help drafting a reply. Pass the threadId from inbox_conversations. Instagram only serves the recent history, so expect around twenty messages at most and no older ones. Long messages are shortened. This is somebody's private conversation: report it back to the account's owner and nowhere else.

NameRequiredDescriptionDefault
limitNoHow many messages to return, newest first. Defaults to 20; 50 is the most this tool will ever return.
threadIdYesThe conversation to read, using the threadId from inbox_conversations.
instagramAccountIdNoWhich connected Instagram account to look at, using the id from account_instagram_accounts. Leave it out for the workspace's first connected account.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare a safe read, but the description adds substantive behavior: Instagram serves only recent history (~20 messages, no older ones), long messages are truncated, and the content is private and must be reported only to the account owner. That is real context beyond the annotations, though nothing is said about whether the returned order interacts with the limit window.

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

Conciseness4/5

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

Front-loaded with what is returned, then usage, then identifier plumbing, then behavioral caveats and the privacy warning. Four dense sentences; the privacy sentence is arguably a slight expansion but it is operationally load-bearing, so nearly every sentence earns its place.

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

Completeness4/5

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

With no output schema, the description does the job of describing the return shape (messages with sender and timestamp) and the truncation/recency limits. Missing nothing critical for calling it, though a note on pagination or what happens if the threadId is stale would fully close the loop.

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

Parameters3/5

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

Schema coverage is 100%, so every parameter (including the 50-cap on limit and the default account fallback) is already documented in the schema. The description only reinforces the threadId sourcing, adding no new semantics. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('The messages of one Instagram direct message conversation') plus return shape ('oldest first, each with who sent it and when'). This is clearly distinct from inbox_conversations (list threads) and inbox_send_reply (write), so an agent can route without opening schemas.

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

Usage Guidelines5/5

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

Names the sequencing ('Use it after inbox_conversations') and the triggering intents ('what a particular person said, what was already answered, or wants help drafting a reply'). It also tells the agent where the required identifier comes from, which is explicit when-to-use guidance.

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

instagram_postsPosts and reelsA
Read-only
Inspect

The posts and reels published on a connected Instagram account, newest first, with the caption, whether it is a reel, a photo, a video or a carousel, when it went out, its link, and how many likes and comments it has. Use it to answer 'what have I posted lately', to find the best performing post before suggesting where to put a campaign, or to get the post id that campaigns_create needs. It reads live from Instagram, so it is slower than the other tools and covers one account at a time.

NameRequiredDescriptionDefault
limitNoHow many posts to return, newest first. Defaults to 25; 50 is the most this tool will ever return.
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description still adds real behavioral context beyond them: it reads live from Instagram, is slower than the other tools, and covers one account at a time.

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

Conciseness5/5

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

Three sentences, front-loaded with what it returns, then when to use it, then the operational caveat. Given there is no output schema, enumerating the returned fields earns its space rather than wasting it.

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

Completeness5/5

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

With no output schema, the description correctly carries the burden of describing return fields, and it also discloses latency and per-account scope. Nothing material is missing 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.

Parameters4/5

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

Schema coverage is 100%, so limit and instagramAccountId are already documented with ranges and sourcing. The description adds the 'newest first' ordering and the single-account scope, though the schema's own parameter text largely duplicates these points.

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

Purpose5/5

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

The description names the resource (posts and reels on a connected Instagram account), the shape of the result (caption, media type, publish time, link, likes, comments) and the ordering (newest first). An agent can immediately tell this is the read-only listing tool and distinguish it from the per-post stats sibling.

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

Usage Guidelines4/5

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

It gives three concrete triggering scenarios ('what have I posted lately', finding the best performer before campaign placement, and fetching the post id that campaigns_create needs). It stops short of stating when NOT to use it, e.g. reaching for instagram_post_stats when per-post detail is wanted.

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

instagram_post_statsHow posts performedA
Read-only
Inspect

How each recent post and reel actually did: views, reach, likes, comments, saves and shares, one row per post, plus the totals across them and the account's follower count and recent follower history. Use it to answer 'which post did best', 'how is my reach' or to pick the post worth putting a campaign on, where instagram_posts only tells you what exists. This is the slowest tool here by some way, because Instagram reports views, reach, saves and shares one post at a time: ten posts takes a few seconds, fifty takes most of a minute, so ask for the fewest that answer the question. Views, reach, saves and shares need the insights permission on the connected account; when it is missing they come back empty and insightsAvailable says false, which means not measured, not zero.

NameRequiredDescriptionDefault
countNoHow many of the most recent posts to measure, newest first. Ten by default. Every extra post is another request to Instagram, so raise it only when the question needs the history.
instagramAccountIdNoWhich connected Instagram account to report on, using the id from account_instagram_accounts. Leave it out for the default account.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover the read-only safety profile, and the description layers on non-obvious behavior: it is the slowest tool because Instagram reports per-post (ten posts = seconds, fifty = most of a minute), and it discloses the permission requirement plus the failure mode (empty values with insightsAvailable=false meaning 'not measured, not zero'). This is exactly the extra context annotations cannot carry.

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

Conciseness5/5

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

Front-loaded with the deliverable, then usage, then performance cost, then the permission caveat. Every sentence carries unique information and none is wasted despite the length.

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

Completeness5/5

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

With no output schema, the description carries the return-value burden and does so fully: field list, row granularity, aggregate totals, follower count/history, and the insightsAvailable sentinel. Nothing an agent needs to call it correctly or interpret results is missing.

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

Parameters3/5

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

Schema description coverage is 100%, and the count parameter's own schema text already explains the per-request cost rationale, so the description adds little parameter syntax beyond the schema. The permission note loosely relates to the account parameter but is not parameter-specific. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource with the exact returned fields (views, reach, likes, comments, saves, shares, one row per post, totals, follower count and history). It explicitly distinguishes itself from the sibling instagram_posts, which 'only tells you what exists', so an agent can route correctly without opening a schema.

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

Usage Guidelines5/5

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

Names concrete triggering questions ('which post did best', 'how is my reach', picking a post for a campaign) and gives the alternative (instagram_posts) plus the scoping rule to request the fewest posts that answer the question. When-to-use and the tradeoff are both explicit.

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

instagram_profileConnected account profileA
Read-only
Inspect

The Instagram profile of a connected account as Instagram describes it right now: the handle, the display name, the follower count and the URL of the profile picture. Use it for 'how many followers do I have', when somebody asks whose account this is or wants the picture, or when a handle may have changed since it was connected — account_instagram_accounts answers from HookSend's stored copy, this one asks Instagram. Followers comes back as null, not zero, when Instagram does not report it for that account. It does not include per-post statistics such as views, reach or saves; HookSend only gathers those on its own reports screen, which no tool covers. It reads live from Instagram and covers one account at a time.

NameRequiredDescriptionDefault
instagramAccountIdNoWhich connected Instagram account to look at, using the id from account_instagram_accounts. Leave it out for the workspace's first connected account.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the read-only/non-destructive safety profile. The description adds real behavioral context beyond that: it reads live from Instagram rather than a cached copy, covers one account at a time, and discloses the null-vs-zero follower edge case. It also carves out explicitly what it does NOT return (per-post views/reach/saves). Loses a point only for not describing error/rate-limit behavior on a live external call.

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

Conciseness3/5

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

Front-loads the purpose well, but it is a long run-on collection of clauses. The sibling contrast, null behavior, exclusion of per-post stats, and the aside about the reports screen all share one unwieldy sentence. Information is valuable but could be structured more tightly.

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

Completeness4/5

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

No output schema and only one param, so the description carries the return-shape burden and does so by naming the returned fields, the null edge case, and the explicit exclusion of per-post stats. An agent has enough to call it correctly and interpret the result; only error-path detail is absent.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is already fully documented in the schema, including the default-first-account behavior and the reference to account_instagram_accounts. The description adds no parameter detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource: fetches the live Instagram profile of a connected account, and explicitly enumerates the returned fields (handle, display name, follower count, profile picture URL). It distinguishes itself from the sibling account_instagram_accounts by contrasting live-from-Instagram vs stored copy.

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

Usage Guidelines5/5

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

Gives concrete when-to-use triggers ('how many followers do I have', 'whose account is this', 'wants the picture', handle may have changed since connection) and names the alternative tool with the condition that selects it. Also states the explicit scope limit of one account at a time.

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

knowledge_add_documentAdd a document to a knowledge baseAInspect

Adds one document to a knowledge base, from text you pass or from a web page HookSend fetches. The document is read, split up and indexed straight away, and from then on the AI can answer DMs from it. Pass either text or url, not both. A plan that no longer includes knowledge bases is refused with the reason, as uploading the file in the dashboard is. Reversible: a document can be removed again from the knowledge screen. PDFs have to be uploaded in the dashboard — this tool cannot send a file.

NameRequiredDescriptionDefault
urlNoA public web page to read instead — an FAQ, a policy, a product page. Use this or text, not both.
textNoThe document's text, pasted in full. Use this or url, not both.
titleNoWhat to call the document in the customer's list.
knowledgeBaseIdYesThe id of the knowledge base to add to.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare it is a non-destructive write, but the description adds real behavioral context: indexing happens immediately, the document becomes usable by the AI for DMs, the operation is reversible via the knowledge screen, and refusals carry a reason. That goes well beyond what the structured fields expose.

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

Conciseness4/5

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

The core action and the text-or-url rule are front-loaded, and nearly every sentence carries a distinct constraint (indexing, reversibility, plan refusal, PDF limitation). It drifts slightly across the middle sentences, but nothing is filler.

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

Completeness5/5

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

For a mutation tool with no output schema, the description covers the full picture: what happens after the call, how it can be undone, what failure modes occur, and which inputs are out of scope. An agent has everything needed to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already documented. The description reinforces the text/url exclusivity and the no-file constraint, but adds little syntax or format detail beyond what the schema already provides, so the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Adds one document to a knowledge base') and immediately scopes it to the two supported sources (pasted text or a fetched web page). An agent can distinguish this from knowledge_documents, knowledge_create, and knowledge_update without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit mutual exclusion ('Pass either text or url, not both') and explicit when-not routing: PDFs and files must go through the dashboard, and plans without knowledge bases are refused. These are exactly the conditions an agent needs to avoid a failed call.

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

knowledge_ai_settingsAI reply settingsA
Read-only
Inspect

How HookSend's AI replies to direct messages for one connected Instagram account: whether 'Answer every DM' is on, whether the first reply in a conversation tells the person they are chatting with an AI and what that line says, whether answers are split into two or three short messages, the customer's own note on how answers should be written, and how long the AI stays quiet with somebody after the customer replies to them by hand. It also reports how many knowledge bases can answer for this account and how many AI answers the remaining credits buy. Each connected account has its own set, so ask for the one in question; the ids come from account_instagram_accounts. Use it before knowledge_ai_settings_update so you can tell the customer what is set now.

NameRequiredDescriptionDefault
instagramAccountIdYesWhich connected Instagram account's AI settings to read, using the id from account_instagram_accounts. Required: these settings are per account, not per workspace.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true/destructiveHint=false, so the safety profile is covered. The description adds real value by enumerating what is reported (AI-disclosure line, message splitting, quiet-period, knowledge bases count, remaining credits) and the per-account (not per-workspace) scoping. It omits return format/pagination, but for a read tool this is solid.

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

Conciseness4/5

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

Purpose is front-loaded and the dense middle sentence packs many returned fields efficiently. It is long and list-heavy, but each clause names a distinct setting rather than padding, so it earns most of its length.

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

Completeness4/5

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

With no output schema, the description compensates by spelling out the returned settings and the per-account scoping, plus the routing hint to account_instagram_accounts. It stops short of describing the response shape or error behavior, but nothing essential to calling it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter already documents that the id comes from account_instagram_accounts and is required because settings are per-account. The description largely restates that, adding little beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific resource (AI reply settings) with a clear read verb and precise scope ('for one connected Instagram account'), and enumerates the concrete settings it returns. It is clearly distinguishable from the write sibling knowledge_ai_settings_update.

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

Usage Guidelines5/5

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

Explicitly says to ask for the account in question, names account_instagram_accounts as the source of ids, and directs the agent to call this before knowledge_ai_settings_update to report current state. When-to-use and the alternative are both named.

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

knowledge_ai_settings_updateChange the AI reply settingsAInspect

Changes how HookSend's AI replies to direct messages for one connected Instagram account: whether 'Answer every DM' is on, whether the first reply in each conversation tells the person they are chatting with an AI and what that line says, whether answers go out as two or three short messages, a note on how answers should be written, and how long the AI stays quiet with somebody after the customer replies by hand. Only the fields you pass are changed and every one of them can be set back with this same tool, so nothing here is irreversible — but switching 'Answer every DM' on means the AI starts answering direct messages that no campaign, flow or keyword handled, and each answer spends AI credits, so say so before calling it. Read knowledge_ai_settings first and tell the customer what is set now. These settings are per account: the ids come from account_instagram_accounts. Only an admin or the owner can change them, and a plan without knowledge bases refuses 'Answer every DM' with the reason.

NameRequiredDescriptionDefault
aiWritingStyleNoA note on how answers should read — how formal, how long, which language, whether emoji are welcome — at most 300 characters. Null or an empty string clears it, and the AI then matches whatever language and tone each person writes in.
aiAnswerEveryDmNoTrue to let the AI answer direct messages that no campaign, flow or keyword handled, from the customer's live knowledge bases only — it stays silent when the documents do not cover the message. Each answer spends AI credits. False stops it immediately and keeps everything else.
aiShortMessagesNoTrue to send each answer as two or three short messages instead of one, the way a person texts. Every extra message counts against the plan's monthly direct message allowance.
aiDisclosureTextNoThe customer's own wording for that line, at most 200 characters, in their voice and their language. Write it for the person receiving the message, and do not put HookSend's name in it: these words go to the customer's own followers. Null or an empty string clears it and returns to HookSend's neutral sentence.
instagramAccountIdYesWhich connected Instagram account to change, using the id from account_instagram_accounts. Required: each account has its own settings, and changing the wrong one changes what real followers are sent.
aiDisclosureEnabledNoTrue to put one line at the top of the first AI answer in a conversation saying the person is chatting with an AI. It is not repeated for the rest of that conversation, and comes round again if the same person writes back a day or more later. Off unless the customer asks for it, because it changes what their followers read.
aiHumanPauseMinutesNoHow long the AI stays quiet with one person after the customer answers them by hand, so it never talks over them. 30, 60 or 120 minutes; HookSend accepts no other value.

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false; the description adds substantially more — patch semantics ('Only the fields you pass are changed'), full reversibility, the credit-spend side effect, the fact that enabling 'Answer every DM' causes the AI to answer DMs no campaign/flow/keyword handled, and an authorization requirement. None of this 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.

Conciseness4/5

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

Front-loaded with the list of settings, then moves to constraints, prerequisites and warnings in a logical order, and every sentence carries information. The opening sentence, however, is a long run-on enumerating five settings, which slightly hurts readability.

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

Completeness5/5

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

For a 7-parameter mutation tool with no output schema, the description covers what changes, patch semantics, reversibility, credit cost, authorization, prerequisite read, and refusal conditions. Nothing an agent needs in order to call it safely is missing.

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

Parameters3/5

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

Schema description coverage is 100% and each parameter already carries a detailed description (including enum-like constraints for aiHumanPauseMinutes and clear semantics for the nullable strings). The description's high-level enumeration of the settings largely restates what the schema documents, so baseline 3 applies; only the 'fields you pass are changed' patch semantics is genuinely additive.

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

Purpose5/5

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

States a specific verb and resource (change AI reply settings for one Instagram account) and enumerates exactly which settings are affected: 'Answer every DM', disclosure line and text, short-message splitting, writing style, and human-pause duration. It also implicitly distinguishes itself from the sibling read tool knowledge_ai_settings, which it names.

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

Usage Guidelines5/5

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

Explicit when-to-use and prerequisites: 'Read knowledge_ai_settings first and tell the customer what is set now', warn the customer about AI credits before enabling 'Answer every DM', and note that only an admin or owner may call it. It also names the condition under which the tool refuses (plan without knowledge bases), which is a genuine exclusion.

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

knowledge_createCreate a knowledge baseAInspect

Creates an empty knowledge base: the set of documents HookSend's AI answers direct messages from. Add documents to it with knowledge_add_document. Knowledge bases are part of the paid plans, and a plan also sets how many can be live at once — when the customer is at that number the base is still created but saved switched off, and the confirmation says so, so tell them it is there and needs a slot freed. Creating one sends no messages to anyone.

NameRequiredDescriptionDefault
nameYesWhat to call the knowledge base.
descriptionNoA line on what is in it, for the customer's own reference.
instagramAccountIdNoWhich connected Instagram account it answers for. Leave it out for all of them.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare this is a non-read-only, non-destructive mutation. The description goes well beyond that: it discloses the paid-plan constraint, the important edge case that the base is still created but saved switched off when at the live limit, that the confirmation message states this, that the agent should relay it, and that no messages are sent to anyone. This is unusually rich 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.

Conciseness4/5

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

One front-loaded paragraph: purpose first, then the follow-up route, then the plan/limit edge case. Every sentence carries information, though the instruction to 'tell them it is there' slightly restates the preceding clause about the confirmation saying so.

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

Completeness5/5

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

With no output schema, the description compensates by describing what the confirmation contains and what state the created base ends up in. For a simple 3-param create tool with annotation safety hints, nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (name, description, instagramAccountId) are already documented in the schema. The description adds no syntax, format, or constraint 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.

Purpose5/5

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

States a specific verb+resource ('Creates an empty knowledge base') and immediately defines the domain concept ('the set of documents HookSend's AI answers direct messages from'), which distinguishes it from knowledge_add_document and knowledge_update. The word 'empty' also disambiguates it from tools that populate a base.

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

Usage Guidelines4/5

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

Explicitly routes the agent to the follow-up tool ('Add documents to it with knowledge_add_document') and gives a clear conditional rule for the paid-plan slot limit and what to tell the customer. It lacks a 'do not use this when...' exclusion versus siblings like knowledge_update, but the usage context is otherwise unambiguous.

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

knowledge_documentsDocuments in a knowledge baseA
Read-only
Inspect

The documents inside one knowledge base, newest first, each with its title, whether it is a PDF or plain text, its indexing state (PROCESSING, READY or FAILED), its length, how many passages it was split into and the reason if it failed. Use it after knowledge_list when someone asks what a base contains, or why an upload is not being used in answers.

NameRequiredDescriptionDefault
limitNoHow many documents to return, newest first. Defaults to 50; 200 is the most this tool will ever return.
knowledgeBaseIdYesThe knowledge base's id, as returned by knowledge_list.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context by describing the returned document fields, sort order, indexing states, and failure reason, though it does not discuss pagination or permission requirements beyond the schema.

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

Conciseness5/5

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

The description is two tightly written sentences with no filler. It front-loads what the tool returns and then immediately follows with concrete usage guidance.

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

Completeness5/5

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

There is no output schema, so the description carries the burden of explaining return values, and it does so thoroughly: title, type, indexing state, length, passage count, and failure reason. Combined with complete input schema coverage and read-only annotations, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so both knowledgeBaseId and limit are fully documented in the schema. The description does not add parameter-level meaning beyond what the schema already provides, which is the baseline when schema coverage is high.

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

Purpose5/5

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

The description clearly identifies the resource (documents inside one knowledge base) and the returned fields, including sort order and indexing states. It also distinguishes itself from knowledge_list by naming that sibling and the follow-up scenario in which this tool is used.

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

Usage Guidelines5/5

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

It explicitly says to use this tool after knowledge_list when the user asks what a knowledge base contains or why an upload is not used in answers. This gives both the alternative tool and the triggering conditions with no ambiguity.

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

knowledge_listKnowledge basesA
Read-only
Inspect

Lists the knowledge bases in the workspace: the sets of uploaded documents the AI answers direct messages from. Each one reports whether it is switched on, the keywords that make it answer, whether it answers only when one of those keywords matches (keywordsOnly: true means "Answer every DM" never uses it, and with no keywords it never answers at all), which connected account it answers for, how many documents it holds and how many of them finished indexing. Use it for 'why isn't my AI answering', 'what have I uploaded', or to find a base's id for knowledge_documents. Knowledge bases need a plan that includes them, and the answer says how many may be live at once on the current plan.

NameRequiredDescriptionDefault
limitNoHow many knowledge bases to return, newest first. Defaults to 25; 50 is the most this tool will ever return.

TDQS

A4.4/5.0
Behavior5/5

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

With no output schema, the description carries the full burden of disclosing return semantics and does so richly: per-entry on/off state, keyword triggers, the subtle keywordsOnly rule ('Answer every DM' never uses it; no keywords means it never answers), connected account, document counts and indexing status. It also discloses the plan requirement and the live-base cap.

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

Conciseness4/5

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

Front-loads purpose and then packs return-field semantics and use cases efficiently. The keywordsOnly parenthetical is dense but earns its place; overall tight with little waste.

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

Completeness5/5

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

For a read-only listing tool with no output schema, the description is complete: it explains the shape of each returned entry, the trigger logic, and the plan constraint, so an agent can interpret results and decide when to call knowledge_documents next.

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

Parameters3/5

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

Schema coverage is 100% for the single limit parameter, so the schema already documents the default and maximum. The description adds nothing about limit syntax or ordering beyond what the schema provides, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource ('Lists the knowledge bases in the workspace') and immediately defines what a knowledge base is (sets of uploaded documents the AI answers DMs from), which disambiguates it from siblings like knowledge_documents and knowledge_create.

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

Usage Guidelines4/5

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

Gives concrete use scenarios ('why isn't my AI answering', 'what have I uploaded') and explicitly routes to knowledge_documents for a base's id. It stops short of naming when NOT to use it versus a sibling, so it is clear context without exclusions.

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

knowledge_updateUpdate a knowledge baseAInspect

Changes a knowledge base's name, its description, the keywords that hand a DM to it, whether it answers only when one of those keywords matches, its fallback message, or whether it is switched on. Only the fields you pass are changed, and every one of them can be set back. Switching one on is the only part a plan can refuse: a plan allows so many live at once, and the refusal says how many and what to do about it. Switching one off is always allowed and loses none of its documents, so use that rather than asking for a knowledge base to be deleted.

NameRequiredDescriptionDefault
nameNoA new name for it.
isActiveNoTrue to switch the knowledge base on so it answers DMs, false to switch it off.
keywordsNoThe words in a DM that should be answered from this knowledge base, up to twenty.
descriptionNoA new description, or null to clear it.
keywordsOnlyNoTrue to make this knowledge base answer only DMs that contain one of its keywords, and the conversation that follows. "Answer every DM" then never uses it, so its documents never reach anyone who did not type a keyword: right for material meant for a few people, such as a partner or wholesale FAQ. A campaign that names this knowledge base still answers from it. It needs at least one keyword, or it never answers. False to let "Answer every DM" use it again.
wholeWordMatchNoTrue to match those keywords only as whole words.
fallbackMessageNoWhat to reply when the documents do not answer the question, or null for none.
knowledgeBaseIdYesThe id of the knowledge base.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only say non-read-only and non-destructive. The description layers on genuinely new context: PATCH semantics ("Only the fields you pass are changed"), reversibility ("every one of them can be set back"), a plan-limited failure mode for activation plus what the refusal reports, and the guarantee that switching off loses no documents.

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

Conciseness4/5

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

Front-loads purpose, then partial-update semantics, then the activation caveat and the disable-vs-delete advice — a logical order where each sentence carries weight. It is dense and the field enumeration partially duplicates the schema's own descriptions, costing a little efficiency.

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

Completeness5/5

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

For an 8-parameter settings update with full schema coverage and no output schema, the description supplies the operational facts an agent needs: partial semantics, reversibility, the plan limit that can reject activation, and the safe deactivation alternative. Nothing required to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented at the field level and the baseline is 3. The description restates the same field list without adding syntax, formats, or per-parameter constraints beyond what the schema provides.

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

Purpose5/5

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

Opens with a specific verb+resource ("Changes a knowledge base's") and then enumerates the mutable surface — name, description, keywords, keyword-only mode, fallback message, and active state. An agent can tell this is the settings-mutation tool distinct from knowledge_create or knowledge_add_document without opening the schema.

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

Usage Guidelines4/5

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

Gives one explicit routing directive — "use that rather than asking for a knowledge base to be deleted" — which steers the agent away from a destructive path. However, it never frames when to reach for this tool versus siblings like knowledge_ai_settings_update, so guidance is solid but not exhaustive.

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

leads_recentCaptured leadsA
Read-only
Inspect

The email addresses and phone numbers HookSend has captured, newest first, each with the handle it came from, the campaign that collected it, where it was collected and any tags a flow put on that person. A lead carrying cameFrom is one whose conversation started on a click-to-DM ad or on a link tagged by the customer, said in a sentence — use it to answer which ad or which link is producing leads. Use it for 'show me my recent leads', 'how many leads did this campaign get', or to look somebody up by handle or email. The answer also lists the tags in use, so you can filter by one. This is personal data the customer owns: hand it back to them and nowhere else.

NameRequiredDescriptionDefault
tagNoOnly people carrying this tag. Tags are set by DM flows; the answer lists the ones in use.
limitNoHow many leads to return, newest first. Defaults to 25; 100 is the most this tool will ever return.
searchNoMatches part of an email address, a phone number or an Instagram handle.
campaignIdNoOnly leads collected by this campaign, using an id from campaigns_list.
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare it a safe read, yet the description adds real context: newest-first ordering, that the response enumerates tags in use, and a firm data-handling constraint (personal data the customer owns, hand back only). It does not describe pagination limits beyond the schema.

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

Conciseness4/5

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

Front-loads the core purpose and return contents, then guidance, then the privacy constraint. Dense but each sentence carries content; the cameFrom explanation is slightly verbose but still justified.

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

Completeness4/5

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

No output schema exists, so the description correctly compensates by describing the response fields and the tag list in the answer. Combined with the privacy note and usage cases, an agent has enough to call and interpret the tool.

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

Parameters3/5

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

Schema coverage is 100%, so all five parameters are already documented with cross-references to campaigns_list and account_instagram_accounts. The description restates tag filtering and handle/email lookup but adds no syntax or format detail the schema lacks, so baseline 3 applies.

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

Purpose5/5

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

Names a specific resource (captured leads) with a concrete verb-like framing and enumerates the returned fields — handle, campaign, collection location, tags. An agent can immediately tell this apart from conversations or campaign tools.

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

Usage Guidelines4/5

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

Gives explicit usage scenarios ('show me my recent leads', 'how many leads did this campaign get', look up by handle or email) and a concrete routing rule for the cameFrom field (which ad/link produced leads). It stops short of naming alternatives to use when the user does NOT want lead data.

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

logs_recentRecent sendsA
Read-only
Inspect

The send log, newest first: one row per comment or message HookSend acted on, with the time, the campaign, the handle, the comment, the keyword that matched and what happened. Use it to check whether something is actually being delivered, or to explain a particular failure. Status is one of SENT, QUEUED (waiting its turn behind Instagram's hourly cap), PENDING, FAILED, SKIPPED_DEDUP (this person was already messaged), SKIPPED_RATE_LIMIT, SKIPPED_PLAN_LIMIT (the monthly allowance is used up) or SKIPPED_NO_MATCH. There is no date filter, so for a question about a period read the newest rows and go by their timestamps; for weekly and monthly totals use stats_overview instead.

NameRequiredDescriptionDefault
pageNoPage of the log, 1 being the newest. Use it to walk further back in time.
limitNoHow many log rows to return, newest first. Defaults to 20; 50 is the most this tool will ever return.
statusNoReturn only rows with this outcome. Leave it out for all of them.
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only declare read-only and non-destructive; the description adds the crucial behavioral facts an agent needs: no date filter (must page and read timestamps), ordering (newest first), and the full semantics of each status including the Instagram hourly cap and monthly plan limit. This is well beyond 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.

Conciseness4/5

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

Front-loaded with the resource and row shape, then the status glossary, then the routing advice. Dense but every sentence carries information; the status enumeration is long but genuinely needed because the enum values are opaque.

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

Completeness5/5

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

With no output schema, the description takes on the burden of describing the returned columns (time, campaign, handle, comment, keyword, outcome) and it does so fully, plus covers the filtering limitation and the alternative tool. Nothing an agent needs is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description goes further by explaining the meaning behind status values (SKIPPED_DEDUP, SKIPPED_PLAN_LIMIT, etc.) and the absence of a date filter, which changes how page/limit must be used. It stops short of explaining page/limit interplay explicitly since the schema already covers those.

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

Purpose5/5

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

States a specific resource (the send log) with explicit shape ('one row per comment or message HookSend acted on') and enumerates the returned fields. An agent can immediately tell this apart from stats_overview, leads_recent, and guard_recent_decisions.

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

Usage Guidelines5/5

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

Names two concrete use cases ('check whether something is actually being delivered', 'explain a particular failure'), states the limitation ('there is no date filter'), and routes to the alternative ('for weekly and monthly totals use stats_overview instead'). Full when/when-not/alternative coverage.

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

referrals_overviewReferral programmeA
Read-only
Inspect

The workspace's referral and affiliate standing: the referral code and the link to share, how many people have opened it, how many signed up, how many went on to pay, the commission rate and what the next rate needs, and the earnings split into money still on hold, money available to withdraw, money already paid out and account credit. Also lists the recent sign-ups with the date and the plan they took, and no personal details, because the route sends none. Use it for 'what is my referral link', 'how many people have joined through me', 'how much have I earned' or 'when can I withdraw'. Amounts are in ordinary units of the currency shown, not paise or cents. It covers the whole workspace, so it takes no account id.

NameRequiredDescriptionDefault
limitNoHow many recent sign-ups to return, newest first. Defaults to 20; 50 is the most this tool will ever return.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds real context beyond that: no personal details are returned because the route sends none, amounts are in ordinary currency units not paise/cents, and it is workspace-scoped with no account id. Return-shape disclosure is a useful addition.

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

Conciseness4/5

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

Front-loads the purpose and the enumerated contents, then moves to usage triggers and caveats. The first sentence is a dense run-on list, but every clause carries distinct information about what is returned, so little is wasted.

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

Completeness5/5

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

With no output schema, the description compensates by spelling out the returned fields (code, link, counts, commission rate, earnings buckets, recent sign-ups with date and plan) plus the currency-unit and privacy caveats. An agent has everything needed to call and interpret it.

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

Parameters3/5

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

Only one parameter and schema coverage is 100%, so the schema already documents limit fully (default 20, max 50, newest first). The description adds nothing about the limit parameter, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific resource (the workspace's referral and affiliate standing) and enumerates exactly what it exposes: referral code/link, open and signup counts, conversions, commission rate, earnings breakdown. This is unmistakably distinct from siblings like account_usage or stats_overview.

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

Usage Guidelines4/5

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

Gives concrete trigger phrases ('what is my referral link', 'how many people have joined through me', 'how much have I earned', 'when can I withdraw'), which is strong positive guidance. It does not name an alternative tool or an exclusion, though no close sibling exists to disambiguate against.

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

stats_overviewResults overviewA
Read-only
Inspect

The headline numbers for the whole workspace: direct messages sent today, over the last seven days, this calendar month and all time, a day-by-day count for the last seven days, what was delivered in the current plan month split between campaigns, AI answers and flows, link clicks and click rate, how many people have been reached, and the keywords that trigger the most messages. Reach for this first for 'how did I do this week', 'is anything working', or 'which keyword gets the most DMs'. It also reports each connected account's webhook and access-token state, which is the usual reason sending stops. This is the heaviest read in HookSend, so ask once and reuse the answer rather than calling it per question.

NameRequiredDescriptionDefault
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare this a safe read (readOnlyHint=true, destructiveHint=false), so the bar is lower. The description adds real operational context the annotations cannot: it is 'the heaviest read in HookSend', should be called once and cached, and it surfaces webhook/access-token state, which is flagged as the usual cause of failed sending.

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

Conciseness4/5

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

The metric inventory is long but front-loaded and earns its place by defining return scope in the absence of an output schema. The usage and caching guidance is packed into the final two sentences with no filler.

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

Completeness5/5

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

There is no output schema, so the description must describe what comes back, and it does so thoroughly (today/7d/month/all-time counts, day-by-day breakdown, plan-month delivery split by campaigns/AI answers/flows, clicks and click rate, reach, top keywords, per-account auth state). An agent has everything needed to decide and call correctly.

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

Parameters3/5

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

Schema description coverage is 100% and the single instagramAccountId parameter is fully documented in the schema, including where to obtain the id. The description adds nothing about the parameter, so the baseline 3 applies.

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

Purpose5/5

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

States a specific resource and scope ('headline numbers for the whole workspace') and enumerates the exact metrics returned, from DMs sent today/7d/month/all-time through link clicks, reach and top keywords. An agent can distinguish it from per-account tools like instagram_post_stats or account_usage without opening any schema.

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

Usage Guidelines4/5

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

Gives concrete trigger phrases ('how did I do this week', 'is anything working', 'which keyword gets the most DMs') and an explicit anti-pattern ('ask once and reuse the answer rather than calling it per question'). It does not name sibling tools it should be preferred over, 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.

storefront_overviewStorefrontA
Read-only
Inspect

What is on the customer's HookSend storefront, the public page their Instagram bio can point at: its handle and public address, the profile text and theme, the link buttons with how many taps each has had, and the posts with how many shoppable products each carries. Use it for 'what is on my storefront', 'which of my bio links gets tapped' or to get the address to share. Tap counting began on 28 September 2026, so a link added before then shows only the taps since. It reports hasStorefront false when the workspace has not set one up.

NameRequiredDescriptionDefault
limitNoHow many storefront posts to return, newest first. Defaults to 20; 50 is the most this tool will ever return.
instagramAccountIdNoNarrow the answer to one connected Instagram account, using the id from account_instagram_accounts. Leave it out to cover every account in the workspace.

TDQS

A4.2/5.0
Behavior4/5

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

With readOnlyHint/destructiveHint already covering the safety profile, the description adds genuinely non-obvious behavior: tap counting started 28 September 2026 so older links under-report, and the response reports hasStorefront=false when no storefront exists. These are real data-interpretation caveats an agent could not infer from the schema or annotations.

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

Conciseness4/5

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

Front-loaded with the core 'what is on the storefront' answer, followed by usage cues and then the caveats; every sentence carries information. It is a dense single paragraph, slightly long, but nothing reads as filler.

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

Completeness5/5

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

For a read-only tool with no output schema, the description effectively enumerates the returned shape (handle, address, profile text/theme, link buttons with tap counts, posts with product counts) and covers the empty-state case. An agent has everything needed to call it and interpret the result.

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

Parameters3/5

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

Schema description coverage is 100% — limit and instagramAccountId are fully documented in the schema, including the default of 20, the max of 50, and the pointer to account_instagram_accounts. The description adds nothing about parameters beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific verb+resource and enumerates exactly what the storefront overview contains: handle, public address, profile text and theme, link buttons with tap counts, and posts with product counts. Although it does not name a sibling outright, its whole-storefront scope is clearly separable from the narrower storefront_links_list and storefront_post_* tools.

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

Usage Guidelines4/5

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

Gives concrete triggering phrasings ('what is on my storefront', 'which of my bio links gets tapped', getting the address to share), which tells the agent when to reach for this tool. It stops short of naming alternatives or stating when NOT to use it versus storefront_links_list.

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

storefront_post_addAdd a post to the storefrontAInspect

Puts one of the customer's Instagram posts or reels on their storefront, optionally with shoppable product cards under it. Use the Instagram media id from instagram_posts or from a campaign. It appears on the public page straight away. Two things worth knowing: passing products replaces every product already tagged on that post rather than adding to them, so send the full list; and if the post belongs to a live campaign, HookSend rebuilds its products from that campaign's own links every few minutes, so products set here will be overwritten and the campaign is the place to change them. Calling this for a post that was removed earlier puts it back. Reversible with storefront_post_remove. No plan limit applies.

NameRequiredDescriptionDefault
postIdYesThe Instagram media id of the post or reel, from instagram_posts. Not the post's web address.
captionNoThe wording shown with the post on the storefront. The post's own caption is not copied automatically.
postUrlNoThe post's public Instagram permalink, so a visitor can open the original.
productsNoThe shoppable cards under the post, in the order they should appear, up to twenty. Leave it out to add the post with no products and tag them in the dashboard. Passing it replaces whatever was tagged before.
mediaTypeNoWhat the post is, in Instagram's own words. Defaults to VIDEO, so pass IMAGE for a photo.
thumbnailUrlNoA public address of the picture to show for the post. Use the thumbnail from instagram_posts; without one the tile can come out blank.
instagramAccountIdNoWhich connected Instagram account's storefront to work on, using the id from account_instagram_accounts. Leave it out for the workspace's only storefront, which is what nearly every customer has.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that products replace rather than append, that live-campaign products are rebuilt and overwritten, that re-adding a removed post restores it, that it is reversible, and that no plan limit applies. This is exactly the behavioral context the annotations (readOnly=false, destructive=false) do not convey.

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

Conciseness4/5

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

Purpose is front-loaded and each sentence carries a distinct fact (replacement, campaign rebuild, restore, reversibility, no plan limit). Slightly dense but no wasted filler.

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

Completeness5/5

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

For a mutation tool with no output schema or annotations carrying behavioral weight, the description covers visibility ('appears straight away'), overwrite semantics, campaign interaction, and reversibility – everything an agent needs to call it correctly.

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

Parameters3/5

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 restates defaults (mediaType VIDEO) and the products-replacement rule that the schema already documents, adding only the campaign-overwrite nuance, so it does not materially exceed the schema.

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

Purpose5/5

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

States a specific verb and resource ('Puts... Instagram posts or reels on their storefront') and its optional extension ('shoppable product cards under it'). This clearly distinguishes it from siblings like storefront_link_add and storefront_post_remove.

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

Usage Guidelines4/5

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

Tells the agent where to get the id (instagram_posts or a campaign) and names the paired alternative ('Reversible with storefront_post_remove'), plus warns when a live campaign owns the products. Lacks an explicit 'when not to use' for the neighboring link/overview tools, so not a full 5.

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

storefront_post_removeRemove a post from the storefrontAInspect

Takes one post off the customer's storefront, named by its Instagram media id. The post itself is untouched on Instagram; only the storefront tile goes. HookSend records that the removal was deliberate, which matters because a post belonging to a live campaign is otherwise put back automatically within minutes — that record is what keeps it off. Reversible with storefront_post_add, with one caveat to tell the customer: any product cards tagged on the post by hand are deleted and would have to be tagged again, while a post whose products come from a campaign gets them rebuilt on the next sync. No plan limit applies.

NameRequiredDescriptionDefault
postIdYesThe Instagram media id of the post to take off the storefront, from instagram_posts or storefront_overview.
instagramAccountIdNoWhich connected Instagram account's storefront to work on, using the id from account_instagram_accounts. Leave it out for the workspace's only storefront, which is what nearly every customer has.

TDQS

A4.4/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false): it discloses that the Instagram post is untouched, that the removal is recorded as deliberate to defeat auto-reinsertion of live-campaign posts, and that hand-tagged product cards are permanently deleted while campaign-sourced ones are rebuilt. The card-deletion note sits in mild tension with destructiveHint=false, but the operation on the post itself is genuinely reversible.

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

Conciseness4/5

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

Front-loaded with the action and identifier, then layered with the reversible/side-effect details. Information-dense and nearly every clause earns its place, though the third and fourth sentences run long.

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

Completeness5/5

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

For a two-parameter mutation with annotations present and no output schema, the description supplies the safety profile, reversibility, automatic-rebuild behavior, and data-loss caveat an agent needs. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both postId and instagramAccountId are already documented by the schema. The description reinforces the postId source ('from instagram_posts or storefront_overview') but adds little the schema does not already carry, matching the baseline 3 for high-coverage schemas.

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

Purpose5/5

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

States a precise verb and resource ('takes one post off the customer's storefront') and the identifier used to name it (Instagram media id). It also implicitly distinguishes itself from its inverse, storefront_post_add, so an agent can place it correctly among the storefront_* siblings.

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

Usage Guidelines4/5

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

Clearly signals the domain action and names the alternative for undoing it ('Reversible with storefront_post_add'), plus the customer-facing caveat. It stops short of an explicit when-to-use/when-not rule set, but the surrounding context 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.

storefront_updateUpdate the storefrontAInspect

Changes the customer's HookSend storefront: the public page their Instagram bio points at. You can set the display name shown at the top, the bio underneath it, the profile picture, and the theme the page is drawn in. Only the fields you pass are changed and every one of them is reversible by calling this again with the old value, which storefront_overview will tell you. One field is not always allowed: showBranding false removes the HookSend footer, which is a paid feature, and a plan without it is refused with a sentence to repeat to the customer as written. The page is public the moment it is saved, so read a new display name or bio back to them first.

NameRequiredDescriptionDefault
bioNoThe line or two under the name, at most 300 characters. Pass an empty string to clear it.
themeNoThe id of one of HookSend's storefront themes, in capitals with underscores: MIDNIGHT (the default), AURORA, MONOCHROME, WARM_PAPER, FROSTED_GLASS, BENTO_DARK, SWISS_GRID, EDITORIAL_SERIF and around twenty more. An id HookSend does not recognise is saved but falls back to the default look, so use one the customer picked from the theme list in the dashboard.
avatarUrlNoA public https address of the profile picture. HookSend stores whatever it is given, so an address that is not an image becomes a broken picture on a public page — use one the customer gave you or one already on the storefront.
displayNameNoThe name shown at the top of the public page, at most 60 characters. Usually the creator's or the business's name rather than their handle.
showBrandingNoTrue keeps the small HookSend line in the page footer. False removes it, which is a paid feature and is refused on a plan that does not include it. Turning it back on is always allowed.
instagramAccountIdNoWhich connected Instagram account's storefront to work on, using the id from account_instagram_accounts. Leave it out for the workspace's only storefront, which is what nearly every customer has.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false, so the description carries the rest and does so richly: partial-update semantics, full reversibility, instant public visibility, and the paid-plan refusal of showBranding=false with a verbatim message to relay. This is exactly the behavioral context the sparse annotations omit.

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

Conciseness4/5

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

Front-loaded with the core action, then the mutability/reversibility constraint, then the two genuine warnings. Slightly dense and long, but each sentence (paid-feature refusal, public-page caution) carries information the agent needs.

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

Completeness5/5

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

For a 6-parameter mutation tool with no output schema, the description covers partial updates, reversibility source, refusals, and public-visibility risk — everything an agent needs to invoke it safely. No meaningful gap remains.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents every parameter in detail (theme ids, avatar caveats, empty-string clearing, account fallback). The description restates these fields without adding format or syntax detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Changes the customer's HookSend storefront') and enumerates exactly what can be modified (display name, bio, avatar, theme). An agent can distinguish this from storefront_overview, storefront_link_update and other siblings without opening a schema.

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

Usage Guidelines4/5

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

Gives concrete operational guidance: only passed fields change, re-call with old value to reverse, consult storefront_overview for prior values, and read the new name/bio back before saving. It does not explicitly name when a different sibling (e.g. storefront_overview) should be preferred, 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 63 tool updates
    • First observedaccount_ai_credits
    • First observedaccount_instagram_accounts
    • First observedaccount_usage
    • First observedcampaigns_create
    • First observedcampaigns_create_full
    • First observedcampaigns_get
    • First observedcampaigns_list
    • First observedcampaigns_pause
    • First observedcampaigns_resume
    • First observedcampaigns_set_carousel
    • First observedcampaigns_set_earlier_comments
    • First observedcampaigns_set_keyword_buttons
    • First observedcampaigns_set_knowledge_base
    • First observedcampaigns_set_links
    • First observedcampaigns_set_public_reply
    • First observedcampaigns_set_steps
    • First observedcampaigns_set_trigger
    • First observedcampaigns_update
    • First observedcampaigns_use_standard_reply
    • First observedcollabs_list
    • First observedflows_create
    • First observedflows_get
    • First observedflows_list
    • First observedflows_pause
    • First observedflows_publish
    • First observedflows_set_steps
    • First observedflows_templates
    • First observedflows_update
    • First observedguard_cleanup_preview
    • First observedguard_cleanup_run
    • First observedguard_recent_decisions
    • First observedguard_rules_create
    • First observedguard_rules_delete
    • First observedguard_rules_set_enabled
    • First observedguard_rules_update
    • First observedguard_settings
    • First observedguard_settings_update
    • First observedinbox_conversations
    • First observedinbox_send_reply
    • First observedinbox_thread
    • First observedinstagram_post_stats
    • First observedinstagram_posts
    • First observedinstagram_profile
    • First observedknowledge_add_document
    • First observedknowledge_ai_settings
    • First observedknowledge_ai_settings_update
    • First observedknowledge_create
    • First observedknowledge_documents
    • First observedknowledge_list
    • First observedknowledge_update
    • First observedleads_recent
    • First observedlogs_recent
    • First observedreferrals_overview
    • First observedstats_overview
    • First observedstorefront_link_add
    • First observedstorefront_link_remove
    • First observedstorefront_link_update
    • First observedstorefront_links_list
    • First observedstorefront_links_reorder
    • First observedstorefront_overview
    • First observedstorefront_post_add
    • First observedstorefront_post_remove
    • First observedstorefront_update

Publisher details

Operator
Not applicable
Vendor relationship
Not applicable
Trust center
Not applicable
Restrictions
Not applicable

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Connects AI apps to your own Instagram professional account through Instagram's official API for reading stats, posts, comments and DMs, auditing accounts, checking reels, replying to comments and messages, and publishing or scheduling posts. Actions are previewed for approval before anything is posted, sent, hidden, or deleted.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables reading and replying to direct messages, comments, and templates across Instagram, WhatsApp, and Messenger through official Meta Business APIs, with support for human handover and AI assistant controls.
    9 npm
    MIT
  • A
    license
    A
    quality
    F
    maintenance
    Enables AI assistants to interact with Instagram by scraping profiles, posts, reels, DMs, and business insights through a robust, DOM-agnostic browser orchestration engine that bypasses Instagram's anti-automation measures.
    28
    1
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources