Skip to main content
Glama

RedReplier

Server Details

Find leads in Reddit, HN, X, Bluesky and Facebook group mentions, scored by AI, from your agent

Ownership verified
Status
Healthy
Uptime
93.3% over 62 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.4/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct resource+action, and the descriptions explicitly cross-reference the near-neighbors: count_mentions vs list_mentions (total-only vs rows), get_website vs list_websites (by-ID vs all), enable_keyword vs add_keywords, disable_keyword vs delete_keyword, and analyze_website vs update_website. The boundaries are spelled out rather than left implicit, so misselection risk is very low.

Naming Consistency4/5

The surface is overwhelmingly a consistent verb_noun snake_case pattern (add_keywords, list_mentions, update_alert_settings, delete_website). The one outlier is keyword_change_usage, which drops the verb and describes a noun phrase, but it is a single minor deviation.

Tool Count4/5

19 tools is on the heavier side of the ideal band but each maps to a real operation across websites, keywords, mentions, settings, and workspaces. keyword_change_usage is effectively dead (always reports unlimited), so one tool does not fully earn its place.

Completeness4/5

Lifecycle coverage is strong: websites have create/get/list/update/delete, keywords have add/edit/enable/disable/delete, and mentions have list/count/explain/status-update plus alert settings and workspace discovery. Minor gaps exist, such as no standalone get_mention (only via list/explain) and no bulk triage, but agents can work around these.

Available Tools

19 tools
add_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.

NameRequiredDescriptionDefault
keywordsYesKeywords to add (e.g. ["my product", "competitor name"]); trimmed, lowercased, and de-duplicated, max 255 characters each
websiteIdYesMonitored website ID (UUID)
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe whole website with its full keyword list (id, value, status), including the new keywords as ACTIVE or PENDING.

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

Read the public homepage of the user's website 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.

NameRequiredDescriptionDefault
urlYesFull URL of the user's website (e.g. "https://example.com")
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNo{ description }: the AI-written business description, ready to pass to create_website or update_website.

TDQS

A4.6/5.0
Behavior5/5

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

Goes well past the annotations by disclosing quota cost (one AI generation), the caching exception (no charge if a precomputed description exists), the refund on failure, and specific error conditions (400 on exhausted quota or invalid URL, error on too little readable text). These are exactly the operational facts an agent cannot get from readOnlyHint/openWorldHint.

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

Conciseness4/5

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

Front-loaded with purpose, then workflow, then quota and error behavior; every sentence carries information. Density is high but there is no filler, though the opening sentence stacks several clauses.

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

Completeness5/5

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

With an output schema present, return-shape explanation is unnecessary, and the description still names the { description } field. Combined with annotations and 100% param coverage, an agent has everything needed to call it, interpret quota effects, and handle failures.

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

Parameters3/5

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

Schema description coverage is 100%, so url and workspaceId are already documented in the schema. The description adds only the URL-validity failure mode and says nothing about workspaceId or cross-workspace id semantics, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource: read the public homepage and return an AI-written business description. It also carves out scope ('without creating or changing any website'), which separates it from create_website/update_website by name.

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

Usage Guidelines5/5

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

Explicit routing: use it to draft or preview text before create_website or update_website, then pass the result as their description. It states both the trigger and the follow-up action, 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.

count_mentionsCount MentionsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
toNoOnly mentions ingested at/before this ISO 8601 datetime
fromNoOnly mentions ingested at/after this ISO 8601 datetime
sourcesNoFilter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS, FACEBOOK (posts outside groups), FACEBOOK_GROUP (posts in Facebook groups)
keywordsNoCount only mentions matched by these keyword values (case-insensitive exact match)
minScoreNoOnly mentions scoring at least this (0-100); unscored mentions are left out. Stacks on the website minimum, so set includeLowRelevance to go below it
statusesNoFilter by status (NEW, APPROVED, REJECTED); omit to count everything except REJECTED
websiteIdNoFilter to one website (UUID)
workspaceIdNoWorkspace 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
scoreBucketsNoRelevance 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
includeLowRelevanceNoInclude mentions below the website minimum score (30 by default), hidden otherwise

Output Schema

NameRequiredDescription
resultNo{ total }: the number of mentions matching the filters after the default exclusions.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 Your WebsiteAInspect

Add the user's own website to their RedReplier account so RedReplier can find public posts on Reddit, Hacker News, X, Bluesky, and Facebook that mention its keywords. 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 RedReplier reads the website's public homepage to write one, spending one AI generation from the plan quota; if that read 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 that step. Initial keywords are saved as PENDING and stay PENDING until add_keywords or enable_keyword activates them within the plan. 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.

NameRequiredDescriptionDefault
urlYesFull website URL (e.g. "https://example.com")
nameNoDisplay name for the website
keywordsNoInitial keywords, saved as PENDING; activate them with add_keywords or enable_keyword
descriptionNoProduct summary the AI scores every mention against; without it new mentions are not scored. Draft one with analyze_website
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe created website with its id, domain, description, and keywords (initial ones PENDING).

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true) by disclosing concrete failure modes: 400 on duplicate domain, 400 when plan slots are exhausted, revival of a domain deleted via delete_website, and the AI-generation quota cost of auto-drafting a description. It also explains the degraded path (description null, mentions unscored with reason string).

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

Conciseness4/5

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

Front-loaded with the core purpose, and nearly every clause carries operational information. It is dense and somewhat run-on in the middle, but there is little genuinely wasted text.

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

Completeness5/5

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

For a write tool with an output schema, this covers the remaining gaps an agent needs: prerequisite conditions (new domain, free slot), side effects (PENDING keywords, background AI suggestions), quota consumption, and the fallback state to check after the call.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: url must be a domain new to the account, description is the scoring context every mention is measured against (and what happens when omitted), and keywords land in PENDING until activated. This supplements rather than repeats the schema.

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

Purpose5/5

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

States a specific verb and resource ('Add the user's own website to their RedReplier account') plus the downstream effect (finding public posts on Reddit, Hacker News, X, Bluesky, Facebook). It is clearly distinguishable from sibling mutations like update_website and delete_website.

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

Usage Guidelines4/5

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

The duplicate-returns-400 rule implicitly routes an agent to update_website for existing domains, and it explicitly names update_website/analyze_website for fixing a missing description and add_keywords/enable_keyword for activating PENDING keywords. It stops short of a crisp 'use this when / not when' statement, but the context is clear.

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

delete_keywordDelete KeywordA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
keywordIdYesKeyword ID (UUID)
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNo{ deleted: true } once the keyword and its mentions are removed.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 WebsiteA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
websiteIdYesMonitored website ID (UUID)
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNo{ deleted: true } once the website is soft-deleted.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, 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.

Purpose5/5

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.

Usage Guidelines5/5

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 KeywordA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
keywordIdYesKeyword ID (UUID)
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe keyword with status DISABLED; existing mentions are retained.

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 KeywordA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
valueYesNew keyword text; trimmed and lowercased, must not duplicate another keyword on the same website
keywordIdYesKeyword ID (UUID)
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe updated keyword with its new value and resulting status (ACTIVE or PENDING).

TDQS

A4.4/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds 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.

Purpose5/5

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.

Usage Guidelines3/5

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

Usage is implied rather than stated: 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 KeywordA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
keywordIdYesKeyword ID (UUID)
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe keyword with status ACTIVE, or PENDING when the plan has no free slot for it.

TDQS

A4.5/5.0
Behavior5/5

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

With destructiveHint=true already declared, the description goes well beyond annotations: it discloses the ACTIVE-vs-PENDING capacity outcome, that it never charges or upgrades, that an already-active keyword is returned unchanged (idempotency), that alerts are synchronized, and that no historical backfill occurs. This is exactly the side-effect context a mutation tool needs.

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

Conciseness5/5

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

Five short sentences, purpose front-loaded first, then state outcomes, cost boundary, idempotency, and the sibling redirect. No sentence is filler.

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

Completeness5/5

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

An output schema exists, so return values need not be explained, and the description fully covers the state machine, cost implications, and non-backfill behavior an agent must know before calling. Nothing material is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so keywordId and workspaceId are fully documented in the schema itself (including the cross-workspace id caveat). The description adds no parameter-level detail, which is the expected baseline when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb (Enable) and resource (an existing keyword within the current plan), and explicitly routes new-keyword creation to the sibling add_keywords. An agent can distinguish this from disable_keyword/add_keywords without opening any schema.

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

Usage Guidelines4/5

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

Names the alternative (add_keywords) and the condition selecting it, plus states the no-charge/no-upgrade constraint that bounds when this is appropriate. It does not explicitly cover the inverse case (when to prefer disable_keyword), so it stops just short of full when/when-not guidance.

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

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.

NameRequiredDescriptionDefault
mentionIdYesMention ID (UUID) from list_mentions
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe full mention with relevanceReason, tags, and aiReplySuggestion filled in; null when the mention is not found.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 SettingsA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNo{ enabled, cadenceMinutes, minIntervalMinutes, availableCadences }: the cadence in effect, the plan floor, and the cadences you may pick.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, 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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 WebsiteA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
websiteIdYesMonitored website ID (UUID) from list_websites
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe monitored website with its keyword list, each keyword carrying id, value, and status.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. 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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds 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.

Purpose5/5

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

States a specific verb (get) and resource (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.

Usage Guidelines5/5

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 AllowanceA
Read-only
Inspect

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.

NameRequiredDescriptionDefault
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNo{ limit, used, remaining, unlimited }; limit -1 and unlimited true mean edits are not metered.

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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

States a specific verb and resource ('Get the 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.

Usage Guidelines5/5

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 Your MentionsA
Read-only
Inspect

List the mentions RedReplier saved for the user's keywords: public posts on 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. Reads mentions already saved in the account; it does not search or contact any network. Each mention is a public post with its text, URL and the author's public handle as shown on that 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.

NameRequiredDescriptionDefault
toNoOnly mentions ingested at/before this ISO 8601 datetime
fromNoOnly mentions ingested at/after this ISO 8601 datetime
sortNoRELEVANCE (default, highest score first) or RECENT (newest first)
limitNoMax results (1-500)
offsetNoPagination offset
sourcesNoFilter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS, FACEBOOK (posts outside groups), FACEBOOK_GROUP (posts in Facebook groups)
keywordsNoFilter to mentions matched by these keyword values (case-insensitive exact match, as shown in list_websites)
minScoreNoOnly mentions scoring at least this (0-100); unscored mentions are left out. Stacks on the website minimum, so set includeLowRelevance to go below it
statusesNoFilter by status (NEW, APPROVED, REJECTED); omit to get everything except REJECTED
websiteIdNoFilter to one website (UUID)
workspaceIdNoWorkspace 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
scoreBucketsNoRelevance 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
includeLowRelevanceNoInclude mentions below the website minimum score (30 by default), hidden otherwise

Output Schema

NameRequiredDescription
resultNo{ 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.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld=false/destructive=false, and the description reinforces this ('Reads mentions already saved in the account; it does not search or contact any network') and adds genuinely non-obvious behavior: two default filters that silently drop rows, the minScore/website-minimum stacking, and the privacy boundary that private Facebook groups are never read. It does not state rate limits or what happens on invalid pagination, but the substantive behavioral gaps are covered.

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

Conciseness4/5

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

A single dense paragraph that front-loads what is listed, then defaults, then return/pagination, then constraints and siblings — highly efficient for 13 parameters. Minor redundancy remains (the first sentence already lists content, and a later sentence re-describes text/URL/author handle to make the privacy point), so it falls just short of zero waste.

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

Completeness5/5

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

Given 13 optional parameters, an output schema, and safe-read annotations, the description covers everything an agent needs: what is returned, how to page, how defaults silently filter, time-field semantics, and which sibling to use instead. No material gap remains.

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

Parameters5/5

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

With 100% schema coverage the baseline is 3, but the description adds real meaning beyond the schema: from/to filter on ingestion time not publish time, keywords follow the values shown in list_websites, minScore stacks on the website minimum, and scoreBuckets LOW/VERY_LOW only surface when includeLowRelevance is true. It also supplies the limit/offset/total return contract that pagination depends on.

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

Purpose5/5

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

Opens with a specific verb+resource and an explicit scope ('mentions RedReplier saved for the user's keywords'), enumerates the sources covered, and distinguishes itself from the three closest siblings (count_mentions, explain_mention, update_mention_status). An agent can identify this tool without opening its schema.

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

Usage Guidelines5/5

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

Gives explicit when-to-use routing to count_mentions, explain_mention and update_mention_status, plus when-to-use sort values (RELEVANCE for best leads, RECENT for what is new) and the exact conditions for surfacing hidden rows (name statuses to see REJECTED; set includeLowRelevance to go below the website minimum). 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.

list_websitesList Your WebsitesA
Read-only
Inspect

List the user's own websites saved in their RedReplier account, each with its URL, name, description, and the keywords the user set up for it (ID, text, and status). Reads the account's saved settings only. Use get_website for one website when you have its ID. The website and keyword IDs are the inputs for the other tools.

NameRequiredDescriptionDefault
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoObject with websites: the user's saved websites with IDs, URLs, names, descriptions and keyword statuses.

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered structurally. The description adds the data scope ('Reads the account's saved settings only'), which is useful, but says nothing about pagination, result limits, or ordering, and the returned-field detail is largely duplicated by the output schema. Adequate but not rich.

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

Conciseness5/5

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

Three short sentences, front-loaded with what is returned, then the routing rule, then the chaining note. No filler and nothing buried.

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

Completeness5/5

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

With annotations covering the read-only profile, a fully documented single parameter in the schema, and an output schema describing return shape, the description supplies everything else an agent needs: the resource, the sibling routing, and the ID-chaining relationship.

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

Parameters3/5

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

There is a single optional parameter (workspaceId) with 100% schema description coverage, so the schema already carries the semantics including the cross-workspace ID caveat. The description never mentions workspace scoping, so it adds nothing beyond the schema; the baseline of 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List the user's own websites saved in their RedReplier account') and enumerates the returned fields, including nested keywords with ID, text, and status. It also distinguishes itself from get_website, 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.

Usage Guidelines5/5

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

Names the alternative explicitly and the condition that selects it: 'Use get_website for one website when you have its ID.' It further explains the downstream chaining ('The website and keyword IDs are the inputs for the other tools'), which tells the agent when this call is the prerequisite step.

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

list_workspacesList WorkspacesA
Read-only
Inspect

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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultNoOne entry per workspace with id, name, organization, role, permissions, isDefault and current. Pass id as workspaceId to other tools.

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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 SettingsA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
enabledYesTurn email alerts on or off
workspaceIdNoWorkspace 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
cadenceMinutesNoDigest 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

NameRequiredDescription
resultNoThe resolved settings after clamping: { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }.

TDQS

A4.9/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3; the description 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.

Purpose5/5

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.

Usage Guidelines5/5

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 StatusA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
statusYesNew status: APPROVED (real lead), REJECTED (noise, hidden from default lists), or NEW (back to inbox)
mentionIdYesMention ID (UUID)
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe updated mention with its new status and reviewedAt (null when NEW).

TDQS

A4.8/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: full reversibility between any statuses, the reviewedAt stamp/clear rule, the downstream effect on list_mentions/count_mentions, and mentionId provenance. Although destructiveHint=true, the description discloses the mutation is reversible and scoped, which meaningfully informs the agent.

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

Conciseness4/5

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

Front-loads the core action, then layers status semantics, reversibility, and judgment guidance. Everything earns its place, though the semicolon-heavy single block is denser than ideal.

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

Completeness5/5

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

With annotations covering the safety profile, a 100% schema coverage, and an output schema for the return value, the description fills the remaining behavioral gaps (reversibility, timestamp, downstream effects, guidance). Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so 3 is the baseline, but the description adds real invocation value by stating where mentionId comes from (list_mentions) and restating the status enum semantics. workspaceId is left entirely to the schema, so it does not fully compensate, but it exceeds the baseline.

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

Purpose5/5

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

States a specific verb and resource ('Set one mention's triage status') and then defines exactly what each status means, including the distinct effects of APPROVED, REJECTED, and NEW. An agent can distinguish this from siblings like explain_mention or list_mentions immediately.

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

Usage Guidelines5/5

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

Gives explicit operating guidance: judge on content and relevanceScore, call explain_mention first when the score looks off, and never approve an unread mention. It also names the concrete side effect that REJECTED drops the mention from default list_mentions and count_mentions results, with the workaround to pass statuses.

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

update_websiteUpdate Monitored WebsiteA
Destructive
Inspect

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.

NameRequiredDescriptionDefault
nameNoNew display name
websiteIdYesMonitored website ID (UUID)
descriptionNoNew scoring context; an empty string clears it, omit to keep the current one
workspaceIdNoWorkspace 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

NameRequiredDescription
resultNoThe updated website with its name, description, and keyword list.

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description 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.

Purpose5/5

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

States a specific verb and resource ('Update a 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.

Usage Guidelines5/5

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.

  1. 3 tool updates
    • Changedanalyze_website1 field changed
      • changedInput schema / properties / url / description
        Previous value: -"Full website URL to scrape (e.g. \"https://example.com\")"New value: +"Full URL of the user's website (e.g. \"https://example.com\")"
    • Changedcreate_website1 field changed
      • changedInput schema / properties / keywords / description
        Previous value: -"Initial keywords, stored as PENDING; list_websites promotes those that fit the plan for free"New value: +"Initial keywords, saved as PENDING; activate them with add_keywords or enable_keyword"
    • Changedlist_websites1 field changed
      • changedOutput schema / properties / result / description
        Previous value: -"Object with websites: monitored websites with IDs, URLs, names, descriptions and keyword statuses."New value: +"Object with websites: the user's saved websites with IDs, URLs, names, descriptions and keyword statuses."
  2. 19 tool updates
    • Changedadd_keywords2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedanalyze_website2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcount_mentions2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedcreate_website2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddelete_keyword2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddelete_website2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changeddisable_keyword2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changededit_keyword2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedenable_keyword2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedexplain_mention2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_alert_settings2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedget_website2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedkeyword_change_usage2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedlist_mentions2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedlist_websites2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedlist_workspaces2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedupdate_alert_settings2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedupdate_mention_status2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
    • Changedupdate_website2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • removedOutput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
  3. 2 tool updates
    • Changedcount_mentions2 fields changed
      • changedInput schema / properties / sources / description
        Previous 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)"
      • changedInput schema / properties / sources / items / enum
        Previous value: -[
        -  "REDDIT_POST",
        -  "REDDIT_COMMENT",
        -  "TWITTER",
        -  "BLUESKY",
        -  "HACKERNEWS"
        -]New value: +[
        +  "REDDIT_POST",
        +  "REDDIT_COMMENT",
        +  "TWITTER",
        +  "BLUESKY",
        +  "HACKERNEWS",
        +  "FACEBOOK",
        +  "FACEBOOK_GROUP"
        +]
    • Changedlist_mentions3 fields changed
      • changedInput schema / properties / sources / description
        Previous 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)"
      • changedInput schema / properties / sources / items / enum
        Previous value: -[
        -  "REDDIT_POST",
        -  "REDDIT_COMMENT",
        -  "TWITTER",
        -  "BLUESKY",
        -  "HACKERNEWS"
        -]New value: +[
        +  "REDDIT_POST",
        +  "REDDIT_COMMENT",
        +  "TWITTER",
        +  "BLUESKY",
        +  "HACKERNEWS",
        +  "FACEBOOK",
        +  "FACEBOOK_GROUP"
        +]
      • changedOutput schema / properties / result / description
        Previous 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."
  4. 19 tool updates
    • Changedadd_keywords1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedanalyze_website1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedcount_mentions2 fields changed
      • addedInput schema / properties / minScore
        Added 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"
        +}
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedcreate_website1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changeddelete_keyword1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changeddelete_website1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changeddisable_keyword1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changededit_keyword1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedenable_keyword1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedexplain_mention1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedget_alert_settings2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedget_website1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedkeyword_change_usage2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedlist_mentions2 fields changed
      • addedInput schema / properties / minScore
        Added 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"
        +}
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedlist_websites2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Addedlist_workspaces
    • Changedupdate_alert_settings1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedupdate_mention_status1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
    • Changedupdate_website1 field changed
      • addedInput schema / properties / workspaceId
        Added 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"
        +}
  5. 4 tool updates
    • Changeddisable_keyword1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedlist_websites1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Removedpreview_activate_pending
    • Removedpreview_keyword_billing
  6. 1 tool update
    • Changeddelete_keyword1 field changed
      • changedOutput schema / properties / result / description
        Previous value: -"{ deleted: true } once the PENDING keyword is removed."New value: +"{ deleted: true } once the keyword and its mentions are removed."
  7. 2 tool updates
    • Removedactivate_pending_keywords
    • Changedenable_keyword1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
  8. 20 tool updates
    • Changedactivate_pending_keywords1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedadd_keywords2 fields changed
      • changedInput schema / properties / keywords / description
        Previous 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"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedanalyze_website2 fields changed
      • changedInput schema / properties / url / description
        Previous value: -"Website URL to analyze"New value: +"Full website URL to scrape (e.g. \"https://example.com\")"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedcount_mentions8 fields changed
      • changedInput schema / properties / from / description
        Previous value: -"ISO 8601 datetime"New value: +"Only mentions ingested at/after this ISO 8601 datetime"
      • addedInput schema / properties / includeLowRelevance / description
        Added value: +"Include mentions below the website minimum score (30 by default), hidden otherwise"
      • addedInput schema / properties / keywords / description
        Added value: +"Count only mentions matched by these keyword values (case-insensitive exact match)"
      • addedInput schema / properties / scoreBuckets / description
        Added 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"
      • addedInput schema / properties / sources / description
        Added value: +"Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS"
      • addedInput schema / properties / statuses / description
        Added value: +"Filter by status (NEW, APPROVED, REJECTED); omit to count everything except REJECTED"
      • changedInput schema / properties / to / description
        Previous value: -"ISO 8601 datetime"New value: +"Only mentions ingested at/before this ISO 8601 datetime"
      • changedOutput schema / properties / result / description
        Previous value: -"The number of mentions matching the given filters."New value: +"{ total }: the number of mentions matching the filters after the default exclusions."
    • Changedcreate_website3 fields changed
      • changedInput schema / properties / description / description
        Previous 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"
      • changedInput schema / properties / keywords / description
        Previous 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"
      • changedOutput schema / properties / result / description
        Previous 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)."
    • Changeddelete_keyword1 field changed
      • changedOutput schema / properties / result / description
        Previous value: -"Confirmation that the keyword was deleted."New value: +"{ deleted: true } once the PENDING keyword is removed."
    • Changeddelete_website1 field changed
      • changedOutput schema / properties / result / description
        Previous value: -"Confirmation that the website was deleted."New value: +"{ deleted: true } once the website is soft-deleted."
    • Changeddisable_keyword1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changededit_keyword2 fields changed
      • changedInput schema / properties / value / description
        Previous value: -"New keyword text"New value: +"New keyword text; trimmed and lowercased, must not duplicate another keyword on the same website"
      • changedOutput schema / properties / result / description
        Previous 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)."
    • Changedenable_keyword1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedexplain_mention2 fields changed
      • changedInput schema / properties / mentionId / description
        Previous value: -"Mention ID (UUID)"New value: +"Mention ID (UUID) from list_mentions"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedget_alert_settings1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedget_website2 fields changed
      • changedInput schema / properties / websiteId / description
        Previous value: -"Monitored website ID (UUID)"New value: +"Monitored website ID (UUID) from list_websites"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedkeyword_change_usage1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedlist_mentions5 fields changed
      • changedInput schema / properties / includeLowRelevance / description
        Previous value: -"Include mentions scoring below 30 (hidden by default)"New value: +"Include mentions below the website minimum score (30 by default), hidden otherwise"
      • changedInput schema / properties / keywords / description
        Previous 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)"
      • changedInput schema / properties / scoreBuckets / description
        Previous 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"
      • changedInput schema / properties / statuses / description
        Previous value: -"Filter by status (NEW, APPROVED, REJECTED)"New value: +"Filter by status (NEW, APPROVED, REJECTED); omit to get everything except REJECTED"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedpreview_activate_pending1 field changed
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedpreview_keyword_billing2 fields changed
      • changedInput schema / properties / desiredKeywordCount / description
        Previous 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)"
      • changedOutput schema / properties / result / description
        Previous 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."
    • Changedupdate_alert_settings2 fields changed
      • changedInput schema / properties / cadenceMinutes / description
        Previous 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"
      • changedOutput schema / properties / result / description
        Previous value: -"The saved alert settings with the enabled flag and effective cadence."New value: +"The resolved settings after clamping: { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }."
    • Changedupdate_mention_status2 fields changed
      • changedInput schema / properties / status / description
        Previous 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)"
      • changedOutput schema / properties / result / description
        Previous value: -"The mention with its updated status."New value: +"The updated mention with its new status and reviewedAt (null when NEW)."
    • Changedupdate_website2 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"New description (used for relevance scoring)"New value: +"New scoring context; an empty string clears it, omit to keep the current one"
      • changedOutput schema / properties / result / description
        Previous value: -"The updated website record with its new name and description."New value: +"The updated website with its name, description, and keyword list."
  9. 21 tool updates
    • First observedactivate_pending_keywords
    • First observedadd_keywords
    • First observedanalyze_website
    • First observedcount_mentions
    • First observedcreate_website
    • First observeddelete_keyword
    • First observeddelete_website
    • First observeddisable_keyword
    • First observededit_keyword
    • First observedenable_keyword
    • First observedexplain_mention
    • First observedget_alert_settings
    • First observedget_website
    • First observedkeyword_change_usage
    • First observedlist_mentions
    • First observedlist_websites
    • First observedpreview_activate_pending
    • First observedpreview_keyword_billing
    • First observedupdate_alert_settings
    • First observedupdate_mention_status
    • First observedupdate_website

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Monitor keyword mentions across Reddit, Hacker News, X, and Bluesky, and triage AI-scored leads from your agent. Connects to the hosted RedReplier MCP server.
    21
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Buying-intent judgement for AI agents: three judges decide whether the author of any post or message is a real buyer, and draft a reply you approve.
    21 npm
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Provides AI agents with real-time social trends, cross-platform sentiment, viral content velocity, and brand mentions from Reddit, Hacker News, and Google Trends.
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Give your AI agent 4 sales-timing tools: detect funding events, buying-signal hires, competitor pricing changes, and buying-intent Reddit posts. Know when to reach out, not just who.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources