Nephia
Server Details
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.
- Status
- Healthy
- Uptime
- 83.1% over 22 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 23 tools
Several tools operate on the same core objects: list_mentions, get_keyword_results, and get_keyword_events are three mention-reading paths, and analyses_estimate, explore_estimate, and keyword_estimate are three pricing tools. The descriptions explain the differences well, but an agent would need to read carefully to avoid picking the wrong one.
Read tools use verb-first names like get_keyword and list_mentions, while mutation and estimate tools mostly use noun-first names like keyword_create, keyword_update, and analyses_run. Everything is snake_case and readable, but the two conventions are mixed rather than uniform, with account_credits and explore deviating further.
23 tools is in the heavy range for a single server, though most are distinct and the estimate/write pairs are logical. The count is borderline and a substantial share are keyword-related or credit-related helpers, which can make the surface feel overwhelming.
The keyword lifecycle, source management, mention reading, stats, similarity, explore, and Vinted history/stats cover the apparent domain well. Minor gaps exist, such as no way to update a bucket or fully remove a source, but agents can work around them.
Available Tools
23 toolsaccount_creditsGet credit balanceARead-onlyInspect
Get the remaining credit balance for the Nephia account. Free — does not charge credits. Use this before a charged call, or after an insufficient-credits error.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable behavioral context beyond that by stating the operation is free and does not consume credits, which is critical for an agent deciding whether to call it. It could further mention output format or authentication, but with annotations covering the read-only safety profile, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary purpose is front-loaded in the first sentence, and the second sentence packs cost information and usage triggers efficiently. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema utility, the description covers all necessary aspects: what the tool returns, that it is free, and when to invoke it. There is no missing operational detail an agent would need to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool accepts zero parameters, so the input schema fully documents the absence of arguments. Per the rubric, 0 params yields a baseline of 4. The description adds nothing about parameters because none exist, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Get the remaining credit balance for the Nephia account.' It clearly differentiates from siblings by addressing account-level balance rather than operation estimates or data queries, and the 'Free — does not charge credits' note further distinguishes it from charged tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use this before a charged call, or after an insufficient-credits error.' This provides clear context and a decision rule, and since no sibling provides the same balance-checking function, there are no alternatives to exclude.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyses_estimatePrice an AI passARead-onlyInspect
Costs 0 credits. Returns how many credits analyses_run would charge for that many items, per kind, computed by the same functions that charge it.
| Name | Required | Description | Default |
|---|---|---|---|
| itemCount | Yes | How many items you would send. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavior beyond the readOnlyHint annotation by stating that the call costs 0 credits and that the returned estimate is computed by the same functions that actually charge analyses_run. This reassures the agent that the estimate is accurate and side-effect-free. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The most important trait (costs 0 credits) is front-loaded, followed immediately by what the tool returns and how the estimate is computed. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one simple parameter, no output schema, and read-only/open-world annotations, the description covers what the agent needs: cost, return value, relationship to analyses_run, and accuracy guarantee. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: itemCount is documented as 'How many items you would send' with min and max values. The description's phrase 'that many items' reinforces the parameter's meaning but does not add substantial new semantics beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb (returns) and resource (how many credits analyses_run would charge), and clarifies scope ('for that many items, per kind'). It clearly differentiates this from analyses_run by framing it as a zero-credit estimation tool, leaving no doubt about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly tells the agent when to use this tool: instead of running analyses_run, call this to learn the credit cost in advance. It names analyses_run as the relevant alternative. It does not explicitly mention excluding query_estimate or explore_estimate, but the reference to analyses_run is sufficient for the primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyses_runRun an AI pass over itemsAInspect
Read a set of items with one AI pass. Charges credits: 1 credit per 50 items for group, classify and summarise, and 1 credit per 25 for agent — the agent answers your own fields per item, which is heavier than a single verdict. The response's meta.credits_used is what was actually charged; a batch the provider could not answer is not billed. Estimate first with analyses_estimate if the cost matters.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | group: cluster the items by an instruction. classify: sort them into buckets you define. agent: apply your instruction and schema to each item. summarise: answer one question about the set. | |
| items | No | The items to read. Use exactly one of items or keywordId. | |
| limit | No | ||
| since | No | With keywordId: ISO instant, defaults to 24h ago. | |
| schema | No | Required for kind=agent: 1-12 flat fields to answer per item. No nesting, no arrays. Every field may answer null — that is a real answer. | |
| buckets | No | Required for kind=classify. | |
| question | No | Required for kind=summarise. | |
| keywordId | No | Read a keyword's own recent mentions instead of passing items. The id comes from list_keywords. | |
| instruction | No | Required for kind=group and kind=agent. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses billing behavior: credits per item counts, actual charge reflected in meta.credits_used, and that unanswered batches are not billed. This is valuable operational context the annotations do not cover. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences with no filler. The main purpose is front-loaded, cost and alternative are woven in, and the text is compact. It could be slightly tighter but is well-structured for quick consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 9 parameters and nested objects, the description covers cost, estimation, and the billing outcome. It mentions the response's meta.credits_used, giving a hint of the return shape, but does not fully describe the output structure. Since no output schema exists, a bit more detail on the response format would improve completeness, but it is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 89%, so the schema already documents most parameters. The description adds cost semantics per 'kind' (1 credit per 50 vs 25), which enriches that parameter's meaning. It does not add detail to items, limit, since, or schema parameters, but the schema covers them adequately. The added cost context justifies a slight upgrade from the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb and resource: 'Read a set of items with one AI pass.' It names the four kinds (group, classify, agent, summarise) and their distinct behaviors, making the tool's purpose unambiguous. It also references the estimation sibling, which helps differentiate when to use this versus analyses_estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 to use analyses_estimate first if cost matters, providing a clear alternative. It explains the credit costs per kind, which informs when this tool is appropriate. However, it does not explicitly state when not to use this tool versus other exploration tools like explore, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exploreExplore the Sources onceAInspect
Ask the Sources once, now, without creating a keyword, and read the mentions they return. It is the way to test a discovery angle before creating a keyword: competitors' names, problem phrases ("alternative to", "anyone know a tool"), a launch week. Read the outcomes: fetched without rows means the platform answered and the criteria kept nothing, and a failed search says why. The run is kept: read it again with list_mentions kind="runs" run=<run.id> rather than running it twice. Charges each search once, when it runs, at its Source's rate: 40 credits on TikTok; 5 credits on Youtube; 4 credits each on Reddit, Vinted; 1 credit each on Bluesky, Hacker News, Mastodon, Lemmy, GitHub, Product Hunt, Stack Overflow, RSS; on X, 5 credits plus 3 per result returned, so at most 65 credits for a page of 20. A search that fails is not charged, and the run is refused before any search when the balance cannot cover it. Call explore_estimate first, show the person the total, and send its estimateToken only after they agree. A leg the estimate marks variable was quoted at a full page: the run charges what came back, so quote the estimate as "up to".
| Name | Required | Description | Default |
|---|---|---|---|
| sources | Yes | The Sources to ask, at most 6. | |
| estimateToken | Yes | The estimateToken explore_estimate returned for exactly these arguments. Valid 15 minutes. A token for other arguments is refused: estimate again. | |
| globalCriteria | Yes | The criteria every search inherits: market, and query or terms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false; the description goes far beyond that by disclosing exact credit costs per source, that failed searches are not charged, that runs are refused if the balance cannot cover them, and how to interpret 'fetched without rows' versus 'failed search.' This is precisely the behavioral context an agent needs beyond the annotation booleans.
Agents need to know what a tool does to the 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 contributes operational knowledge: pricing, failure modes, estimate flow, and rerun guidance. It is front-loaded with purpose, then moves through usage and cost. While it could be formatted as bullets, the density is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 three nested parameters and no output schema, the description covers prerequisites, cost contingencies, failure semantics, and re-use via list_mentions. It explains what outcomes mean and when to use the estimate companion tool. No critical operational gap remains for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents every parameter with descriptions. The description adds extra meaning around estimateToken (its 15-minute validity, that mismatched arguments are refused, and that it must come from explore_estimate after user approval) and clarifies that variable legs are billed on actual results, so quotes should be 'up to'. Because the schema carries the structural detail, the description's extra parameter context elevates it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Ask the Sources once, now, without creating a keyword, and read the mentions they return,' which states a specific verb, resource, and scope. It further differentiates from siblings by framing it as the way to test a discovery angle before creating a keyword, and by pointing to explore_estimate and list_mentions as counterparts. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names the precondition 'Call explore_estimate first, show the person the total, and send its estimateToken only after they agree,' and gives an alternative for re-reading a run ('read it again with list_mentions kind="runs" run=<run.id> rather than running it twice'). It also frames the use case as testing before creating a keyword, which is a clear when-to-use. This is exemplary usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_estimateEstimate an Explore runARead-onlyInspect
Price an Explore run without calling any Source: the arguments of explore, minus the token. valid=false carries the refusal the run would give: the status, the code and the sentence naming the fix (a Source that cannot be explored, two identical searches, too many terms for the plan, a balance that cannot pay). valid=true carries total, perLeg (one entry per search) and balance. Show the person the total, then pass estimateToken to explore with the same arguments. Costs 0 credits and calls no Source. Returns what explore would charge per search and in total, computed by the functions that charge it, the balance, and the estimateToken explore requires.
| Name | Required | Description | Default |
|---|---|---|---|
| sources | Yes | The Sources to ask, at most 6. | |
| globalCriteria | Yes | The criteria every search inherits: market, and query or terms. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint and openWorldHint, the description discloses zero cost, no Source calls, the valid=false refusal payload (status, code, fix sentence), the valid=true payload (total, perLeg, balance), and the estimateToken required by explore. No behavioral surprises are left hidden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose is front-loaded and the workflow is clear. However, the final sentence largely repeats return fields already listed in the valid=true sentence, and 'without calling any Source' appears twice. Still, relative to the schema complexity, it is reasonably tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden of explaining return values and failure modes. It covers both valid branches, the zero-cost/no-Source behavior, and the next step of passing estimateToken to explore. Nothing essential is missing for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the two parameters and all nested fields. The description adds the useful relationship 'arguments of explore, minus the token,' but no per-parameter semantics beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening phrase 'Price an Explore run without calling any Source' names a specific verb, resource, and scope. It also distinguishes itself from the sibling explore tool by saying it takes 'the arguments of explore, minus the token' and later passes estimateToken to explore.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly frames when to use it: before running an explore, to show the person the cost, then pass estimateToken to explore. It also notes it costs 0 credits and calls no Source. It does not explicitly enumerate when not to use it or contrast with other estimate siblings like query_estimate, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keywordGet a keywordARead-onlyInspect
Get one keyword in full: what each of its searches actually polls (global criteria and per-source overrides already merged), its interval, whether AI reading and sentiment are on, its mute rules, its rules and the channels attached to it, and each Source's health (lastCheckedAt, lastOutcome, consecutiveFailures, stale). Use it to answer "why did/didn't this get caught?" before assuming a Source is broken, and report a stale Source before answering from its mentions. Free — does not charge credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and openWorldHint=true, and the description adds valuable behavioral context beyond them: it states the operation is free ('does not charge credits'), that returned criteria are 'already merged', and that stale Sources should be reported before using their mentions. This is meaningful for correct agent behavior and does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal, but every sentence earns its place: the first sentence is a dense specification of the return payload, the next two give diagnostic use cases, and the last adds cost information. It is front-loaded with the core purpose and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with one parameter, no output schema, and an explicit enumeration of returned fields, the description is complete. It explains what the tool returns, when to use it, and the cost behavior, so an agent can invoke it correctly without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single `id` parameter is fully documented in the schema, including the 404 vs 403 behavior. The description adds no parameter-level detail, so it earns the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('keyword'), and enumerates the exact response contents, distinguishing it from siblings like get_keyword_results and get_keyword_events. It frames the tool as the diagnostic view for 'why did/didn't this get caught?', which clearly identifies its unique 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 tells the agent when to use the tool: to answer 'why did/didn't this get caught?' and to report a stale Source before answering from mentions. It does not explicitly name alternatives or state when-not-to-use, but the use cases are clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_eventsReplay a keyword's raw events or activityARead-onlyInspect
Read a keyword without a webhook receiver, across all its searches, newest first. kind=events replays the raw events since an ISO instant, each in the exact shape the webhook delivers: id, type, keywordId, source, the entity itself (listing, tweet, post and so on), previousPrice, analysis and occurredAt. That includes the types a mention does not carry, such as listing.price_changed and listing.delisted on vinted. For reading what people said, prefer get_keyword_results: a mention is the same catch, projected to a title and a body. kind=activity answers "is it polling, and did my webhook answer?". kind=runs lists the stored AI answer runs. Free — does not charge credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| kind | No | "events" (the default) replays what the keyword caught, each entry in the exact shape its webhook delivers; "activity" is the log of checks and webhook deliveries (poll.completed, poll.failed, webhook.delivered, webhook.failed) with eventsEmitted, creditsCharged, statusCode and message; "runs" is for a keyword that polls ai_answers and returns every stored answer run with its citations and brand mentions, including the runs that changed nothing, which is most of them and exactly what a trend is made of. | |
| limit | No | Max entries to return. | |
| since | No | Only entries after this ISO 8601 instant. | |
| engine | No | kind "runs" only: the runs of this engine. | |
| source | No | Only this Source. Absent means every Source the keyword polls. Not with kind "runs". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint already establish its non-mutating nature. The description adds useful behavioral context: events are replayed in webhook shape, activity logs checks and deliveries, runs includes no-op answer runs, and the operation is free and does not charge credits. There is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than minimal, but every sentence adds value: it covers the primary use case, distinguishes the sibling tool, explains three modes, and notes the credit behavior. It is structured around kind values and remains efficient despite the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must communicate return shapes, and it does: events lists the exact fields, activity lists the log entry fields, and runs are described as stored AI answer runs with citations and brand mentions. Ordering, mode behavior, and an alternative are also covered, making this complete for a six-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already fully documents id, kind, limit, since, engine, and source. The description adds high-level meaning for the three kind values but does not meaningfully expand on parameter syntax or constraints beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a specific verb/resource pair: reading/replaying a keyword's events or activity. It explicitly distinguishes itself from get_keyword_results by explaining what an event includes beyond a mention amount, and the title reinforces the three kinds of data returned.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states when to use this tool ('without a webhook receiver'), defines each kind's purpose, and explicitly points users to get_keyword_results when they want human-readable mentions. This is direct, actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_resultsList a keyword's mentionsAInspect
The same mentions as list_mentions, scoped to one keyword and carrying the bucket each was sorted into. Use it for "what has my monitor caught?" and, with bucket=, for "show me the pricing complaints". Free in the default text mode — these are your own rows. mode="semantic" asks the embedding index and charges 1 credit per question, then answers the same question free for 10 minutes, paging included. Do not set it to filter by keyword: that is what q= in text mode already does, for nothing. Cursor-paged: pass nextCursor back unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search text, matched per mode= (default: free substring search) | |
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| mode | No | How q= is matched. "text" (the default) scans the window for the substring and is free. "semantic" asks the embedding index — it finds "this thing keeps crashing" for q="reliability complaints" — and charges. Never set it to do a keyword filter. | |
| limit | No | How many mentions to return, 1-100. Defaults to 25 here, a page a model can actually read. Never page to count: mentions_stats counts the whole window in one free call. | |
| since | No | ISO 8601 instant. Only mentions after it; defaults to the last 24 hours. | |
| until | No | ISO 8601 instant, inclusive. Only mentions before it. Use with since= to ask about a closed interval — a single day, or the week of a launch — instead of everything since a date. Absent means up to now. | |
| bucket | No | A bucket id from list_keyword_buckets, or the literal "uncategorised", which is a real destination (nothing matched), not a missing value. | |
| cursor | No | The previous response's nextCursor, passed back unchanged, for the next page. Its absence from a response means that was the last page. | |
| intent | No | Only mentions read as one of these intents. Several are OR'd, so ["purchase_intent", "comparison"] is the leads view for this keyword. "unread" is what nothing has classified yet. | |
| source | No | Only these Sources. Several are OR'd, so ["reddit", "hackernews"] is both in one call. Absent means every Source this keyword polls. | |
| sentiment | No | Only mentions read as one of these sentiments. Several are OR'd, so ["negative", "question"] is "what needs an answer" for this keyword. "unread" is what nothing has classified yet. | |
| engagement | No | A per-Source rule, repeatable: "<source|*>:<metric><operator><number>" — ["x:likes>=100", "reddit:score>50"] is "what landed, judged by what landing means where it was posted". Metrics are likes, replies, reposts, comments, score, views, plus total for the same interaction sum engagement_min reads. Operators are >=, >, =, <, <=; the number is whole and may be negative (Reddit and Lemmy net downvotes out). A Source no rule names PASSES — ["x:likes>=100"] narrows X and leaves Hacker News alone — a named rule overrides * for its own Source, and several rules on one Source are ANDed; use source to ask for one Source. A metric that was never counted satisfies NOTHING, < included: YouTube reports no likes, RSS and AI answers report no audience, and mentions recorded before 2026-09-04 predate the field, so ["youtube:likes<10"] returns none of them rather than all of them. Send this or engagement_min, never both. | |
| opportunity | No | true keeps only opportunities: mentions of a topic or competitor keyword that are highly relevant to it and whose author is someone to answer (the keyword's agent step says problem_fit true, or, without that field, the intent is purchase_intent, comparison or question). Use it for "who should I answer today?". An own keyword has none. Free. | |
| engagement_min | No | Only mentions with at least this many interactions — likes, replies, reposts, comments or score, depending on the Source. Never counts views. Mentions with no counters at all (RSS, AI answers, anything recorded before 2026-09-04) are left out rather than treated as zero. Counters are captured when the item is collected and never refreshed, so a threshold reads against recent mentions. For a threshold on one metric on one Source, use engagement instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the sparse annotations, the description discloses important behavioral traits: the default text mode is free, semantic mode charges 1 credit per question with a 10-minute free repeat, results are cursor-paged with nextCursor, and q= already handles keyword filtering in text mode. It does not mention auth or rate limits, but the pricing, paging, and misuse warning add considerable value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences, front-loading the core relationship to list_mentions and the purpose. Each sentence contributes distinct information: scope, use cases, cost model, a warning, and paging. It is slightly longer than minimal but every sentence earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 14-parameter schema with full coverage and no output schema, the description provides essential context: scope, cost, paging, and a key pitfall. It anchors to list_mentions to convey the response shape and mentions the bucket enrichment. It could explicitly describe the response structure, but the combination of schema coverage and the list_mentions reference makes it sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the baseline is 3, but the description adds semantic insight beyond the schema: it clarifies that bucket= is used for sorting categories (e.g., pricing complaints), that q= in text mode is the keyword filter (so bucket should not be used for that), and that cursor must be passed back unchanged. These clarifications help avoid common mistakes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 exactly what the tool does: returns the same mentions as list_mentions but scoped to one keyword, additionally carrying the bucket each mention was sorted into. It gives concrete use cases ("what has my <brand> monitor caught?", "show me the pricing complaints") and explicitly differentiates it from the sibling list_mentions, making the 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 provides explicit when-to-use guidance with concrete examples, and warns against a common misuse ("Do not set it to filter by keyword: that is what q= in text mode already does"). It also names the alternative list_mentions as the baseline and explains cost implications of mode selection, helping the agent choose the right tool and parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_brand_setSee or set a keyword's brandAIdempotentInspect
Read or choose the brand a keyword's reply drafts speak for, when the account has several (a product line, a second company). Call it without brandProfileId to see the brands and the current choice, then with a brand id, or null for the default. Changes nothing that is polled and starts no search over. Free — does not charge credits.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| brandProfileId | No | Absent: nothing is written, and the answer lists the account's brands beside the keyword's current one. A brand id from that list: the keyword's drafts speak for it. null: back to the account's default brand. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover idempotency and non-destructiveness, and the description adds meaningful behavioral context beyond them: it clarifies that the read mode writes nothing, that setting a brand only affects reply drafts, that nothing polled is changed, no search is started, and no credits are charged. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core purpose and the condition for use, followed by a compact call sequence and side-effect notes. Every sentence earns its place; no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with rich schema descriptions and no output schema, the description covers the full operation modes, side effects, and prerequisite id source. An agent can correctly choose and invoke the tool without unresolved gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already explains the absent/id/null behaviors precisely. The description reinforces the same semantics in prose but does not add new parameter-level meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific operation pair ('Read or choose') and a specific resource ('the brand a keyword's reply drafts speak for'), with a clear condition ('when the account has several'). This distinguishes it from broader keyword-update or management siblings without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit calling guidance: call without brandProfileId to inspect brands and the current choice, then call with a brand id or null. It also states the appropriate context ('when the account has several'). It does not explicitly name sibling alternatives or exclusions, so it stops short of a full when-not map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_bucket_manageCreate or delete a bucketADestructiveInspect
Create a bucket on a listening keyword (a name, and one sentence saying what belongs in it), or delete one. Deleting a bucket deletes no mention: its mentions become uncategorised, and unclassified says how many. Ask before deleting. Free — does not charge credits. Sorting is charged when it runs, not here.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| rule | No | create only: one plain sentence saying what belongs in the bucket. The model reads the sentence, not keywords. | |
| color | No | ||
| label | No | create only: the bucket name. | |
| action | Yes | ||
| bucketId | No | delete only: from list_keyword_buckets. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only say destructiveHint=true, but the description goes further by explaining that deleting a bucket does not delete mentions, mentions become uncategorised, and the count appears as unclassified. It also discloses the free nature and the separation of sorting charges, adding meaningful behavioral context beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the primary purpose. Each sentence adds useful information: the operation, the deletion side effects, the ask-before-deleting policy, and the cost behavior. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a dual-action tool with no output schema, the description covers the important behavioral and cost context well. It still relies on the schema for parameter specifics like bucketId, and does not describe the response shape, but the combination of schema and description is sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description does not significantly add parameter meaning beyond what the schema already provides. The parenthetical about a name and one sentence maps to label and rule, but those are already described in the schema. The color, action, id, and bucketId parameters still rely on the schema or enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific operation: create or delete a bucket on a listening keyword, and defines what a bucket is. This distinguishes it from sibling tools like keyword_create or keyword_manage, which operate on keywords rather than buckets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when to use the tool: create or delete a bucket on a listening keyword. It also provides explicit guidance to ask before deleting and clarifies that sorting is charged separately, which helps choose this tool over paid alternatives, though it does not name specific sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_createCreate a keywordAInspect
Create a keyword, the one object you monitor with. A keyword carries its terms (globalCriteria, and the searches of each Source), the Sources it polls and its settings: interval, webhook, mute rules and the other exclusions, sorting and sentiment. The smallest keyword is one Source, one interval and an optional webhook: sources with a single entry, refreshIntervalSeconds, webhookUrl. A Source whose search needs more than the shared text (a subreddit, a feed URL, a prompt, Vinted filters) takes it in searches[].overrides, whose description says what each Source needs. For the shape of rules or channels, read get_keyword on an existing keyword. A topic keyword (subjectRole topic) sent without globalCriteria.match is created with match word, the phrase as written; send match contains to widen it, or platform for the platform's own matching. For a topic, also send sentimentEnabled true and an aiStep with a boolean problem_fit field (true only when the author has the problem themselves): the opportunity filter of list_mentions reads it. Call keyword_estimate with the same arguments first: it runs the same validation, writes nothing, and returns the price and the estimateToken this tool requires. Starts or changes polling that is charged per check at each Source's credit rate (AI answers per engine asked) until the keyword or the Source is paused. Call keyword_estimate first, show the person the monthlyCredits it returns, and send its estimateToken only after they agree.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| color | No | The keyword colour in the dashboard. Left out on create, an unused one is picked. | |
| rules | No | Replaces the list. Copy the shape from get_keyword on an existing keyword. | |
| aiStep | No | Your own question asked of every mention, with the fields to fill: {"instruction": one or two sentences, 800 characters at most, "schema": 1 to 12 flat fields, each {"type": "string" | "number" | "boolean" | "enum", "description", "values" for an enum, "maxLength" for a string}}, no nesting and no arrays. The answer arrives on each event as analysis. Costs 1 credit per 25 items, on top of the check rate. Delivery waits up to 120s for it; on timeout the event is still delivered, with the answer null and a status saying why. null removes it. | |
| sources | Yes | The Sources this keyword polls, one entry each; a single entry is a keyword that polls one Source. Each enabled search is one check at its rate. What each Source needs is in the description of searches[].overrides. | |
| aiPreset | No | ||
| aiPrompt | No | ||
| backfill | No | true runs a first scan right away, so the keyword is not empty on day one. What it finds fires no webhook, since a first scan is context and not news, and comes back marked seeded. A first scan is one search per enabled Source at that Source's check rate, except where a Source is billed per result: on X it is 5 credits plus 3 per result returned, at most 65 credits for its page of 20. So a first scan that includes such a Source is quoted at its ceiling: say "up to". Needs the nephia:spend permission. AI answers never backfills. | |
| channels | No | Replaces the delivery channels attached to the keyword. | |
| schedule | No | An activation window with ISO instants. null keeps the keyword always on. | |
| aiEnabled | No | Sort mentions into buckets. | |
| muteRules | No | Replaces the list. A plain string mutes that word. | |
| spikeAlert | No | The alert a new keyword starts with. null starts with none. Free. | |
| vipAuthors | No | Replaces the list. A plain string is a handle. | |
| webhookUrl | No | A publicly reachable HTTPS endpoint the person controls: new mentions are POSTed there. Never invent this URL, ask the person for it. Left out, the keyword records what it catches without pushing it, and you read it with list_mentions, get_keyword_results or get_keyword_events. null removes the webhook. | |
| subjectRole | No | What the keyword is about: your own brand, a competitor's, or a topic. A new topic without globalCriteria.match is created with match word. | |
| webhookMode | No | all delivers every new mention; rules delivers only what a rule routes. | |
| estimateToken | Yes | The estimateToken keyword_estimate returned for exactly these arguments. Valid 15 minutes. A token for other arguments is refused: estimate again. | |
| globalCriteria | Yes | The criteria every search inherits: market (required, e.g. "us") and query or terms. AI answers reads no search text, so a keyword of prompts only still names a market. | |
| coBrandsEnabled | No | AI answers only: also read each answer for the other brands it names, charged per answer on top of the run. | |
| relevanceContext | No | One sentence the AI reading uses to judge relevance, such as "Acme is a cloud storage company, not the cartoon." null clears it. | |
| sentimentEnabled | No | Read every mention for sentiment and intent. | |
| refreshIntervalSeconds | Yes | Default seconds between checks, for every Source without its own interval. The plan and each Source set a floor; the estimate names the band when a value is outside it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already mark this as a write operation, the description reveals substantial behavior beyond them: charging ('polling that is charged per check at each Source's credit rate'), the estimateToken's 15-minute validity and argument-binding constraint ('A token for other arguments is refused'), the backfill side effects and its nephia:spend permission requirement, and the webhook rule ('Never invent this URL, ask the person for it'). No contradiction with the annotations; openWorldHint=true is consistent with the many additionalProperties objects in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded — definition first, then the minimal shape, then the estimate workflow — and every sentence carries information an agent needs rather than repeating schema text. For a 23-parameter tool with 14 source types and billing semantics, the length is proportionate; a small amount of material (topic-keyword handling) also appears in the schema's subjectRole description, so it is slightly redundant but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 — 23 parameters, nested source overrides, per-source interval floors, billing, and a required estimate artifact — the description covers everything an agent needs to call it correctly: prerequisites, approval workflow, special cases, permissions, and cost disclosure. No output schema exists, so return-value documentation is not required, and the success path is adequately hinted by the pointer to read results via list_mentions, get_keyword_results, or get_keyword_events.
Complex tools with many parameters or behaviors need more documentation. 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 87%, so the baseline is 3, and the description wisely avoids restating the schema's per-source override details. Instead it adds cross-parameter meaning the schema cannot: the minimal viable keyword ('one Source, one interval and an optional webhook'), the estimateToken-to-arguments binding, the topic-keyword default ('created with match word'), and the inheritance model where an absent searches array inherits globalCriteria. This is meaningful added semantics above the high-coverage baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb and resource — 'Create a keyword, the one object you monitor with' — and then defines the object's anatomy (terms, Sources, settings). It names the confusable sibling keyword_estimate and clarifies the relationship ('it runs the same validation, writes nothing, and returns the price and the estimateToken this tool requires'), so an agent can distinguish create from estimate and update without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit, two-part workflow: 'Call keyword_estimate with the same arguments first' and 'send its estimateToken only after they agree,' which is strong when-to-use guidance with a named alternative. It also routes the agent to get_keyword for the shape of rules and channels. However, it never states when NOT to use this tool — e.g., that modifying an existing keyword belongs to keyword_update — so the exclusion half of the guidance is implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_estimateEstimate a keyword or a changeARead-onlyInspect
Price a new keyword (no id, the arguments of keyword_create) or a change to one (an id, the arguments of keyword_update) without writing anything. valid=false carries the refusal the write would give: the status, the code and the sentence naming the fix. valid=true carries monthlyCredits in total, per Source and per search, firstScanCredits when backfill is true (the most the first scan can cost, see backfill), the plan allowance and the credits left, and for a change the monthly difference and resetSearches, the searches it would start over. A new keyword also carries volume when it names a free Source (Reddit, Bluesky, Hacker News, GitHub, Stack Overflow, Mastodon, Lemmy, RSS): the estimated mentions a month on the Sources in measuredOn, and a bucket from none to over_10k, free and never charged. Show the person monthlyCredits before any write, then pass estimateToken to that write with the same arguments. What each Source needs in a search is in the description of searches[].overrides. A topic keyword (subjectRole topic) sent without globalCriteria.match is created with match word, the phrase as written; send match contains to widen it, or platform for the platform's own matching. For a topic, also send sentimentEnabled true and an aiStep with a boolean problem_fit field (true only when the author has the problem themselves): the opportunity filter of list_mentions reads it. Costs 0 credits and writes nothing. Returns what the write would cost a month, computed by the functions that charge it, and the estimateToken the write requires.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Absent: price a new keyword, with the arguments of keyword_create. A keyword id: price a change, with the arguments of keyword_update. | |
| name | No | ||
| color | No | The keyword colour in the dashboard. Left out on create, an unused one is picked. | |
| rules | No | Replaces the list. Copy the shape from get_keyword on an existing keyword. | |
| aiStep | No | Your own question asked of every mention, with the fields to fill: {"instruction": one or two sentences, 800 characters at most, "schema": 1 to 12 flat fields, each {"type": "string" | "number" | "boolean" | "enum", "description", "values" for an enum, "maxLength" for a string}}, no nesting and no arrays. The answer arrives on each event as analysis. Costs 1 credit per 25 items, on top of the check rate. Delivery waits up to 120s for it; on timeout the event is still delivered, with the answer null and a status saying why. null removes it. | |
| sources | No | The Sources this keyword polls, one entry each; a single entry is a keyword that polls one Source. Each enabled search is one check at its rate. What each Source needs is in the description of searches[].overrides. | |
| aiPreset | No | ||
| aiPrompt | No | ||
| backfill | No | true runs a first scan right away, so the keyword is not empty on day one. What it finds fires no webhook, since a first scan is context and not news, and comes back marked seeded. A first scan is one search per enabled Source at that Source's check rate, except where a Source is billed per result: on X it is 5 credits plus 3 per result returned, at most 65 credits for its page of 20. So a first scan that includes such a Source is quoted at its ceiling: say "up to". Needs the nephia:spend permission. AI answers never backfills. | |
| channels | No | Replaces the delivery channels attached to the keyword. | |
| schedule | No | An activation window with ISO instants. null keeps the keyword always on. | |
| aiEnabled | No | Sort mentions into buckets. | |
| muteRules | No | Replaces the list. A plain string mutes that word. | |
| spikeAlert | No | The alert a new keyword starts with. null starts with none. Free. | |
| vipAuthors | No | Replaces the list. A plain string is a handle. | |
| webhookUrl | No | A publicly reachable HTTPS endpoint the person controls: new mentions are POSTed there. Never invent this URL, ask the person for it. Left out, the keyword records what it catches without pushing it, and you read it with list_mentions, get_keyword_results or get_keyword_events. null removes the webhook. | |
| subjectRole | No | What the keyword is about: your own brand, a competitor's, or a topic. A new topic without globalCriteria.match is created with match word. | |
| webhookMode | No | all delivers every new mention; rules delivers only what a rule routes. | |
| globalCriteria | No | The criteria every search inherits: market (required, e.g. "us") and query or terms. AI answers reads no search text, so a keyword of prompts only still names a market. | |
| coBrandsEnabled | No | AI answers only: also read each answer for the other brands it names, charged per answer on top of the run. | |
| relevanceContext | No | One sentence the AI reading uses to judge relevance, such as "Acme is a cloud storage company, not the cartoon." null clears it. | |
| sentimentEnabled | No | Read every mention for sentiment and intent. | |
| refreshIntervalSeconds | No | Default seconds between checks, for every Source without its own interval. The plan and each Source set a floor; the estimate names the band when a value is outside it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true and openWorldHint=true, and the description reinforces this by stating 'Costs 0 credits and writes nothing.' It goes beyond the annotations by detailing the output structure: valid=true carries monthlyCredits, per-Source and per-search breakdowns, firstScanCredits, plan allowance, credits left, and for changes monthly difference and resetSearches. It also explains valid=false carries the refusal details. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-organized, front-loading the core purpose and then layering specifics. Every sentence adds information—costs, output fields, free sources, topic handling, and the token requirement. Despite its length, it is efficient and well-structured for the complexity involved.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 23 parameters, nested objects, and no output schema, the description provides comprehensive context: it details the output fields, the conditions for free sources, the meaning of valid flags, and the backfill cost ceiling. It also references searches[].overrides for source-specific requirements, which is necessary for correct invocation. No critical information appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 87%, so the schema already documents most parameters. The description adds meaningful context: the id parameter's absence/presence determines new vs change, the topic keyword behavior (match, sentimentEnabled, aiStep with problem_fit), and the backfill cost implications. This adds value beyond the schema without redundantly repeating 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 purpose: to price a new keyword (using keyword_create arguments) or a change (using keyword_update arguments) without writing. It distinguishes the two modes via the presence of an id and explicitly mentions that it writes nothing, which differentiates it from the write tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear workflow: show the person monthlyCredits before any write, then pass estimateToken to that write with the same arguments. It also notes that valid=false carries the refusal the write would give, so the tool can be used to check validity without committing. It does not explicitly name alternative tools, but the usage context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_managePause, resume, or retire a keywordADestructiveIdempotentInspect
Manage a keyword's lifecycle across every Source at once: pause stops all its polling and all its spending, resume restarts it, delete retires it and frees the plan slot. Free — does not charge credits. Pausing is also how you stop the polling that does. On resume, a Source an operator stopped stays stopped and comes back named in blockedSources rather than failing the call: read that field before reporting success. delete takes an optional purge: without it the mentions the keyword caught stay readable, with purge=true they are deleted too and cannot be recovered. Ask before pausing or deleting, and ask again before purging: this is the customer's monitoring and the mentions are the record of what it found.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| purge | No | Only with action=delete. true also deletes every mention the keyword collected, with its readings, marks and replay entries. The keyword itself stays readable by id. Omitted or false is the default retire: the mentions stay readable until retention ages them out. This erases the customer's collected data and is not reversible, so ask before sending it. Credits are not refunded either way. | |
| action | Yes | pause stops every Source: nothing polls, charges or delivers, and the mentions already caught stay readable. resume restarts every Source that can follow. delete retires the keyword and frees the plan slot; it is not a hard delete, so the keyword and its mentions stay readable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal destructive/non-read-only behavior, and the description adds substantial context: the operation is free, paused sources stopped by an operator remain stopped on resume and surface in blockedSources, purge is irreversible, and customer consent is required. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and mostly front-loaded, with the scope and actions in the first sentence. A few clauses are slightly awkward, but every sentence contributes operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with no output schema, this is thorough: it covers credit effects, return behavior via blockedSources, retention vs purge, irreversibility, and consultation requirements. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both action and purge are already well documented. The description adds extra meaning by explaining the blockedSources return field and reinforcing the irreversible data-loss implications of purge=true, which goes beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('manage'), a resource ('keyword'), and the scope ('across every Source at once'), then enumerates the three distinct lifecycle actions: pause, resume, delete. This differentiates it clearly from per-source tools like keyword_source_manage.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Defines when each action applies and gives explicit operational guidance: pause stops polling/spending, resume restarts, delete retires and frees a slot. It also instructs the agent to ask before pausing, deleting, or purging. It does not explicitly name sibling alternatives, but the 'across every Source at once' framing makes the intended scope clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_source_managePause or resume one of a keyword's sourcesADestructiveIdempotentInspect
Stop one Source of a keyword for a while, or start it again, without touching its searches or the other Sources. Refused on a Source the keyword does not poll, on a paused keyword, and on the last Source still polling: pause the whole keyword with keyword_manage instead. On resume, a Source an operator stopped comes back in blockedSources. Free — does not charge credits. Pausing is also how you stop the polling that does.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| action | Yes | pause stops this Source's checks and leaves the other Sources polling; its searches and mentions stay. resume starts it again. | |
| source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses concrete side effects: other Sources and searches are untouched, certain inputs are refused, manually stopped Sources return in blockedSources on resume, and the operation does not consume credits. These are meaningful behavioral details not inferable from annotations alone.
Agents need to know what a tool does to the 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 and front-loaded, with no filler. The only slight weakness is the final sentence, 'Pausing is also how you stop the polling that does,' which is grammatically awkward and less clear than the rest.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutating tool with no output schema, this description provides inputs, restrictions, side effects, fallback behavior, and cost impact. An agent has enough context to decide when to call it and what to expect, including the blockedSources nuance on resume.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents id and action and enumerates source values; the description adds value by tying action to real-world state changes and by surfacing validation rules about un-polled Sources and the last polling Source. It does not describe each enum value, but those names are self-explanatory and the schema covers the rest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious 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 pair ('pause/resume') and an exact resource ('one Source of a keyword'), then immediately clarifies scope: 'without touching its searches or the other Sources.' This clearly distinguishes it from related tools like keyword_manage and keyword_source_set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not case: refusal on the last still-polling Source, and directs the agent to use keyword_manage instead. It also adds cost guidance ('Free — does not charge credits') and frames pausing as the way to stop polling, helping the agent choose the right operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_source_setAdd or replace one of a keyword's sourcesADestructiveIdempotentInspect
Add a Source to a keyword, or replace one Source's searches, interval or enabled state, leaving every other Source untouched. Two calls. The first, with mode "estimate" and no estimateToken, writes nothing and returns the estimate of the change: monthlyCredits before and after, and resetSearches, the searches whose criteria change and whose next check starts from a fresh baseline without emitting what it finds. Show both to the person. The second, with mode "write", the same arguments and that estimateToken, writes it, and fails if the save started over a search the estimate did not announce. applied says which of the two happened: only applied=true is a save. Example, AI answers: source "ai_answers", refreshIntervalSeconds 604800, one search per prompt with overridesEnabled true and overrides {"filters": {"prompt": "...", "brands": ["YourBrand"], "engines": ["chatgpt", "gemini", "perplexity"]}}; switch coBrandsEnabled with keyword_update. Starts or changes polling that is charged per check at each Source's credit rate (AI answers per engine asked) until the keyword or the Source is paused. Call keyword_estimate first, show the person the monthlyCredits it returns, and send its estimateToken only after they agree.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| mode | Yes | estimate writes nothing and returns the price of this change with its estimateToken; it takes no estimateToken. write saves the change and requires the estimateToken of an estimate made with the same arguments. | |
| source | Yes | ||
| enabled | Yes | false switches the Source off and removes its checks; its searches stay stored. To stop it for a while, use keyword_source_manage instead. | |
| searches | No | Replaces this Source's searches. Keep the id of each search you keep. Absent keeps the stored searches. | |
| estimateToken | No | mode "write" only, and required there: the estimateToken the mode "estimate" call returned for these same arguments. Valid 15 minutes. | |
| refreshIntervalSeconds | No | This Source's own seconds between checks. null goes back to the keyword's refreshIntervalSeconds. Each Source has its own band: AI answers runs between 6 hours (21600) and 7 days (604800). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, and the description goes well beyond them: it explains the two-phase commit (estimate writes nothing, write fails 'if the save started over a search the estimate did not announce'), cost implications ('charged per check at each Source's credit rate'), and the destructive semantics of enabled=false ('removes its checks; its searches stay stored'). 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 very long, but it is front-loaded with the core purpose and the critical estimate/write workflow before the per-source detail block. Each sentence carries real information for a complex tool; the density is justified, though the wall-of-text per-source section could be better broken up. Minor structural critique only.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, yet the description explains return semantics explicitly: 'monthlyCredits before and after, and resetSearches' and 'applied says which of the two happened: only applied=true is a save.' It also covers the failure condition, cost, and per-source behavior. For a 7-parameter two-phase mutation tool, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 86% schema coverage, the description adds substantial value: it clarifies the mode enum semantics (estimate takes no token, write requires it), explains the searches replacement behavior ('Keep the id of each search you keep'), documents refreshIntervalSeconds bands, and provides an exhaustive per-source guide to overrides with a concrete ai_answers example. This far exceeds the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb pair (add/replace) with a specific resource (one of a keyword's sources) and an explicit scope constraint: 'leaving every other Source untouched.' The title and first sentence align, and the description clearly differentiates from siblings like keyword_source_manage and keyword_estimate by naming them and their distinct roles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 an explicit when-to-use protocol: 'Call keyword_estimate first, show the person the monthlyCredits it returns, and send its estimateToken only after they agree.' It also names exclusions and alternatives: 'To stop it for a while, use keyword_source_manage instead' and 'switch coBrandsEnabled with keyword_update.' The estimate-then-write sequence is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
keyword_updateChange keyword settingsADestructiveIdempotentInspect
Change a keyword's settings: name, default interval, sorting, sentiment, co-brands, agent step, subject role, mute rules, VIP authors, rules, webhook, schedule and channels. A key you leave out is left alone; null clears it. Never its Sources or searches: that is keyword_source_set, so this tool starts no search over. Call keyword_estimate with the same arguments first: it runs the same validation, writes nothing, and returns the price and the estimateToken this tool requires. Starts or changes polling that is charged per check at each Source's credit rate (AI answers per engine asked) until the keyword or the Source is paused. Call keyword_estimate first, show the person the monthlyCredits it returns, and send its estimateToken only after they agree.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. | |
| name | No | ||
| color | No | The keyword colour in the dashboard. Left out on create, an unused one is picked. | |
| rules | No | Replaces the list. Copy the shape from get_keyword on an existing keyword. | |
| aiStep | No | Your own question asked of every mention, with the fields to fill: {"instruction": one or two sentences, 800 characters at most, "schema": 1 to 12 flat fields, each {"type": "string" | "number" | "boolean" | "enum", "description", "values" for an enum, "maxLength" for a string}}, no nesting and no arrays. The answer arrives on each event as analysis. Costs 1 credit per 25 items, on top of the check rate. Delivery waits up to 120s for it; on timeout the event is still delivered, with the answer null and a status saying why. null removes it. | |
| aiPreset | No | ||
| aiPrompt | No | ||
| channels | No | Replaces the delivery channels attached to the keyword. | |
| schedule | No | An activation window with ISO instants. null keeps the keyword always on. | |
| aiEnabled | No | Sort mentions into buckets. | |
| muteRules | No | Replaces the list. A plain string mutes that word. | |
| vipAuthors | No | Replaces the list. A plain string is a handle. | |
| webhookUrl | No | A publicly reachable HTTPS endpoint the person controls: new mentions are POSTed there. Never invent this URL, ask the person for it. Left out, the keyword records what it catches without pushing it, and you read it with list_mentions, get_keyword_results or get_keyword_events. null removes the webhook. | |
| subjectRole | No | What the keyword is about: your own brand, a competitor's, or a topic. A new topic without globalCriteria.match is created with match word. | |
| webhookMode | No | all delivers every new mention; rules delivers only what a rule routes. | |
| estimateToken | Yes | The estimateToken keyword_estimate returned for exactly these arguments. Valid 15 minutes. A token for other arguments is refused: estimate again. | |
| coBrandsEnabled | No | AI answers only: also read each answer for the other brands it names, charged per answer on top of the run. | |
| relevanceContext | No | One sentence the AI reading uses to judge relevance, such as "Acme is a cloud storage company, not the cartoon." null clears it. | |
| sentimentEnabled | No | Read every mention for sentiment and intent. | |
| refreshIntervalSeconds | No | Default seconds between checks, for every Source without its own interval. The plan and each Source set a floor; the estimate names the band when a value is outside it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, readOnlyHint=false, idempotentHint=true, and openWorldHint=true. The description adds substantial context beyond these: it reveals that the tool starts or changes polling with per-check credit charges, that estimateToken must exactly match the arguments and expires in 15 minutes, and that null clears fields while omitted keys are untouched. It also confirms it never starts a search. These details align with the annotations and significantly enhance the agent's understanding of side effects and constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries weight. It is structured logically: purpose, exclusions, workflow, charging model, and a final reminder. It front-loads the primary action and then builds context. No redundant or filler sentences; the density is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. 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 20 parameters and no output schema, the description covers the critical operational aspects: the mandatory estimateToken prerequisite, the distinction between omit and null, the charging model, and the scope limitation. It does not explicitly describe the return value, but for an update tool this is often a confirmation; the absence is acceptable given the rich workflow guidance. Overall, an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 85%, so most parameters already have descriptive entries. The description adds cross-cutting semantics that apply to all optional fields: 'A key you leave out is left alone; null clears it.' It also clarifies the estimateToken requirement — that it must be for exactly these arguments and is valid 15 minutes. This goes beyond the schema's per-field descriptions and aids correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb-resource pair — 'Change a keyword's settings' — and enumerates the exact fields (name, interval, sorting, etc.). It explicitly differentiates from keyword_source_set by stating 'Never its Sources or searches: that is keyword_source_set', and distinguishes keyword_estimate as a validation-only call. The purpose is unambiguous and distinct from all sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: it instructs to call keyword_estimate first with the same arguments, show the monthlyCredits to the user, and only then send the estimateToken after agreement. It also clearly states what this tool does NOT do (sources/searches belong to keyword_source_set) and explains the omit-vs-null semantics. This leaves no ambiguity about the correct workflow or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_keyword_bucketsList a keyword's bucketsARead-onlyInspect
The buckets this keyword sorts its mentions into (id, label, the plain-language rule behind it, and a count each), plus how many are unsorted and how many are still pending. The ids are what get_keyword_results takes as bucket=, and the labels are what the ids in its output mean. Free — does not charge credits. Listing buckets never triggers a sorting pass, so it cannot bill.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Keyword id, from list_keywords. Another account's id is a 404, never a 403. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations (readOnlyHint and openWorldHint) by stating it is free and does not charge credits, and that listing never triggers a sorting pass so it cannot bill. It also adds that another account's id returns a 404, not 403 (though this is in the schema, the description reinforces the behavioral expectations). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, tightly packed with essential information: what is returned, how it relates to another tool, and the cost/side-effect behavior. No fluff, front-loads the core purpose, and every clause adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the single parameter and no output schema, the description adequately outlines the return content (buckets with id, label, rule, count; plus unsorted and pending counts). It also explains the linkage to get_keyword_results. It could specify the exact return structure (array vs object) but that is not essential for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'id' is fully described in the schema: 'Keyword id, from list_keywords. Another account's id is a 404, never a 403.' The main description does not add additional parameter semantics, so it relies on the schema, which is complete (100% coverage). Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists the buckets a keyword sorts its mentions into, enumerating the fields (id, label, plain-language rule, count) and adding unsorted/pending counts. It also differentiates its purpose from get_keyword_results by explaining the relationship of the ids and labels, which helps an agent understand what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains how the output is used: the ids are passed as bucket= to get_keyword_results, and the labels explain the meaning of ids in that output. It also notes that the tool is free and never triggers a sorting pass, so it can be called without cost concerns. It doesn't explicitly contrast with sibling tools like keyword_bucket_manage, but the read-only listing intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_keywordsList keywordsARead-onlyInspect
List every keyword on the account with what each caught in the last 24 hours (eventCount), how much of it nothing has sorted yet (unclassifiedCount), and how many of its Sources are late (staleSources; each Source carries its health: lastCheckedAt, lastOutcome, consecutiveFailures, stale). Report a stale Source before answering from its mentions: a quiet page from a Source nobody checked means nothing. Each keyword is summarised with its enabled Sources and their health; get_keyword has the full configuration. Start here: a keyword id is what get_keyword_results, get_keyword_events, list_keyword_buckets and keyword_manage take. Free — does not charge credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the bar for added behavioral disclosure is lower. The description adds real value: it explains the data semantics around stale sources, clarifies what does and does not count as signal, and notes that the tool is free and does not charge credits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: core listing behavior, returned fields, the critical stale-source caveat, sibling routing, and cost behavior. It is front-loaded with the main action and keeps the most important caveat early.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining return values, and it does: eventCount, unclassifiedCount, staleSources, and Source health fields. It also explains the account scope and how the returned keyword IDs feed other tools, making the tool fully callable and interpretable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so the baseline is 4. The description correctly focuses on the resource shape instead, defining the returned metrics and the nested Source health fields, which is more useful than parameter documentation would be here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('List every keyword on the account') and immediately distinguishes itself from get_keyword, which provides full configuration. The scope is unambiguous and clearly differentiated from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly positions itself as the starting point: 'Start here: a keyword id is what get_keyword_results, get_keyword_events, list_keyword_buckets and keyword_manage take.' It also routes to get_keyword for full configuration and warns to report stale sources before drawing conclusions from mentions. It does not exhaustively contrast with all listing siblings, but the key routing is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mentionsList mentionsAInspect
Read everything your keywords caught, newest first, across every Source and every keyword on the account, with the sentiment, intent, relevance, bucket and agent readings you have switched on. relevance says whether a mention is really about its keyword (high, medium, low) with one sentence why. This is the tool for questions like "what did Reddit say about us this week?", "any complaints since Friday?" or "show me negative mentions I have not answered". To count (how many, per day, per Source, per sentiment, per author or term), call mentions_stats instead: one free call, where paging here would read the window a hundred rows at a time. Each mention carries matchedTerms, the keyword terms that caught it, when they were recorded: say why a mention is there rather than guessing it. Free in the default text mode — these are your own rows. mode="semantic" asks the embedding index and charges 1 credit per question, then answers the same question free for 10 minutes, paging included. Do not set it to filter by keyword: that is what q= in text mode already does, for nothing. Scoped to one keyword instead? Use get_keyword_results, which also carries each mention's bucket. Cursor-paged: pass nextCursor back unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Search text, matched per mode= (default: free substring search) | |
| run | No | One kept Explore run: the run.id explore returned. Reads that run's mentions only, free, instead of running it again. since still bounds it, so widen since for an older run. | |
| kind | No | Which producer. "polling" is what your keywords catch on their own; "runs" is a kept one-off Explore run. Absent means both. | |
| mode | No | How q= is matched. "text" (the default) scans the window for the substring and is free. "semantic" asks the embedding index — it finds "this thing keeps crashing" for q="reliability complaints" — and charges. Never set it to do a keyword filter. | |
| type | No | Only this kind of event — usually narrower than you need; prefer source. | |
| limit | No | How many mentions to return, 1-100. Defaults to 25 here, a page a model can actually read. Never page to count: mentions_stats counts the whole window in one free call. | |
| since | No | ISO 8601 instant. Only mentions after it; defaults to the last 24 hours. | |
| until | No | ISO 8601 instant, inclusive. Only mentions before it. Use with since= to ask about a closed interval — a single day, or the week of a launch — instead of everything since a date. Absent means up to now. | |
| author | No | Only mentions from these accounts — several are OR'd, so ["alice", "bob"] is both in one call. Matched exactly, as the Source writes the handle and without a leading "@": this is a filter, not a search (use q to search text). A handle the account has never seen returns an empty page, and a mention with no author never matches. | |
| cursor | No | The previous response's nextCursor, passed back unchanged, for the next page. Its absence from a response means that was the last page. | |
| intent | No | Only mentions read as one of these intents — several are OR'd, so ["purchase_intent", "comparison"] is the leads view in one call. "unread" is what nothing has classified yet. | |
| source | No | Only these Sources — several are OR'd, so ["reddit", "hackernews"] is both in one call. Absent means every Source the account polls. | |
| keyword | No | Only this keyword's mentions, by id from list_keywords, including what its searches caught before they last changed. An id that is not one of the account's keywords is an error. | |
| relevance | No | Only mentions read as this relevant to their keyword — several are OR'd, so ["high", "medium"] leaves out what matched by accident (another meaning, a handle, spam). "unread" is what nothing has read yet. | |
| sentiment | No | Only mentions read as one of these sentiments — several are OR'd, so ["negative", "question"] is "what needs an answer" in one call. "unread" is what nothing has classified yet. | |
| engagement | No | A per-Source rule, repeatable: "<source|*>:<metric><operator><number>" — ["x:likes>=100", "reddit:score>50"] is "what landed, judged by what landing means where it was posted". Metrics are likes, replies, reposts, comments, score, views, plus total for the same interaction sum engagement_min reads. Operators are >=, >, =, <, <=; the number is whole and may be negative (Reddit and Lemmy net downvotes out). A Source no rule names PASSES — ["x:likes>=100"] narrows X and leaves Hacker News alone — a named rule overrides * for its own Source, and several rules on one Source are ANDed; use source to ask for one Source. A metric that was never counted satisfies NOTHING, < included: YouTube reports no likes, RSS and AI answers report no audience, and mentions recorded before 2026-09-04 predate the field, so ["youtube:likes<10"] returns none of them rather than all of them. Send this or engagement_min, never both. | |
| opportunity | No | true keeps only opportunities: mentions of a topic or competitor keyword that are highly relevant to it and whose author is someone to answer (the keyword's agent step says problem_fit true, or, without that field, the intent is purchase_intent, comparison or question). Use it for "who should I answer today?". An own keyword has none. Free. | |
| engagement_min | No | Only mentions with at least this many interactions — likes, replies, reposts, comments or score, depending on the Source. Never counts views. Mentions with no counters at all (RSS, AI answers, anything recorded before 2026-09-04) are left out rather than treated as zero. Counters are captured when the item is collected and never refreshed, so a threshold reads against recent mentions. For a threshold on one metric on one Source, use engagement instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint false, openWorldHint true, idempotentHint false, destructiveHint false), so the description carries the full burden of behavioral disclosure. It goes beyond annotations by explaining the cost model (free text mode, 1 credit per semantic question with a 10-minute free window), the paging behavior (hundred rows at a time, cursor-based), the inclusion of matchedTerms and relevance explanations, and the exact-match semantics of author filtering. It also discloses that semantic mode charges and that paging is not the right way to count. This is comprehensive and consistent with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence serves a purpose. It is front-loaded with the core purpose and key differentiators, then logically proceeds to usage examples, cost, paging, and specific parameter guidance. Given the tool has 18 parameters and complex semantics, the length is appropriate. There is no redundancy or fluff; each clause adds information an agent needs to call the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 18 parameters, no output schema, and minimal annotations, the description must fully equip an agent to invoke the tool correctly. It explains what the response contains (sentiment, intent, relevance, bucket, agent readings, matchedTerms), how paging works, the cost model, and when to use alternatives. It also covers edge cases like 'unread' values, the meaning of absent filters, and the behavior of engagement thresholds for sources that lack counters. Nothing an agent needs to know 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?
Even though the schema covers 100% of parameters with descriptions, the tool description adds significant contextual meaning beyond the schema. It explains the interplay between parameters (e.g., 'Do not set it to filter by keyword: that is what q= in text mode already does'), warns against using both engagement and engagement_min ('Send this or engagement_min, never both'), and clarifies nuanced behaviors like the author filter being exact match and the engagement rules being per-Source. It also clarifies that 'source' is preferred over 'type' for narrowing. This adds real value beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource-scope statement: 'Read everything your keywords caught, newest first, across every Source and every keyword on the account...' It names the exact resource (mentions), the scope (all keywords and sources), and the ordering. It also distinguishes itself from siblings by naming mentions_stats and get_keyword_results as alternatives for different jobs. An agent can immediately tell what this tool does and how it differs from the others.
Agents choose between tools based on descriptions. A clear purpose with a specific verb 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 is explicit about when to use this tool versus alternatives: it gives example queries, says to use mentions_stats for counting, get_keyword_results for a single keyword, and warns against using mode=semantic for keyword filtering. It also explains when to use run and kind, and that cursor paging works by passing nextCursor unchanged. No ambiguity remains about when to select this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mentions_similarFind similar mentionsAInspect
Find the mentions that say something close to one you already have: the thread you already found, and the nine others like it, most similar first, across every keyword and kept Explore run. Use it to show that a complaint or a request is not a one-off, or to gather more quotes like a good one. Copies of the same post are collapsed and the mention you asked about never comes back. Charges 1 credit per mention asked about, then answers the same mention free for 10 minutes. A different mention charges again, even while another one is cached. meta.credits_used is what the call charged: 0 means it came from the cache.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The id of a mention from list_mentions or get_keyword_results, collected in the last 30 days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given the annotations (readOnlyHint=false, openWorldHint=true), the description adds significant behavioral context: it explains the credit charging logic (1 credit per asked mention, free for 10 minutes, different mention charges again), the deduplication of copies, the exclusion of the input mention from results, and that meta.credits_used indicates cache usage. This is rich and non-obvious behavior that the annotations don't cover.
Agents need to know what a tool does to the 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 provides essential behavioral or use-case detail, and the most important purpose is front-loaded. The credit logic and cache behavior are crucial for correct usage and are clearly organized. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with no output schema, the description covers everything an agent needs: what the input should be, what happens to the output (similar mentions, sorted by similarity), edge cases (collapsing copies, excluding input), and billing/caching semantics. The use of meta.credits_used is also explained.
Complex tools with many parameters or behaviors need more documentation. 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 covers the id parameter perfectly (100% coverage with format and source description). The tool description doesn't repeat parameter details but adds a critical constraint (collected in the last 30 days) that is already in the schema, so it adds minimal extra value. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool finds mentions similar to a given one, listing the exact use case (showing a complaint is not a one-off) and scope (across all keywords and Explore runs). It distinguishes it from list_mentions and get_keyword_results by defining the similarity behavior, though it doesn't explicitly name a sibling alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use it (to find similar mentions, gather more quotes) and mentions the 30-day input freshness constraint, which implies the input must come from recent results. It doesn't explicitly say when not to use it or compare to siblings, but the use case is fairly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mentions_statsCount mentionsARead-onlyInspect
Count mentions instead of reading them: how many, when, where, by whom and on which terms, over up to 90 days, in one call. Call it before list_mentions for any question that starts with "how many", and for questions like "how did this week compare with last week?" (one call per window, group_by ["day"]), "which Source carries the complaints?" (group_by ["source", "sentiment"]) or "which terms catch the most?" (group_by ["term"]). rows holds one count per combination and leaves out the empty ones, so a quiet day is a missing row. total counts the whole window whatever top kept, truncated says an open axis was cut, and unread says how many mentions nothing has read when sentiment, intent or relevance is an axis. A mention caught by two terms counts under each term. Dates are publication dates, and the counts are the ones the dashboard Insights shows: they include mentions a mute rule or a hide keeps out of list_mentions, which can therefore return fewer. Page list_mentions afterwards only to quote. Free — does not charge credits.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | How many authors, terms or keywords to keep, busiest first. Defaults to 10. | |
| since | No | ISO 8601 instant. Counts mentions published after it (collection date where the Source gives none). Defaults to 7 days before until. | |
| until | No | ISO 8601 instant, inclusive. Defaults to now. The window covers 90 days at most; for a longer period, count it in parts. | |
| author | No | Only mentions from these accounts — several are OR'd, so ["alice", "bob"] is both in one call. Matched exactly, as the Source writes the handle and without a leading "@": this is a filter, not a search (use q to search text). A handle the account has never seen returns an empty page, and a mention with no author never matches. | |
| intent | No | Only mentions read as one of these intents — several are OR'd, so ["purchase_intent", "comparison"] is the leads view in one call. "unread" is what nothing has classified yet. | |
| source | No | Only these Sources — several are OR'd, so ["reddit", "hackernews"] is both in one call. Absent means every Source the account polls. | |
| keyword | No | Only this keyword's mentions, by id from list_keywords, including what its searches caught before they last changed. An id that is not one of the account's keywords is an error. | |
| group_by | Yes | One or two axes to count along: ["source", "sentiment"] is one count per Source and sentiment. day and hour cannot be combined. author, term and keyword are open lists, cut at top. | |
| relevance | No | Only mentions read as this relevant to their keyword — several are OR'd, so ["high", "medium"] leaves out what matched by accident (another meaning, a handle, spam). "unread" is what nothing has read yet. | |
| sentiment | No | Only mentions read as one of these sentiments — several are OR'd, so ["negative", "question"] is "what needs an answer" in one call. "unread" is what nothing has classified yet. | |
| engagement | No | A per-Source rule, repeatable: "<source|*>:<metric><operator><number>" — ["x:likes>=100", "reddit:score>50"] is "what landed, judged by what landing means where it was posted". Metrics are likes, replies, reposts, comments, score, views, plus total for the same interaction sum engagement_min reads. Operators are >=, >, =, <, <=; the number is whole and may be negative (Reddit and Lemmy net downvotes out). A Source no rule names PASSES — ["x:likes>=100"] narrows X and leaves Hacker News alone — a named rule overrides * for its own Source, and several rules on one Source are ANDed; use source to ask for one Source. A metric that was never counted satisfies NOTHING, < included: YouTube reports no likes, RSS and AI answers report no audience, and mentions recorded before 2026-09-04 predate the field, so ["youtube:likes<10"] returns none of them rather than all of them. Send this or engagement_min, never both. | |
| engagement_min | No | Only mentions with at least this many interactions — likes, replies, reposts, comments or score, depending on the Source. Never counts views. Mentions with no counters at all (RSS, AI answers, anything recorded before 2026-09-04) are left out rather than treated as zero. Counters are captured when the item is collected and never refreshed, so a threshold reads against recent mentions. For a threshold on one metric on one Source, use engagement instead. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, but the description adds substantial behavior: rows omit zero-count combinations, total/truncated/unread fields have distinct meanings, terms double-count mentions, and counts include muted/hidden mentions that list_mentions excludes. No contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but front-loaded and dense: purpose and usage examples come first, followed by output behavior and caveats. A few phrases, like 'how many, when, where, by whom and on which terms,' are somewhat redundant with the examples, but every sentence contributes meaningful selection or invocation guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the key response fields (rows, total, truncated, unread), the 90-day window limit, counting quirks like double-counted terms, and the relationship to list_mentions. An agent has enough context to select, invoke, and interpret results correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description adds use-case-driven guidance for group_by ('day' for week comparisons, ['source','sentiment'] for source complaints, 'term' for top terms) and explains open-axis truncation and 'unread' semantics. It does not re-document every parameter, but the schema already handles that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with 'Count mentions instead of reading them,' which is a specific verb, resource, and direct contrast to the sibling list_mentions. The 'how many' framing and the question examples make it unmistakably a counting tool, not a retrieval 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?
Explicitly directs agents to call it before list_mentions for any question that starts with 'how many,' and gives concrete question-to-group_by mappings. It also closes with 'Page list_mentions afterwards only to quote,' providing a clear when-not and alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vinted_market_statsGet Vinted market price statisticsARead-onlyInspect
Get p25 / median / p75 and a listing count per day for a Vinted market, newest first, filterable by brand, catalog, size, condition and currency. Costs 5 credits per request. Defaults to the last 30 days; a range may not exceed 365 days. soldRate is always null — sold detection is not yet available. Coverage grows with usage: a series exists only for items that appeared in a search Nephia observed. This is not a complete index of Vinted.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | ISO-8601 end of the range (default: now) | |
| from | No | ISO-8601 start of the range (default: 30 days ago) | |
| market | No | Vinted market country code, e.g. "fr" (default), "de", "es", "it" | |
| sizeId | No | Vinted size id — the numeric id as it appears on Vinted | |
| status | No | Vinted condition label as observed, e.g. "Très bon état" | |
| brandId | No | Vinted brand id — the numeric id as it appears on Vinted | |
| currency | No | Currency code, e.g. "EUR" | |
| catalogId | No | Vinted catalog id — the numeric id as it appears on Vinted |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even with readOnlyHint and openWorldHint annotations, the description goes well beyond them by disclosing credit cost, soldRate being always null due to missing sold detection, coverage being tied to observed searches, and explicitly stating this is not a complete index. This is high-value behavioral transparency that materially prevents misinterpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: output summary, cost, date constraints, soldRate caveat, and coverage caveat. The core result type is front-loaded, and there is no filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only stats tool with no output schema, the description covers the essential invocation semantics: optional filters, defaults, range limits, cost, ordering, and a critical null field caveat. It is slightly incomplete only in that it doesn't describe the full response shape beyond the listed aggregates, but nothing needed to decide whether to call it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful constraints not present in the schema: the default 30-day range, the 365-day maximum range, and 'newest first' ordering. It also names the filterable dimensions in plain language, reinforcing the schema without fully duplicating 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 a specific resource (Vinted market), specific outputs (p25/median/p75 and per-day listing count), and a precise verb ('Get'). It also conveys scope and filtering. However, it does not explicitly differentiate this tool from related siblings like vinted_price_history, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides strong usage constraints: 5 credits per request, default 30-day window, 365-day maximum, soldRate always null, and coverage limitations. It does not explicitly say when to choose this tool over alternatives, nor does it name sibling tools, so the usage context is implied rather than directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
vinted_price_historyGet a Vinted item price historyARead-onlyInspect
Get every price and status Nephia observed for one Vinted listing, oldest first. Costs 3 credits per request. Points are movements, not poll ticks: one is recorded when the price or status changed, or once every 24 hours while neither did. Coverage grows with usage: a series exists only for items that appeared in a search Nephia observed. This is not a complete index of Vinted.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Vinted listing id | |
| to | No | ISO-8601 upper bound on observedAt | |
| from | No | ISO-8601 lower bound on observedAt | |
| limit | No | Maximum points to return (default 200, max 500) | |
| market | No | Vinted market country code, e.g. "fr" (default), "de", "es", "it" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description is consistent with both. It adds valuable behavioral context beyond the annotations: the 3-credit cost per request, the sampling semantics ('Points are movements, not poll ticks... recorded when the price or status changed, or once every 24 hours'), and the coverage model. 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?
Five sentences, each earning its place: core purpose and ordering, cost, sampling semantics, coverage limitation, and the explicit scope caveat. The most important info is front-loaded in the first sentence, and no sentence is redundant with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Comprehensive for a read-only lookup tool with 100% schema coverage. It explains the return concept (points), cost, coverage limitations, and ordering. The only minor gap is that with no output schema, it does not detail the exact response shape, but the 'points' explanation substantially compensates for that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds real meaning by defining what a 'point' is (a movement or a 24-hour tick), which enriches understanding of the limit, from, and to parameters — clarifying that limit counts movements and that from/to bound observedAt events. This goes beyond the schema's bare parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get every price and status Nephia observed for one Vinted listing.' It clearly scopes to a single listing and is readily distinguishable from sibling vinted_market_stats (market-level data) and the query/analysis tools. The 'oldest first' ordering and per-listing scope leave no ambiguity about what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: it is a per-listing history tool with explicit limitations ('Coverage grows with usage... only for items that appeared in a search Nephia observed' and 'This is not a complete index of Vinted'). This implies when it is appropriate, though it stops short of naming specific alternative tools or explicit when-not-to-use exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- Changed
get_keyword_results1 field changed- added
Input schema / properties / opportunityAdded value: +{ + "description": "true keeps only opportunities: mentions of a topic or competitor keyword that are highly relevant to it and whose author is someone to answer (the keyword's agent step says problem_fit true, or, without that field, the intent is purchase_intent, comparison or question). Use it for \"who should I answer today?\". An own keyword has none. Free.", + "type": "boolean" +}
- Changed
keyword_create1 field changed- changed
Input schema / properties / subjectRole / descriptionPrevious value: -"What the keyword is about: your own brand, a competitor's, or a topic."New value: +"What the keyword is about: your own brand, a competitor's, or a topic. A new topic without globalCriteria.match is created with match word."
- Changed
keyword_estimate1 field changed- changed
Input schema / properties / subjectRole / descriptionPrevious value: -"What the keyword is about: your own brand, a competitor's, or a topic."New value: +"What the keyword is about: your own brand, a competitor's, or a topic. A new topic without globalCriteria.match is created with match word."
- Changed
keyword_update1 field changed- changed
Input schema / properties / subjectRole / descriptionPrevious value: -"What the keyword is about: your own brand, a competitor's, or a topic."New value: +"What the keyword is about: your own brand, a competitor's, or a topic. A new topic without globalCriteria.match is created with match word."
- Changed
list_mentions1 field changed- added
Input schema / properties / opportunityAdded value: +{ + "description": "true keeps only opportunities: mentions of a topic or competitor keyword that are highly relevant to it and whose author is someone to answer (the keyword's agent step says problem_fit true, or, without that field, the intent is purchase_intent, comparison or question). Use it for \"who should I answer today?\". An own keyword has none. Free.", + "type": "boolean" +}
5 tool updates
- Changed
keyword_create2 fields changed- added
Input schema / properties / colorAdded value: +{ + "description": "The keyword colour in the dashboard. Left out on create, an unused one is picked.", + "enum": [ + "keyword-1", + "keyword-2", + "keyword-3", + "keyword-4", + "keyword-5", + "keyword-6", + "keyword-7", + "keyword-8" + ], + "type": "string" +} - added
Input schema / properties / relevanceContextAdded value: +{ + "anyOf": [ + { + "maxLength": 400, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One sentence the AI reading uses to judge relevance, such as \"Acme is a cloud storage company, not the cartoon.\" null clears it." +}
- Changed
keyword_estimate2 fields changed- added
Input schema / properties / colorAdded value: +{ + "description": "The keyword colour in the dashboard. Left out on create, an unused one is picked.", + "enum": [ + "keyword-1", + "keyword-2", + "keyword-3", + "keyword-4", + "keyword-5", + "keyword-6", + "keyword-7", + "keyword-8" + ], + "type": "string" +} - added
Input schema / properties / relevanceContextAdded value: +{ + "anyOf": [ + { + "maxLength": 400, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One sentence the AI reading uses to judge relevance, such as \"Acme is a cloud storage company, not the cartoon.\" null clears it." +}
- Changed
keyword_update2 fields changed- added
Input schema / properties / colorAdded value: +{ + "description": "The keyword colour in the dashboard. Left out on create, an unused one is picked.", + "enum": [ + "keyword-1", + "keyword-2", + "keyword-3", + "keyword-4", + "keyword-5", + "keyword-6", + "keyword-7", + "keyword-8" + ], + "type": "string" +} - added
Input schema / properties / relevanceContextAdded value: +{ + "anyOf": [ + { + "maxLength": 400, + "type": "string" + }, + { + "type": "null" + } + ], + "description": "One sentence the AI reading uses to judge relevance, such as \"Acme is a cloud storage company, not the cartoon.\" null clears it." +}
- Changed
list_mentions1 field changed- added
Input schema / properties / relevanceAdded value: +{ + "description": "Only mentions read as this relevant to their keyword — several are OR'd, so [\"high\", \"medium\"] leaves out what matched by accident (another meaning, a handle, spam). \"unread\" is what nothing has read yet.", + "items": { + "enum": [ + "high", + "medium", + "low", + "unread" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +}
- Changed
mentions_stats2 fields changed- changed
Input schema / properties / group_by / items / enumPrevious value: -[ - "day", - "hour", - "source", - "sentiment", - "intent", - "author", - "term", - "keyword" -]New value: +[ + "day", + "hour", + "source", + "sentiment", + "intent", + "relevance", + "author", + "term", + "keyword" +] - added
Input schema / properties / relevanceAdded value: +{ + "description": "Only mentions read as this relevant to their keyword — several are OR'd, so [\"high\", \"medium\"] leaves out what matched by accident (another meaning, a handle, spam). \"unread\" is what nothing has read yet.", + "items": { + "enum": [ + "high", + "medium", + "low", + "unread" + ], + "type": "string" + }, + "minItems": 1, + "type": "array" +}
33 tool updates
- Changed
analyses_run4 fields changed- changed
Input schema / properties / items / descriptionPrevious value: -"The items to read. Use this or watchId, never both."New value: +"The items to read. Use exactly one of items or keywordId." - added
Input schema / properties / keywordIdAdded value: +{ + "description": "Read a keyword's own recent mentions instead of passing items. The id comes from list_keywords.", + "format": "uuid", + "type": "string" +} - changed
Input schema / properties / since / descriptionPrevious value: -"With watchId: ISO instant, defaults to 24h ago."New value: +"With keywordId: ISO instant, defaults to 24h ago." - removed
Input schema / properties / watchIdRemoved value: -{ - "description": "Read a watch's own recent events instead of passing items.", - "format": "uuid", - "type": "string" -}
- Added
get_keyword - Added
get_keyword_events - Added
get_keyword_results - Removed
get_query - Removed
get_query_results - Added
keyword_brand_set - Added
keyword_bucket_manage - Added
keyword_create - Added
keyword_estimate - Added
keyword_manage - Added
keyword_source_manage - Added
keyword_source_set - Added
keyword_update - Added
list_keyword_buckets - Added
list_keywords - Changed
list_mentions3 fields changed- added
Input schema / properties / keywordAdded value: +{ + "description": "Only this keyword's mentions, by id from list_keywords, including what its searches caught before they last changed. An id that is not one of the account's keywords is an error.", + "format": "uuid", + "type": "string" +} - changed
Input schema / properties / kind / descriptionPrevious value: -"Which producer. \"polling\" is what your Queries catch on their own; \"runs\" is a kept one-off Explore run. Absent means both."New value: +"Which producer. \"polling\" is what your keywords catch on their own; \"runs\" is a kept one-off Explore run. Absent means both." - removed
Input schema / properties / queryRemoved value: -{ - "description": "Only this Query's mentions, by id from list_queries, including what its searches caught before they last changed. An id that is not one of the account's Queries is an error.", - "format": "uuid", - "type": "string" -}
- Removed
list_queries - Removed
list_query_buckets - Changed
mentions_similar1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"The id of a mention from list_mentions or get_query_results, collected in the last 30 days."New value: +"The id of a mention from list_mentions or get_keyword_results, collected in the last 30 days."
- Changed
mentions_stats5 fields changed- changed
Input schema / properties / group_by / descriptionPrevious value: -"One or two axes to count along: [\"source\", \"sentiment\"] is one count per Source and sentiment. day and hour cannot be combined. author, term and query are open lists, cut at top."New value: +"One or two axes to count along: [\"source\", \"sentiment\"] is one count per Source and sentiment. day and hour cannot be combined. author, term and keyword are open lists, cut at top." - changed
Input schema / properties / group_by / items / enumPrevious value: -[ - "day", - "hour", - "source", - "sentiment", - "intent", - "author", - "term", - "query" -]New value: +[ + "day", + "hour", + "source", + "sentiment", + "intent", + "author", + "term", + "keyword" +] - added
Input schema / properties / keywordAdded value: +{ + "description": "Only this keyword's mentions, by id from list_keywords, including what its searches caught before they last changed. An id that is not one of the account's keywords is an error.", + "format": "uuid", + "type": "string" +} - removed
Input schema / properties / queryRemoved value: -{ - "description": "Only this Query's mentions, by id from list_queries, including what its searches caught before they last changed. An id that is not one of the account's Queries is an error.", - "format": "uuid", - "type": "string" -} - changed
Input schema / properties / top / descriptionPrevious value: -"How many authors, terms or Queries to keep, busiest first. Defaults to 10."New value: +"How many authors, terms or keywords to keep, busiest first. Defaults to 10."
- Removed
query_brand_set - Removed
query_bucket_manage - Removed
query_create - Removed
query_estimate - Removed
query_manage - Removed
query_source_manage - Removed
query_source_set - Removed
query_update - Removed
watch_create - Removed
watch_feed - Removed
watch_list - Removed
watch_manage
3 tool updates
- Changed
query_create1 field changed- changed
Input schema / properties / sources / items / properties / searches / items / properties / overrides / descriptionPrevious value: -"This search's own criteria: query (one text), terms (two or more texts OR'd, on the Sources that support it), market, filters. On ai_answers a search is a prompt: {\"filters\": {\"prompt\": \"What is the best brand monitoring tool?\", \"brands\": [\"YourBrand\"], \"engines\": [\"chatgpt\", \"gemini\", \"perplexity\"]}}."New value: +"This search's own criteria: query (one text), terms (two or more texts OR'd, on the Sources that support it), match, market, filters. On ai_answers a search is a prompt: {\"filters\": {\"prompt\": \"What is the best brand monitoring tool?\", \"brands\": [\"YourBrand\"], \"engines\": [\"chatgpt\", \"gemini\", \"perplexity\"]}}."
- Changed
query_estimate1 field changed- changed
Input schema / properties / sources / items / properties / searches / items / properties / overrides / descriptionPrevious value: -"This search's own criteria: query (one text), terms (two or more texts OR'd, on the Sources that support it), market, filters. On ai_answers a search is a prompt: {\"filters\": {\"prompt\": \"What is the best brand monitoring tool?\", \"brands\": [\"YourBrand\"], \"engines\": [\"chatgpt\", \"gemini\", \"perplexity\"]}}."New value: +"This search's own criteria: query (one text), terms (two or more texts OR'd, on the Sources that support it), match, market, filters. On ai_answers a search is a prompt: {\"filters\": {\"prompt\": \"What is the best brand monitoring tool?\", \"brands\": [\"YourBrand\"], \"engines\": [\"chatgpt\", \"gemini\", \"perplexity\"]}}."
- Changed
query_source_set4 fields changed- changed
Input schema / properties / estimateToken / descriptionPrevious value: -"Absent: nothing is written, and the estimate of this change comes back with its token. Present: the change is written, if the arguments are the ones that were estimated."New value: +"mode \"write\" only, and required there: the estimateToken the mode \"estimate\" call returned for these same arguments. Valid 15 minutes." - added
Input schema / properties / modeAdded value: +{ + "description": "estimate writes nothing and returns the price of this change with its estimateToken; it takes no estimateToken. write saves the change and requires the estimateToken of an estimate made with the same arguments.", + "enum": [ + "estimate", + "write" + ], + "type": "string" +} - changed
Input schema / properties / searches / items / properties / overrides / descriptionPrevious value: -"This search's own criteria: query (one text), terms (two or more texts OR'd, on the Sources that support it), market, filters. On ai_answers a search is a prompt: {\"filters\": {\"prompt\": \"What is the best brand monitoring tool?\", \"brands\": [\"YourBrand\"], \"engines\": [\"chatgpt\", \"gemini\", \"perplexity\"]}}."New value: +"This search's own criteria: query (one text), terms (two or more texts OR'd, on the Sources that support it), match, market, filters. On ai_answers a search is a prompt: {\"filters\": {\"prompt\": \"What is the best brand monitoring tool?\", \"brands\": [\"YourBrand\"], \"engines\": [\"chatgpt\", \"gemini\", \"perplexity\"]}}." - changed
Input schema / requiredPrevious value: -[ - "id", - "source", - "enabled" -]New value: +[ + "id", + "source", + "mode", + "enabled" +]
26 tool updates
- First observed
account_credits - First observed
analyses_estimate - First observed
analyses_run - First observed
explore - First observed
explore_estimate - First observed
get_query - First observed
get_query_results - First observed
list_mentions - First observed
list_queries - First observed
list_query_buckets - First observed
mentions_similar - First observed
mentions_stats - First observed
query_brand_set - First observed
query_bucket_manage - First observed
query_create - First observed
query_estimate - First observed
query_manage - First observed
query_source_manage - First observed
query_source_set - First observed
query_update - First observed
vinted_market_stats - First observed
vinted_price_history - First observed
watch_create - First observed
watch_feed - First observed
watch_list - First observed
watch_manage
Publisher details
- Operator
- https://nephia.cc
- Operator website
- https://nephia.cc
- Vendor relationship
- Unknown
- Documentation
- https://docs.nephia.cc
- Trust center
- Unknown
- Restrictions
- Unknown
Related MCP Connectors
Your agent needs to know where a brand or a phrase is being talked about across the web — with the trend line, the sentiment and the ratings attached. **What you can ask for** • "Where is our brand cited across the web this quarter, and is that rising?" • "What is the sentiment around this phrase?" • "How do ratings for this product distribute?" • "Which categories is this topic trending in?" • "Summarise everything published about this term." **How to use it** Point any MCP client at https://mcp.aisa.one/seo-content/mcp and sign in with OAuth — there is no key to create or paste. 10 tools: content search, summary, phrase and category trends, sentiment analysis, rating distribution, plus the filters, categories, languages and locations behind them. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Find where you are mentioned here, then ask the same agent who links to those pages — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/seo/mcp for all of it at once — rankings, keywords, backlinks, site health and AI-answer visibility across DataForSEO, Semrush and Ahrefs.
SocialFaktory (https://www.socialfaktory.com) is a social media MCP server that lets your AI agent run a brand's social content with you. It reads the brands, channels and media you already have, writes posts in the brand's own voice, prices and generates short video, takes a file you upload, composes one post per channel, schedules or sends it on TikTok, Instagram, YouTube, X, LinkedIn, Facebook and Pinterest, and reads the metrics back. It is a hosted remote server at https://www.socialfaktory.com/mcp (Streamable HTTP) with OAuth 2.1 sign-in and 20 tools. Install steps cover Claude Code, Claude Desktop, Cursor, VS Code, Codex CLI, Gemini CLI and Windsurf. You stay in control. Generating spends the credits in your wallet, and the agent is told to quote the price and ask you first. Posts are drafts until you send them, and nothing reaches a channel without the publish permission you grant on the consent screen, where you also pin the connection to one brand, cap monthly spend and choose when it expires. Generating and publishing need an active SocialFaktory plan. Not available through an agent yet: cloning a video from a link, and generating still images or carousels. Connecting a social channel is a browser sign-in and stays in the app. Docs: https://www.socialfaktory.com/docs/mcp
Your agent needs live data — a competitor's traffic, who to contact there, what people are saying, what Google and ChatGPT answer about you, a company's filings. Normally that is six vendor accounts, six sets of keys and six SDKs. This is one URL. **What you can ask for** • "How much traffic does stripe.com get, where does it come from, and who competes for the same keywords?" • "Find 20 Series-B fintech companies in Germany and the heads of marketing there, with emails." • "Does ChatGPT mention our brand when someone asks for the best CRM — and what does it cite?" • "What is X saying about $NVDA today, and what did the stock actually do?" • "Search the web for this, then scrape the three best pages into markdown." **How to use it** Point any MCP client at https://mcp.aisa.one/mcp and sign in with OAuth — there is no key to create or paste. Then just ask: the agent calls search to find the right operation and use to run it. **Why this rather than the source** 26 sources behind one account and one bill — DataForSEO, Semrush, Ahrefs, Similarweb, Apollo, X/Twitter, Instagram, Reddit, Pinterest, YouTube, Tavily, Exa, Perplexity, Firecrawl, CoinGecko, Kalshi, Polymarket, AgentMail and more, 580+ operations. tools/list returns five tools, not 580, so the introduction does not eat your context window. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** One slice at a time: https://mcp.aisa.one/seo/mcp · /finance/mcp · /social/mcp · /search/mcp · /sales/mcp · /mail/mcp · /gtm/mcp, or a single provider like /twitter-api/mcp. Same account, fewer tools listed, and search still reaches everything. Full list at https://mcp.aisa.one/servers
Your agent needs what people are posting — across X, Instagram, Reddit, Pinterest and YouTube at once, not five accounts and five rate limits. **What you can ask for** • "What is being said about our brand this week on X and Reddit?" • "Find the creators posting about this category on Instagram and YouTube." • "Pull the replies and quotes on this tweet and the comments on that reel." • "What is trending in this country right now?" • "Which subreddits and hashtags keep coming up for this topic?" **How to use it** Point any MCP client at https://mcp.aisa.one/social/mcp and sign in with OAuth — there is no key to create or paste. 56 read tools across five platforms: X/Twitter (users, tweets, communities, lists, Spaces, trends), Instagram (profiles, posts, reels, highlights, transcripts), Reddit (search, subreddits, comment trees), Pinterest (pins, boards, search) and YouTube search. **Why this rather than the source** One login instead of five developer programmes, and no app review on any of them. **It is also a door to the rest** The same login reaches 26 sources and 580+ operations. Measure the conversation here, then ask the same agent for the site traffic behind it or the people to contact — without adding a second server. **What it costs** Finding and inspecting an operation is free. Running one is billed per call at API prices, with no seat and no monthly minimum, and every call takes max_price_usd so an agent cannot overspend by accident. **Where else it reaches** https://mcp.aisa.one/twitter-api/mcp · /instagram/mcp · /reddit/mcp · /pinterest/mcp · /youtube-search/mcp for one platform at a time; https://mcp.aisa.one/gtm/mcp adds Similarweb and Apollo.
Related MCP Servers
- AlicenseAqualityAmaintenanceMonitor keyword mentions across Reddit, Hacker News, X, and Bluesky, and triage AI-scored leads from your agent. Connects to the hosted RedReplier MCP server.211MIT
- FlicenseNot gradedqualityBmaintenanceA remote MCP server that exposes tools from many services (X, LinkedIn, GitHub, Gmail, Notion, etc.) through a single endpoint on Cloudflare Workers, enabling unified access to third-party APIs via natural language.-
- AlicenseAqualityDmaintenanceAn MCP server that gives any agent real-time news plus the contextual intelligence to use it well — tone distribution, emerging stories, narrative shifts, spike alerts, and tone-over-time charts — powered by Overtone's publisher network. Works with any MCP-compatible client: Claude Desktop, Claude Code, Cursor, Windsurf, Codex, Kimi K2, and more.71MIT
- AlicenseNot gradedqualityCmaintenanceLive X/Twitter and Reddit research. 10 read-only MCP tools, Google/GitHub sign-in. Free tier.2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.