RedReplier
Server Details
Monitor Reddit, HN, X, and Bluesky mentions and triage AI-scored leads from your agent.
- Status
- Healthy
- Uptime
- 90.7% over 42 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 19 tools
Most tools target clearly distinct resources and actions, and the descriptions explicitly differentiate overlapping areas such as list_mentions vs count_mentions vs explain_mention, and disable_keyword vs delete_keyword vs edit_keyword. The main residual ambiguity is around keyword lifecycle operations, but the documentation resolves it well enough for reliable selection.
The set overwhelmingly uses predictable snake_case verb_noun naming such as create_website, delete_keyword, list_mentions, update_alert_settings, and enable_keyword. The notable deviation is keyword_change_usage, which is noun_phrase rather than verb-led, and add_keywords uses a plural noun where most singular-resource tools do not.
At 19 tools, the surface is on the heavy side for a monitoring product, though the domain does have several distinct subresources: websites, keywords, mentions, alerts, and workspaces. keyword_change_usage is explicitly documented as effectively unnecessary for current plans, which makes the count feel slightly bloated rather than tightly scoped.
The surface covers the main lifecycle well: website create/get/list/update/delete, keyword add/edit/enable/disable/delete, mention list/count/explain/triage, alert settings, and workspace discovery. Minor gaps remain, such as no dedicated get_mention or get_keyword tool, but explain_mention and get_website provide workable access to those records.
Available Tools
19 toolsadd_keywordsAdd KeywordsAInspect
Add keywords to a monitored website. Values are trimmed, lowercased and deduplicated; active values are skipped and disabled values may be proposed again. New keywords start pending, then those within the existing plan become active without a charge. Activation updates monitoring alerts and queues public-network searches and ranking checks. Keywords beyond the current entitlement stay pending. Returns the whole website with its updated keyword list. Use edit_keyword to change existing text.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | Keywords to add (e.g. ["my product", "competitor name"]); trimmed, lowercased, and de-duplicated, max 255 characters each | |
| websiteId | Yes | Monitored website ID (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The whole website with its full keyword list (id, value, status), including the new keywords as ACTIVE or PENDING. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnly=false, destructive=false, openWorld=true; the description adds substantial context beyond that: normalization (trim/lowercase/dedup), skip/re-propose rules, the pending-then-active lifecycle, no-charge within plan, entitlement overflow staying pending, and side effects (alert updates, queued public-network searches and ranking checks). This is unusually rich behavioral disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then flows through lifecycle and side effects; every sentence carries information. It is on the longer side but not padded, with only minor overlap between the description and the keywords schema field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists, so return-shape explanation is optional; nonetheless the description notes it returns the whole website. Combined with the lifecycle, billing, and side-effect disclosure, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the trim/lowercase/dedup and 255-char limit for keywords plus the workspaceId guidance. The description restates normalization behavior rather than adding new parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Add keywords to a monitored website') and explicitly routes the closely-related case to a named sibling ('Use edit_keyword to change existing text'). An agent can distinguish add_keyword from edit_keyword without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions that determine the outcome (active values skipped, disabled may be re-proposed) and names edit_keyword as the alternative for changing existing text. It stops short of stating explicit when-not-to-use scenarios beyond that single sibling reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_websiteAnalyze WebsiteAInspect
Scrape a URL and return an AI-written business description as { description }, without creating or changing any website. Use it to draft or preview the text before create_website or update_website, then pass the result as their description. Consumes one AI generation from the monthly quota unless a precomputed description already exists for that domain, and refunds it if generation fails. Returns 400 when the quota is exhausted or url is not a valid URL, and an error when the page has too little readable text.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full website URL to scrape (e.g. "https://example.com") | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { description }: the AI-written business description, ready to pass to create_website or update_website. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the AI-quota cost, the refund-on-failure behavior, and specific error conditions (400 on exhausted quota or invalid URL, error on too-little readable text). The only minor gap is that it does not explain why readOnlyHint is false despite being non-mutating, though the quota consumption plus 'without creating or changing any website' largely covers that tension.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action, then usage, then cost/refund, then error semantics in a tight three-sentence block with no filler. Every clause carries operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need no explanation, yet the description still names the returned field ({ description }). Quota, caching, failure refund, and error paths are all covered, leaving nothing an agent needs to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both url and workspaceId are already fully documented in the schema. The description only indirectly adds meaning (valid-URL requirement, domain-keyed caching) and adds no syntax or format detail beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Scrape a URL and return an AI-written business description') and immediately scopes it negatively ('without creating or changing any website'), which separates it from the create_website/update_website siblings. An agent can tell what this does and what it does not do without reading the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the when ('draft or preview the text before create_website or update_website') and the downstream step ('pass the result as their description'). It also names two alternatives by name, which is the highest form of routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_mentionsCount MentionsARead-onlyInspect
Count mentions matching the same filters as list_mentions, returning { total } and no rows. The same defaults apply: REJECTED excluded unless statuses includes it, and scores below the website's minimum (30 by default) hidden unless includeLowRelevance is true. Use it for dashboards, to size a triage batch, or to decide whether paging list_mentions is worthwhile; list_mentions already returns total with its rows, so skip this when you fetch rows anyway. Takes no sort, limit, or offset.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Only mentions ingested at/before this ISO 8601 datetime | |
| from | No | Only mentions ingested at/after this ISO 8601 datetime | |
| sources | No | Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS, FACEBOOK (posts outside groups), FACEBOOK_GROUP (posts in Facebook groups) | |
| keywords | No | Count only mentions matched by these keyword values (case-insensitive exact match) | |
| minScore | No | Only mentions scoring at least this (0-100); unscored mentions are left out. Stacks on the website minimum, so set includeLowRelevance to go below it | |
| statuses | No | Filter by status (NEW, APPROVED, REJECTED); omit to count everything except REJECTED | |
| websiteId | No | Filter to one website (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another | |
| scoreBuckets | No | Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only count when includeLowRelevance is also true | |
| includeLowRelevance | No | Include mentions below the website minimum score (30 by default), hidden otherwise |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { total }: the number of mentions matching the filters after the default exclusions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, non-destructive, and closed-world behavior. The description adds important default-filtering behavior: REJECTED is excluded unless statuses includes it, low-score mentions are hidden unless includeLowRelevance is true, and sort/limit/offset are not accepted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and return shape, then defaults, then usage guidance. Every sentence contributes useful routing or filtering information, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a ten-parameter read tool with an output schema, this is complete. It explains the return shape, default exclusions, relevance filtering, sibling relationship, and the absence of pagination controls, leaving no material gotcha for an agent to discover.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters are already documented in the schema. The description reinforces default semantics for statuses and includeLowRelevance and notes the absence of sort/limit/offset, but adds little parameter-level syntax beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: counting mentions. It immediately distinguishes itself from the sibling list_mentions by explaining that it returns only { total } and no rows, so an agent can tell the two apart without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names when to use it (dashboards, sizing a triage batch, deciding whether paging list_mentions is worthwhile) and when to skip it (when you are already fetching rows via list_mentions). It routes the agent between alternatives with a clear condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_websiteAdd Website to MonitorAInspect
Add a website to monitor across Reddit, Hacker News, X, Bluesky, and Facebook. The domain must be new to this account: a duplicate returns 400, and re-adding a domain removed with delete_website revives that record. description is the context every mention is scored against. Omit it and the server scrapes the URL to write one, spending one AI generation from the plan quota; if that scrape fails or the quota is exhausted the site is created with description null and its mentions go unscored (reason "Scoring skipped: website description missing"), so check the response and set one with update_website or analyze_website. Pass your own description to skip the scrape. Initial keywords are stored PENDING: list_websites or add_keywords promotes those that fit the plan; the rest stay PENDING when the current entitlement has no capacity. AI-suggested keywords are added in the background and show up on the website later. Returns 400 when the plan has no website slots left.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full website URL (e.g. "https://example.com") | |
| name | No | Display name for the website | |
| keywords | No | Initial keywords, stored as PENDING; list_websites promotes those that fit the plan for free | |
| description | No | Product summary the AI scores every mention against; without it new mentions are not scored. Draft one with analyze_website | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The created website with its id, domain, description, and keywords (initial ones PENDING). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), which only establish that this is a non-destructive write. The description discloses duplicate-400 behavior, revival of deleted domains, the quota cost of an omitted description, the null-description consequence (unscored mentions with a specific reason string), PENDING keyword promotion timing, and background AI keyword addition.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and platform scope, and every sentence carries non-redundant information. It is a single dense block, though, and the keyword/quota/description rules would scan faster as separated clauses or bullets.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shapes need not be documented, yet the description still covers the 400 cases an agent must handle and the follow-up tools for repairing a null description. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds real meaning on top: it explains that omitting description triggers a URL scrape that consumes one AI generation, that scrape failure or exhausted quota yields a null description, and that keywords land in PENDING until promoted. This goes beyond the schema's terser parameter notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a website to monitor') and immediately scopes it across named platforms (Reddit, Hacker News, X, Bluesky, Facebook). An agent can distinguish it from update_website, delete_website, and analyze_website without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational conditions: the domain must be new, a duplicate returns 400, and re-adding a deleted domain revives the record. It also routes the agent to update_website or analyze_website when the description ends up null. It does not frame when another sibling would be preferred as the primary action, but for a create tool that is inherent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_keywordDelete KeywordADestructiveInspect
Permanently delete one keyword in any status, together with every mention it produced. There is no undo and no restore: disable_keyword pauses a keyword and keeps its mentions, edit_keyword fixes a SUSPENDED value, and delete_website drops a whole site. Deleting an active keyword frees a plan slot, so the oldest pending keyword that now fits the plan may become active, which queues public-network searches and ranking checks; this tool does not issue a refund or change the subscription. Confirm with the user first and name the keyword, not just the ID. Returns { deleted: true }; 404 if the ID is unknown to this account.
| Name | Required | Description | Default |
|---|---|---|---|
| keywordId | Yes | Keyword ID (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { deleted: true } once the keyword and its mentions are removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive/openWorld/non-readOnly, but the description adds substantial context beyond them: no undo or restore, the plan-slot cascade that can activate the oldest pending keyword and queue public-network searches and ranking checks, and the absence of a refund or subscription change. These are non-obvious side effects an agent must warn about before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the irreversible action, then siblings, then side effects, then confirmation and return/error behavior. Despite its length, every sentence carries distinct decision-relevant information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation, it covers irreversibility, cascading side effects, sibling alternatives, confirmation requirements, and error behavior (404 for unknown ID). An output schema exists, yet the description still notes the return shape, so nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both keywordId and workspaceId are already documented in the schema, establishing the baseline of 3. The description adds only the workflow hint to name the keyword rather than just the ID, which is marginal beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Permanently delete one keyword') with explicit scope ('in any status, together with every mention it produced'). It immediately names the sibling tools it is not (disable_keyword, edit_keyword, delete_website) and the conditions that separate them, so an agent can disambiguate without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use and when-not routing: disable_keyword to pause and keep mentions, edit_keyword for a SUSPENDED value, delete_website for a whole site. It also adds a precondition ('Confirm with the user first and name the keyword, not just the ID'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_websiteStop Monitoring WebsiteADestructiveInspect
Stop monitoring a website (soft delete). The site and its keywords leave list_websites immediately and stop matching new mentions. Its active keywords free plan slots, so the oldest pending keywords on other websites that now fit may become active, which queues public-network searches and ranking checks. There is no restore tool, but create_website with the same URL revives the record. Use this only when the whole site should go: use disable_keyword to pause one keyword and keep the site, and delete_keyword to erase one keyword and its mentions. Confirm with the user first and name the domain, not just the ID. Returns { deleted: true }; 404 if the ID is unknown to this account.
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Monitored website ID (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { deleted: true } once the website is soft-deleted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (destructiveHint=true, openWorldHint=true) by disclosing cascade effects: keywords leave list_websites, active keywords free plan slots, pending keywords may auto-activate, and searches/ranking checks get queued. It also discloses irreversibility ('no restore tool') plus the recovery workaround (create_website with the same URL), and the return/error contract (404 if ID unknown).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its soft-delete nature, then layered as consequences, alternatives, and confirmation. Every sentence carries operational weight — cascade effects, irreversibility, and routing are all non-redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world mutation the description covers impact, reversibility, side effects on sibling entities, alternatives, and the error contract. With the return payload ({ deleted: true }) and recovery path both noted, nothing an agent needs to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description only marginally extends it. However it does add account-scoping meaning ('404 if the ID is unknown to this account') and advisory semantics for websiteId ('name the domain, not just the ID'), which help the agent use the parameter correctly rather than just pass it through.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Stop monitoring a website (soft delete)') and immediately clarifies the soft-delete semantics. It distinguishes itself from delete_keyword and disable_keyword by scoping the action to the whole site, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when-not-to-use ('use this only when the whole site should go') and names the two alternatives with their distinct conditions (disable_keyword to pause, delete_keyword to erase). It also adds a procedural prerequisite ('Confirm with the user first and name the domain').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_keywordDisable KeywordADestructiveInspect
Set one keyword to DISABLED and stop matching new mentions. Keeps its stored mentions and synchronizes monitoring alerts. Use enable_keyword to resume monitoring within the current entitlement, or delete_keyword to permanently erase the keyword and its mentions. Disabling an active keyword frees a plan slot, so the oldest pending keyword that now fits the plan may become active, which queues public-network searches and ranking checks. An already disabled keyword is returned unchanged. This tool does not charge, refund, or change the subscription.
| Name | Required | Description | Default |
|---|---|---|---|
| keywordId | Yes | Keyword ID (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The keyword with status DISABLED; existing mentions are retained. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the coarse destructive/openWorld/readOnly profile; the description adds real behavioral context beyond them: mentions are kept, alert synchronization occurs, a plan slot is freed, the oldest pending keyword may auto-activate and queue public-network searches and ranking checks, and no billing change occurs. That is a genuine disclosure of side effects and cascade behavior. It does not contradict destructiveHint=true (state is mutated), though the retention of mentions nuances it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and consequence before the sibling routing, and every sentence carries information. It is on the longer side, but the density is justified by the cascade and billing caveats; little could be cut without losing useful signal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still covers alternatives, idempotency, side effects, and the billing boundary. Nothing an agent needs to invoke this mutation safely appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so keywordId and workspaceId are already fully documented in the input schema, including the workspace-scoping advice. The description adds no format, syntax, or constraint 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Set one keyword to DISABLED and stop matching new mentions') and immediately differentiates itself from the two nearest siblings by naming enable_keyword and delete_keyword with their distinct semantics. An agent can distinguish disable from enable/delete without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use routing: use enable_keyword to resume monitoring, delete_keyword to permanently erase, and this tool to stop matching while retaining history. It also documents the idempotent case ('an already disabled keyword is returned unchanged'), which tells the agent a redundant call is harmless.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_keywordEdit KeywordADestructiveInspect
Replace a keyword's text while keeping its ID. Edits are unlimited. The new value is re-graded and replaces its matching rules; an active keyword stays active, while other keywords become active only if the current plan has space. Activating a suspended keyword also queues public-network searches and ranking checks. Monitoring alerts are synchronized. Case-only changes are a no-op; duplicate values on the same website fail. Previous text and matching rules are overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | New keyword text; trimmed and lowercased, must not duplicate another keyword on the same website | |
| keywordId | Yes | Keyword ID (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The updated keyword with its new value and resulting status (ACTIVE or PENDING). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructive/openWorld; the description goes well beyond them by disclosing re-grading, replacement of matching rules, plan-space-dependent activation, queued public-network searches and ranking checks, alert synchronization, case-only no-ops, and duplicate failure. For a destructive mutation, this is exactly the side-effect 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and every sentence carries behavioral payload; no filler. It is dense to the point of being a run-on chain of clauses, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, and the annotations plus this rich behavioral text cover side effects, activation rules, and error conditions. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema lacks: case-only edits are a no-op (a nuance beyond 'trimmed and lowercased') and that old text/matching rules are overwritten. It still says nothing extra about workspaceId semantics, so not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource plus the key invariant ('Replace a keyword's text while keeping its ID'), which cleanly separates it from add_keywords, delete_keyword, and enable/disable_keyword. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the description makes clear this changes text (not status or existence), but it never explicitly says when to reach for this vs. enable_keyword or delete_keyword. There are no named alternatives or exclusion conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_keywordEnable KeywordAInspect
Enable an existing keyword within the current plan. It becomes ACTIVE if there is capacity, otherwise PENDING; this tool never charges or upgrades a subscription. An already active keyword is returned unchanged. Monitoring alerts are synchronized when activated. No historical backfill runs on re-enable; new matches arrive through monitoring. Use add_keywords for a new keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| keywordId | Yes | Keyword ID (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The keyword with status ACTIVE, or PENDING when the plan has no free slot for it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds rich behavioral context beyond annotations: state transitions (ACTIVE if capacity, else PENDING), no billing side effects, no historical backfill, and monitoring alert synchronization. Annotations already declare a non-read-only, non-destructive operation; the description elaborates on the exact mutation semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by tightly packed operational details. Every sentence earns its place—no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the mutation nature, existing annotations, full parameter schema, and an output schema, the description covers all relevant behavioral concerns an agent needs (state outcomes, idempotency, no backfill, billing safety). Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and fully documents both parameters (keywordId, workspaceId), including workspace scoping details. The description adds no additional parameter meaning, so the baseline of 3 for high schema coverage is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Enable') and resource ('existing keyword') with scope ('within the current plan'), and explicitly distinguishes itself from the sibling add_keywords for new keywords. An agent can identify the tool's purpose immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names add_keywords as the alternative for creating a new keyword, and clarifies idempotency ('already active keyword is returned unchanged'). It does not explicitly compare to disable_keyword, but the implied usage is clear from the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_mentionExplain Mention ScoreAInspect
Get the AI relevance reasoning (relevanceReason), tags, and a drafted reply (aiReplySuggestion) for one mention, generating whatever is missing on first call and storing it, so later calls are instant reads. The website must have a description; without one the mention comes back unchanged. Use it when a score looks wrong or before update_mention_status on a borderline lead, not across every row of list_mentions, since generation is slow. Returns the full mention object, or null (not a 404) when the ID is unknown to this account.
| Name | Required | Description | Default |
|---|---|---|---|
| mentionId | Yes | Mention ID (UUID) from list_mentions | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The full mention with relevanceReason, tags, and aiReplySuggestion filled in; null when the mention is not found. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite readOnlyHint=false, the description explains the write-on-first-call/stored/cached-read behavior that justifies that annotation, plus a precondition (website must have a description or the mention returns unchanged) and the null-not-404 edge case. These are exactly the traits annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with what is returned and the caching behavior, then usage rules. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generating-read tool with an output schema, the description still supplies the non-obvious essentials: laziness/caching, the description precondition, latency warning, and null return semantics. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (mentionId, workspaceId) are already fully documented, so the description only implies 'for one mention'. Baseline 3 is appropriate given the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource plus the exact fields returned (relevanceReason, tags, aiReplySuggestion), which lets an agent distinguish it from list_mentions and other mention siblings without opening the schema. It also states the scope ('for one mention').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-to-use ('when a score looks wrong or before update_mention_status on a borderline lead') and when-not ('not across every row of list_mentions, since generation is slow'), naming two siblings by name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alert_settingsGet Alert SettingsARead-onlyInspect
Get the account's email-alert settings: enabled, cadenceMinutes (the digest interval in effect), minIntervalMinutes (the fastest cadence the plan allows), and availableCadences (the subset of 15, 30, 60, 120, 180, 240, 720, 1440 at or above that floor). cadenceMinutes is never reported below the floor, even if a faster value was saved before a plan downgrade. Call it before update_alert_settings to pick a value from availableCadences, and after it to confirm what applied. Read-only; the digests themselves are sent by the platform on that cadence.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }: the cadence in effect, the plan floor, and the cadences you may pick. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only.' It adds genuine behavioral context beyond the annotations: the plan-floor clamping rule (cadenceMinutes never reported below the floor even after a downgrade) and the fact that digests are dispatched by the platform rather than this tool. It does not cover auth/permission needs, but for a read-only getter that is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and the returned fields, and every sentence carries information (field meanings, the floor rule, usage timing, read-only note). It is somewhat dense with parenthetical enumerations, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still explains the semantics of the returned fields and the clamping behavior an agent must account for. Combined with a fully documented parameter and covering annotations, nothing needed 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single workspaceId parameter is fully documented in the schema, including default behavior and cross-workspace id scoping. The description adds no parameter-level detail beyond that, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get the account's email-alert settings) and enumerates the exact fields returned: enabled, cadenceMinutes, minIntervalMinutes, availableCadences. Clearly distinct from the sibling update_alert_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes when to call it: before update_alert_settings to pick a value from availableCadences, and after it to confirm what applied. Both the before and after conditions are stated, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_websiteGet Monitored WebsiteARead-onlyInspect
Get one monitored website by ID with its full keyword list and statuses (PENDING, ACTIVE, DISABLED, SUSPENDED). Use it to re-check keyword statuses after add_keywords or enable_keyword; use list_websites instead when you do not have the ID yet or want every site. websiteId comes from list_websites or create_website. Returns 404 when the website does not exist or belongs to another account, and 400 when websiteId is not a UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Monitored website ID (UUID) from list_websites | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The monitored website with its keyword list, each keyword carrying id, value, and status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds genuinely useful behavior: the four possible status values and the error semantics (404 for missing/other-account websites, 400 for a non-UUID id), which an agent cannot infer from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each earning its place: what it returns, when to use it versus the sibling, and failure modes. The primary purpose and return payload are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return value structure need not be explained, and the description still covers routing, ID provenance, and error behavior. Nothing needed to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the provenance of websiteId (list_websites or create_website) and reinforces that workspaceId matters. It adds modest value over the schema's own parameter descriptions rather than just restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (one monitored website) scoped by ID, and explicitly lists what is returned (full keyword list and statuses with enum values). It names list_websites as the sibling it is not, so an agent can distinguish it without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use it to re-check keyword statuses after add_keywords or enable_keyword, and to use list_websites instead when the ID is unknown or all sites are wanted. It also states where websiteId comes from, leaving no routing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_change_usageGet Keyword Edit AllowanceARead-onlyInspect
Get the monthly keyword-edit allowance for the account as { limit, used, remaining, unlimited }, where limit -1 means unlimited. Only edit_keyword ever counted toward it; add_keywords, disable_keyword, and enable_keyword never did. Every current plan reports unlimited, so there is no need to check it before edit_keyword; it remains for clients that budget edits. This reports editing allowance only; it does not change keyword capacity, sell a plan, or initiate payment.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { limit, used, remaining, unlimited }; limit -1 and unlimited true mean edits are not metered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, destructiveHint=false, and openWorldHint=false. The description adds valuable behavioral context beyond annotations: only edit_keyword ever counted toward the allowance, add_keywords/disable_keyword/enable_keyword never did, and this tool does not change capacity, sell a plan, or initiate payment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and return semantics, then adds only high-value disambiguation about counting rules, current-plan behavior, and side effects. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given one optional parameter, full schema coverage, output schema presence, and the tool's reporting role, the description is complete. It explains the response fields, the -1 unlimited convention, usage context, and explicitly rules out unrelated side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage and documents workspaceId thoroughly, including default behavior and workspace-id scoping. The description does not mention the parameter or add meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the monthly keyword-edit allowance') and describes the returned fields directly. It also distinguishes this reporting tool from edit_keyword and the other keyword mutation siblings by explaining which operations count toward the allowance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says there is no need to check it before edit_keyword because every current plan reports unlimited, and clarifies it remains for clients that budget edits. This gives both when-to-use and when-not-to-use guidance relative to a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mentionsList MentionsRead-onlyInspect
List mentions matched for this account across Reddit, Hacker News, X, Bluesky, and Facebook, each AI-scored 0-100 with its source, matched keyword, status, content, and any generated relevanceReason and aiReplySuggestion. Two defaults hide rows: REJECTED mentions are excluded unless statuses names them, and mentions below the website's minimum score (30 by default) are hidden unless includeLowRelevance is true, even when scoreBuckets asks for LOW or VERY_LOW. Returns { mentions, total, limit, offset }; page with offset while offset < total. Sort RELEVANCE for the best leads, RECENT for what is new; from/to filter on ingestion time, not publish time. Each mention is a public post, with its text, URL and the author's public name or handle as shown on the source network; private Facebook groups are never read. Use count_mentions for the number alone, explain_mention for one mention's reasoning, and update_mention_status to triage.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Only mentions ingested at/before this ISO 8601 datetime | |
| from | No | Only mentions ingested at/after this ISO 8601 datetime | |
| sort | No | RELEVANCE (default, highest score first) or RECENT (newest first) | |
| limit | No | Max results (1-500) | |
| offset | No | Pagination offset | |
| sources | No | Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS, FACEBOOK (posts outside groups), FACEBOOK_GROUP (posts in Facebook groups) | |
| keywords | No | Filter to mentions matched by these keyword values (case-insensitive exact match, as shown in list_websites) | |
| minScore | No | Only mentions scoring at least this (0-100); unscored mentions are left out. Stacks on the website minimum, so set includeLowRelevance to go below it | |
| statuses | No | Filter by status (NEW, APPROVED, REJECTED); omit to get everything except REJECTED | |
| websiteId | No | Filter to one website (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another | |
| scoreBuckets | No | Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only show when includeLowRelevance is also true | |
| includeLowRelevance | No | Include mentions below the website minimum score (30 by default), hidden otherwise |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { mentions, total, limit, offset }: each mention has id, source, keyword, title, contentText, url, author, subreddit (the subreddit for Reddit, the group id for FACEBOOK_GROUP, otherwise null), status, relevanceScore, relevanceReason, aiReplySuggestion, tags, publishedAt, ingestedAt, reviewedAt. |
list_websitesList Monitored WebsitesRead-onlyInspect
List monitored websites and their keyword statuses (PENDING, ACTIVE, DISABLED, SUSPENDED) in the connected workspace. Use get_website for one website when you already have its ID. Website and keyword IDs from this response are used by the other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | Object with websites: monitored websites with IDs, URLs, names, descriptions and keyword statuses. |
list_workspacesList WorkspacesARead-onlyInspect
List the workspaces this sign-in can act in, across every organization the user belongs to. Returns { workspaces } with one entry per workspace: id, name, organization { id, name }, role { key, name }, permissions, isDefault and current. Call this when the user names a workspace, client or organization, or when data they expect is missing, then pass the matching id as workspaceId to every other tool. Without workspaceId, tools act in the workspace marked current. An API key belongs to one workspace, so it lists only that one. Takes no arguments.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | One entry per workspace with id, name, organization, role, permissions, isDefault and current. Pass id as workspaceId to other tools. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnly, non-destructive, non-open-world; the description adds operational behavior: one entry per workspace with role/permissions/default/current, fallback to the current workspace when workspaceId is omitted, and API-key single-workspace scope. It also states 'Takes no arguments'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose followed by return shape, usage, fallback, and API-key caveat. Mostly earns its place, though the return-field enumeration is partially redundant with the existing output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a zero-argument read tool: usage routing, workspaceId implications, API-key scope, and return structure are all covered. Output schema handles return details, and annotations cover safety.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the schema baseline is 4. The description correctly confirms no arguments and does not need to add parameter details because none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'List' and resource 'workspaces', with scope 'this sign-in can act in, across every organization the user belongs to'. It distinguishes from sibling list tools such as list_websites by focusing on workspace/organization context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call: when the user names a workspace, client or organization, or when expected data is missing. It also routes the agent to pass the matching id as workspaceId to other tools and explains the fallback when workspaceId is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_alert_settingsUpdate Alert SettingsADestructiveInspect
Turn mention email alerts on or off and set how often the digest is sent. enabled is required on every call. cadenceMinutes must be one of 15, 30, 60, 120, 180, 240, 720, 1440, otherwise 400 "Invalid alert frequency for your plan"; a value faster than the plan floor is silently raised to the floor. Both settings are replaced on every call: omitting cadenceMinutes resets it to the fastest cadence the plan allows, so pass the current value when only toggling enabled. Use get_alert_settings for availableCadences before, and to confirm the applied cadence after. Returns the resolved settings.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | Turn email alerts on or off | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another | |
| cadenceMinutes | No | Digest interval in minutes: 15, 30, 60, 120, 180, 240, 720, or 1440; raised to the plan floor when faster than allowed, reset to the fastest allowed when omitted |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The resolved settings after clamping: { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this destructive (readOnlyHint false, destructiveHint true), and the description justifies why by disclosing the full-replace semantics and the reset-to-floor behavior on omission. It also reveals the plan-floor silent clamping and the precise 400 error string, which are not derivable from any structured field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, then the hard requirements, then the failure modes, then the sibling routing. Every clause carries operational payload: validation set, error text, clamping, reset-on-omit warning, and the pre/post verification pattern.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, yet the description still closes the loop with 'Returns the resolved settings,' which correctly signals that the applied cadence may differ from the requested one. With annotations, schema, and output schema all present, nothing needed to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description still adds value by listing the allowed cadence values (the schema has no enum entry), quoting the 400 error, and describing silent clamping to the plan floor. It stops short of restating workspaceId behavior, which the schema already covers thoroughly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (turn on/off, set cadence) and resource (mention email alert settings), and explicitly names the sibling get_alert_settings as the complementary read tool. An agent can distinguish it from update_website or update_mention_status without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use get_alert_settings for availableCadences before and to confirm after; pass the current cadenceMinutes when only toggling enabled. The critical trap (both settings are replaced on every call) is stated as a warning rather than left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_mention_statusUpdate Mention StatusAInspect
Set one mention's triage status. APPROVED marks it a real lead; REJECTED marks it noise and drops it from default list_mentions and count_mentions results (pass statuses to see it again); NEW returns it to the inbox. Fully reversible: any status can move to any other; reviewedAt is stamped when leaving NEW and cleared on NEW. Judge on the content and relevanceScore, calling explain_mention first when the score looks off; never approve a mention you have not read. mentionId comes from list_mentions. Returns the updated mention.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | New status: APPROVED (real lead), REJECTED (noise, hidden from default lists), or NEW (back to inbox) | |
| mentionId | Yes | Mention ID (UUID) | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The updated mention with its new status and reviewedAt (null when NEW). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=false; the description adds substantive behavior: full reversibility between any statuses, reviewedAt stamped when leaving NEW and cleared on NEW, and REJECTED being hidden from default results. It also states the return value, which goes beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then dense but purposeful clauses covering statuses, reversibility, and judgment guidance. Every sentence carries information, though the middle section is packed and could be marginally tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a status-mutation tool with an output schema already present, the description covers the mutation semantics, reversibility, side effects on other tools' default output, and prerequisites for safe use. Nothing material for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description adds meaning on top: it names list_mentions as the source of mentionId and restates the functional consequence of each status value (hidden from default lists, back to inbox). It does not add much about workspaceId, which the schema already documents well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb+resource ('Set one mention's triage status') and immediately enumerates the three status values with their meaning, so the agent knows exactly what the tool does. It is clearly distinct from sibling tools like explain_mention or list_mentions, which are referenced only as supporting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing guidance: call explain_mention first when relevanceScore looks off, never approve a mention you have not read, and mentionId comes from list_mentions. It also explains how to see REJECTED mentions again (pass statuses to list_mentions/count_mentions), covering the when-not path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_websiteUpdate Monitored WebsiteADestructiveInspect
Update a monitored website's display name and/or description. Only the fields you pass change: omitted fields keep their value, and an empty description clears it. The description is the context the AI scores every new mention against, so keep it an accurate summary of the product; mentions already scored are not rescored. Use analyze_website to draft a description from the live site before saving it here. URL and keywords cannot change through this tool: use add_keywords, edit_keyword, or disable_keyword for keywords. Returns the updated website with its keyword list.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name | |
| websiteId | Yes | Monitored website ID (UUID) | |
| description | No | New scoring context; an empty string clears it, omit to keep the current one | |
| workspaceId | No | Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The updated website with its name, description, and keyword list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructiveHint=true and readOnlyHint=false; the description goes well beyond by disclosing partial-update semantics, that an empty description clears the field, and that existing scored mentions are NOT rescored. That last point is a non-obvious side effect an agent must know. It stops short of covering permissions or failure modes, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then routing and semantics, with every sentence carrying usable information. The closing sentence about the return value is mildly redundant given an output schema exists, but the overall structure is tight and purposeful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage, an output schema, and annotations present, the description supplies the remaining pieces an agent needs: mutable field set, partial-update behavior, side effects on scoring, and sibling routing. No meaningful gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning beyond the schema: it explains what the description field is for (the scoring context for new mentions), how an empty string behaves, and that name/description are the only mutable fields. That lifts it above the schema-only baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update a monitored website's display name and/or description') and immediately bounds the scope by declaring what cannot be changed (URL and keywords). An agent can distinguish it from edit_keyword/add_keywords without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance (use analyze_website to draft a description first), explicit alternatives for the excluded operations (add_keywords, edit_keyword, disable_keyword), and the merge semantics for omitted fields. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
- Changed
add_keywords2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
analyze_website2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
count_mentions2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
create_website2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
delete_keyword2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
delete_website2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
disable_keyword2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
edit_keyword2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
enable_keyword2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
explain_mention2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_alert_settings2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
get_website2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
keyword_change_usage2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
list_mentions2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
list_websites2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
list_workspaces2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
update_alert_settings2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
update_mention_status2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
- Changed
update_website2 fields changed- removed
Input schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#" - removed
Output schema / $schemaRemoved value: -"http://json-schema.org/draft-07/schema#"
2 tool updates
- Changed
count_mentions2 fields changed- changed
Input schema / properties / sources / descriptionPrevious value: -"Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS"New value: +"Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS, FACEBOOK (posts outside groups), FACEBOOK_GROUP (posts in Facebook groups)" - changed
Input schema / properties / sources / items / enumPrevious value: -[ - "REDDIT_POST", - "REDDIT_COMMENT", - "TWITTER", - "BLUESKY", - "HACKERNEWS" -]New value: +[ + "REDDIT_POST", + "REDDIT_COMMENT", + "TWITTER", + "BLUESKY", + "HACKERNEWS", + "FACEBOOK", + "FACEBOOK_GROUP" +]
- Changed
list_mentions3 fields changed- changed
Input schema / properties / sources / descriptionPrevious value: -"Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS"New value: +"Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS, FACEBOOK (posts outside groups), FACEBOOK_GROUP (posts in Facebook groups)" - changed
Input schema / properties / sources / items / enumPrevious value: -[ - "REDDIT_POST", - "REDDIT_COMMENT", - "TWITTER", - "BLUESKY", - "HACKERNEWS" -]New value: +[ + "REDDIT_POST", + "REDDIT_COMMENT", + "TWITTER", + "BLUESKY", + "HACKERNEWS", + "FACEBOOK", + "FACEBOOK_GROUP" +] - changed
Output schema / properties / result / descriptionPrevious value: -"{ mentions, total, limit, offset }: each mention has id, source, keyword, title, contentText, url, author, subreddit (Reddit only), status, relevanceScore, relevanceReason, aiReplySuggestion, tags, publishedAt, ingestedAt, reviewedAt."New value: +"{ mentions, total, limit, offset }: each mention has id, source, keyword, title, contentText, url, author, subreddit (the subreddit for Reddit, the group id for FACEBOOK_GROUP, otherwise null), status, relevanceScore, relevanceReason, aiReplySuggestion, tags, publishedAt, ingestedAt, reviewedAt."
19 tool updates
- Changed
add_keywords1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
analyze_website1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
count_mentions2 fields changed- added
Input schema / properties / minScoreAdded value: +{ + "description": "Only mentions scoring at least this (0-100); unscored mentions are left out. Stacks on the website minimum, so set includeLowRelevance to go below it", + "maximum": 100, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
create_website1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
delete_keyword1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
delete_website1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
disable_keyword1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
edit_keyword1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
enable_keyword1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
explain_mention1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
get_alert_settings2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
get_website1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
keyword_change_usage2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
list_mentions2 fields changed- added
Input schema / properties / minScoreAdded value: +{ + "description": "Only mentions scoring at least this (0-100); unscored mentions are left out. Stacks on the website minimum, so set includeLowRelevance to go below it", + "maximum": 100, + "minimum": 0, + "type": "integer" +} - added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
list_websites2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Added
list_workspaces - Changed
update_alert_settings1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
update_mention_status1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
- Changed
update_website1 field changed- added
Input schema / properties / workspaceIdAdded value: +{ + "description": "Workspace to act in: an id from list_workspaces. Omit to use the default workspace. Use the same workspaceId for every call about the same workspace, since ids from one workspace do not exist in another", + "type": "string" +}
4 tool updates
- Changed
disable_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The keyword with status DISABLED; its paid slot is held until the billing cycle ends."New value: +"The keyword with status DISABLED; existing mentions are retained."
- Changed
list_websites1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"Array of monitored websites, each with its ID, URL, name, description, and keywords with their statuses."New value: +"Object with websites: monitored websites with IDs, URLs, names, descriptions and keyword statuses."
- Removed
preview_activate_pending - Removed
preview_keyword_billing
1 tool update
- Changed
delete_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"{ deleted: true } once the PENDING keyword is removed."New value: +"{ deleted: true } once the keyword and its mentions are removed."
2 tool updates
- Removed
activate_pending_keywords - Changed
enable_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The keyword with status ACTIVE, or PENDING when an upgrade was charged and its payment has not settled yet."New value: +"The keyword with status ACTIVE, or PENDING when the plan has no free slot for it."
20 tool updates
- Changed
activate_pending_keywords1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The updated websites reflecting the newly activated keyword statuses."New value: +"All websites with their keyword statuses; keywords waiting on an upgrade payment still show PENDING."
- Changed
add_keywords2 fields changed- changed
Input schema / properties / keywords / descriptionPrevious value: -"Keywords to add (e.g. [\"my product\", \"competitor name\"])"New value: +"Keywords to add (e.g. [\"my product\", \"competitor name\"]); trimmed, lowercased, and de-duplicated, max 255 characters each" - changed
Output schema / properties / result / descriptionPrevious value: -"The added keywords with their IDs and resulting statuses (ACTIVE or PENDING)."New value: +"The whole website with its full keyword list (id, value, status), including the new keywords as ACTIVE or PENDING."
- Changed
analyze_website2 fields changed- changed
Input schema / properties / url / descriptionPrevious value: -"Website URL to analyze"New value: +"Full website URL to scrape (e.g. \"https://example.com\")" - changed
Output schema / properties / result / descriptionPrevious value: -"The AI-generated business description for the analyzed URL."New value: +"{ description }: the AI-written business description, ready to pass to create_website or update_website."
- Changed
count_mentions8 fields changed- changed
Input schema / properties / from / descriptionPrevious value: -"ISO 8601 datetime"New value: +"Only mentions ingested at/after this ISO 8601 datetime" - added
Input schema / properties / includeLowRelevance / descriptionAdded value: +"Include mentions below the website minimum score (30 by default), hidden otherwise" - added
Input schema / properties / keywords / descriptionAdded value: +"Count only mentions matched by these keyword values (case-insensitive exact match)" - added
Input schema / properties / scoreBuckets / descriptionAdded value: +"Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only count when includeLowRelevance is also true" - added
Input schema / properties / sources / descriptionAdded value: +"Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS" - added
Input schema / properties / statuses / descriptionAdded value: +"Filter by status (NEW, APPROVED, REJECTED); omit to count everything except REJECTED" - changed
Input schema / properties / to / descriptionPrevious value: -"ISO 8601 datetime"New value: +"Only mentions ingested at/before this ISO 8601 datetime" - changed
Output schema / properties / result / descriptionPrevious value: -"The number of mentions matching the given filters."New value: +"{ total }: the number of mentions matching the filters after the default exclusions."
- Changed
create_website3 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Manual description (skips scraping/AI). Used as context when scoring mention relevance"New value: +"Product summary the AI scores every mention against; without it new mentions are not scored. Draft one with analyze_website" - changed
Input schema / properties / keywords / descriptionPrevious value: -"Initial keywords to monitor (added as PENDING)"New value: +"Initial keywords, stored as PENDING; list_websites promotes those that fit the plan for free" - changed
Output schema / properties / result / descriptionPrevious value: -"The created website record with its description and initial keywords with their statuses."New value: +"The created website with its id, domain, description, and keywords (initial ones PENDING)."
- Changed
delete_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"Confirmation that the keyword was deleted."New value: +"{ deleted: true } once the PENDING keyword is removed."
- Changed
delete_website1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"Confirmation that the website was deleted."New value: +"{ deleted: true } once the website is soft-deleted."
- Changed
disable_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The keyword with its status set to DISABLED."New value: +"The keyword with status DISABLED; its paid slot is held until the billing cycle ends."
- Changed
edit_keyword2 fields changed- changed
Input schema / properties / value / descriptionPrevious value: -"New keyword text"New value: +"New keyword text; trimmed and lowercased, must not duplicate another keyword on the same website" - changed
Output schema / properties / result / descriptionPrevious value: -"The updated keyword with its new value and status."New value: +"The updated keyword with its new value and resulting status (ACTIVE or PENDING)."
- Changed
enable_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The keyword with its resulting status (ACTIVE or PENDING)."New value: +"The keyword with status ACTIVE, or PENDING when an upgrade was charged and its payment has not settled yet."
- Changed
explain_mention2 fields changed- changed
Input schema / properties / mentionId / descriptionPrevious value: -"Mention ID (UUID)"New value: +"Mention ID (UUID) from list_mentions" - changed
Output schema / properties / result / descriptionPrevious value: -"The AI relevance reasoning and tags for the mention."New value: +"The full mention with relevanceReason, tags, and aiReplySuggestion filled in; null when the mention is not found."
- Changed
get_alert_settings1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The alert settings: enabled flag, cadence in minutes, the plan's fastest allowed cadence, and available cadence options."New value: +"{ enabled, cadenceMinutes, minIntervalMinutes, availableCadences }: the cadence in effect, the plan floor, and the cadences you may pick."
- Changed
get_website2 fields changed- changed
Input schema / properties / websiteId / descriptionPrevious value: -"Monitored website ID (UUID)"New value: +"Monitored website ID (UUID) from list_websites" - changed
Output schema / properties / result / descriptionPrevious value: -"The monitored website with its keywords and their statuses."New value: +"The monitored website with its keyword list, each keyword carrying id, value, and status."
- Changed
keyword_change_usage1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The monthly keyword-edit allowance limit and the amount used."New value: +"{ limit, used, remaining, unlimited }; limit -1 and unlimited true mean edits are not metered."
- Changed
list_mentions5 fields changed- changed
Input schema / properties / includeLowRelevance / descriptionPrevious value: -"Include mentions scoring below 30 (hidden by default)"New value: +"Include mentions below the website minimum score (30 by default), hidden otherwise" - changed
Input schema / properties / keywords / descriptionPrevious value: -"Filter to mentions matched by these keywords"New value: +"Filter to mentions matched by these keyword values (case-insensitive exact match, as shown in list_websites)" - changed
Input schema / properties / scoreBuckets / descriptionPrevious value: -"Relevance buckets: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+)"New value: +"Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only show when includeLowRelevance is also true" - changed
Input schema / properties / statuses / descriptionPrevious value: -"Filter by status (NEW, APPROVED, REJECTED)"New value: +"Filter by status (NEW, APPROVED, REJECTED); omit to get everything except REJECTED" - changed
Output schema / properties / result / descriptionPrevious value: -"Array of mentions, each with its source, matched keyword, relevance score, status, and content."New value: +"{ mentions, total, limit, offset }: each mention has id, source, keyword, title, contentText, url, author, subreddit (Reddit only), status, relevanceScore, relevanceReason, aiReplySuggestion, tags, publishedAt, ingestedAt, reviewedAt."
- Changed
preview_activate_pending1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"Billing preview with the current plan, target plan, and prorated immediate charge."New value: +"Billing preview: currentPlanName, currentMonthlyPrice, targetPlanName, targetMonthlyPrice, targetKeywords, immediateCharge, isUpgrade, isDowngrade, requiresImmediatePayment."
- Changed
preview_keyword_billing2 fields changed- changed
Input schema / properties / desiredKeywordCount / descriptionPrevious value: -"Total number of active keywords you want"New value: +"Total ACTIVE keywords wanted across the account after the change (absolute count, not an increment)" - changed
Output schema / properties / result / descriptionPrevious value: -"The plan and price required for the desired number of active keywords."New value: +"Billing preview for that keyword count, same shape as preview_activate_pending: target plan, monthly price, prorated immediateCharge, isUpgrade, isDowngrade."
- Changed
update_alert_settings2 fields changed- changed
Input schema / properties / cadenceMinutes / descriptionPrevious value: -"Alert frequency in minutes: 60 (hourly), 240 (4h), 720 (12h), 1440 (daily)"New value: +"Digest interval in minutes: 15, 30, 60, 120, 180, 240, 720, or 1440; raised to the plan floor when faster than allowed, reset to the fastest allowed when omitted" - changed
Output schema / properties / result / descriptionPrevious value: -"The saved alert settings with the enabled flag and effective cadence."New value: +"The resolved settings after clamping: { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }."
- Changed
update_mention_status2 fields changed- changed
Input schema / properties / status / descriptionPrevious value: -"New status: NEW, APPROVED, or REJECTED"New value: +"New status: APPROVED (real lead), REJECTED (noise, hidden from default lists), or NEW (back to inbox)" - changed
Output schema / properties / result / descriptionPrevious value: -"The mention with its updated status."New value: +"The updated mention with its new status and reviewedAt (null when NEW)."
- Changed
update_website2 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"New description (used for relevance scoring)"New value: +"New scoring context; an empty string clears it, omit to keep the current one" - changed
Output schema / properties / result / descriptionPrevious value: -"The updated website record with its new name and description."New value: +"The updated website with its name, description, and keyword list."
21 tool updates
- First observed
activate_pending_keywords - First observed
add_keywords - First observed
analyze_website - First observed
count_mentions - First observed
create_website - First observed
delete_keyword - First observed
delete_website - First observed
disable_keyword - First observed
edit_keyword - First observed
enable_keyword - First observed
explain_mention - First observed
get_alert_settings - First observed
get_website - First observed
keyword_change_usage - First observed
list_mentions - First observed
list_websites - First observed
preview_activate_pending - First observed
preview_keyword_billing - First observed
update_alert_settings - First observed
update_mention_status - First observed
update_website
Related MCP Connectors
- RumoroOAuthdev.rumoro
Track what people say about your product on Reddit, X, Hacker News, GitHub and more
Social listening for AI agents: search mentions, pull scored buying signals, score leads
B2B leads: scored buying signals from HN/Bluesky/GitHub with AI dossiers and outreach drafts.
AI-triaged brand, competitor and demand mentions from Reddit, Google News and search.
Related MCP Servers
- AlicenseAqualityAmaintenanceMonitor keyword mentions across Reddit, Hacker News, X, and Bluesky, and triage AI-scored leads from your agent. Connects to the hosted RedReplier MCP server.211MIT
- AlicenseNot gradedqualityFmaintenanceProvides AI agents with real-time social trends, cross-platform sentiment, viral content velocity, and brand mentions from Reddit, Hacker News, and Google Trends.MIT

ParseStreamofficial
AlicenseNot gradedqualityBmaintenanceEnables AI assistants to monitor brand mentions across social platforms, assess relevance and buying intent, and generate reply drafts for manual approval.MIT- AlicenseBqualityBmaintenanceEnables AI agents to check brand mentions across AI search surfaces like ChatGPT, Claude, Gemini, Perplexity, and Google AI Overviews using natural language queries.43 npm1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.