redreplier
Enables monitoring Bluesky for keyword mentions of a product and triaging AI-scored leads, including filtering by relevance, source, and date, and approving or rejecting mentions.
Enables monitoring Reddit for keyword mentions of a product and triaging AI-scored leads, including filtering by relevance, source, and date, and approving or rejecting mentions.
RedReplier Agent
Give your AI agent the ability to monitor Reddit, Hacker News, X, and Bluesky for keyword mentions of your product — and triage the AI-scored leads — from a single command.
Works with: Claude Code, Cursor, Windsurf, Codex, and any agent that supports skills.
Install
npx skills add redreplier/agentOther installation methods
Manual: Copy the skills/redreplier/ folder into your project's skills directory.
Cursor remote rules: Point to https://raw.githubusercontent.com/redreplier/agent/main/skills/redreplier/SKILL.md
Related MCP server: social-superpowers
Setup
Create an account at redreplier.com/signup
Add the websites and keywords you want to monitor
Create an API token at Settings → API Tokens
Run:
./scripts/redreplier.js setup --key redreplier_xxxxx
What it does
Once installed, your AI agent can:
Manage monitored websites — add, update, AI-analyze, remove
Manage keywords — add, edit, enable/disable, activate within your plan
Triage mentions — list AI-scored mentions from Reddit, Hacker News, X, and Bluesky, filter by relevance / keyword / source / date, approve or reject leads
Explain relevance — see why a mention scored the way it did
Configure alerts — enable email digests and set the cadence
Example
You: Show me this week's best leads for my product.
Agent: 3 mentions scoring 70+. Top: r/webdev "Looking for an example tool" (85) —
a direct buying-intent question, plus one on Hacker News and one on X.
Want me to approve them and reject the rest?Alternative: MCP
For deeper integration with Claude Desktop, Cursor, or other MCP-compatible clients, use the RedReplier MCP server:
{
"mcpServers": {
"redreplier": {
"type": "http",
"url": "https://mcp.redreplier.com/mcp",
"headers": {
"Authorization": "Bearer redreplier_your_key"
}
}
}
}Run it locally
The server source lives in mcp-server/. Run it over stdio with Bun:
{
"mcpServers": {
"redreplier": {
"command": "bun",
"args": ["run", "/path/to/agent/mcp-server/src/index.ts"],
"env": { "REDREPLIER_API_TOKEN": "redreplier_your_key" }
}
}
}Or with Docker:
docker build -t redreplier-mcp .
docker run -i -e REDREPLIER_API_TOKEN=redreplier_your_key redreplier-mcpLinks
License
MIT
Available Tools
21 toolsactivate_pending_keywordsActivate Pending KeywordsA
Activate every PENDING keyword across the account in two steps: promote as many as the current plan covers for free, then charge an immediate prorated upgrade to cover the remainder (keywords disabled this cycle still hold slots and count). Keywords covered by the upgrade stay PENDING in the response and flip ACTIVE once the payment settles; re-check with list_websites. Always call preview_activate_pending first, show the user immediateCharge and targetPlanName, and get explicit consent; never call this in a loop. Use enable_keyword for a single DISABLED keyword. Fails with 400 when there is no active subscription or the charge fails, leaving keywords PENDING. Returns the updated websites.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | All websites with their keyword statuses; keywords waiting on an upgrade payment still show PENDING. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false), so the description carries the full burden. It discloses the two-step billing process, that keywords stay PENDING until payment settles, the immediate prorated charge, and the failure behavior. It also warns against looping, which is critical behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: it front-loads the core action, then covers billing behavior, prerequisites, alternatives, and failure modes. The structure is logical and dense without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (billing, multi-step process, PENDING state), the description covers all necessary aspects: prerequisite call, user consent, immediateCharge display, targetPlanName, re-check via list_websites, failure modes, and return value (updated websites). Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema trivially covers 100% of them. The description adds no parameter details because none exist. Baseline for 0 params is 4, and the description does not detract; it's appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Activate every PENDING keyword across the account') with a clear verb, resource, and scope. It also differentiates itself from siblings by naming enable_keyword for a single DISABLED keyword and preview_activate_pending as a prerequisite, so an agent can distinguish it without inspecting other tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to call this tool: after preview_activate_pending, with explicit user consent, and never in a loop. It also specifies the alternative (enable_keyword) for a single DISABLED keyword and notes failure conditions (400 when no active subscription or charge fails). No ambiguity remains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_keywordsAdd KeywordsA
Add keywords to a monitored website. Values are trimmed, lowercased, and de-duplicated; ones already ACTIVE on that site are skipped, and re-adding a DISABLED one resets it to PENDING (prefer enable_keyword). Each new keyword starts PENDING, then as many as fit the plan's free headroom flip to ACTIVE at once, with no charge. The rest stay PENDING and match nothing until activate_pending_keywords, which may charge an upgrade; run preview_activate_pending first. Adding is unlimited. Use edit_keyword to reword an existing keyword. Returns the whole website with its updated keyword list, not only the new keywords.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | Keywords to add (e.g. ["my product", "competitor name"]); trimmed, lowercased, and de-duplicated, max 255 characters each | |
| websiteId | Yes | Monitored website ID (UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The whole website with its full keyword list (id, value, status), including the new keywords as ACTIVE or PENDING. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses side effects: trimming/lowercasing/dedup, skipping existing active keywords, resetting disabled ones to pending, activation limited by headroom, no charge for initial activation, and the return of the full updated website. It also notes that later activation may incur charges. This goes well beyond the annotations (readOnlyHint false, destructiveHint false) and gives a complete behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is informative but remains focused, covering all key points in a single paragraph. It uses semicolons effectively and includes necessary digressions about alternative tools and charge implications. It is slightly longer than strictly necessary but avoids redundancy and stays well-organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully addresses the tool's complexity, including state transitions, activation headroom, billing implications, and the output format. It also references related tools (enable_keyword, preview_activate_pending) to place the operation in the broader workflow. No important aspect is missing for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides full coverage of parameters (keywords array with constraints, websiteId UUID). The description adds behavioral semantics beyond the schema, such as how existing keywords are handled (skip active, reset disabled) and the activation logic, enriching the understanding of parameter effects. Though it doesn't introduce new parameter details, the added behavior context justifies above-baseline scoring.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Add keywords to a monitored website') and specifies the resource. It also distinguishes from edit_keyword and mentions the preferred alternative enable_keyword for re-adding disabled keywords, making the tool's unique purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use this tool versus alternatives: it points out that re-adding disabled keywords should prefer enable_keyword, and advises running preview_activate_pending before activation. It also clarifies that adding is unlimited and explains the activation flow, providing sufficient context for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_websiteAnalyze WebsiteA
Scrape a URL and return an AI-written business description as { description }, without creating or changing any website. Use it to draft or preview the text before create_website or update_website, then pass the result as their description. Consumes one AI generation from the monthly quota unless a precomputed description already exists for that domain, and refunds it if generation fails. Returns 400 when the quota is exhausted or url is not a valid URL, and an error when the page has too little readable text.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full website URL to scrape (e.g. "https://example.com") |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { description }: the AI-written business description, ready to pass to create_website or update_website. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint false, destructiveHint false), the description discloses quota consumption, refund behavior on failure, precomputed-domain shortcut, and specific HTTP error codes for quota exhaustion and invalid URL. This is rich behavioral context that annotations alone do not provide, and it aligns with the readOnlyHint false because quota consumption is a side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no redundancy. The main action is front-loaded, followed by usage guidance, quota behavior, and error handling. Every sentence earns its place and there is no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has one parameter, an output schema (not shown but present), and clear error conditions. The description covers usage flow, side effects, and failure modes. Nothing an agent needs to call it correctly is missing; the output schema handles return structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the only parameter 'url' with a clear example, so schema coverage is 100%. The description adds no new meaning about the parameter itself; it mentions 'url' in error conditions but that is not additional semantic detail. Baseline 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (scrape) and resource (URL) with a clear deliverable (AI-written business description). It also distinguishes itself from siblings by explicitly positioning it as a drafting/preview step before create_website or update_website, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use this tool ('Use it to draft or preview the text before create_website or update_website') and how to chain the result ('pass the result as their description'). It also clarifies the non-destructive nature and error scenarios, leaving no guesswork about invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
count_mentionsCount MentionsARead-only
Count mentions matching the same filters as list_mentions, returning { total } and no rows. The same defaults apply: REJECTED excluded unless statuses includes it, and scores below the website's minimum (30 by default) hidden unless includeLowRelevance is true. Use it for dashboards, to size a triage batch, or to decide whether paging list_mentions is worthwhile; list_mentions already returns total with its rows, so skip this when you fetch rows anyway. Takes no sort, limit, or offset.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Only mentions ingested at/before this ISO 8601 datetime | |
| from | No | Only mentions ingested at/after this ISO 8601 datetime | |
| sources | No | Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS | |
| keywords | No | Count only mentions matched by these keyword values (case-insensitive exact match) | |
| statuses | No | Filter by status (NEW, APPROVED, REJECTED); omit to count everything except REJECTED | |
| websiteId | No | Filter to one website (UUID) | |
| scoreBuckets | No | Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only count when includeLowRelevance is also true | |
| includeLowRelevance | No | Include mentions below the website minimum score (30 by default), hidden otherwise |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { total }: the number of mentions matching the filters after the default exclusions. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only safety is known. The description adds meaningful behavioral details beyond annotations: the default exclusions (REJECTED unless statuses includes it, and low-relevance scores hidden unless includeLowRelevance is true) and the explicit lack of sort/limit/offset. This enriches the agent's understanding of how filtering behaves without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences with no wasted words. The core purpose is front-loaded, usage guidance follows, and the constraint (no sort/limit/offset) is stated clearly at the end. Every sentence earns its place, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a count tool with 8 optional parameters, 100% schema coverage, and an existing output schema, the description is complete. It covers the tool's purpose, usage guidance, default filtering behavior, and the absence of pagination parameters. Nothing an agent needs to decide whether to call it and what to expect is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the schema already documents each parameter. The description adds value by referencing that the filters are identical to list_mentions and by explaining the default behaviors that affect several parameters (statuses and includeLowRelevance). This provides context beyond the schema's individual field descriptions, though it doesn't detail every parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Count mentions matching the same filters as list_mentions, returning { total } and no rows.' It clearly states what the tool does and differentiates it from list_mentions by noting it returns only the total and no rows, so an agent can distinguish the two without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it ('Use it for dashboards, to size a triage batch, or to decide whether paging list_mentions is worthwhile') and when not to ('skip this when you fetch rows anyway'), naming the alternative (list_mentions) and the condition that selects it. This leaves no ambiguity about tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_websiteAdd Website to MonitorA
Add a website to monitor across Reddit, Hacker News, X, and Bluesky. The domain must be new to this account: a duplicate returns 400, and re-adding a domain removed with delete_website revives that record. description is the context every mention is scored against. Omit it and the server scrapes the URL to write one, spending one AI generation from the plan quota; if that scrape fails or the quota is exhausted the site is created with description null and its mentions go unscored (reason "Scoring skipped: website description missing"), so check the response and set one with update_website or analyze_website. Pass your own description to skip the scrape. Initial keywords are stored PENDING: list_websites or add_keywords promotes those that fit the plan for free, and activate_pending_keywords covers the rest, possibly for a charge. AI-suggested keywords are added in the background and show up on the website later. Returns 400 when the plan has no website slots left.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Full website URL (e.g. "https://example.com") | |
| name | No | Display name for the website | |
| keywords | No | Initial keywords, stored as PENDING; list_websites promotes those that fit the plan for free | |
| description | No | Product summary the AI scores every mention against; without it new mentions are not scored. Draft one with analyze_website |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The created website with its id, domain, description, and keywords (initial ones PENDING). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effects beyond the annotations: consumes an AI generation when description is omitted, creates the website, may return 400 on duplicate or slot exhaustion, and stores keywords as PENDING. Also mentions background AI-suggested keywords, providing clear transparency about what happens.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is comprehensive but somewhat long; the purpose is front-loaded. Some redundancy exists between the omission and passing-your-own-description clauses, but overall it is organized and information-dense without being excessively verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers creation, error conditions, quota consumption, keyword lifecycle, and related tool usage, making it self-sufficient. The output schema is present, so return details are not required for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already describes parameters, the description adds crucial behavioral meaning: the description parameter is the scoring context and triggers scraping if omitted; keywords are stored PENDING and promoted via specific tools. This enriches the understanding of how each parameter affects the outcome.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool adds a website for monitoring across Reddit, Hacker News, X, and Bluesky, with the verb 'add' and resource 'website' being specific. This distinguishes it from siblings like update_website, delete_website, and list_websites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names alternatives such as update_website, analyze_website, list_websites, add_keywords, and activate_pending_keywords, with conditions for when to use them (e.g., after creation if description is missing, or for keyword promotion). Explicitly notes duplicate and slot-limit errors, giving practical guidance on when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_keywordDelete KeywordADestructive
Permanently delete one keyword. Only PENDING keywords qualify (never billed, never live), so there is no billing effect and no undo. Any other status returns 400 "Only pending keywords can be removed": use disable_keyword for an ACTIVE keyword, edit_keyword to fix a SUSPENDED one, and delete_website to drop a whole site. Prefer this over leaving unwanted PENDING keywords in place, because activate_pending_keywords would otherwise try to pay for them. Returns { deleted: true }.
| Name | Required | Description | Default |
|---|---|---|---|
| keywordId | Yes | Keyword ID (UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { deleted: true } once the PENDING keyword is removed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description adds key behavioral details: no billing effect, no undo, and the return value. This gives the agent a full picture of consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than a typical one-liner but each sentence adds necessary information (conditions, alternatives, consequences, return). It is well-organized and not redundant, though slightly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter tool with an output schema, the description fully covers when to use it, what happens, and what to expect in return. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter (keywordId) is fully described in the schema as 'Keyword ID (UUID)'. The description adds no extra semantic detail, but schema coverage is 100%, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the action (permanently delete) and resource (one keyword), and explicitly distinguishes from sibling tools by specifying when to use them (disable_keyword for ACTIVE, edit_keyword for SUSPENDED, delete_website for whole site).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit conditions for use (only PENDING keywords) and names specific alternatives for other statuses, leaving no ambiguity about when this tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_websiteStop Monitoring WebsiteADestructive
Stop monitoring a website (soft delete). The site and its keywords leave list_websites immediately and stop matching new mentions; 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 for a PENDING keyword you never want. Confirm with the user first and name the domain, not just the ID. Returns { deleted: true }; 404 if the ID is unknown to this account.
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Monitored website ID (UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { deleted: true } once the website is soft-deleted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the full behavioral impact: immediate removal from list_websites, cessation of matching new mentions, irreversibility (no restore tool), and the exact response format including the 404 error case. This goes far beyond the annotations (destructiveHint) to set complete expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and every sentence carries meaningful information. It efficiently packs purpose, usage guidance, behavioral consequences, and error handling without redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all necessary context: what happens, when to use, what not to use, irreversibility, and return/error behavior. The presence of an output schema further complements the description, yet the description already covers the key aspects thoroughly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not add further meaning to the websiteId parameter beyond the schema's own description ('Monitored website ID (UUID)'). Since schema coverage is 100% and the parameter is self-explanatory, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Stop monitoring a website (soft delete)') and specifies the resource (website). It also distinguishes it from related sibling tools like disable_keyword and delete_keyword, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool ('Use this only when the whole site should go') and contrasts it with alternatives (disable_keyword, delete_keyword), including the instruction to confirm with the user first. This provides clear guidance on when to select this tool over others.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_keywordDisable KeywordADestructive
Stop monitoring one keyword: sets it DISABLED and it stops matching new mentions immediately. Unlimited and reversible with enable_keyword. Billing does not drop right away: the keyword keeps its paid slot until the end of the current billing cycle, so re-enabling it in the same cycle is free but a new keyword cannot reuse that slot for free; any price reduction is scheduled for the cycle boundary. Use delete_keyword instead for a PENDING keyword you never want. Calling it on an already DISABLED keyword returns it unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| keywordId | Yes | Keyword ID (UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The keyword with status DISABLED; its paid slot is held until the billing cycle ends. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several behavioral nuances beyond the annotations: billing implications (keeps paid slot until end of cycle, re-enabling in same cycle is free), reversibility, idempotency (calling on already disabled returns unchanged), and the distinction for pending keywords. This aligns with the destructiveHint annotation (state modification) but clarifies the reversible nature, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat lengthy but every sentence conveys essential information (billing, reversibility, idempotency, contrast with delete). It is well-structured with clear statements, though it could be slightly more concise without losing critical details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter), the description provides complete context: it covers the primary action, side effects (billing), edge cases (pending keywords, already disabled), and the relationship to sibling tools (enable_keyword, delete_keyword). No important operational aspect is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the sole parameter (keywordId as UUID). The description does not add extra semantic meaning to the parameter itself beyond the schema, though the context of 'keyword' is implied. This meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Stop monitoring one keyword' and specifies the effect (sets it DISABLED, stops matching new mentions). It also differentiates from sibling tools by explicitly contrasting with delete_keyword and mentioning enable_keyword.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit guidance on when to use this tool vs. alternatives: 'Use delete_keyword instead for a PENDING keyword you never want.' It also implies usage for temporary suspension and mentions reversibility via enable_keyword, giving clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_keywordEdit KeywordADestructive
Change a keyword's text in place, keeping its ID and any paid slot. Edits are unlimited on every plan (keyword_change_usage reports limit -1). The new value is re-graded for noise; an ACTIVE keyword stays ACTIVE, while a PENDING, DISABLED, or SUSPENDED one goes ACTIVE if the plan has a free slot and PENDING otherwise. Use this to fix a SUSPENDED keyword the grader rejected, or to reword instead of adding a variant with add_keywords. A case-only change is a no-op; a value already on the website returns 400.
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | New keyword text; trimmed and lowercased, must not duplicate another keyword on the same website | |
| keywordId | Yes | Keyword ID (UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The updated keyword with its new value and resulting status (ACTIVE or PENDING). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations (destructiveHint:true, readOnlyHint:false) by detailing exact behaviors: unlimited edits, re-grading for noise, status transitions (ACTIVE stays ACTIVE, others go ACTIVE if slot free else PENDING), and duplicate handling. This level of detail is highly transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, covering multiple important aspects in three sentences. It is slightly long but every sentence adds critical information, so it remains efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (status transitions, billing implications, uniqueness checks), the description covers all key behaviors the agent needs to know. It explains the impact on paid slots, re-grading, and error conditions, making it fully sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already covers keywordId and value with descriptions, the tool description adds meaningful context: 'keeping its ID' clarifies the ID is preserved, 'case-only change is a no-op' explains value normalization, and 'value already on the website returns 400' warns of uniqueness constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Change a keyword's text in place, keeping its ID and any paid slot.' It distinguishes itself from add_keywords by explicitly noting 'reword instead of adding a variant with add_keywords.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this to fix a SUSPENDED keyword the grader rejected, or to reword instead of adding a variant with add_keywords.' It also clarifies edge cases like case-only changes being no-ops and duplicate values returning 400.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_keywordEnable KeywordA
Re-activate one DISABLED keyword. It goes ACTIVE at once when it fits the plan or was disabled earlier in this billing cycle (it still holds its slot). Otherwise it is set PENDING and the required plan upgrade is charged immediately; it flips ACTIVE once the payment settles, so re-check with get_website. Use activate_pending_keywords instead to bring every PENDING keyword live in one call, and add_keywords for a keyword that does not exist yet. Preview cost with preview_keyword_billing first. Returns 400 without an active subscription; an ACTIVE keyword is returned unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| keywordId | Yes | Keyword ID (UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The keyword with status ACTIVE, or PENDING when an upgrade was charged and its payment has not settled yet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only basic safety flags (readOnlyHint=false, destructiveHint=false). The description enriches this with crucial behavior: conditional immediate activation, charging behavior, state transition to PENDING then ACTIVE, the 400 error without subscription, and unchanged handling of already-ACTIVE keywords. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but every sentence adds value, covering behavior, alternatives, and edge cases. It is front-loaded with the core action and slightly verbose but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (conditional state transitions, billing implications) and presence of an output schema, the description covers all needed aspects: when it activates immediately, when it goes pending, what to re-check with get_website, error conditions, and alternatives. Nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter keywordId is fully documented in the schema (UUID), with 100% schema description coverage. The description does not add meaning beyond the schema, which is acceptable given the schema's sufficiency, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool re-activates a disabled keyword, with explicit conditions for immediate activation vs pending. It distinguishes itself from siblings activate_pending_keywords and add_keywords by name, so an agent can easily tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names alternatives (activate_pending_keywords for bulk pending, add_keywords for new keywords) and recommends preview_keyword_billing for cost. It also explains the scenario-dependent behavior, leaving no ambiguity about when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_mentionExplain Mention ScoreA
Get the AI relevance reasoning (relevanceReason), tags, and a drafted reply (aiReplySuggestion) for one mention, generating whatever is missing on first call and storing it, so later calls are instant reads. The website must have a description; without one the mention comes back unchanged. Use it when a score looks wrong or before update_mention_status on a borderline lead, not across every row of list_mentions, since generation is slow. Returns the full mention object, or null (not a 404) when the ID is unknown to this account.
| Name | Required | Description | Default |
|---|---|---|---|
| mentionId | Yes | Mention ID (UUID) from list_mentions |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The full mention with relevanceReason, tags, and aiReplySuggestion filled in; null when the mention is not found. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the tool generates and stores missing data on first call, making later calls instant reads—a significant behavior not captured by annotations. It also clarifies the return behavior for unknown IDs (null, not 404). These details go well beyond the annotation hints and provide essential operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core action, followed by behavior, usage guidance, and return semantics. Each sentence serves a purpose, and the length is appropriate for the complexity. It could be slightly trimmed but is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (one parameter, generation behavior, storage, slow performance, prerequisites), the description covers all necessary aspects: when to use, what to expect, return values, and the website description prerequisite. The output schema exists (though not shown), so return details are covered. The description is complete for an agent to decide and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter mentionId is fully described in the input schema (UUID from list_mentions), and the description does not add extra parameter-level semantics beyond what's already provided. Since schema coverage is 100%, the baseline of 3 is appropriate; the description adds no new parameter details, but it does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: retrieving AI relevance reasoning, tags, and a drafted reply for a single mention. It also distinguishes itself from siblings by explicitly mentioning update_mention_status and list_mentions, making the resource and action unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly provides when to use ('when a score looks wrong or before update_mention_status on a borderline lead') and when not to use ('not across every row of list_mentions, since generation is slow'). It also mentions a prerequisite (website must have a description) and the consequence if missing. This is comprehensive guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alert_settingsGet Alert SettingsARead-only
Get the account's email-alert settings: enabled, cadenceMinutes (the digest interval in effect), minIntervalMinutes (the fastest cadence the plan allows), and availableCadences (the subset of 15, 30, 60, 120, 180, 240, 720, 1440 at or above that floor). cadenceMinutes is never reported below the floor, even if a faster value was saved before a plan downgrade. Call it before update_alert_settings to pick a value from availableCadences, and after it to confirm what applied. Read-only; the digests themselves are sent by the platform on that cadence.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }: the cadence in effect, the plan floor, and the cadences you may pick. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the read-only nature ('Read-only') and explains the minInterval/availableCadences constraint behavior. While the annotations already indicate read-only, the description adds meaningful detail about the floor constraint and the 'never reported below the floor' behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured, but slightly repetitive with the 'cadenceMinutes is never reported below the floor' sentence appearing twice in essence. Still, it is efficient and front-loads the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides sufficient context for a no-parameter read operation: what it returns, the constraint behavior, and when to call it. The output schema exists, so return values need not be spelled out. Minor deduction for the slight redundancy but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description cannot add parameter-level detail. With no parameters, a baseline score of 3 is appropriate as the schema coverage is complete and there is nothing else to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the account's email-alert settings and enumerates the exact fields returned. It distinguishes itself from the sibling update_alert_settings tool by focusing on the 'get' operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly instructs when to use this tool: 'Call it before update_alert_settings to pick a value from availableCadences, and after it to confirm what applied.' This provides clear contextual guidance relative to the sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_websiteGet Monitored WebsiteARead-only
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, enable_keyword, or activate_pending_keywords; use list_websites instead when you do not have the ID yet or want every site. websiteId comes from list_websites or create_website. Returns 404 when the website does not exist or belongs to another account, and 400 when websiteId is not a UUID.
| Name | Required | Description | Default |
|---|---|---|---|
| websiteId | Yes | Monitored website ID (UUID) from list_websites |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The monitored website with its keyword list, each keyword carrying id, value, and status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds behavioral details about error responses (404 for non-existent or account-mismatched website, 400 for non-UUID), giving extra transparency beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that packs multiple pieces of information (purpose, usage guidance, parameter source, error details). While not overly long, it could be slightly more scannable. Still, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a good overview of what is returned ('full keyword list and statuses') and mentions error cases, but does not detail the output structure. Since an output schema exists, this is acceptable; the description provides sufficient context for calling the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers the parameter completely, but the tool description adds valuable context by noting that websiteId 'comes from list_websites or create_website'. This extra semantic meaning helps the agent correctly source the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and resource ('monitored website by ID'), and explicitly mentions the included keyword list and statuses. It also distinguishes this tool from list_websites by specifying the use case, making it clear which tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use this tool ('re-check keyword statuses after add_keywords, enable_keyword, or activate_pending_keywords') and when not to ('use list_websites instead when you do not have the ID yet or want every site'). This provides unambiguous usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_change_usageGet Keyword Edit AllowanceARead-only
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. Not a capacity or billing preview: use preview_keyword_billing or preview_activate_pending for plan pricing, and list_websites to count ACTIVE keywords.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { limit, used, remaining, unlimited }; limit -1 and unlimited true mean edits are not metered. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral semantics beyond annotations, such as the meaning of 'limit -1 means unlimited' and the fact that only 'edit_keyword' counts toward the allowance. This reveals how the metric behaves without contradicting the readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: the core purpose is stated first, followed by clarifications and alternative guidance. It is concise while providing necessary context without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no params, single output object), the description covers the output format, value semantics, and relevant use cases, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to describe. The baseline for no parameters is 4, and the description does not need to add parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the monthly keyword-edit allowance for the account as { limit, used, remaining, unlimited }'. It differentiates from sibling tools by noting it is not a capacity or billing preview and not for counting active keywords, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Every current plan reports unlimited, so there is no need to check it before edit_keyword; it remains for clients that budget edits.' It also names alternatives (preview_keyword_billing, preview_activate_pending, list_websites) for different needs, making when-to-use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mentionsList MentionsARead-only
List mentions matched for this account across Reddit, Hacker News, X, and Bluesky, 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. Use count_mentions for the number alone, explain_mention for one mention's reasoning, and update_mention_status to triage.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Only mentions ingested at/before this ISO 8601 datetime | |
| from | No | Only mentions ingested at/after this ISO 8601 datetime | |
| sort | No | RELEVANCE (default, highest score first) or RECENT (newest first) | |
| limit | No | Max results (1-500) | |
| offset | No | Pagination offset | |
| sources | No | Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS | |
| keywords | No | Filter to mentions matched by these keyword values (case-insensitive exact match, as shown in list_websites) | |
| statuses | No | Filter by status (NEW, APPROVED, REJECTED); omit to get everything except REJECTED | |
| websiteId | No | Filter to one website (UUID) | |
| scoreBuckets | No | Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only show when includeLowRelevance is also true | |
| includeLowRelevance | No | Include mentions below the website minimum score (30 by default), hidden otherwise |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | { mentions, total, limit, offset }: each mention has id, source, keyword, title, contentText, url, author, subreddit (Reddit only), status, relevanceScore, relevanceReason, aiReplySuggestion, tags, publishedAt, ingestedAt, reviewedAt. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds substantial non-obvious behavior: the REJECTED default exclusion, the below-min-score (30) hiding that overrides even scoreBuckets=LOW/VERY_LOW, pagination semantics (offset while offset < total), and the ingestion-time vs publish-time distinction for from/to. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long, but every sentence earns its place for an 11-parameter tool with tricky defaults. It is front-loaded with the core purpose, then defaults, return shape, sorting, and sibling routing in a logical order. Slightly denser than strictly necessary but well organized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a complex read tool: return shape matches the output schema, default filtering behaviors are fully disclosed, pagination is explained, the scoreBuckets/includeLowRelevance interaction is clarified, and sibling routing is explicit. Given the output schema exists, nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful cross-parameter semantics the schema alone cannot convey — notably that scoreBuckets=LOW/VERY_LOW only shows when includeLowRelevance is also true, and the 30-default minimum. This is genuine added meaning beyond the per-parameter schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'List mentions matched for this account across Reddit, Hacker News, X, and Bluesky.' It details the returned fields (source, keyword, status, content, relevanceReason, aiReplySuggestion) and names the sibling tools it is not (count_mentions, explain_mention, update_mention_status), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes to alternatives: 'Use count_mentions for the number alone, explain_mention for one mention's reasoning, and update_mention_status to triage.' It also gives selection guidance within the tool itself — 'Sort RELEVANCE for the best leads, RECENT for what is new' — 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.
list_websitesList Monitored WebsitesARead-only
List every website this account monitors, each with its keywords (id, value, status: PENDING, ACTIVE, DISABLED, SUSPENDED). Call this first: most other tools need a websiteId or keywordId from it. Reading also promotes any PENDING keyword that fits the plan's free headroom to ACTIVE, without ever charging. Use get_website instead when you already hold a websiteId and want one record. Only ACTIVE keywords match new mentions, so a long PENDING list explains a quiet inbox. Scope is the account behind the API token.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | Array of monitored websites, each with its ID, URL, name, description, and keywords with their statuses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations declare readOnlyHint=true, implying no state changes, but the description states that reading 'promotes any PENDING keyword that fits the plan's free headroom to ACTIVE'. This is a direct contradiction, as promotion modifies state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is mostly concise but includes explanatory notes about promotion and 'quiet inbox' that, while informative, go slightly beyond the core purpose. Still well-structured and not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and a clear output description (websites with keywords and statuses), the tool is adequately described. Some details about output structure or pagination are absent, but not critical for basic usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no properties, and the description mentions no parameters. Since schema coverage is 100% (empty), the baseline of 3 applies; there is no parameter info to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists monitored websites with their keywords and statuses, and explicitly distinguishes it from get_website. This provides a precise purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this first' and explains that most other tools need a websiteId or keywordId from it. It also advises using get_website when holding an ID, offering clear selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_activate_pendingPreview Pending Keyword ActivationARead-only
Preview the billing impact of activate_pending_keywords without changing anything. Takes no input: it prices the plan needed for the keywords committed this cycle (ACTIVE plus disabled this cycle) plus every PENDING keyword. Returns currentPlanName, currentMonthlyPrice, targetPlanName, targetMonthlyPrice, targetKeywords, immediateCharge (prorated amount charged now), isUpgrade, isDowngrade, requiresImmediatePayment; immediateCharge 0 with isUpgrade false means activation is free. Use this right before activate_pending_keywords. Use preview_keyword_billing instead to price an arbitrary keyword count, for example before add_keywords or enable_keyword.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | Billing preview: currentPlanName, currentMonthlyPrice, targetPlanName, targetMonthlyPrice, targetKeywords, immediateCharge, isUpgrade, isDowngrade, requiresImmediatePayment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states 'without changing anything,' which matches the readOnlyHint annotation, and it explains the meaning of specific output values (e.g., immediateCharge 0 with isUpgrade false means free). This goes slightly beyond the annotation by providing interpretive context, though it does not mention potential side effects or error conditions beyond the read-only guarantee.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is slightly longer than necessary but every sentence adds value: it states the purpose, the lack of inputs, the computation logic, the output fields, and usage distinctions. It is front-loaded with the most critical information and does not contain redundant fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers the tool's context: when to use it, what it computes, what the output fields mean, and how it differs from the sibling preview_keyword_billing. Since an output schema exists, the description need not enumerate all return fields, but it still provides valuable interpretation of key output semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes no parameters (schema coverage 100%), so there is nothing to explain. Per the rubric, 0 parameters receives a baseline score of 4. The description correctly omits any parameter details, and no additional clarification is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: previewing the billing impact of activating pending keywords. It uses a specific verb ('preview') and resource ('billing impact of activate_pending_keywords'), and explicitly contrasts it with the sibling tool preview_keyword_billing, making the distinction unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'Use this right before activate_pending_keywords' and 'Use preview_keyword_billing instead to price an arbitrary keyword count, for example before add_keywords or enable_keyword.' This clearly tells the agent when to use this tool versus the alternative, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_keyword_billingPreview Keyword BillingARead-only
Preview the plan and price needed for a chosen total of active keywords, without changing anything. desiredKeywordCount is the absolute number of keywords you want live across the account, not the number being added: count the ACTIVE keywords from list_websites and add the new ones. Returns the same shape as preview_activate_pending (currentPlanName, targetPlanName, targetMonthlyPrice, immediateCharge, isUpgrade, isDowngrade, requiresImmediatePayment). Use this for what-if pricing before add_keywords or enable_keyword; use preview_activate_pending instead for the exact cost of activating the keywords already PENDING, which it counts for you.
| Name | Required | Description | Default |
|---|---|---|---|
| desiredKeywordCount | Yes | Total ACTIVE keywords wanted across the account after the change (absolute count, not an increment) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | Billing preview for that keyword count, same shape as preview_activate_pending: target plan, monthly price, prorated immediateCharge, isUpgrade, isDowngrade. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'without changing anything.' It adds value by specifying the exact return shape (same as preview_activate_pending) and clarifying the parameter semantics. This goes beyond the annotation baseline but doesn't introduce new behavioral caveats, so a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence serves a purpose: the first states the core function, the second clarifies the parameter, the third lists the return fields, and the last gives usage guidance. Information is front-loaded, and there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter, a clear schema, an output schema, and annotations covering safety, the description fully equips the agent: it explains the parameter's meaning, the return shape, and when to use it vs. the alternative. Nothing needed for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a clear description of desiredKeywordCount (absolute count, not increment). The tool description adds an operational hint: 'count the ACTIVE keywords from list_websites and add the new ones.' This provides practical guidance beyond the schema, but since schema coverage is 100%, the baseline is 3; the extra example lifts it to 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: preview the plan and price for a chosen total of active keywords without modifying anything. It uses a specific verb (preview) and resource (keyword billing) and explicitly distinguishes itself from the sibling preview_activate_pending, making it easy to identify the right tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool ('for what-if pricing before add_keywords or enable_keyword') and when to use an alternative ('use preview_activate_pending instead for the exact cost of activating the keywords already PENDING'). This direct routing to a sibling tool eliminates ambiguity.
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 SettingsADestructive
Turn mention email alerts on or off and set how often the digest is sent. enabled is required on every call. cadenceMinutes must be one of 15, 30, 60, 120, 180, 240, 720, 1440, otherwise 400 "Invalid alert frequency for your plan"; a value faster than the plan floor is silently raised to the floor. Both settings are replaced on every call: omitting cadenceMinutes resets it to the fastest cadence the plan allows, so pass the current value when only toggling enabled. Use get_alert_settings for availableCadences before, and to confirm the applied cadence after. Returns the resolved settings.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | Turn email alerts on or off | |
| cadenceMinutes | No | Digest interval in minutes: 15, 30, 60, 120, 180, 240, 720, or 1440; raised to the plan floor when faster than allowed, reset to the fastest allowed when omitted |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The resolved settings after clamping: { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, it discloses specific side effects: both settings are replaced, omitting cadenceMinutes resets to fastest allowed, values faster than plan floor are silently raised, and validation returns 400. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence provides necessary information—purpose, validation rules, side effects, usage guidance, and output. The structure is logical and free of fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully covers what the tool does, how to use it, expected behavior, error conditions, and return value. It also references the appropriate sibling tool for complementary actions, making it self-contained for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds critical meaning: allowed cadence values, plan floor behavior, reset semantics when omitted, and requirement that enabled is always passed. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: turning mention email alerts on/off and setting the digest frequency. It uses a specific verb and distinguishes it from sibling tools like get_alert_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs users to get_alert_settings for available cadences before and confirmation after, and explains when to use this tool (e.g., passing current value when only toggling enabled).
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
Set one mention's triage status. APPROVED marks it a real lead; REJECTED marks it noise and drops it from default list_mentions and count_mentions results (pass statuses to see it again); NEW returns it to the inbox. Fully reversible: any status can move to any other; reviewedAt is stamped when leaving NEW and cleared on NEW. Judge on the content and relevanceScore, calling explain_mention first when the score looks off; never approve a mention you have not read. mentionId comes from list_mentions. Returns the updated mention.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | New status: APPROVED (real lead), REJECTED (noise, hidden from default lists), or NEW (back to inbox) | |
| mentionId | Yes | Mention ID (UUID) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The updated mention with its new status and reviewedAt (null when NEW). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint false, destructiveHint false), so the description carries the full behavioral burden. It fully discloses reversibility, side effects of REJECTED on default lists, and the reviewedAt timestamp lifecycle. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both dense with information, with the core purpose front-loaded. Every clause earns its place—no filler or repetition of schema fields. The long second sentence is acceptable given the amount of behavioral context it packs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with side effects and multiple status transitions, the description covers all essential operational details: reversibility, timestamp behavior, effect on lists, source of the ID, and the recommendation to verify with explain_mention. Output schema exists, so return format is already covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% but the description adds significant value beyond the enum definitions: it explains the downstream consequences of each status (REJECTED hides from default lists, NEW returns to inbox) and the source of mentionId. This transforms dry schema into actionable context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Set one mention's triage status') and immediately distinguishes the three statuses. It clearly differentiates from siblings like list_mentions and explain_mention by focusing on the single-mention state change.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to call explain_mention (when score looks off), when to avoid approving (without reading), and describes how REJECTED affects default list_mentions/count_mentions results. Also tells the agent where mentionId comes from (list_mentions), leaving no ambiguity about prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_websiteUpdate Monitored WebsiteADestructive
Update a monitored website's display name and/or description. Only the fields you pass change: omitted fields keep their value, and an empty description clears it. The description is the context the AI scores every new mention against, so keep it an accurate summary of the product; mentions already scored are not rescored. Use analyze_website to draft a description from the live site before saving it here. URL and keywords cannot change through this tool: use add_keywords, edit_keyword, or disable_keyword for keywords. Returns the updated website with its keyword list.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New display name | |
| websiteId | Yes | Monitored website ID (UUID) | |
| description | No | New scoring context; an empty string clears it, omit to keep the current one |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | No | The updated website with its name, description, and keyword list. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint, and the description adds field-level behavior such as clearing via empty string and preserving omitted fields. It also discloses the scoring-context effect, though it does not explicitly state irreversibility beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well organized, with each sentence serving a purpose: what updates, partial-update semantics, scoring context, and limitations. No unnecessary wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Provides enough context to call correctly: partial update behavior, clearing semantics, scoring implications, and unsupported fields. Return value is stated, and the output schema exists, so no further detail is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all three parameters with clear descriptions, but the tool description adds important semantics: only passed fields change and empty description clears. This goes beyond the schema's basic field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action: updating a monitored website's display name and/or description. It distinguishes itself from sibling tools by explicitly noting that URL and keywords cannot be changed and pointing to analyze_website for drafting descriptions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: partial updates, omitted fields keep values, empty description clears it, and mentions not rescored. It also names alternatives for keyword changes, making the choice clear.
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.
20 tool updates
v0.1.1- Changed
activate_pending_keywords1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The updated websites reflecting the newly activated keyword statuses."New value: +"All websites with their keyword statuses; keywords waiting on an upgrade payment still show PENDING."
- Changed
add_keywords2 fields changed- changed
Input schema / properties / keywords / descriptionPrevious value: -"Keywords to add (e.g. [\"my product\", \"competitor name\"])"New value: +"Keywords to add (e.g. [\"my product\", \"competitor name\"]); trimmed, lowercased, and de-duplicated, max 255 characters each" - changed
Output schema / properties / result / descriptionPrevious value: -"The added keywords with their IDs and resulting statuses (ACTIVE or PENDING)."New value: +"The whole website with its full keyword list (id, value, status), including the new keywords as ACTIVE or PENDING."
- Changed
analyze_website2 fields changed- changed
Input schema / properties / url / descriptionPrevious value: -"Website URL to analyze"New value: +"Full website URL to scrape (e.g. \"https://example.com\")" - changed
Output schema / properties / result / descriptionPrevious value: -"The AI-generated business description for the analyzed URL."New value: +"{ description }: the AI-written business description, ready to pass to create_website or update_website."
- Changed
count_mentions8 fields changed- changed
Input schema / properties / from / descriptionPrevious value: -"ISO 8601 datetime"New value: +"Only mentions ingested at/after this ISO 8601 datetime" - added
Input schema / properties / includeLowRelevance / descriptionAdded value: +"Include mentions below the website minimum score (30 by default), hidden otherwise" - added
Input schema / properties / keywords / descriptionAdded value: +"Count only mentions matched by these keyword values (case-insensitive exact match)" - added
Input schema / properties / scoreBuckets / descriptionAdded value: +"Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only count when includeLowRelevance is also true" - added
Input schema / properties / sources / descriptionAdded value: +"Filter by source: REDDIT_POST, REDDIT_COMMENT, TWITTER (X), BLUESKY, HACKERNEWS" - added
Input schema / properties / statuses / descriptionAdded value: +"Filter by status (NEW, APPROVED, REJECTED); omit to count everything except REJECTED" - changed
Input schema / properties / to / descriptionPrevious value: -"ISO 8601 datetime"New value: +"Only mentions ingested at/before this ISO 8601 datetime" - changed
Output schema / properties / result / descriptionPrevious value: -"The number of mentions matching the given filters."New value: +"{ total }: the number of mentions matching the filters after the default exclusions."
- Changed
create_website3 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Manual description (skips scraping/AI). Used as context when scoring mention relevance"New value: +"Product summary the AI scores every mention against; without it new mentions are not scored. Draft one with analyze_website" - changed
Input schema / properties / keywords / descriptionPrevious value: -"Initial keywords to monitor (added as PENDING)"New value: +"Initial keywords, stored as PENDING; list_websites promotes those that fit the plan for free" - changed
Output schema / properties / result / descriptionPrevious value: -"The created website record with its description and initial keywords with their statuses."New value: +"The created website with its id, domain, description, and keywords (initial ones PENDING)."
- Changed
delete_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"Confirmation that the keyword was deleted."New value: +"{ deleted: true } once the PENDING keyword is removed."
- Changed
delete_website1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"Confirmation that the website was deleted."New value: +"{ deleted: true } once the website is soft-deleted."
- Changed
disable_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The keyword with its status set to DISABLED."New value: +"The keyword with status DISABLED; its paid slot is held until the billing cycle ends."
- Changed
edit_keyword2 fields changed- changed
Input schema / properties / value / descriptionPrevious value: -"New keyword text"New value: +"New keyword text; trimmed and lowercased, must not duplicate another keyword on the same website" - changed
Output schema / properties / result / descriptionPrevious value: -"The updated keyword with its new value and status."New value: +"The updated keyword with its new value and resulting status (ACTIVE or PENDING)."
- Changed
enable_keyword1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The keyword with its resulting status (ACTIVE or PENDING)."New value: +"The keyword with status ACTIVE, or PENDING when an upgrade was charged and its payment has not settled yet."
- Changed
explain_mention2 fields changed- changed
Input schema / properties / mentionId / descriptionPrevious value: -"Mention ID (UUID)"New value: +"Mention ID (UUID) from list_mentions" - changed
Output schema / properties / result / descriptionPrevious value: -"The AI relevance reasoning and tags for the mention."New value: +"The full mention with relevanceReason, tags, and aiReplySuggestion filled in; null when the mention is not found."
- Changed
get_alert_settings1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The alert settings: enabled flag, cadence in minutes, the plan's fastest allowed cadence, and available cadence options."New value: +"{ enabled, cadenceMinutes, minIntervalMinutes, availableCadences }: the cadence in effect, the plan floor, and the cadences you may pick."
- Changed
get_website2 fields changed- changed
Input schema / properties / websiteId / descriptionPrevious value: -"Monitored website ID (UUID)"New value: +"Monitored website ID (UUID) from list_websites" - changed
Output schema / properties / result / descriptionPrevious value: -"The monitored website with its keywords and their statuses."New value: +"The monitored website with its keyword list, each keyword carrying id, value, and status."
- Changed
keyword_change_usage1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"The monthly keyword-edit allowance limit and the amount used."New value: +"{ limit, used, remaining, unlimited }; limit -1 and unlimited true mean edits are not metered."
- Changed
list_mentions5 fields changed- changed
Input schema / properties / includeLowRelevance / descriptionPrevious value: -"Include mentions scoring below 30 (hidden by default)"New value: +"Include mentions below the website minimum score (30 by default), hidden otherwise" - changed
Input schema / properties / keywords / descriptionPrevious value: -"Filter to mentions matched by these keywords"New value: +"Filter to mentions matched by these keyword values (case-insensitive exact match, as shown in list_websites)" - changed
Input schema / properties / scoreBuckets / descriptionPrevious value: -"Relevance buckets: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+)"New value: +"Relevance buckets, OR-combined: VERY_LOW (<10), LOW (10-29), MEDIUM (30-49), HIGH (50-74), VERY_HIGH (75+). LOW and VERY_LOW only show when includeLowRelevance is also true" - changed
Input schema / properties / statuses / descriptionPrevious value: -"Filter by status (NEW, APPROVED, REJECTED)"New value: +"Filter by status (NEW, APPROVED, REJECTED); omit to get everything except REJECTED" - changed
Output schema / properties / result / descriptionPrevious value: -"Array of mentions, each with its source, matched keyword, relevance score, status, and content."New value: +"{ mentions, total, limit, offset }: each mention has id, source, keyword, title, contentText, url, author, subreddit (Reddit only), status, relevanceScore, relevanceReason, aiReplySuggestion, tags, publishedAt, ingestedAt, reviewedAt."
- Changed
preview_activate_pending1 field changed- changed
Output schema / properties / result / descriptionPrevious value: -"Billing preview with the current plan, target plan, and prorated immediate charge."New value: +"Billing preview: currentPlanName, currentMonthlyPrice, targetPlanName, targetMonthlyPrice, targetKeywords, immediateCharge, isUpgrade, isDowngrade, requiresImmediatePayment."
- Changed
preview_keyword_billing2 fields changed- changed
Input schema / properties / desiredKeywordCount / descriptionPrevious value: -"Total number of active keywords you want"New value: +"Total ACTIVE keywords wanted across the account after the change (absolute count, not an increment)" - changed
Output schema / properties / result / descriptionPrevious value: -"The plan and price required for the desired number of active keywords."New value: +"Billing preview for that keyword count, same shape as preview_activate_pending: target plan, monthly price, prorated immediateCharge, isUpgrade, isDowngrade."
- Changed
update_alert_settings2 fields changed- changed
Input schema / properties / cadenceMinutes / descriptionPrevious value: -"Alert frequency in minutes: 60 (hourly), 240 (4h), 720 (12h), 1440 (daily)"New value: +"Digest interval in minutes: 15, 30, 60, 120, 180, 240, 720, or 1440; raised to the plan floor when faster than allowed, reset to the fastest allowed when omitted" - changed
Output schema / properties / result / descriptionPrevious value: -"The saved alert settings with the enabled flag and effective cadence."New value: +"The resolved settings after clamping: { enabled, cadenceMinutes, minIntervalMinutes, availableCadences }."
- Changed
update_mention_status2 fields changed- changed
Input schema / properties / status / descriptionPrevious value: -"New status: NEW, APPROVED, or REJECTED"New value: +"New status: APPROVED (real lead), REJECTED (noise, hidden from default lists), or NEW (back to inbox)" - changed
Output schema / properties / result / descriptionPrevious value: -"The mention with its updated status."New value: +"The updated mention with its new status and reviewedAt (null when NEW)."
- Changed
update_website2 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"New description (used for relevance scoring)"New value: +"New scoring context; an empty string clears it, omit to keep the current one" - changed
Output schema / properties / result / descriptionPrevious value: -"The updated website record with its new name and description."New value: +"The updated website with its name, description, and keyword list."
21 tool updates
v0.1.0- First observed
activate_pending_keywords - First observed
add_keywords - First observed
analyze_website - First observed
count_mentions - First observed
create_website - First observed
delete_keyword - First observed
delete_website - First observed
disable_keyword - First observed
edit_keyword - First observed
enable_keyword - First observed
explain_mention - First observed
get_alert_settings - First observed
get_website - First observed
keyword_change_usage - First observed
list_mentions - First observed
list_websites - First observed
preview_activate_pending - First observed
preview_keyword_billing - First observed
update_alert_settings - First observed
update_mention_status - First observed
update_website
TDQS
Scored across 21 tools
Each tool targets a distinct resource and action: website CRUD, keyword lifecycle, mention triage, alert settings, and billing previews are all cleanly separated. Overlapping actions like enable_keyword versus activate_pending_keywords are carefully disambiguated by scope and use case.
The overwhelming majority follow a consistent verb_noun pattern (list_websites, create_website, update_mention_status). Minor deviations like keyword_change_usage and preview_activate_pending break the pattern slightly but remain readable and predictable.
At 21 tools, the set is slightly heavy but each tool serves a real purpose in the website monitoring workflow. The billing and preview helpers add surface area but support the core keyword activation flow without being redundant.
The tool surface covers website lifecycle management, keyword CRUD and activation, mention retrieval and triage, alert configuration, and billing previews. There are no obvious dead ends: every state transition for websites, keywords, and mentions is supported by an appropriate tool.
Maintenance
Related MCP Connectors
Monitor Reddit, HN, X, and Bluesky mentions and triage AI-scored leads from your agent.
Find high-intent Reddit conversations and manage lead workflows from MCP-compatible AI agents.
Nephia is a brand monitoring service, and this is its remote MCP server. Claude, Cursor, ChatGPT or any MCP client can read the mentions your brand gets on 14 sources: X, Reddit (posts and comments), YouTube, TikTok, Bluesky, Hacker News, Mastodon, Lemmy, GitHub, Product Hunt, Stack Overflow, any RSS feed, Vinted, and AI answers from ChatGPT, Gemini and Perplexity. Every mention arrives already read, with its sentiment and intent, so an agent can answer plain questions: which complaints came in since Friday, what Reddit said about us this week. The source is an argument, not a tool, so one call reads every source you watch. Sign-in is OAuth in the browser: no API key to copy. The consent screen has three permissions: read your mentions and Queries, change what is running (pause, resume, retire), and spend credits (semantic search and AI passes), which arrives unticked. Every tool description states its cost, so a model can budget before it spends. The server is on every plan, Free included, and reading your own mentions through it costs nothing.
Live X/Twitter and Reddit research. 10 read-only MCP tools, Google/GitHub sign-in. Free tier.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceA read-only research MCP server that provides search and browsing tools for Hacker News, Reddit, and Product Hunt. Works with zero API keys for basic use.MIT- AlicenseNot gradedqualityCmaintenanceLive X/Twitter and Reddit research. 10 read-only MCP tools, Google/GitHub sign-in. Free tier.1MIT

prowlo-mcpofficial
FlicenseNot gradedqualityDmaintenanceEnables AI agents to semantically search and access read-only Reddit and X data through a hosted MCP server, with residential proxy crawling and no API credentials required.-- AlicenseAqualityCmaintenanceAn MCP server that turns Claude into a Reddit lead-finding agent: search for buying-intent conversations, score them against your product, and read full threads before drafting a reply.3MIT