Skip to main content
Glama

Mencoro

Server Details

Track and manage how your brand appears in AI answers: rank, mentions, sentiment, share of voice.

Ownership verified
Status
Healthy
Uptime
98.7% over 21 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
mencoro/mencoro-mcp
GitHub Stars
0
Server Listing
Mencoro MCP server

TDQS

A3.7/5.0

Scored across 60 tools

Disambiguation4/5

Most tools have clearly distinct purposes and descriptions explicitly cross-reference alternatives, but with 60 tools there are several closely related analytical endpoints (rank-tracking stats vs. time series vs. cluster breakdown, mention mix vs. samples vs. sentiment) that require careful selection.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun or clear action pattern (list_*, get_*, create_*, update_*, delete_*, discover_*, start_*), with no mixed casing or chaotic conventions.

Tool Count1/5

At 60 tools, the server is far beyond the typical well-scoped MCP range and creates an extreme selection burden even if each tool is individually justified. This is an extreme count mismatch per the rubric.

Completeness5/5

The surface covers organization, project, competitor, tracked-query, and cluster lifecycles, plus background discovery jobs, analytics, usage, members, guide, and preview/confirmation flows. No obvious domain gaps or dead ends are apparent.

Available Tools

60 tools
apply_auto_clusteringApply a proposed clusteringAInspect

Apply the grouping a completed start_auto_clustering job proposed: creates the clusters it named and moves the tracked queries into them, as the job's mode said. Cluster names are lower-cased like create_clusters, and a proposed name that matches an existing cluster reuses it instead of creating a second one. Show the proposal (get_job) to the user first. Pass a fresh requestId and reuse it if you retry, so a retry never applies twice.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYes
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNoAlways present, empty list included: read it rather than inferring success from the status code.
clustersNoEvery cluster the assignments referred to, and whether this call created it.
successfulNoTracked queries written, each with the cluster ids it ended up with - the resulting state, not the delta.
unassignedNoTracked queries the job produced no assignment for. Nothing was written for them and they keep the clusters they already had, under every merge mode.
skippedClustersNoProposed names the store cannot hold. A tracked query whose proposed cluster was skipped ends up with fewer clusters than the proposal showed.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false); the description goes further by disclosing the actual side effects (creates clusters, moves tracked queries), name normalization, existing-cluster reuse instead of duplication, and idempotency behavior via requestId. This is meaningful behavioral context an agent cannot derive from the 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.

Conciseness5/5

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

Four sentences, each carrying distinct information (action, naming/reuse rule, preview prerequisite, idempotency key). The main action is front-loaded and there is no filler or repetition of the title.

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

Completeness5/5

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

For a multi-step, stateful mutation the description covers the prerequisite (view proposal), the side effects, the naming/reuse semantics, and the retry/idempotency contract. An output schema exists, so return values need not be explained. Nothing needed to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is only 25%, so the description must compensate. It fully explains the non-obvious requestId (fresh key, reuse only on retry) and ties jobId to the start_auto_clustering job, but organizationId and projectId are left to inference. Strong on the parameter that matters, silent on the trivial ones.

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

Purpose5/5

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

States a specific verb and resource ('Apply the grouping a completed start_auto_clustering job proposed') and explicitly names the producer sibling (start_auto_clustering), the naming convention shared with create_clusters, and the preview tool (get_job). An agent can distinguish this from create_clusters, start_auto_clustering, and set_tracked_query_clusters without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit workflow guidance: show the proposal via get_job first, and only apply after. It also names the retry condition ('reuse it if you retry'), routing the agent correctly between generating a proposal, previewing it, and applying it.

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

archive_organizationArchive an organizationA
Destructive
Inspect

Archive an organization: its projects are archived and stop being checked, its pending invitations are cancelled, and its subscription is cancelled at the end of the billing period. Requires a confirmationToken: call preview_operation with tool "archive_organization" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees. Needs the organization:manage permission and the owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
roleYesThe caller's current role in this organization
statusYes
imageUrlNo
createdAtYes
descriptionNo
contactEmailNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already mark the tool as destructive and non-idempotent, but the description adds substantial behavioral detail beyond them: the exact cascading effects on projects, invitations, and subscription billing. It also discloses the required authorization level and the mandatory preview/confirmation protocol.

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

Conciseness5/5

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

The description is front-loaded with the core action and its consequences, then moves to prerequisites and permissions. It is dense but every sentence carries necessary information, with no filler.

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

Completeness5/5

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

For a destructive organization-level mutation with an output schema present, the description covers the critical missing context: cascade effects, authorization requirements, and the confirmation-token workflow. Return values need not be explained because an output schema exists.

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

Parameters4/5

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

Schema coverage is only 33%, so the description must compensate. It explains the confirmationToken's origin and required use, but organizationId is left to the obvious parameter name and the requestId semantics remain in the schema.

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

Purpose5/5

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

The description states a specific verb and resource (archive an organization) and goes further by spelling out the cascade: projects archived, pending invitations cancelled, and subscription cancelled at billing period end. This is clearly distinguishable from sibling tools such as archive_project and restore_organization.

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

Usage Guidelines5/5

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

It gives an explicit prerequisite workflow: call preview_operation first with the same tool name and arguments, show the plan to the user, and only call this tool after explicit agreement. It also names the required permission and owner role, leaving little ambiguity about when and how to invoke it.

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

archive_projectArchive a projectA
Destructive
Inspect

Archive a project: every one of its tracked queries stops being checked and it disappears from the project list; restore_project brings it back. Requires a confirmationToken: call preview_operation with tool "archive_project" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
requestIdNo
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
statusYes
createdAtYes
brandNamesYesBrand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet.
competitorsYesCompetitors this project is measured against. Empty when none are configured.
organizationIdYes
websiteDomainsYesDomains the project is monitored for. Empty when the project has no brand monitoring profile yet.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, but the description goes well beyond them: it names exactly what is destroyed (tracking of all queries, list visibility), states it is reversible via restore_project, and discloses the mandatory preview/confirmation gate. This is rich behavioral context beyond the safety flags.

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

Conciseness5/5

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

Front-loads purpose, then consequence, then the required workflow across two dense sentences with no filler. A small number of words do double duty (the confirmation flow), and nothing is repeated from the title or annotations.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description covers purpose, blast radius, reversibility, and the mandatory confirmation sequence. The only shortfall is that two schema parameters (requestId especially) receive no coverage at 0% schema description coverage.

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

Parameters4/5

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

Schema description coverage is 0%, so the description carries the load. It thoroughly explains confirmationToken — where it comes from and how to obtain it — which is the highest-risk parameter. projectId and organizationId are self-evident by name, though requestId is not addressed at all, leaving one minor gap at 0% schema coverage.

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

Purpose5/5

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

States a specific verb and resource (archive a project) and immediately describes the concrete consequence: tracked queries stop being checked and the project disappears from the list. It also names the inverse sibling, restore_project, making the direction of the operation unambiguous against the many other project-mutating tools.

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

Usage Guidelines5/5

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

Gives an explicit prerequisite workflow: call preview_operation with tool "archive_project" and these arguments, show the returned plan to the user, then call only after explicit user agreement. It also contrasts with restore_project and specifies a required confirmationToken, leaving nothing to inference.

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

cancel_invitationCancel an invitationA
Destructive
Inspect

Cancel a pending invitation; its link stops working. Find ids with list_members and includeInvitations. Requires a confirmationToken: call preview_operation with tool "cancel_invitation" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees. Needs the organization:manage permission and the owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
invitationIdYes
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
roleYes
emailYes
stateYes
createdAtYes
expiresAtYes
acceptedAtNo

TDQS

A4.4/5.0
Behavior4/5

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

The description adds substantial context beyond the annotations: the confirmationToken requirement, the preview_operation gating flow, the required permission and role, and the observable effect on the invitation link. What it does not cover – whether the invitation can be reinstated, rate limits, or post-cancel audit behavior – is minor for a single-item cancel. Well above the bar set by the destructiveHint annotation.

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

Conciseness5/5

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

Three dense sentences, front-loaded with the action and its effect, then id discovery, then the required confirmation procedure. No filler, and each clause carries operational value for a destructive tool.

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

Completeness4/5

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

Given this is a destructive, multi-step-confirmation operation with an output schema that handles return values, the description covers the critical missing pieces: the confirmation gate, the permission requirement, and how to source the id. Fully adequate for correct invocation, though it could note idempotency guidance for the optional requestId.

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

Parameters3/5

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

Schema description coverage is only 25% (only requestId is documented), so the description must compensate. It successfully explains confirmationToken's workflow role and where to find invitationId, but says nothing about organizationId or the idempotency semantics of requestId beyond what the schema already states.

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

Purpose5/5

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

States a specific verb+resource ('Cancel a pending invitation') and immediately clarifies the consequence ('its link stops working'). This distinguishes it clearly from siblings like invite_member or update_member, and an agent knows exactly what effect to expect.

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

Usage Guidelines5/5

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

Explicitly tells the agent how to obtain the required id ('Find ids with list_members and includeInvitations') and prescribes the pre-execution workflow ('call preview_operation ... show the returned plan ... call this tool only after the user explicitly agrees'). Prerequisites (organization:manage permission, owner role) are also stated, leaving little to inference.

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

create_clustersCreate query clustersAInspect

Create up to 100 query clusters in a project, the groups tracked queries are organized in. Names are stored lower-cased and must be unique in the project; each name that cannot be created is reported in "failed" without stopping the rest. Assign tracked queries with set_tracked_query_clusters, or let start_auto_clustering propose groups. Pass a fresh requestId and reuse it if you retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesYes
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNoAlways present, empty list included: read it rather than inferring success from the status code.
successfulNoClusters created by this call.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that names are lower-cased, must be unique in the project, and that individual failures are reported in 'failed' without aborting the batch (partial-failure semantics). It also explains the requestId idempotency contract, which is valuable given idempotentHint=false.

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

Conciseness4/5

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

Front-loaded with the core action and scope, then constraints and workflow. Dense but every sentence carries useful information; the count cap and uniqueness rule are integrated rather than padded.

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

Completeness4/5

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

An output schema exists, so return-value explanation is unnecessary. The description covers the operation's key constraints and failure behavior, though it leaves the organizationId/projectId scoping and any permission requirements undocumented.

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

Parameters3/5

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

Schema description coverage is only 25%, so the description must compensate. It adds real meaning for 'names' (lower-casing, uniqueness, batch cap) and 'requestId' (fresh key, reuse on retry), but says nothing about organizationId or projectId scoping beyond naming the project.

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

Purpose5/5

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

States a specific verb+resource ('Create up to 100 query clusters') and defines what a cluster is ('the groups tracked queries are organized in'). It names sibling tools (set_tracked_query_clusters, start_auto_clustering) so the agent can place it within the workflow.

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

Usage Guidelines4/5

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

Identifies the related follow-up actions (assigning queries via set_tracked_query_clusters, or letting start_auto_clustering propose groups), which clarifies the workflow context. It does not explicitly state when NOT to create clusters versus using auto-clustering, so the exclusion is only implied.

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

create_competitorAdd a competitorAInspect

Add a competitor to a project, with its website domains and the names it is mentioned by; from then on its mentions and rankings are tracked beside the brand's. discover_brands can propose competitors. Pass a fresh requestId and reuse it if you retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
brandNamesYes
organizationIdYes
websiteDomainsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYesThe competitor's display name
brandNamesYesNames a mention is matched against for this competitor
websiteDomainsYesDomains a result is matched against for this competitor

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare it is a non-read-only, non-destructive, non-idempotent write. The description adds genuinely new behavior: once added, the competitor's mentions and rankings are tracked alongside the brand's, which tells the agent about durable side effects. Retry semantics via requestId are also disclosed, though permission/auth requirements are not.

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

Conciseness5/5

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

Three compact sentences, front-loaded with the core action and effect, then the discovery hint, then the retry rule. No filler and nothing redundant with the schema.

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

Completeness4/5

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

With an output schema present, return values need not be described, and the description covers the action, its tracking consequence, the alternative source of candidates, and retry behavior. The main remaining gap is the unmentioned organizationId and array-shape expectations.

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

Parameters3/5

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

Schema coverage is only 17% (only requestId is documented inline), so the description has to compensate and partially does: it names the name, websiteDomains and brandNames payloads and ties the record to a project. organizationId is never explained and no format or cardinality guidance is given for the arrays.

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

Purpose5/5

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

States a specific verb and resource ('Add a competitor to a project') plus the three payload concepts it carries (website domains, brand names), and the verb cleanly separates it from update_competitor and delete_competitor. It also names discover_brands as the upstream proposal source, so the agent can place it in the workflow.

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

Usage Guidelines4/5

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

Points at discover_brands as the tool that proposes competitors, giving real when-to-use context, and explains the retry condition for requestId. It stops short of an explicit exclusion (e.g. 'use update_competitor instead to change an existing one'), so it is clear context without full routing rules.

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

create_organizationCreate an organizationAInspect

Create a new organization, owned by the caller. Only with a Mencoro connection that is not limited to one organization. Requires a confirmationToken: call preview_operation with tool "create_organization" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees. Needs the organization:manage permission and the owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
statusYesAlways active on creation.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only cover the safety profile (not read-only, not destructive, not idempotent); the description goes well beyond by disclosing the account-scoping constraint, permission/role requirements, the required human-confirmation sequence, and how the confirmationToken is obtained. This is exactly the context an agent cannot infer from structured fields.

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

Conciseness4/5

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

Front-loaded with the action and ownership, then the scoping constraint, then the confirmation workflow, then permissions. Every sentence carries required information, though the confirmation-flow sentence is long and could be split for readability.

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

Completeness5/5

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

For a mutation tool with an output schema (so return values need not be described), the description covers the gating condition, auth requirements, and the mandatory preview/confirm workflow. An agent has everything needed to decide whether and how to call it.

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

Parameters4/5

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

Schema description coverage is only 33%, so the description must compensate, and it does so for the most critical parameter by explaining that confirmationToken comes from preview_operation and must follow explicit user agreement. The name parameter's constraints (maxLength) are left to the schema, and requestId is already documented there.

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

Purpose5/5

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

States a specific verb and resource ('Create a new organization') plus the ownership semantics ('owned by the caller'). This clearly separates it from update_organization, archive_organization, get_organization, and restore_organization in the sibling list.

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

Usage Guidelines5/5

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

Gives explicit preconditions: only usable with a Mencoro connection not limited to one organization, requires organization:manage and the owner role, and mandates a preview_operation confirmation flow before invocation. It also names the sibling tool (preview_operation) and the exact argument to pass it.

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

create_projectCreate a projectAInspect

Create a project that monitors a brand: its website domains, the brand names to look for, and optionally its competitors. Tracked queries are added afterwards with create_tracked_queries. Before calling it, propose everything to the user at once: brand names from suggest_brand_names, and competitors you suggest with their websites (no tool finds competitors; suggest_brand_names finds the names each one goes by). After the first checks, list_untracked_competitors shows other brands the answers name. Pass a fresh requestId and reuse it if you retry, so a retry never creates a second project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
brandNamesYesThe names the brand is mentioned by, e.g. ["Acme", "Acme Corp"]
competitorsNo
organizationIdYes
websiteDomainsYesThe brand's own domains, e.g. ["acme.com"]

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
statusYes
createdAtYes
brandNamesYesBrand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet.
competitorsYesCompetitors this project is measured against. Empty when none are configured.
organizationIdYes
websiteDomainsYesDomains the project is monitored for. Empty when the project has no brand monitoring profile yet.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and idempotentHint=false; the description adds the practical safeguard that a fresh requestId reused on retry prevents a duplicate project, which is real operational context beyond the annotations. It does not contradict idempotentHint=false (server-side idempotency is not assumed; the client supplies the key) and adds retry semantics plus workflow ordering.

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

Conciseness4/5

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

Front-loaded with the core create statement, then workflow guidance. Every sentence is actionable, though the middle sentences on suggest_brand_names and list_untracked_competitors make it fairly dense for a single paragraph.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers the creation inputs, retry/idempotency behavior, and cross-tool sequencing. It stops short of stating permission or organization-scope requirements, but otherwise an agent has what it needs to call this correctly.

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

Parameters4/5

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

Schema description coverage is 50%, and the description compensates by explaining what brandNames and websiteDomains represent in the monitoring context, plus the requestId retry rule ('reuse it only to retry this same call'). organizationId and name are left to the schema but are self-evident.

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

Purpose5/5

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

States a specific verb and resource (create a project that monitors a brand) and enumerates the core inputs: website domains, brand names, optional competitors. It also explicitly distinguishes itself from create_tracked_queries, which handles the follow-up step, so an agent can place it in the workflow without opening sibling schemas.

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

Usage Guidelines5/5

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

Gives explicit sequencing and alternatives: gather inputs from suggest_brand_names, propose everything to the user at once, add queries later with create_tracked_queries, and check list_untracked_competitors after the first run. It even notes no tool finds competitors, closing an obvious agent question.

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

create_tracked_queriesCreate tracked queriesAInspect

Start tracking queries: every combination of queryTexts x engines x countries (at most 100) becomes a tracked query, checked now and then on checkFrequency with nPasses passes, each check spending budget. Combinations the project already tracks, repeated ones and Google AI Mode in unsupported countries are skipped and reported. Requires a confirmationToken: call preview_operation with tool "create_tracked_queries" and these arguments first, show the returned plan (what is created, what it costs) to the user, and call this tool only after the user explicitly agrees. Pass a fresh requestId and reuse it if you retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoOptional two-letter language the engines should answer in
enginesYes
nPassesYesAnswers captured per check; more than 1 only for AI engines. Each pass counts as one check against your plan; a Claude pass counts as five.
countriesYesISO 3166-1 alpha-2 codes, e.g. ["US", "ES"]
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
queryTextsYes
checkFrequencyYes
organizationIdYes
queryClusterIdsNo
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNoAlways present, empty list included: read it rather than inferring success from the status code.
successfulNoTracked queries created by this call, one entry per query text, engine and country combination.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (which only flag write/open-world/non-idempotent), it discloses that checks consume budget, that at most 100 combinations are created, that already-tracked/duplicate/unsupported-country Google AI Mode combinations are skipped and reported, and that a confirmationToken is mandatory. Annotations are not contradicted.

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

Conciseness4/5

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

Front-loads the core behavior, then the confirmation requirement, then the idempotency note — a logical order with little waste. It is dense but slightly long, and the skipping/cost details are packed into one clause.

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

Completeness4/5

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

For a costly, budget-spending mutation with an output schema present, the description covers the critical operational context: confirmation gating, idempotency, cost, and skip behavior. The gap is a few undocumented parameters (notably queryClusterIds), but no return-value explanation is needed given the output schema.

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

Parameters4/5

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

Schema coverage is low (36%), and the description compensates well for the core parameters: it explains the combinatorial meaning of queryTexts/engines/countries, the 100-combination cap, and that each check spends budget. However queryClusterIds, locale, and organizationId remain undocumented, and checkFrequency semantics are left to the schema.

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

Purpose5/5

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

Opens with a specific verb+resource ('Start tracking queries') and precisely defines what gets created: the cartesian product queryTexts x engines x countries. It is clearly distinguishable from siblings like update_tracked_queries and delete_tracked_queries.

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

Usage Guidelines5/5

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

Gives an explicit precondition workflow: call preview_operation first, show the returned plan/cost to the user, and only call this tool after explicit user agreement. It also states retry guidance for requestId, leaving nothing to inference.

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

delete_clusterDelete a query clusterA
Destructive
Inspect

Delete a query cluster. Its tracked queries are not deleted; they only leave the cluster. Irreversible. Requires a confirmationToken: call preview_operation with tool "delete_cluster" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees.

ParametersJSON Schema
NameRequiredDescriptionDefault
clusterIdYes
projectIdYes
requestIdNo
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe cluster that was deleted
nameYesIts name at the moment it was deleted
deletedYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare destructiveHint=true and readOnlyHint=false, but the description goes further: it explicitly says the action is irreversible, discloses the non-obvious side effect (tracked queries are not deleted, they only leave the cluster), and explains the confirmationToken gating requirement. That is behavioral content the annotations cannot convey.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and its scope, then the irreversibility warning, then the required workflow. No filler and the highest-risk information arrives early.

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

Completeness5/5

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

An output schema exists, so return values need not be described. Combined with complete safety disclosure, the side-effect clarification, and the mandated preview/confirm workflow, an agent has everything required to call this destructive tool correctly.

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

Parameters3/5

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

Schema description coverage is 0% across 5 parameters, so the description must compensate. It meaningfully explains the non-obvious confirmationToken parameter (how to obtain it and from which tool), but organizationId, projectId, clusterId, and requestId remain undocumented. It covers the one parameter that most needs explaining but not the rest.

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

Purpose5/5

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

States a specific verb+resource ("Delete a query cluster") and immediately scopes the blast radius: tracked queries survive and merely leave the cluster. That distinction cleanly separates it from delete_tracked_queries and list_clusters in the sibling set.

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

Usage Guidelines5/5

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

Gives an explicit prerequisite workflow: call preview_operation with tool "delete_cluster" and the same arguments, show the returned plan to the user, and only call this tool after explicit user agreement. This is exactly the when/when-not guidance an agent needs for a destructive operation.

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

delete_competitorDelete a competitorA
Destructive
Inspect

Remove a competitor from a project, together with every mention, search result and shopping result recorded for it. Irreversible. Requires a confirmationToken: call preview_operation with tool "delete_competitor" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
requestIdNo
competitorIdYes
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
brandNamesYes
websiteDomainsYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only flag destructiveHint/readOnlyHint/idempotentHint; the description goes further by naming the exact cascading data loss (mentions, search results, shopping results), declaring the operation irreversible, and describing the human-confirmation gating. That is material context an annotation cannot express.

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

Conciseness5/5

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

Three tight sentences: effect and blast radius first, irreversibility second, required workflow third. No filler, and the most decision-critical information is front-loaded.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the safety/confirmation story is complete. The only gap is that the requestId parameter and the identifier parameters remain undocumented, which an agent may need to disambiguate.

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

Parameters3/5

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

Schema description coverage is 0% across 5 parameters, so the description must compensate. It explains confirmationToken in depth (how to obtain and when to send it), but organizationId, projectId, competitorId and requestId carry no meaning in either place, so the compensation is only partial.

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

Purpose5/5

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

States a precise verb (remove) and resource (competitor from a project) and enumerates the cascade scope: every mention, search result and shopping result. This clearly separates it from sibling deletions such as delete_cluster, delete_tracked_queries and archive_project.

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

Usage Guidelines5/5

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

Gives an explicit precondition and workflow: a confirmationToken is required, obtain it by calling preview_operation with tool "delete_competitor" and the same arguments, show the plan to the user, and only call this tool after explicit user agreement. When-to-use and when-not-to-use are both spelled out.

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

delete_tracked_queriesDelete tracked queriesA
Destructive
Inspect

Delete up to 100 tracked queries, together with their captured answers, matches and metrics history. Irreversible; to stop spending budget without losing history, pause them with update_tracked_queries instead. Requires a confirmationToken: call preview_operation with tool "delete_tracked_queries" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
requestIdNo
organizationIdYes
trackedQueryIdsYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNoAlways present, empty list included: read it rather than inferring success from the status code.
successfulNoThe resources the operation was applied to.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, so the safety profile is partly covered. The description goes beyond that by stating irreversibility, specifying exactly what related data is destroyed, and detailing the confirmationToken requirement with the preview-then-confirm sequence. It does not restate the idempotency or openWorld hints, but adds real operational context.

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

Conciseness5/5

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

Three dense sentences, no filler. The destructive/irreversible nature and the pause alternative are front-loaded before the procedural confirmation requirement, which matches how an agent should reason about the call.

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

Completeness4/5

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

An output schema exists so return values need not be explained, and the description covers the mutation's scope, irreversibility, alternative, and the required precondition. Minor gap: organizationId/projectId/requestId semantics are absent and must be inferred, but nothing blocks a correct call.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the load. It explains confirmationToken semantics (must come from preview_operation with matching tool and arguments) and implies the 100-item cap on trackedQueryIds. organizationId, projectId, and requestId are left unexplained, but the two non-obvious parameters are handled.

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

Purpose5/5

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

States a specific verb (Delete) and resource (tracked queries), plus blast radius (captured answers, matches, metrics history) and a hard cap (up to 100). Clearly distinguishable from update_tracked_queries and delete_cluster among siblings.

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

Usage Guidelines5/5

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

Explicitly names the alternative for a non-destructive path (pause with update_tracked_queries) and the condition that selects it. Also spells out the mandatory confirmation workflow via preview_operation, which is the key routing decision an agent must make.

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

discover_brandsDiscover more brand namesAInspect

Start a background job that finds other names the project's brand and each of its existing competitors go by in AI answers and search results (aliases, product and store names). It does not find new competitors. Poll get_job for the result, show it to the user, and add the chosen names with update_project (the brand) or update_competitor (a competitor, by competitorId), passing the full list including the names already there. shoppingEnabled also looks at Google Shopping; country narrows to one market (ISO 3166-1 alpha-2).

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNo
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes
shoppingEnabledNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobIdYesPass it to get_job. May name a job started by an earlier, equivalent call.
nextStepYes
deduplicatedYesWhether this call joined a job that was already running instead of starting one

TDQS

A4.6/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, openWorldHint=true, so the mutation and non-idempotency profile is partly covered. The description adds that this is an asynchronous background job requiring polling, which the annotations do not convey, and warns that the full list must be passed on update. It stops short of noting rate limits or what happens to concurrent jobs, but adds real value beyond annotations.

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

Conciseness4/5

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

Front-loads the core action and the 'does not find new competitors' exclusion, then layers the workflow and parameter notes. It is dense but nearly every clause carries actionable information. Slightly long, yet no sentence is wasted.

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

Completeness5/5

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

A background mutation tool with an output schema, non-idempotent and open-world semantics is fully described: what it produces, how to retrieve it (get_job), how to apply it, and the scope flags. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema coverage is only 20%, so the description must compensate. It explains shoppingEnabled (looks at Google Shopping) and country (narrows to one market, ISO 3166-1 alpha-2), which the bare schema does not. organizationId and projectId are self-evident and requestId is documented in the schema; the two non-obvious flags are covered.

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

Purpose5/5

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

States a specific verb and resource: starts a background job that finds aliases/product/store names for the brand and existing competitors. It explicitly distinguishes itself from siblings by ruling out new-competitor discovery ('It does not find new competitors') and by naming suggest_brand_names-adjacent scope. An agent can tell exactly what this produces.

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

Usage Guidelines5/5

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

Gives an explicit end-to-end workflow: poll get_job for the result, show the user, then add chosen names with update_project (brand) or update_competitor (by competitorId), passing the full list including existing names. It also states when each option applies (shoppingEnabled, country). This is unusually complete routing.

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

discover_keywordsDiscover search keywordsAInspect

Start a background job that proposes search keywords for a project from a seed (a topic, a product, a URL). excludeQueries leaves out ones already tracked. Poll get_job for the result, review it with the user, then track the chosen ones with create_tracked_queries. Requires an active subscription.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes
countryNo
languageNo
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
excludeQueriesNo
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobIdYesPass it to get_job. May name a job started by an earlier, equivalent call.
nextStepYes
deduplicatedYesWhether this call joined a job that was already running instead of starting one

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare it is a non-read-only, open-world operation, but the description adds crucial behavioral context the annotations cannot: it runs asynchronously as a background job that must be polled via get_job, requires an active subscription, and its results are meant for user review before tracking. The write/approval workflow is well disclosed.

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

Conciseness5/5

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

Three dense sentences, each earning its place: the action, the excludeQueries nuance, the follow-up workflow, and the subscription prerequisite. The core verb is front-loaded.

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

Completeness4/5

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

With an output schema present, the description needn't explain returns, and it covers the async workflow and subscription gate well. The main residual gap is the undocumented country/language/org/project parameters, but the 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.

Parameters3/5

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

Schema coverage is only 14% (just requestId), so the description must carry more burden. It does clarify the 'input' seed semantics and that excludeQueries leaves out already-tracked queries, but country, language, organizationId, and projectId receive no explanation anywhere. Partial compensation for a low-coverage schema.

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

Purpose5/5

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

The description gives a specific verb and resource ('Start a background job that proposes search keywords for a project') and clarifies the input seed types (topic, product, URL). It is clearly distinguishable from siblings like discover_brands and discover_prompts without opening any schema.

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

Usage Guidelines4/5

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

It lays out the full workflow: poll get_job for the result, review with the user, then track via create_tracked_queries, plus the prerequisite 'Requires an active subscription.' It does not explicitly contrast when to prefer this over discover_brands/discover_prompts, so it stops short of full when-not guidance.

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

discover_promptsDiscover AI promptsAInspect

Start a background job that proposes the questions people ask AI assistants about a topic in one country - the prompts worth tracking on AI engines. excludeQueries leaves out ones already tracked. Poll get_job for the result, review it with the user, then track the chosen ones with create_tracked_queries. Requires an active subscription.

ParametersJSON Schema
NameRequiredDescriptionDefault
inputYes
countryYes
languageNo
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
excludeQueriesNo
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobIdYesPass it to get_job. May name a job started by an earlier, equivalent call.
nextStepYes
deduplicatedYesWhether this call joined a job that was already running instead of starting one

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the write/open-world profile is covered. The description adds that the work is asynchronous (background job) and requires an active subscription, which are genuinely useful behavioral facts. It stops short of detailing job timing or failure behavior, so a 4 is appropriate.

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

Conciseness4/5

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

Front-loads the purpose, then the workflow and the subscription requirement in economical sentences. Slightly dense in the middle sentence but every clause carries actionable meaning.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and the async workflow is covered. However, for a seven-parameter tool with very low schema coverage, the description omits meaning for most inputs, leaving the definition only partially complete.

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

Parameters2/5

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

Schema description coverage is only 14%, so the description must compensate, yet it only explains excludeQueries. The other six parameters (input, country, language, projectId, organizationId, requestId) get no semantic explanation in either field, leaving most of the interface undocumented.

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

Purpose5/5

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

States a specific verb and resource: 'Start a background job that proposes the questions people ask AI assistants about a topic in one country.' It clearly distinguishes itself from the sibling discover_brands and discover_keywords by naming the artifact it produces (prompts/questions).

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

Usage Guidelines5/5

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

Provides an explicit workflow and alternative routing: poll get_job for results, review with the user, then use create_tracked_queries, and it explains that excludeQueries drops already-tracked ones. It also states the prerequisite (active subscription). Nothing is left to inference.

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

get_available_filtersGet available project filtersA
Read-onlyIdempotent
Inspect

Discover the engines, countries, keyword clusters and competitors configured on a project so subsequent metric tools can be called with valid filter values. Engines and countries are returned as {code, label} (e.g. {"code":"chatgpt","label":"ChatGPT"}, {"code":"US","label":"United States"}); clusters and competitors as {id, name}. Always pass the "code"/"id" (never the label/name) to the other tools' engines / countries / queryClusterIds / competitorId(s) parameters. Call this before filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
enginesYes
clustersYes
countriesYes
competitorsYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely useful behavioral context beyond that: the exact return shapes ({code,label} vs {id,name}) and the hard rule to pass code/id and never label/name.

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

Conciseness4/5

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

Front-loads the purpose, then the return shapes, then the critical code-vs-label rule. Dense but every sentence carries information; the example literals add slight length without much new meaning.

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

Completeness4/5

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

An output schema exists, so the description didn't need to describe return values, yet it helpfully pins down the exact fields and the code/id convention. The remaining gap is input parameter meaning, which no other field covers.

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

Parameters2/5

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

Schema description coverage is 0% for two required parameters, and the description never explains what organizationId or projectId are, their format, or where to obtain them. It compensates only on the output side, leaving the inputs undocumented in both schema and description.

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

Purpose5/5

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

States a specific verb (discover) and a precise resource set (engines, countries, keyword clusters, competitors configured on a project), which cleanly separates it from siblings like list_clusters or list_untracked_competitors that each cover only a subset.

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

Usage Guidelines4/5

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

"Call this before filtering" plus the statement that subsequent metric tools need these values gives clear usage context. It doesn't name a specific alternative tool or a when-not-to-use case, so it falls 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_cited_sourcesCited domains and pagesA
Read-onlyIdempotent
Inspect

The domains (groupBy=domain) or pages (groupBy=page) most cited across a project's AI answers in a date window — the sources the answer engines drew on. Per source: how many times it was cited, how many distinct answers and tracked queries it appeared in, and its average rank within the citation lists. The list is UNFILTERED by ownership: it includes the brand's, competitors' and third-party sources. Only AI answer engines (chatgpt, claude, perplexity, google_ai_overview, google_ai_mode) produce citations. Dates must fall within the data retention window. Answers questions like "which websites and pages does the AI cite or quote for me versus competitors".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dateToYes
offsetNo
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (only AI engines carry citations)
groupByNo"domain" to roll up by host, "page" to roll up by exact URLdomain
dateFromYes
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
sourcesYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely useful behavior beyond the schema: the list is UNFILTERED by ownership (includes competitors and third parties) and only AI engines carry citations. It also describes the returned per-source metrics, which is extra context.

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

Conciseness4/5

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

Dense and front-loaded: the groupBy distinction and ownership caveat come early, followed by return metrics and constraints. Slightly long, but nearly every clause carries information an agent needs; no filler sentences.

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

Completeness4/5

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

With an output schema present, return values needn't be explained, yet the description still outlines the per-source metrics, and it adds the retention-window and AI-engine constraints. Combined with the annotations, an agent has enough to call it correctly; minor gaps remain around pagination (limit/offset).

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

Parameters4/5

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

Schema description coverage is only 25%, so the description must compensate. It does explain the enum that matters most — groupBy=domain vs page (host vs exact URL) — and constrains engines to AI-only engines. It leaves limit/offset/defaults unaddressed, but those are intuitive and low-risk.

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

Purpose5/5

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

States a specific verb (get/list) and resource (cited domains/pages) with scope (most cited across a project's AI answers in a date window). The distinction between groupBy=domain and groupBy=page is front-loaded, so an agent can tell this apart from sibling analytics tools immediately.

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

Usage Guidelines4/5

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

Gives clear context: the date window must fall within the retention window, only AI answer engines produce citations, and it answers 'which sites/pages does the AI cite for me vs competitors'. However, it names no alternative sibling (e.g. list_ai_responses or get_mention_mix) and offers no explicit when-not-to-use guidance.

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

get_cluster_breakdownRank tracking by keyword clusterA
Read-onlyIdempotent
Inspect

Rank-tracking metrics broken down per keyword cluster for a project over a date window: one row per cluster with its positions, share of voice and sentiment. Dates must fall within the data retention window. Answers questions like "which keyword clusters are strongest or weakest" or "how does my niche compare to my generic queries".

ParametersJSON Schema
NameRequiredDescriptionDefault
dateToYes
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
organizationIdYes
queryClusterIdsNorestrict to these keyword clusters
includeUngroupedQueriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
dataDirtySinceNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral context beyond that: the aggregation grain (one row per cluster) and an error-relevant constraint (dates must fall inside the data retention window), which an agent needs to avoid a failed call.

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

Conciseness4/5

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

Two sentences, front-loaded with what the tool returns before describing use cases. The example questions add value rather than filler, though the sentence is a bit dense with enumerated fields.

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

Completeness3/5

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

An output schema exists, so return values need not be re-explained, and the tool's aggregation and date constraint are covered. However, half the parameters remain semantically undefined in both schema and description, which leaves gaps for an 8-parameter tool.

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

Parameters2/5

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

Schema description coverage is only 38% across 8 parameters. The description adds only the date-window/retention constraint; it says nothing about organizationId, projectId, dateFrom/dateTo formats, or includeUngroupedQueries, which are undocumented in the schema too. It does not compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb (rank-tracking metrics), resource (keyword clusters), scope (per project, date window), and the row shape (positions, share of voice, sentiment). This clearly distinguishes it from siblings like get_sentiment_breakdown, get_share_of_voice_formula, and list_clusters.

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

Usage Guidelines4/5

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

Gives concrete usage context via example questions ('which clusters are strongest or weakest', 'niche vs generic queries') and a prerequisite (dates must fall within the retention window). It does not explicitly name which sibling to use instead when the agent wants per-query or time-series detail, so it falls short of full routing guidance.

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

get_competitor_cooccurrenceCompetitor co-occurrence (head-to-head)A
Read-onlyIdempotent
Inspect

For the AI answers where the brand and a competitor are BOTH mentioned, compares who is named higher. One row per tracked competitor: how many answers they co-appear in, how often the brand out-ranks / loses to / ties them (by best mention position), the win rate, the average positions, and one representative shared query. Optionally focus a single competitor via competitorId. Tracked competitors only. Dates must fall within the data retention window. Answers questions like "who wins when we both appear", "do I outrank competitor X", "who is mentioned first".

ParametersJSON Schema
NameRequiredDescriptionDefault
dateToYes
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions)
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
competitorIdNooptional competitor UUID to focus on a single rival; competitor UUIDs are listed by get_available_filters (competitors[].id)
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
competitorsYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the description's job is added context—which it delivers by spelling out the returned row contents (co-appearance counts, win/loss/tie by best position, win rate, average positions, a representative query) and the retention-window and tracked-competitor constraints. It doesn't discuss pagination or result sizing, keeping it from a 5.

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

Conciseness4/5

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

Core comparison is front-loaded in the first sentence and the output shape follows immediately. Slightly dense and the trailing example-question list is somewhat redundant with the lead sentence, but nothing is wasted to the point of harm.

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

Completeness4/5

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

With an output schema present, the description needn't restate return structure, yet it usefully previews the per-competitor row fields. Constraints (tracked-only, retention window) and the optional focus param are covered, leaving only minor gaps around engine/country filtering semantics.

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

Parameters3/5

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

Schema coverage is only 43%, so the description must compensate, and it does explain competitorId (optional single-rival focus, UUID sourced from get_available_filters) and the date retention constraint. However it adds little for engines and countries beyond what the schema already documents, leaving part of the low-coverage surface unexplained.

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

Purpose5/5

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

States a specific verb (compares who is named higher) and resource (co-occurring AI answers between brand and competitor), and distinguishes itself from sibling analytics tools by defining the exact head-to-head comparison. An agent can tell this apart from get_share_of_voice_formula or get_mention_mix without opening either schema.

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

Usage Guidelines4/5

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

Gives clear operational context: 'Tracked competitors only', dates must be inside the retention window, and competitorId optionally narrows to one rival. It also lists triggering questions ('who wins when we both appear'). It stops short of naming an explicit alternative or exclusion condition, so it isn't a full 5.

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

get_jobGet a background jobA
Read-onlyIdempotent
Inspect

The status and, once completed, the result of a background job started by discover_brands, suggest_brand_names, discover_keywords, discover_prompts or start_auto_clustering. Poll it every few seconds until status is "completed" or "failed"; do not start the job again while it is pending or running.

ParametersJSON Schema
NameRequiredDescriptionDefault
jobIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYesWhat the job produces, and therefore the shape of `result`
jobIdYes
resultNoThe job output, shaped by `type`. Null while the job is still in flight and for a job that failed: it means the result is not known, never that the job produced nothing.
statusYesA job in `pending`, `running` or `awaiting_retry` is still in flight; `completed` and `failed` are terminal.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so safety is covered. The description adds genuinely non-structured behavior: the terminal states to poll for, the polling interval, and that the result only appears once completed. That is strong added context, though it does not discuss failure payloads or error handling.

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

Conciseness5/5

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

Two sentences, zero filler: identity plus origin tools first, then the actionable polling protocol. Every clause earns its place and the critical timing guidance is front-loaded.

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

Completeness5/5

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

An output schema exists, so return-value detail is not the description's job, and the annotations cover the safety profile. What remains — what the tool returns conceptually, which jobs it serves, and how to poll them — is fully covered.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it only partially does — it implies jobId originates from one of the listed starter tools but never describes the jobId/organizationId format or scoping. The parameter names are largely self-explanatory, so a minimum-viable 3 is appropriate.

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

Purpose5/5

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

Names a specific verb+resource ('status and ... result of a background job') and enumerates the exact producer tools (discover_brands, suggest_brand_names, discover_keywords, discover_prompts, start_auto_clustering) that create such jobs. An agent can distinguish this poller from all other get_* siblings without opening a schema.

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

Usage Guidelines5/5

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

Explicit when-to-use cadence ('poll it every few seconds until status is "completed" or "failed"') plus an explicit when-not instruction ('do not start the job again while it is pending or running'). Both the loop condition and the anti-pattern are stated, leaving nothing to inference.

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

get_mencoro_guideMencoro guideA
Read-onlyIdempotent
Inspect

Answer questions about Mencoro itself from its public guide: what it tracks, how a check runs, what counts as a mention, how Coverage, Favorability, share of voice, positions and stability are calculated, how checks, plans and frequencies work, reliability and limits, how to use this MCP server (permissions, confirmations), how to analyse results and find what to improve, pairing with Ahrefs, Semrush, Search Console or Google Analytics MCP servers, and the REST API. Call it without a topic for the index, then with the topic that answers the question. No account data; works without signing in.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNoThe topic to read; omit it, or pass "index", for the list of topics.

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleYes
topicYesThe topic answered, or "index" for the list of topics
sourceYesThe public page this topic is written from
topicsYesEvery topic, on the index only; empty otherwise
contentYesThe guide text, in Markdown
relatedYesOther topics worth reading next
summaryYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the content is public documentation, no account data is touched, and no sign-in is required — which explains why it can be called before authentication.

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

Conciseness3/5

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

The opening clause is well front-loaded, but the following sentence is a sprawling enumeration of ~16 content areas that largely restates the parameter enum, adding bulk without new decision-relevant information. It would be tighter as a short scope statement plus reliance on the enum for the topic list.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description covers purpose, invocation pattern, scope and authentication posture. For a single-optional-enum read tool this is nearly complete; only the redundancy in the topic enumeration keeps it from being fully efficient.

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

Parameters4/5

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

Schema covers the single parameter at 100% and carries the full enum, and the description reinforces it by stating that omitting the topic (or passing 'index') yields the topic list. That clarifies the null/default behavior beyond the bare schema, though it does not add format or resolution guidance.

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

Purpose5/5

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

States a specific verb and resource ('Answer questions about Mencoro itself from its public guide') and enumerates the domains covered, so an agent can tell this documentation/guide tool apart from data tools like get_metric_glossary or get_share_of_voice_formula. It also pins down scope with 'No account data; works without signing in.'

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

Usage Guidelines5/5

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

Gives an explicit two-step procedure ('Call it without a topic for the index, then with the topic that answers the question') and an explicit boundary condition ('No account data'), which steers the agent to account-scoped siblings when guide content is not what is wanted. Nothing about when to invoke it is left to inference.

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

get_mention_mixAI mention mix (type/tone/qualifier)A
Read-onlyIdempotent
Inspect

The project brand's own AI text-mention counts over a date window grouped by type, tone and qualifier; competitors (tracked or untracked) and unrelated brands are excluded. Counts are raw per-pass rows and leave out cited links, so they show mention composition, not the exact share-of-voice inputs (share of voice averages each check over its passes and also weights links). Use to understand mention composition. For the positive/neutral/negative sentiment split use get_sentiment_breakdown; to read the actual mention texts use get_mention_samples. Dates must fall within the data retention window. Answers questions like "am I recommended or just listed" or "break my mentions down by type".

ParametersJSON Schema
NameRequiredDescriptionDefault
dateToYes
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
byToneYes
byTypeYes
byQualifierYes

TDQS

A4.8/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing that counts are raw per-pass rows, exclude cited links, and therefore differ from share-of-voice inputs (which average each check over passes and weight links). That is exactly the kind of non-obvious behavioral caveat annotations cannot express.

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

Conciseness4/5

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

Front-loads scope and the critical raw-count caveat, then routes to alternatives, then examples. A bit dense but every sentence carries routing or caveat value; slightly long for a 5.

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

Completeness5/5

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

An output schema exists so return values need not be explained. The description still supplies the calculation caveat, scope exclusions, the retention constraint, sibling routing, and example questions – complete for a read-only aggregation tool.

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

Parameters4/5

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

Schema description coverage is 33%, so the description must compensate. It adds the date retention-window constraint (applies to dateFrom/dateTo) and clarifies that grouping is fixed to type/tone/qualifier. It does not add semantics for engines or countries beyond what the schema already documents, so not a 5.

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

Purpose5/5

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

Specific verb+resource+grouping: the project brand's own AI text-mention counts over a date window grouped by type, tone, and qualifier, with explicit scope (own brand only; competitors and unrelated brands excluded). It distinguishes itself from get_sentiment_breakdown and get_mention_samples by naming both siblings.

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

Usage Guidelines5/5

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

Explicit routing: use this for mention composition, use get_sentiment_breakdown for the positive/neutral/negative split, use get_mention_samples for actual texts. Also gives a retention-window constraint and example questions. Nothing left to inference.

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

get_mention_samplesSample AI mention textsA
Read-onlyIdempotent
Inspect

Paginated sample of the raw AI mention texts themselves, for qualitative review and verifying sentiment labels. Use to READ individual mentions. For the aggregate sentiment split use get_sentiment_breakdown; for the brand's own mention counts by type, tone and qualifier use get_mention_mix. Filterable by engine, sentiment, mention type and competitor. Dates must fall within the data retention window. limit is 1-50 (default 20). Answers questions like "show or export the actual AI mention texts" for a query.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dateToYes
offsetNo
sortByNorecent
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
sentimentNo
mentionTypeNo
competitorIdNoUUID of a single competitor to filter to; competitor UUIDs are listed by get_available_filters (competitors[].id). Omit to include all competitors
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
samplesYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive behavior, so the safety profile is covered. The description still adds real value beyond them: the data retention window constraint on dates and the limit range (1-50, default 20), which annotations cannot express.

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

Conciseness4/5

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

Front-loaded with what the tool returns, then alternatives, then filters. Dense but mostly earns its place; the trailing 'Answers questions like...' sentence is mildly redundant with the opening statement.

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

Completeness4/5

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

Output schema exists so return values need no explanation, and the retention-window and pagination constraints are disclosed. Only gap is the absence of guidance on sortBy and offset semantics for a 12-parameter tool, which is minor given the structured coverage.

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

Parameters3/5

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

Schema description coverage is only 25% across 12 parameters, so the description must compensate. It does name the filterable dimensions (engine, sentiment, mention type, competitor) and the limit bounds, but it omits any meaning for sortBy, offset, and countries (which is in fact a filter too). Partial compensation, not full.

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

Purpose5/5

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

States a specific verb and resource: a paginated sample of raw AI mention texts for qualitative review and sentiment-label verification. It explicitly names and distinguishes itself from siblings get_sentiment_breakdown and get_mention_mix.

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

Usage Guidelines5/5

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

Give explicit routing: 'Use to READ individual mentions', then names the aggregate alternative (get_sentiment_breakdown) and the count-by-type/tone alternative (get_mention_mix). The when-to-use decision is fully resolved without opening sibling schemas.

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

get_metric_glossaryMetric glossaryA
Read-onlyIdempotent
Inspect

Map a plain-language or unfamiliar request to the right Mencoro metric and tool. Returns each metric with its everyday synonyms, unit, value range, whether higher or lower is better, the tool that serves it, and example questions. Call this first when a request is vague, non-technical, phrased in another language, or uses wording that does not match a tool name. Static reference; no project data.

ParametersJSON Schema
NameRequiredDescriptionDefault
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
metricsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover readOnly, idempotent, non-destructive and closed-world, so safety is settled. The description adds genuinely new context: it is a 'static reference; no project data,' telling the agent the result is independent of project state and safe to call speculatively — a meaningful behavioral disclosure.

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

Conciseness5/5

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

Three tight sentences: what it does, what it returns, when to call it. The routing instruction is front-loaded and nothing is redundant.

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

Completeness5/5

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

An output schema exists, yet the description still sketches the return shape (synonyms, unit, range, direction, serving tool, examples) and states the static nature. Nothing an agent needs to decide to call it is missing.

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

Parameters3/5

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

Schema description coverage is 0% and the single required parameter, organizationId, is never explained in the description. With only one parameter and a rich output schema, the omission is minor but real; baseline 3 is appropriate.

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

Purpose5/5

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

The description states a specific verb (Map) and resource (plain-language request → Mencoro metric and tool), plus it enumerates the fields returned. This clearly separates it from data-querying siblings such as get_organization_overview or get_cited_sources, which return project data rather than a static mapping.

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

Usage Guidelines4/5

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

It gives an explicit trigger list: call first when a request is vague, non-technical, in another language, or doesn't match a tool name — which implicitly defines the when-not case. It stops short of naming a sibling as the alternative (e.g. get_mencoro_guide or get_available_filters), so it is strong but not fully explicit about alternatives.

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

get_organizationGet an organizationA
Read-onlyIdempotent
Inspect

An organization's profile, its status, the caller's own role in it, and how many active members, projects and pending invitations it has. Use list_projects first to find the organizationId.

ParametersJSON Schema
NameRequiredDescriptionDefault
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
statsYes
organizationYesAn organization the caller is a member of

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and non-destructive, so the safety profile is covered. The description adds the returned fields' composition, but since an output schema exists, that is largely redundant and it discloses no auth requirements, failures, or scoping behavior.

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

Conciseness4/5

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

Two tight sentences, front-loaded with the content summary and ending with the actionable prerequisite hint. No filler, though the first clause is a fragment rather than a stated verb.

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

Completeness4/5

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

With a full output schema and read-only annotations, the description only needs to frame the purpose and the ID prerequisite, both of which it does. The missing piece is differentiation from get_organization_overview, a plausible sibling collision.

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

Parameters3/5

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

Schema coverage is 0% for the single organizationId parameter. The description partially compensates by telling the caller where to obtain the ID (via list_projects), which is useful, but it never describes the ID's format or source semantics beyond that hint.

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

Purpose4/5

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

The description names the resource (organization) and enumerates exactly what is returned: profile, status, caller's role, and active member/project/pending-invitation counts. This is a clear read purpose, though it never states a verb and does not distinguish itself from the sibling get_organization_overview.

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

Usage Guidelines3/5

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

It gives one concrete prerequisite workflow — 'Use list_projects first to find the organizationId' — which is genuinely actionable. It does not, however, say when to prefer this over the sibling get_organization_overview or list_members/list_projects, so routing guidance is only partial.

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

get_organization_overviewOrganization brand overviewA
Read-onlyIdempotent
Inspect

Latest-snapshot rank-health board across all active projects in an organization: one row per brand (share of voice, mention rate, average mention position, positivity, tracked-query count) ranked by share of voice, plus an organization-level aggregate. This is a current-state snapshot and takes NO date window; for date-ranged comparison, call the per-project tools (e.g. get_project_rank_tracking_stats) for each project id returned here. Answers questions like "give me a company-wide summary of share of voice and sentiment across all my projects".

ParametersJSON Schema
NameRequiredDescriptionDefault
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectsYes
aggregateYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description adds the key behavioral constraint that it takes NO date window and is a current-state snapshot, plus it discloses the return shape (one row per brand + org aggregate). It does not mention pagination or result limits, but with annotations and an output schema present, this is a meaningful add.

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

Conciseness4/5

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

Front-loaded with the resource and metric list, then scoping constraint, then the alternative-routing sentence. Dense but every sentence earns its place; slightly long metric enumeration keeps it from a 5.

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

Completeness5/5

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

Given an output schema exists (so return shape need not be re-explained) and a single obvious required param, the description covers purpose, scope, metric semantics, and alternative routing. An agent has everything needed to select and invoke it correctly.

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

Parameters3/5

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

Only one parameter (organizationId) at 0% schema description coverage, so the schema says nothing about it. The description does not explain what organizationId accepts (format, source), but for a single obvious required id the gap is minor. Baseline 3 for a low-coverage single-param tool where the description adds no syntax.

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

Purpose5/5

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

The description names a specific resource (organization-wide brand rank-health board), enumerates the exact metrics returned (share of voice, mention rate, average mention position, positivity, tracked-query count), and states the row granularity (one row per brand). It distinguishes itself from siblings by naming get_project_rank_tracking_stats as the date-ranged alternative.

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

Usage Guidelines5/5

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

Explicit when-to-use (company-wide snapshot, no date window) and when-not (date-ranged comparison), naming the alternative tool and the workflow (call per-project tools for each project id returned here). It even provides a routing example question.

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

get_projectGet a projectB
Read-onlyIdempotent
Inspect

A project's name and status, the website domains and brand names it is monitored for, and all of its competitors with their ids (update_competitor and delete_competitor take them).

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
statusYes
createdAtYes
brandNamesYesBrand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet.
competitorsYesCompetitors this project is measured against. Empty when none are configured.
organizationIdYes
websiteDomainsYesDomains the project is monitored for. Empty when the project has no brand monitoring profile yet.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered by structured data. The description adds meaningful context about the shape of the returned entity, but says nothing about failure modes (e.g., project not found, org access) or data freshness.

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

Conciseness4/5

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

A single dense sentence with no filler, and the most important content (what you get back) is front-loaded. It is slightly list-heavy but every clause carries information.

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

Completeness3/5

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

With an output schema present, the description's return-value enumeration is arguably redundant, and the key remaining gap – the two undocumented required inputs – is left unaddressed. For a simple two-parameter read tool the annotations plus output schema carry most of the load, so this is adequate but not complete.

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

Parameters2/5

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

Schema description coverage is 0% and there are two required parameters (organizationId, projectId), yet the description never mentions them or clarifies their relationship. The only 'id' discussion concerns competitor ids in the output, not the inputs, so the description does not compensate for the coverage gap.

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

Purpose4/5

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

The description names the resource and enumerates exactly what is returned: name, status, monitored domains, brand names, and competitors with their ids. That is far more specific than a bare 'get a project', though it never explicitly states the retrieval is keyed by organizationId/projectId or contrasts itself with list_projects/get_organization.

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

Usage Guidelines3/5

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

The only usage signal is incidental: 'competitors with their ids (update_competitor and delete_competitor take them)', which usefully chains this read to downstream mutations. There is no guidance on when to call get_project versus list_projects or get_organization, and no prerequisites stated.

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

get_project_rank_tracking_statsProject rank-tracking overviewA
Read-onlyIdempotent
Inspect

Aggregated rank-tracking summary for a project over a date window: average positions, trends, share of voice (own and per competitor), sentiment split, mention/SERP/shopping rates, and position-distribution buckets. This is the project overview; prefer it before the per-cluster or time-series tools. Dates must fall within the data retention window. Answers questions like "how visible is my brand", "am I ahead of competitors", "how positive is my coverage".

ParametersJSON Schema
NameRequiredDescriptionDefault
dateToYes
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
organizationIdYes
queryClusterIdsNorestrict to these keyword clusters
includeUngroupedQueriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
serpRateNoPercentage 0-100 of traditional-search checks (one per tracked query x engine x UTC day) in the period in which the brand ranked; higher is better.
trendLinkNoSigned improvement in position vs the previous period (previous minus current); positive = improved (rank moved up).
trendSerpNoSigned improvement in position vs the previous period (previous minus current); positive = improved (rank moved up).
mentionRateNoPercentage 0-100 of AI checks (one per tracked query x engine x UTC day) in the period that mentioned the brand, each check counted as the share of its passes that did; higher is better.
mentionCountNo
shareOfVoiceNo0-100 percentage share of weighted AI mentions vs all tracked brands; higher is better.
shoppingRateNoPercentage 0-100 of shopping checks (one per tracked query x engine x UTC day) in the period in which the brand ranked; higher is better.
trendMentionNoSigned improvement in position vs the previous period (previous minus current); positive = improved (rank moved up).
trendSerpRateNoSigned change in the rate vs the previous period; positive = improved.
trendShoppingNoSigned improvement in position vs the previous period (previous minus current); positive = improved (rank moved up).
trendStabilityNo
avgLinkPositionNo1-based rank; LOWER is better.
avgSerpPositionNo1-based rank; LOWER is better.
positivityIndexNo0-100 sentiment score; higher is better.
trendPositivityNoSigned change in the positivity index vs the previous period; positive = improved.
sentimentNeutralNo
trendMentionRateNoSigned change in the rate vs the previous period; positive = improved.
mentionTypeCountsNo
sentimentNegativeNo
sentimentPositiveNo
trendShareOfVoiceNoSigned change in share of voice vs the previous period; positive = improved.
trendShoppingRateNoSigned change in the rate vs the previous period; positive = improved.
avgMentionPositionNo1-based rank; LOWER is better.
trendSerpStabilityNo
aiTrackedQueryCountNo
avgShoppingPositionNo1-based rank; LOWER is better.
aiQueriesWithMentionNo
serpPositionStabilityNo
serpQueriesWithResultNo
serpTrackedQueryCountNo
trendShoppingStabilityNo
mentionPositionStabilityNo
serpPositionDistributionNo
shoppingPositionStabilityNo
shoppingQueriesWithResultNo
shoppingTrackedQueryCountNo
mentionPositionDistributionNo
shoppingPositionDistributionNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond the annotations: the data-retention constraint on dates and the scope of the aggregated return content. It says nothing about permissions or rate limits, so not a 5.

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

Conciseness5/5

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

Front-loads the resource and its output set, then immediately gives routing guidance and a hard constraint. Every sentence carries information; even the sample-questions line earns its place by clarifying the analytical intent.

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

Completeness4/5

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

With an output schema present, return values need not be explained, yet the description still summarizes them helpfully. Purpose, routing and the retention constraint are all covered; the main gap is parameter-level detail, which is only partly mitigated by the schema.

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

Parameters3/5

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

Schema description coverage is only 38%; engines, countries and queryClusterIds are documented in-schema, while projectId, organizationId, dateFrom/dateTo and includeUngroupedQueries are bare. The description adds the 'date window' framing and the retention-window constraint that governs the date params, but does not compensate for the undocumented identity and ungrouped-query parameters.

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

Purpose5/5

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

Names a specific verb+resource ('Aggregated rank-tracking summary for a project') and enumerates the concrete outputs (average positions, share of voice, sentiment split, mention/SERP/shopping rates, position-distribution buckets). It explicitly positions itself as the project overview, distinguishing it from the per-cluster and time-series siblings.

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

Usage Guidelines4/5

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

Explicitly says 'prefer it before the per-cluster or time-series tools', which routes the agent relative to get_cluster_breakdown and get_rank_tracking_time_series, and the sample questions clarify intent. It stops short of stating when NOT to use this tool (e.g. when a drill-down is required instead), so it is strong context without full when/when-not framing.

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

get_query_moversBiggest tracked-query moversA
Read-onlyIdempotent
Inspect

Ranks a project's tracked queries by how much a metric changed between the given window and the immediately preceding window of equal length — the biggest gainers and losers. Each row is one tracked query (a single engine + country) with its current position/share/sentiment and the signed trend delta (positive = improved). Sort by one of the trend keys; sortOrder desc = top gainers, asc = top losers. Dates must fall within the data retention window. Answers questions like "which queries moved the most" or "my biggest gains and drops versus last period".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dateToYes
offsetNo
sortByNowhich trend delta to rank bytrend_share_of_voice
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
sortOrderNodesc for top gainers, asc for top losersdesc
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
rowsYes
totalYes
dataDirtySinceNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds genuinely useful behavior: the delta is computed against the immediately preceding equal-length window, dates must fall within the data retention window, and each row carries current position/share/sentiment plus a signed delta. It does not mention pagination behavior or result size caps, which is the only notable gap.

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

Conciseness4/5

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

Front-loads the ranking definition before the row shape and sort mechanics, and each sentence adds information (comparison window, row granularity, sort semantics, retention constraint, example questions). It runs long and slightly restates the gainers/losers idea, but there is no filler sentence.

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

Completeness4/5

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

For a 10-parameter read tool with an output schema and full annotation coverage, the description supplies the comparison mechanics, sort semantics, retention constraint, and question routing — enough to call it correctly. The residual gap is undocumented pagination identifiers (limit/offset), which the schema defaults partly cover.

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

Parameters3/5

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

Schema description coverage is only 40% (10 params), so the description carries more burden than usual. It does explain the two tricky params well — sortBy picks which trend delta to rank by, and sortOrder desc = gainers / asc = losers — and clarifies that dates are bounded by retention. But limit, offset, organizationId, projectId, and the date params receive no semantics anywhere, leaving a real coverage gap.

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

Purpose5/5

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

States a specific verb and resource — ranks a project's tracked queries by metric change between adjacent equal-length windows — and defines the row granularity (one engine + country per tracked query). An agent can distinguish this from the sibling time-series tools (get_tracked_query_time_series, get_rank_tracking_time_series) because it is a cross-window comparison, not a series. The sign convention (positive = improved) removes ambiguity about what a 'mover' is.

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

Usage Guidelines4/5

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

Gives clear triggering context with example questions ('which queries moved the most', 'my biggest gains and drops versus last period'), which tells the agent when this tool fits. It does not, however, explicitly name an alternative or state when not to use it versus the time-series or search_tracked_queries siblings. Clear usage context without exclusions.

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

get_rank_tracking_time_seriesRank-tracking time seriesA
Read-onlyIdempotent
Inspect

Time series of rank-tracking metrics for a project across a date window, bucketed by granularity (daily, weekly or monthly). Prefer weekly or monthly for long windows to keep the response compact. Optionally includes per-competitor lines. Dates must fall within the data retention window. Answers questions like "what changed in my AI visibility" or "show my share-of-voice trend split by engine".

ParametersJSON Schema
NameRequiredDescriptionDefault
dateToYes
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
granularityNodaily
competitorIdsNoUUIDs of competitors to add as extra series; competitor UUIDs are listed by get_available_filters (competitors[].id)
organizationIdYes
queryClusterIdsNorestrict to these keyword clusters
includeUngroupedQueriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointsYes
dataDirtySinceNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: a data retention window constraint on dates, the response-size tradeoff tied to granularity, and the optional per-competitor lines.

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

Conciseness4/5

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

Three front-loaded sentences with no padding: the core purpose leads, followed by granularity advice and example questions. Efficient, though the example question list borders on decorative.

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

Completeness3/5

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

With an output schema present, return values need no explanation, and the retention window plus granularity advice cover the main pitfalls. Still, for a 10-parameter tool at 40% schema coverage, the absence of any mention of countries, clusters or ungrouped-query semantics leaves real gaps.

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

Parameters3/5

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

Schema description coverage is only 40%, so the description must compensate, and it partially does by explaining granularity, the date window, competitor series, and engine splitting. It remains silent on countries, queryClusterIds, includeUngroupedQueries and the required org/project identifiers, leaving half the parameters to raw schema inference.

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

Purpose4/5

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

States a specific verb+resource: a time series of rank-tracking metrics scoped to a project and bucketed by granularity. This clearly separates it from the per-query sibling get_tracked_query_time_series, though it never names that sibling explicitly, so the differentiation is inferred rather than stated.

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

Usage Guidelines3/5

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

Offers useful guidance on granularity ('prefer weekly or monthly for long windows') and frames use cases ('what changed in my AI visibility', 'share-of-voice trend split by engine'). However, it gives no explicit when-to-use/when-not rules against siblings like get_project_rank_tracking_stats or get_tracked_query_time_series.

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

get_sentiment_breakdownAI mention sentiment breakdownA
Read-onlyIdempotent
Inspect

Positive/neutral/negative sentiment split of the brand's AI mentions over a date window, per AI engine and per competitor. Use for tone/sentiment questions. For the brand's own mention counts by type, tone and qualifier use get_mention_mix; to read the actual mention texts use get_mention_samples. Dates must fall within the data retention window. Answers questions like "is anything negative being said about my brand" or "how positive is my coverage".

ParametersJSON Schema
NameRequiredDescriptionDefault
dateToYes
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
dateFromYes
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
organizationIdYes
queryClusterIdsNorestrict to these keyword clusters
includeUngroupedQueriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
perEngineYes
perCompetitorYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds a genuinely useful behavioral constraint: dates must fall within the data retention window. It also discloses granularity (per engine, per competitor), though it says nothing about pagination or result size.

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

Conciseness4/5

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

Front-loaded with the core capability, then routing, then constraints. Slightly padded by the two example questions that restate the tone/sentiment guidance, but overall tight and purposeful.

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

Completeness3/5

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

An output schema exists so return values need no explanation, and annotations cover safety. However, for an 8-parameter tool with 38% schema coverage, several parameters (cluster IDs, ungrouped inclusion, countries) are never addressed, leaving gaps an agent must guess at.

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

Parameters2/5

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

Schema coverage is only 38%, so the description must compensate, and it largely does not. It implies date-window and engine/competitor scoping but never explains queryClusterIds, includeUngroupedQueries, or how countries interact with the breakdown. The undocumented parameters remain opaque.

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

Purpose5/5

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

States a specific verb+resource: positive/neutral/negative sentiment split of AI mentions, scoped by date window, AI engine and competitor. It explicitly distinguishes itself from get_mention_mix and get_mention_samples, so an agent can route without opening schemas.

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

Usage Guidelines5/5

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

Gives explicit when-to-use (tone/sentiment questions) plus two named alternatives with the conditions that select them. Example questions ('is anything negative being said', 'how positive is my coverage') anchor the intent concretely.

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

get_share_of_voice_formulaShare-of-voice formula constantsB
Read-onlyIdempotent
Inspect

The constants behind the share-of-voice score: per-mention-type base weights and tone/qualifier multipliers. Use this to explain how the share-of-voice metric is derived. Global (not project-specific), but scoped to a project you can access.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
directMultiplierYes
mentionTypeWeightsYes
sentimentMultipliersYes
conditionalMultiplierYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds a genuine behavioral trait - the formula is global rather than project-specific - though the follow-on "scoped to a project you can access" is slightly muddled and not explained further.

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

Conciseness4/5

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

Three short sentences, front-loaded with the payload content before the usage hint. No filler, though the final scope sentence is the least clear and could be tightened.

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

Completeness3/5

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

An output schema exists, so return values needn't be described, and the safety profile is covered by annotations. What's missing is clarity on the parameter roles and on the apparent tension between a 'global' formula and required project scoping - an agent could still invoke it, but the scoping story is incomplete.

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

Parameters2/5

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

Schema description coverage is 0% for two required parameters (organizationId, projectId), so the description carries the full burden. It mentions project scoping but never explains what either parameter identifies or how organization vs project scoping interacts with the stated global nature, leaving the ambiguity unresolved.

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

Purpose4/5

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

States a specific resource and its content: the constants behind the share-of-voice score (per-mention-type base weights and tone/qualifier multipliers). An agent can tell this is a read of formula constants rather than a computed metric. It doesn't explicitly name the sibling it differs from (e.g. get_metric_glossary), so it falls short of a 5.

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

Usage Guidelines3/5

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

"Use this to explain how the share-of-voice metric is derived" gives one clear use case, and the scope note adds context. But it names no alternatives and no conditions for choosing it over get_metric_glossary or the actual share-of-voice metric tool, so guidance is implied rather than explicit.

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

get_tracked_queryGet a tracked queryA
Read-onlyIdempotent
Inspect

One tracked query's settings: its text, engine, country, status, check frequency, passes per check, clusters and when it was last checked. Find ids with search_tracked_queries.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
organizationIdYes
trackedQueryIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
engineYes
localeNoLanguage tag the query is asked in. Null when the engine is asked without one.
statusYes
countryYesISO-3166 alpha-2 country the query is asked from
nPassesYesPasses run per check. Greater than 1 only for AI engines.
projectIdYesThe project this tracked query belongs to
queryTextYesThe prompt or keyword sent to the engine
lastCheckedAtNoWhen a check last completed. Null means no check has completed yet, which is not the same as a check that found nothing.
checkFrequencyYesHow often the query is checked while active
queryClusterIdsYesClusters (groups) this query belongs to. Empty when it is ungrouped.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered upstream. The description's list of returned settings partly duplicates the output schema rather than adding behavioral context (no note on auth scope, missing-record behavior, or freshness of last-checked data).

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

Conciseness5/5

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

Two tight sentences with zero waste: the payload contents come first, the id-discovery pointer second. Nothing redundant or buried.

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

Completeness3/5

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

An output schema exists, so return values need no explanation and the annotations carry the safety story. The remaining gap is that a three-required-parameter lookup with 0% schema coverage leaves the meaning and scoping of organizationId/projectId undocumented.

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

Parameters2/5

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

Schema description coverage is 0% and none of the three required parameters (organizationId, projectId, trackedQueryId) is explained anywhere. The description only indirectly hints that trackedQueryId comes from search_tracked_queries; it does not clarify scoping by organization/project, so it fails to compensate for the coverage gap.

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

Purpose5/5

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

States a specific verb (get) and resource (tracked query) and enumerates what the record contains: text, engine, country, status, check frequency, passes, clusters, last-checked. It also names the sibling search_tracked_queries, so an agent can distinguish it from get_tracked_query_matches and get_tracked_query_time_series by the fact that this is a single-record settings fetch.

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

Usage Guidelines3/5

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

The pointer 'Find ids with search_tracked_queries' tells the agent where the required id comes from, which is genuine usage context. However, it gives no guidance on when to prefer this over the closely named get_tracked_query_matches or get_tracked_query_time_series siblings, so the routing is only partially resolved.

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

get_tracked_query_matchesGet a tracked query's matchesA
Read-onlyIdempotent
Inspect

The individual results behind one tracked query's metrics. kind "mention": each time the brand or a competitor was mentioned in an AI answer, with position, sentiment and the context it appeared in. kind "serp": each time one of their domains ranked in a search result, with its position. Newest first by default; dates are YYYY-MM-DD and default to the whole retention window.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
limitNo
dateToNo
offsetNo
dateFromNo
projectIdYes
sortOrderNodesc
organizationIdYes
trackedQueryIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes
itemsYesMention matches when kind is "mention", search-result matches when it is "serp".
totalYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the safe read profile (readOnlyHint, idempotentHint, openWorldHint=false, destructiveHint=false), so the bar is lower, and the description adds genuinely useful behavior: default newest-first ordering, the YYYY-MM-DD date format, and that dates default to the whole retention window. It stops short of explaining pagination or result-size behavior.

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

Conciseness4/5

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

Front-loaded with a one-line summary, then the two kind modes, then defaults for ordering and dates. Sentences are dense and earn their place, with no filler or repetition.

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

Completeness4/5

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

An output schema exists, so the description needn't enumerate return values, and it still sketches them usefully (position, sentiment, context). For a 9-parameter tool with 0% schema coverage, it could say more about limit/offset paging, but the required call path (org/project/query/kind plus dates) is covered.

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

Parameters3/5

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

Schema description coverage is 0% across 9 parameters, so the description must carry the load and it only partially does: it adds real meaning for kind (mention vs serp) and for the date/sort parameters (format, defaults, ordering). limit, offset, organizationId, projectId and trackedQueryId remain undocumented here and in the schema, leaving the pagination controls opaque.

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

Purpose4/5

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

The description states a specific resource (the individual results/results rows behind a tracked query's metrics) and disambiguates its central enum by explaining what kind "mention" and kind "serp" each return. It is clear what the tool produces, though it never names or contrasts a sibling (e.g. get_mention_samples, get_tracked_query_time_series).

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer you call it when you want the rows behind the aggregate metrics, and the kind semantics guide which mode to pick. But there is no explicit when-to-use, when-not-to-use, or alternative-tool guidance, so selection against siblings is left to inference.

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

get_tracked_query_time_seriesSingle tracked-query time seriesA
Read-onlyIdempotent
Inspect

Time series of rank-tracking metrics for ONE tracked query across a date window, bucketed by granularity (daily, weekly or monthly). The tracked query fixes the engine and country, so those are not parameters. Use search_tracked_queries to find a trackedQueryId. Optionally includes per-competitor lines. Prefer weekly or monthly for long windows. Dates must fall within the data retention window. Answers questions like "show the share-of-voice and position history of this one query over the last N months".

ParametersJSON Schema
NameRequiredDescriptionDefault
dateToYes
dateFromYes
projectIdYes
granularityNodaily
competitorIdsNoUUIDs of competitors to add as extra series; competitor UUIDs are listed by get_available_filters (competitors[].id)
organizationIdYes
trackedQueryIdYesa tracked query UUID from search_tracked_queries (items[].id)

Output Schema

ParametersJSON Schema
NameRequiredDescription
pointsYes
dataDirtySinceNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the burden is lower. The description still adds real behavior: the tracked query fixes engine and country so they aren't parameters, optional per-competitor lines, granularity bucketing, and the retention-window limit.

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

Conciseness5/5

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

The core purpose and scoping constraint are front-loaded, and every following sentence carries distinct information (ID lookup, competitor lines, granularity heuristic, retention limit). No filler.

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

Completeness4/5

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

With an output schema present, return-value explanation isn't required, and the description covers identity, granularity, competitor lines, and date constraints. A brief note on the required org/project scoping or date format would make it fully complete.

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

Parameters3/5

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

Schema coverage is low (29%) and the description partly compensates: it explains granularity semantics, competitorIds as extra series, and clarifies that engine/country are not parameters. However it leaves organizationId, projectId, and the date format for dateFrom/dateTo undocumented.

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

Purpose5/5

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

The description names a specific verb+resource (time series of rank-tracking metrics for ONE tracked query) and immediately scopes it (bucketed by granularity, one query). It distinguishes itself from the sibling get_rank_tracking_time_series by emphasizing the single-query scope, letting an agent pick correctly.

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

Usage Guidelines4/5

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

It gives concrete routing guidance ('Use search_tracked_queries to find a trackedQueryId'), a heuristic ('Prefer weekly or monthly for long windows'), and a constraint ('Dates must fall within the data retention window'). It doesn't explicitly contrast with the broader get_rank_tracking_time_series sibling, so not a full 5.

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

get_tracking_coverageTracking coverage & stalenessA
Read-onlyIdempotent
Inspect

Coverage summary for a project's tracked queries: counts of total, active, paused, never-checked, and overdue (past their check-frequency interval) queries, plus a sample of the most-overdue ones. Answers "what is stale / not being tracked" in one call. Never-checked and overdue are scoped to active queries. This is a current-state snapshot and takes no date window. Answers questions like "what is stale or not being monitored", "which queries are overdue, paused, or never checked", "how fresh is my data".

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
activeYes
pausedYes
sampleYes
overdueYes
projectIdYes
neverCheckedYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/no-destructive, so the description's job is to add scope semantics — and it does: never-checked and overdue counts are scoped to active queries only, overdue means past the check-frequency interval, and it explicitly states this is a current-state snapshot with no date window. That last point is genuinely useful for avoiding a wrong call with a date parameter. It omits any note on cost/latency or how large the 'sample' of overdue queries is.

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

Conciseness4/5

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

Front-loaded with what the tool returns, followed by scope caveats and then use-case questions. The final sentence of example questions largely restates the opening enumeration ('overdue, paused, or never checked' duplicates the count list), which is mild redundancy but not enough to hurt readability.

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

Completeness4/5

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

An output schema exists, so return structure needn't be spelled out — yet the description still usefully previews the contents and the scoping rule for overdue/never-checked. Combined with the explicit 'no date window' note and the snapshot framing, an agent has enough to call it correctly; only ID semantics remain unaddressed.

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

Parameters3/5

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

Schema description coverage is 0% for both organizationId and projectId, but the names are self-explanatory and the description establishes the project-scoped subject ('a project's tracked queries'). It does not state requiredness, ID format, or whether organizationId must match the project's owning org, leaving the schema to carry undocumented parameters.

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

Purpose5/5

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

Starts with a specific resource and output: 'Coverage summary for a project's tracked queries', then enumerates the exact counts returned (total, active, paused, never-checked, overdue). This is clearly distinguishable from siblings such as get_project_rank_tracking_stats or get_tracked_query, which cover different aspects of tracking.

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

Usage Guidelines4/5

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

Gives explicit usage framing — 'Answers what is stale / not being tracked in one call' — and lists concrete triggering questions (which queries are overdue, paused, never checked; how fresh is my data). It does not, however, name an alternative sibling tool or state when not to use it, 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_usageGet plan and usageA
Read-onlyIdempotent
Inspect

An organization's subscription, how many tracked queries it has, and how many checks they are projected to run per month. Plan entitlements (tracked-query and check limits) are included for owners only, as in the web app; for other members "entitlements" is null. Use it before creating tracked queries or raising check frequency, to stay within the plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
entitlementsYesNull unless the caller owns the organization.
subscriptionYesThe current subscription contract of an organization
trackedQueriesYesHow many tracked queries an organization has configured
projectedMonthlyChecksYesWhat an organization's current tracking configuration would consume in a month

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious behavior: entitlements are populated only for owners and are null for other members, matching the web app. That is real context beyond the annotations.

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

Conciseness4/5

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

Two sentences, front-loaded with what is returned and then the action guidance; every clause earns its place by conveying scope, ownership visibility, or usage timing. Slightly dense but not padded.

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

Completeness4/5

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

With an output schema present, the description needn't explain return values, yet it usefully flags the owner-only entitlements nuance. For a one-parameter read tool with strong annotations, little is missing beyond the org identifier format.

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

Parameters3/5

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

Schema description coverage is 0% for the single organizationId parameter, and the description only implies org scoping via possessive phrasing ('An organization's subscription'). It never states the expected identifier format, so it does not compensate for the schema gap, but a single obvious param keeps this near the baseline.

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

Purpose4/5

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

The description states a specific resource set — subscription, tracked-query count, projected monthly checks, and plan entitlements — which is more concrete than the name alone. It distinguishes itself implicitly from list/get siblings like get_organization_overview, but never names a sibling to sharpen the boundary.

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

Usage Guidelines4/5

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

It gives a clear prescriptive context: 'Use it before creating tracked queries or raising check frequency, to stay within the plan.' That tells the agent when this tool is relevant, though it names no alternative tool or explicit when-not condition.

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

invite_memberInvite a memberAInspect

Invite someone to the organization by email with a role (owner, manager or viewer); they get an email to accept. Inviting an address that already belongs to a member creates nothing and says so. Requires a confirmationToken: call preview_operation with tool "invite_member" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees. Needs the organization:manage permission and the owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYes
emailYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, but the description adds substantial context: the confirmationToken gate, the required organization:manage permission plus owner role, and the no-op behavior for existing members. It does not describe response content, though an output schema exists to cover that.

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

Conciseness4/5

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

Three dense sentences, front-loaded with the core action and side effect, then the precondition workflow, then permissions. Nothing is wasted, though the confirmation-token sentence is long and could be split for faster scanning.

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

Completeness5/5

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

For a tool with a required confirmation token, permission requirements, and an existing output schema, the description covers preconditions, side effects, idempotency-adjacent edge cases, and authorization. An agent has everything needed to call it correctly.

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

Parameters4/5

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

Schema coverage is only 20% and the description compensates well for the key parameters: email semantics, the three role values, and the purpose of confirmationToken. organizationId and requestId are left to the schema (requestId is documented there), so it stops short of full coverage but adds real meaning.

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

Purpose5/5

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

States a specific verb and resource ('Invite someone to the organization by email with a role'), names the three allowed roles, and describes the resulting side effect (acceptance email). It is clearly distinguishable from siblings like list_members, update_member, and cancel_invitation.

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

Usage Guidelines5/5

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

Explicitly prescribes the workflow: call preview_operation with tool "invite_member" and these arguments first, show the plan, and invoke only after explicit user agreement. It also states what happens on an already-member address (nothing, reported back), covering both when-to-use and an edge case.

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

list_ai_responsesList captured AI answersA
Read-onlyIdempotent
Inspect

The AI answers captured for a project's tracked queries - the full answer text, the engine, when it was captured, and the sources it cited. Filter by engine, by one tracked query, or by capture date (YYYY-MM-DD). Newest first by default. Use it to read what an engine actually said; for aggregates use the metric tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dateToNo
offsetNo
enginesNo
dateFromNo
projectIdYes
sortOrderNodesc
organizationIdYes
trackedQueryIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds behavior beyond the annotations: default sort is newest-first, results are filterable by engine/query/date, and the date format is YYYY-MM-DD. It still omits pagination behavior (default limit 20, max 100, offset), which matters for a list tool.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what the tool returns, then filters, then the default order, then the routing cue. No sentence is filler and nothing is repeated from the name or title.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description covers the record contents plus the main filters well. The remaining gap is pagination guidance on limit/offset for a bounded list (default 20, max 100), which an agent calling repeatedly would benefit from.

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

Parameters3/5

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

Schema description coverage is 0% across 9 parameters, so the description carries real burden. It explains engines, trackedQueryId, dateFrom/dateTo (with the YYYY-MM-DD format), and the sortOrder default, but says nothing about limit, offset, organizationId, or projectId, leaving a meaningful portion undocumented anywhere.

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

Purpose5/5

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

States a specific verb (list) and resource (captured AI answers for a project's tracked queries) and enumerates what each record contains: answer text, engine, capture time, cited sources. It explicitly distinguishes itself from sibling metric tools, so an agent can route correctly without opening schemas.

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

Usage Guidelines4/5

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

Gives a clear use case ('read what an engine actually said') and an exclusion ('for aggregates use the metric tools'), which is strong routing guidance. It does not name the specific metric sibling (e.g. get_mention_mix) but the boundary is unambiguous enough to act on.

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

list_clustersList query clustersB
Read-onlyIdempotent
Inspect

A project's query clusters (the groups its tracked queries are organized in), by name, with their ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
projectIdYes
sortOrderNoasc
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds that results are returned by name with ids, but says nothing about pagination, sorting behavior, or whether clusters are returned unpaginated in practice.

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

Conciseness4/5

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

A single compact phrase, front-loaded with the resource and clarified by a parenthetical. It is efficient, though the fragment form makes it slightly terse for a tool with five parameters.

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

Completeness3/5

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

An output schema exists so return-value detail is unnecessary, and annotations cover safety. However, for a list tool with limit, offset and sortOrder, the absence of any pagination or ordering guidance leaves a real gap.

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

Parameters2/5

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

Schema description coverage is 0% across five parameters, so the description must carry the burden and largely does not. It implies project scoping ('A project's') but is silent on organizationId, limit/offset pagination, and the sortOrder enum.

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

Purpose4/5

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

The description names a specific resource (a project's query clusters) and defines what a cluster is, plus what is returned (names and ids). It is clear enough to separate from create_clusters, delete_cluster, rename_cluster and get_cluster_breakdown, though it does so by resource naming alone rather than explicit contrast.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus alternatives such as get_cluster_breakdown, get_tracked_query or search_tracked_queries. The description implies a browse/list use case but never states it or names any sibling.

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

list_keyword_listingsList keyword performanceA
Read-onlyIdempotent
Inspect

One row per tracked query text across all its engine and country variants, with its share of voice, positivity, mention, link, search and shopping positions over the date range (YYYY-MM-DD, inclusive). Filter by engine, country, cluster, status, check frequency, passes or text; sort by any metric. The keyword-level view of a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dateToYes
offsetNo
searchNo
sortByNokeyword
statusNo
enginesNo
nPassesNo
dateFromYes
countriesNo
projectIdYes
sortOrderNoasc
organizationIdYes
queryClusterIdsNo
checkFrequenciesNo
includeUngroupedQueriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes
dataDirtySinceYesWhen the figures started being recomputed, if they are; null when they are current
totalVariantCountYesTracked queries behind all the matching rows

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive behavior. The description adds useful context: date format (YYYY-MM-DD, inclusive), the row-level granularity (one row per tracked query text across engine and country variants), and the set of metrics returned (share of voice, positivity, mention, link, search, shopping positions). This goes beyond basic annotation coverage.

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

Conciseness4/5

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

The description is concise, front-loading the output format (one row per tracked query), followed by metrics, filtering, and sorting. It is well-structured and avoids extraneous text. Could be slightly improved by explicitly stating the required parameters.

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

Completeness3/5

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

Given the tool's complexity (16 parameters, no schema descriptions) and the presence of an output schema (which we do not evaluate), the description adequately covers the output format and basic filtering/sorting. However, it does not fully compensate for the lack of parameter descriptions or provide enough guidance on pagination and the meaning of specific sort fields.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It mentions filtering by engine, country, cluster, status, check frequency, passes, or text, and sorting by any metric. However, it does not explain the meaning of parameters like limit, offset, includeUngroupedQueries, or the individual sortBy enum values. The baseline of 3 applies.

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

Purpose4/5

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

The description clearly defines what the tool does: it's the keyword-level view of a project, one row per tracked query, with metric positions. It distinguishes itself from the detailed time-series and sample tools. However, it does not explicitly contrast itself with the sibling tool search_tracked_queries.

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

Usage Guidelines3/5

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

The description states the date range and filtering capabilities, which imply when this tool is useful (overview of keyword performance). However, it does not explicitly tell the agent when to use this tool versus the sibling search_tracked_queries, or versus time-series tools.

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

list_membersList organization membersA
Read-onlyIdempotent
Inspect

The members of an organization, oldest first, with their role and state; optionally also its pending invitations. Owners only, as in the web app. The member "id" (not the userId) is what update_member takes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
organizationIdYes
includeInvitationsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
membersYes
pendingInvitationsYesNull unless includeInvitations was true. Every pending invitation, oldest first, up to 100.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnly/idempotent/non-destructive, so the description's added value is the permissions requirement ("Owners only"), the ordering guarantee, and the important warning that the returned "id" rather than "userId" is what update_member consumes. That last point is a genuine behavioral gotcha not derivable from annotations or schema.

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

Conciseness5/5

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

Two dense sentences with no filler: the first covers scope, ordering, fields and the optional flag; the second covers the permission gate and the id-vs-userId caveat. Information is front-loaded and every clause earns its place.

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

Completeness4/5

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

An output schema exists, so return values need not be spelled out, yet the description still usefully characterizes them (ordering, role, state). With annotations handling the safety profile and the description covering permissions and the id caveat, the main remaining gap is pagination semantics for limit/offset.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the param burden, yet it only covers includeInvitations ("optionally also its pending invitations") and implies organizationId. The limit and offset pagination parameters are never explained in prose, leaving half the inputs undocumented beyond raw schema constraints.

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

Purpose4/5

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

It names the resource (organization members) and specifies the shape of the result: ordering (oldest first), fields (role, state), and the optional inclusion of pending invitations. It also links to update_member, so an agent can place it among siblings, though it doesn't contrast with the other list_* tools explicitly.

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

Usage Guidelines3/5

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

"Owners only, as in the web app" gives a real eligibility precondition, and the update_member reference implies a follow-up workflow. However, there is no when-to-use/when-not guidance or named alternative for listing members versus other membership-related tools like invite_member or cancel_invitation.

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

list_projectsList organizations and projectsA
Read-onlyIdempotent
Inspect

List every organization the caller belongs to and its active projects. Call this FIRST: the returned (organizationId, projectId) pairs are required by every other tool.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
organizationsYes

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds the useful workflow fact that the output feeds all other tools. It does not describe the return shape, but an output schema exists to carry that.

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

Conciseness5/5

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

Two sentences, no filler. The prerequisite instruction is front-loaded in the second sentence and follows directly from the stated scope in the first.

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

Completeness5/5

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

For a zero-parameter, read-only listing tool with annotations covering safety and an output schema covering return values, the description supplies exactly the missing piece an agent needs: when to call it and what its output enables.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to disambiguate; the baseline of 4 applies. The description correctly conveys that no filtering arguments are accepted ('every organization the caller belongs to').

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

Purpose5/5

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

States a specific verb (list) and two resources (organizations and their active projects), with the scope constrained to those the caller belongs to. This clearly separates it from siblings like get_organization, get_project, or list_members.

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

Usage Guidelines5/5

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

Explicitly instructs 'Call this FIRST' and explains why: the returned (organizationId, projectId) pairs are prerequisites for every other tool. That is unambiguous sequencing guidance with a stated rationale, not an implied convention.

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

list_search_snapshotsList captured search resultsA
Read-onlyIdempotent
Inspect

The search result pages captured for a project's tracked queries. kind "serp": Google search results with each result's position, title and URL. kind "shopping": Google Shopping results with each offer's position, merchant and price. Filter by one tracked query or by capture date (YYYY-MM-DD). Newest first by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYes
limitNo
dateToNo
offsetNo
dateFromNo
projectIdYes
sortOrderNodesc
organizationIdYes
trackedQueryIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYes
itemsYesSearch snapshots when kind is "serp", shopping snapshots when it is "shopping".
totalYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, non-open-world behavior, so the safety profile is covered. The description adds value beyond that by specifying the field payloads per kind (position/title/URL for serp; position/merchant/price for shopping) and the default newest-first ordering.

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

Conciseness4/5

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

The opening sentence front-loads the resource, followed by kind definitions and filtering/ordering notes. It is efficient with no filler, though the kind breakdown reads slightly list-like rather than tightly integrated.

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

Completeness4/5

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

An output schema exists, so return values need not be described, and the description covers the two kinds, the filter options, and default ordering. For a 9-parameter list tool, pagination (limit/offset) behavior is the main unaddressed element, keeping it just short of complete.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning, and it does explain the kind enum values, the date filter (YYYY-MM-DD), and the default sort. However, it omits semantics for limit, offset, projectId, and organizationId, so it only partially compensates for the coverage gap.

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

Purpose4/5

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

The description gives a specific verb+resource: lists the captured search result pages for a project's tracked queries. It further disambiguates the two variants ("serp" vs "shopping") with concrete content for each. It does not, however, name or contrast with any sibling tool, so it falls short of a 5.

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

Usage Guidelines3/5

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

It tells the agent it can filter by a single tracked query or by capture date, and that results are newest-first by default, which implies usage. But it never states when to choose this tool over alternatives (e.g., list_ai_responses) or any exclusions, leaving the selection context inferred.

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

list_untracked_competitorsBrands the AI answers name that you do not trackA
Read-onlyIdempotent
Inspect

The brands a project's AI answers name that are not tracked as competitors (another brand offering the same thing), most-seen first: in how many answers and tracked queries, how often, their average position among the brands named, one query that named them, and when they were last seen. They count in no metric until tracked, so this is where to find competitors worth adding with create_competitor (their websites are not known here; confirm them with the user). Needs checks to have run; after a project is created its first checks run straight away. dateFrom and dateTo (YYYY-MM-DD) default to the last 30 days.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
dateToNo
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions)
dateFromNo
countriesNoISO-3166 alpha-2 country codes; a project's configured codes are listed by get_available_filters
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
brandsYes
dateToYes
dateFromYes

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the readOnly/idempotent annotations by disclosing a semantic constraint that matters ('they count in no metric until tracked'), a data-quality caveat (websites unknown, confirm with the user), and the operational prerequisite about checks running immediately after project creation. This is the kind of context annotations cannot carry.

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

Conciseness4/5

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

Front-loaded with purpose and scope, then prerequisites and defaults. The first sentence packs a long enumeration of returned fields, which is dense, but every clause carries information and nothing is pure filler.

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

Completeness4/5

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

Covers prerequisites, defaults, cross-tool follow-up, and data caveats; an output schema exists so return-value detail is not strictly needed (the description's field enumeration is mildly redundant). Adequate for the tool's complexity, though low schema coverage leaves some parameters thinly documented.

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

Parameters3/5

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

Schema coverage is only 29%, so the description must compensate; it explains dateFrom/dateTo format (YYYY-MM-DD) and their 30-day default, which helps. But limit, engines, countries, and the two IDs get no added meaning from the description beyond the inline schema notes, leaving gaps.

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

Purpose5/5

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

States a specific verb and resource ('list brands a project's AI answers name that are not tracked as competitors') and sharpens the scope with 'most-seen first', which cleanly separates it from discover_brands and create_competitor. An agent can tell what it returns without opening the schema.

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

Usage Guidelines4/5

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

Explicitly routes the agent: 'this is where to find competitors worth adding with create_competitor', and it warns that websites are unknown here and should be confirmed with the user. It also states the prerequisite that checks must have run. It does not explicitly contrast with sibling alternatives like discover_brands, 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.

preview_operationPreview an operation before running itA
Read-only
Inspect

Describe exactly what a confirmable write tool would do and get the confirmationToken it requires. Pass the name of the write tool as "tool" and the arguments you would pass it (without confirmationToken and requestId) as "arguments". Show the returned plan to the user and wait for an explicit yes before calling the tool with the same arguments and this confirmationToken. The token is single-use, expires after a few minutes, and is refused if anything the plan describes has changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolYes
argumentsYesThe arguments the write tool would be called with, without confirmationToken and requestId.

Output Schema

ParametersJSON Schema
NameRequiredDescription
planYes
toolYes
nextStepYes
expiresAtYes
expiresInSecondsYes
confirmationTokenYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, idempotentHint=false), but the description adds substantial traits beyond them: the token is single-use, expires after a few minutes, and is refused if anything the plan describes has changed. That staleness/expiry behavior is exactly the kind of context annotations cannot express.

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

Conciseness5/5

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

Four sentences, front-loaded with function, then parameter usage, then the human-in-the-loop workflow, then token semantics. Every sentence carries distinct operational information and none is padding.

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

Completeness5/5

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

With an output schema present, the description need not explain the returned plan, and it correctly focuses on what the schema cannot convey: the end-to-end preview/confirm workflow and the token's lifetime and invalidation rules. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 50%; the enum of write-tool names carries no per-value documentation, so the description's explanation that 'tool' is the name of the write tool adds real meaning. It also pins down that 'arguments' excludes confirmationToken and requestId, though that exclusion is already present in the schema description for 'arguments', making it slightly redundant.

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

Purpose5/5

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

States a specific action (describe what a confirmable write tool would do) and a concrete output (the confirmationToken it requires), naming the resource class precisely. It is immediately distinguishable from the many write siblings it fronts (delete_competitor, archive_project, etc.) because it is explicitly the preview step rather than the mutation itself.

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

Usage Guidelines5/5

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

Gives explicit when-to-use and how-to-sequence guidance: call this first with the target tool name and its arguments minus confirmationToken/requestId, show the plan to the user, wait for an explicit yes, then call the write tool with the same arguments plus the token. The alternative to this tool (calling the write tool directly) is implicitly but clearly excluded.

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

rename_clusterRename a query clusterB
Idempotent
Inspect

Rename a query cluster. The name is stored lower-cased and must be unique in the project. Safe to retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
clusterIdYes
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesPass this value in the queryClusterIds filter of the analytics operations
nameYesUnique within the project, stored lower-cased
projectIdYesThe project this cluster belongs to

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description adds real value beyond those: the name is stored lower-cased, must be unique within the project, and the call is retry-safe (reinforcing idempotency in plain language). It stops short of describing error behavior when uniqueness is violated.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and then the constraints. No filler; every sentence carries information an agent needs before invoking.

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

Completeness3/5

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

An output schema exists, so return values need not be explained, and annotations carry the safety profile. However, for a mutation with four undocumented required identifiers and no explanation of how to obtain them or what happens on a name collision, the description is only partially complete.

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

Parameters2/5

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

Schema description coverage is 0% across four required parameters. The description only sheds light on 'name' (lower-cased, unique, 200-char cap in schema), leaving organizationId, projectId, and clusterId entirely undocumented in both schema and prose. It compensates for one of four parameters, insufficient to offset a total coverage gap.

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

Purpose4/5

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

States a specific verb+resource ('Rename a query cluster'), which is clearly distinct from siblings like delete_cluster and create_clusters. It does not explicitly contrast itself with those siblings, but the operation is unambiguous without opening the schema.

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

Usage Guidelines2/5

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

The description gives no when-to-use or when-not-to-use guidance, and never references an alternative tool. 'Safe to retry' is the only operational hint, which is behavioral rather than a usage condition.

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

report_ai_responseReport a wrongly analysed AI answerAInspect

Flag a captured AI answer whose analysis is wrong - most often a brand or competitor mention that was missed - so Mencoro reviews it. type "missed_mention" or "other"; comment says what is wrong. Find the ids with list_ai_responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes
commentNo
projectIdYes
requestIdNo
aiResponseIdYes
organizationIdYes
trackedQueryIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
typeYesThe kind of problem reported
commentNoThe note as stored. An empty or whitespace-only comment is stored as null.
acceptedYesTrue once the report has been accepted for review. It is never false: a report that could not be delivered answers with an error instead.
aiResponseIdYesThe captured AI answer the report is about
trackedQueryIdYesThe tracked query that answer was captured for
missedBrandNamesYesBrand names reported as missed, de-duplicated and trimmed.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this is a non-read-only, non-destructive, non-idempotent mutation. The description adds genuine context beyond them: the call routes into a Mencoro human review workflow, and repeated flags are not deduplicated (consistent with idempotentHint=false). It does not state auth/permission needs or rate limits.

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

Conciseness4/5

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

Short and front-loaded, leading with the core action and its typical trigger before the parameter mechanics. Slightly choppy use of fragments ('comment says what is wrong') but no wasted sentences.

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

Completeness4/5

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

An output schema exists, so return values need no explanation, and the description covers the action, the enum, the comment, and id discovery. It is slightly thin on the relationships among the multiple id parameters, but sufficient to invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry the load. It clarifies the `type` enum values and the `comment` field's purpose, and tells the agent where ids come from, but leaves organizationId, projectId, trackedQueryId, aiResponseId and requestId entirely unexplained.

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

Purpose5/5

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

States a specific verb and resource ('Flag a captured AI answer whose analysis is wrong') plus the dominant reason ('brand or competitor mention that was missed'), making it immediately distinguishable from the read-only sibling list_ai_responses, which it names.

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

Usage Guidelines4/5

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

Gives clear context for use (wrong analysis, especially missed mentions) and points to list_ai_responses as the way to obtain the needed ids. It lacks an explicit when-not or exclusion (e.g., what does not qualify as reportable), so it falls 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.

restore_organizationRestore an organizationAInspect

Bring an archived organization back to active. Requires a confirmationToken: call preview_operation with tool "restore_organization" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees. Needs the organization:manage permission and the owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
roleYesThe caller's current role in this organization
statusYes
imageUrlNo
createdAtYes
descriptionNo
contactEmailNo

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare the safety profile (not read-only, not destructive, not idempotent, closed-world). The description goes well beyond them by disclosing the mandatory confirmation-token flow, the review-before-commit requirement, and the exact authorization prerequisites — precisely the behavioral context an agent needs before invoking a mutating tool.

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

Conciseness5/5

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

Three tight sentences: the action first, then the confirmation prerequisite, then the permissions. Every clause carries operative information; there is no filler or restatement of schema fields.

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

Completeness5/5

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

With an output schema present, return values need no explanation. The description fully covers the preconditions, authorization, and conversational workflow for a destructive-adjacent state transition, so an agent can call it correctly without further context.

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

Parameters4/5

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

Schema coverage is only 33% (requestId is the sole documented property), so the description must compensate — and it does for confirmationToken by explaining where the token comes from (preview_operation) and when it is valid. organizationId is left unexplained, but its meaning is self-evident from the tool name. Minor residual gap.

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

Purpose5/5

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

States a specific verb and resource plus the state transition: 'Bring an archived organization back to active.' This unambiguously distinguishes it from archive_organization and restore_project, and the agent knows exactly what the call accomplishes.

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

Usage Guidelines5/5

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

Gives an explicit prerequisite workflow (call preview_operation with this tool name and these arguments, show the plan to the user, call only after explicit approval) plus the required permission (organization:manage) and the owner role. Nothing about when/when-not to use it is left to inference.

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

restore_projectRestore an archived projectA
Idempotent
Inspect

Bring an archived project back: it reappears in the project list and its active tracked queries are checked again on their schedule.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
statusYes
createdAtYes
brandNamesYesBrand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet.
competitorsYesCompetitors this project is measured against. Empty when none are configured.
organizationIdYes
websiteDomainsYesDomains the project is monitored for. Empty when the project has no brand monitoring profile yet.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already cover safety (readOnly=false, destructive=false, idempotent=true), so the bar is lower, and the description still adds real behavioral value: it discloses the two concrete side effects (reappearance in the project list and resumption of scheduled query checks). It stops short of stating auth requirements or error behavior, hence not a 5.

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

Conciseness5/5

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

A single sentence that front-loads the action and then the consequences; no filler or redundant restatement of the title.

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

Completeness4/5

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

An output schema exists, so return values needn't be explained, and annotations plus the description together cover the mutation's safety profile and effects. The remaining gap is the undocumented parameters, which is the one thing missing for confident invocation.

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

Parameters2/5

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

Both parameters (organizationId, projectId) have 0% schema description coverage, so the description must compensate, yet it never mentions either parameter or their expected formats. The schema alone leaves the agent guessing at identifier conventions.

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

Purpose5/5

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

States a specific verb ('bring back' / restore) and resource (an archived project), and the effect is unambiguous. An agent can distinguish it from archive_project and restore_organization without opening any schema.

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

Usage Guidelines3/5

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

The archived-project precondition is implied ('archived project'), which is decent context, but there is no explicit when-to-use guidance or mention of the sibling restore_organization to disambiguate scope. Usage is inferred rather than stated.

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

run_checksCheck tracked queries nowAInspect

Check tracked queries now instead of waiting for their schedule: name up to 100 in trackedQueryIds, or pass all: true for every active tracked query of the project, however recently it was checked (a query whose check is still running is skipped). Each check spends budget (each pass counts as one check; a Claude pass counts as five). Requires a confirmationToken: call preview_operation with tool "run_checks" and these arguments first, show the returned plan (which checks run, what they cost) to the user, and call this tool only after the user explicitly agrees. Results arrive over the next minutes; read them with the analytics tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNo
projectIdYes
requestIdNo
organizationIdYes
trackedQueryIdsNo
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

Adds substantial context beyond annotations: budget consumption (1 check, 5 for a Claude pass), that in-flight checks are skipped, that results are asynchronous and arrive over minutes, and the mandatory confirmationToken flow. Annotations (readOnly=false, openWorld=true, not idempotent) are consistent but do not convey the cost or confirmation mechanics the description supplies.

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

Conciseness4/5

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

Front-loaded with the core action and scope, then the cost model and confirmation requirement. Dense but almost every sentence carries operative information; only the closing pointer to analytics tools is dispensable.

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

Completeness5/5

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

For a mutation-with-cost tool that has an output schema, the description covers what an agent needs: selection semantics, budget cost, skip behavior, async result delivery, and the mandatory preview/confirmation gate. Return-value details are correctly left to the output schema.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate; it explains trackedQueryIds (up to 100, matching maxItems), all:true, and the confirmationToken workflow. It leaves requestId, projectId, and organizationId unexplained, though the latter two are self-evidently scoping identifiers.

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

Purpose5/5

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

Opens with a specific verb+resource and an explicit contrast: 'Check tracked queries now instead of waiting for their schedule'. This clearly separates it from sibling scheduling/creation tools such as create_tracked_queries and update_tracked_queries.

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

Usage Guidelines5/5

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

States exactly how to invoke it (name up to 100 in trackedQueryIds, or all:true for every active query) and lays out the required confirmation workflow: call preview_operation first, show the plan, then call only after explicit user agreement. When-to-use and prerequisites are both covered.

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

search_tracked_queriesSearch tracked queriesA
Read-onlyIdempotent
Inspect

Search and paginate the tracked queries (keywords) of a project with their latest rank positions and metrics. Filter by status (active/paused), engines, countries and a free-text search. Sort by one of: queryText, lastSerpPosition, lastMentionPosition, lastShoppingPosition, lastShareOfVoice, lastPositivityIndex, lastMentionCount, lastCheckedAt. limit is 1-100 (default 20). Answers questions like "list my top queries by share of voice" or "find a specific tracked query".

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
offsetNo
searchNo
sortByNoqueryText
statusNo
enginesNoallowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping
countriesNoISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters
projectIdYes
sortOrderNodesc
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds behavioral context beyond that: it is paginated, supports sorting, and documents the limit bound (1-100, default 20). It does not cover offset behavior or rate limits, keeping it below 5.

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

Conciseness4/5

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

Three front-loaded sentences that lead with purpose then capabilities, with no redundant filler. The long sort-field enumeration is dense but earns its place by covering an unlabeled enum.

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

Completeness4/5

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

An output schema exists, so return values need not be spelled out, and the description still hints at returned data (positions and metrics). For a 10-parameter tool it covers most needed guidance, leaving only offset/sortOrder semantics unaddressed.

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

Parameters4/5

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

Schema description coverage is only 20%, so the description must compensate and largely does: it names the status values (active/paused), the engines/countries/search filters, the full sortBy field list, and the limit range/default. It omits meaning for offset, sortOrder, and the required org/project IDs.

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

Purpose5/5

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

States a specific verb (search) plus resource (tracked queries/keywords) and scope (a project's queries with latest rank positions and metrics). This clearly distinguishes it from get_tracked_query (single) and get_tracked_query_matches (a different resource).

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

Usage Guidelines4/5

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

Gives concrete context via example questions ('list my top queries by share of voice', 'find a specific tracked query') and enumerates the filtering dimensions. It implies when to reach for this vs a single-query lookup, but does not explicitly state exclusions or name a sibling alternative.

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

set_tracked_query_clustersAdd or remove tracked queries from clustersA
Idempotent
Inspect

Add up to 100 tracked queries to one or more query clusters ("add"), or take them out ("remove"). Other cluster memberships are left alone. Each tracked query that cannot be changed is reported in "failed" without stopping the rest. Safe to retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
operationYes
projectIdYes
organizationIdYes
queryClusterIdsYes
trackedQueryIdsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNoAlways present, empty list included: read it rather than inferring success from the status code.
successfulNoThe resources the operation was applied to.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, but the description adds genuinely new behavior: non-atomic partial failure with failed items reported while the rest proceed, and the guarantee that other cluster memberships are preserved. These are material semantics an agent could not derive from the 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.

Conciseness5/5

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

Four short sentences, zero filler, with the primary add/remove action and cap front-loaded ahead of the secondary guarantees. Every sentence carries distinct information.

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

Completeness4/5

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

For a mutating bulk tool with five required params, an output schema present (which covers the failed-items return), and idempotency annotations, the description covers scope, failure mode, and retry safety adequately. It omits permission requirements and whether unknown cluster IDs are silently skipped, a minor gap.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains the operation enum values and the 100-item cap, but those are already in the schema (enum, maxItems), and it adds no meaning for organizationId, projectId, trackedQueryIds, or queryClusterIds beyond their self-evident names.

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

Purpose5/5

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

States a specific verb pair (add/remove) and both resources (tracked queries and query clusters), so the agent knows exactly what state change occurs. It is readily distinguishable from siblings like create_clusters, delete_cluster, and apply_auto_clustering, which operate on clusters themselves rather than membership.

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

Usage Guidelines3/5

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

The description clarifies the two operation modes and what is left untouched, which implies usage, but never states when to prefer this over alternatives such as update_tracked_queries or apply_auto_clustering, nor any prerequisites. Guidance is implied rather than explicit.

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

start_auto_clusteringPropose query clusters automaticallyAInspect

Start a background job that proposes how to group up to 500 tracked queries into clusters. mode "fill_gaps" places only queries that have no cluster yet; "add_on_top" adds clusters without touching existing memberships; "full_regroup" proposes a fresh grouping of every query. restrictToExistingClusters only uses the project's current clusters. Nothing changes until apply_auto_clustering: poll get_job, show the proposal to the user, then apply it. Requires an active subscription.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYes
projectIdYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes
trackedQueryIdsYes
restrictToExistingClustersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobIdYesPass it to get_job. May name a job started by an earlier, equivalent call.
nextStepYes
deduplicatedYesWhether this call joined a job that was already running instead of starting one

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare the safety profile (write, non-destructive, non-idempotent); the description adds the async background-job nature, the fact that nothing changes until apply_auto_clustering, the polling handoff to get_job, and the subscription prerequisite. That is meaningful context an agent cannot infer from structured fields.

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

Conciseness5/5

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

Four tight sentences, front-loaded with the action and scope, then modes, then the safety/workflow constraint. No filler or restatement of the title.

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

Completeness5/5

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

An output schema exists so return values need not be described; the description instead covers the async lifecycle, the mandatory apply step, and the subscription requirement. Nothing needed to invoke this tool correctly is missing.

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

Parameters4/5

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

Schema coverage is only 17% (just requestId), so the description carries most of the burden and largely delivers: it defines all three mode values, the effect of restrictToExistingClusters, and the 500-query cap on trackedQueryIds. It adds nothing for organizationId/projectId, hence not a 5.

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

Purpose5/5

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

States a specific verb and resource ('start a background job that proposes how to group ... tracked queries into clusters') with the scope cap (up to 500). It is immediately distinguishable from the sibling apply_auto_clustering, which it explicitly references.

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

Usage Guidelines5/5

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

Gives per-mode guidance for all three enum values (fill_gaps / add_on_top / full_regroup) and explains restrictToExistingClusters. It also spells out the required workflow — poll get_job, show the proposal, then call apply_auto_clustering — so the agent knows this is a staged, non-terminal step.

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

suggest_brand_namesSuggest brand namesAInspect

Start a background job that proposes the names a brand is mentioned by, from its name and website - the first step of setting up a project, before it exists. Poll get_job for the result and confirm the names with the user before create_project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
countryNo
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes
websiteDomainsYes
enteredBrandNamesNoNames the user already knows the brand by

Output Schema

ParametersJSON Schema
NameRequiredDescription
jobIdYesPass it to get_job. May name a job started by an earlier, equivalent call.
nextStepYes
deduplicatedYesWhether this call joined a job that was already running instead of starting one

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare the mutation/open-world profile, and the description adds the crucial non-obvious trait that this is an asynchronous background job requiring polling via get_job, plus a human-confirmation step. It does not discuss the idempotency semantics (the requestId key) that the schema documents, so it is strong but not exhaustive.

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

Conciseness5/5

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

Two dense sentences: the first describes what the job does and when it runs, the second the polling and confirmation workflow. Every clause earns its place and the workflow order is front-loaded.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers the async lifecycle and handoff to create_project well. The residual gap is the undocumented non-required parameters, but the workflow guidance is otherwise complete.

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

Parameters3/5

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

Schema description coverage is only 33% across 6 params, and the description only touches 'name' and 'website' (websiteDomains). organizationId, country, enteredBrandNames, and requestId go unaddressed in prose, leaving the description to compensate for a real gap that it only partially fills.

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

Purpose5/5

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

States a specific verb (start a background job), the resource (the names a brand is mentioned by), and the input basis (its name and website). The phrase 'the first step of setting up a project, before it exists' positions it precisely relative to create_project, so an agent can tell it apart from siblings.

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

Usage Guidelines5/5

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

Explicit routing: it is the first step before a project exists, results come from get_job, and the agent should confirm names with the user before calling create_project. Named alternatives and a clear sequence leave nothing to inference.

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

update_competitorUpdate a competitorA
Idempotent
Inspect

Replace a competitor's name, website domains and brand names. Replaces all three: pass every domain and name the competitor should keep. Safe to retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
projectIdYes
brandNamesYes
competitorIdYes
organizationIdYes
websiteDomainsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYesThe competitor's display name
brandNamesYesNames a mention is matched against for this competitor
websiteDomainsYesDomains a result is matched against for this competitor

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true and destructiveHint=false, so 'Safe to retry' largely restates structured data. However, the description adds genuine behavioral context not in annotations: that this is a full replacement of all three fields, not a partial merge — a critical distinction for correct invocation.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action and the critical replacement semantics. No filler.

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

Completeness4/5

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

Output schema exists, so return values need no explanation, and annotations cover safety and idempotency. The description captures the replace-all behavior that annotations omit; only the three ID parameters remain unexplained, which is a minor gap.

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

Parameters3/5

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

With 0% schema description coverage, the description must carry parameter meaning. It clarifies that websiteDomains and brandNames are full-replacement arrays ('pass every domain and name the competitor should keep'), adding real value beyond the schema, but leaves organizationId, projectId, and competitorId entirely undocumented.

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

Purpose4/5

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

States a specific verb+resource ('Replace a competitor's name, website domains and brand names') and names the exact fields affected. It is distinguishable from create_competitor/delete_competitor by the replace semantics, though it does not explicitly reference those siblings.

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

Usage Guidelines2/5

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

No guidance on when to use this versus create_competitor, delete_competitor, or update_project/update_organization. The only operational note ('pass every domain and name the competitor should keep') is about how to fill the fields rather than when to choose this tool.

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

update_memberChange a memberA
Destructive
Inspect

Change an organization member: operation "change_role" gives them another role (pass role), "suspend" takes their access away without removing them, "reactivate" gives it back. memberId is the member id from list_members, not the user id. Requires a confirmationToken: call preview_operation with tool "update_member" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees. Needs the organization:manage permission and the owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNo
memberIdYes
operationYes
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
roleYes
stateYes
userIdYesThe user this membership belongs to
isActiveYes
joinedAtYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, and the description adds value beyond them: 'suspend takes their access away without removing them' clarifies the destructive scope, and it discloses the confirmation-token gating flow and auth requirements. This is rich behavioral context beyond the structured hints.

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

Conciseness4/5

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

Front-loads the operation semantics, then the memberId clarification, the confirmation workflow, and permissions. Dense but each sentence carries necessary information; there is no filler, though it is close to overpacked.

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

Completeness5/5

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

With an output schema present, return values needn't be described. The description covers operation semantics, the idoimatic member-vs-user id distinction, the mandatory preview/confirmation flow, and permissions — everything an agent needs to invoke this mutation correctly.

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

Parameters4/5

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

Schema coverage is low (17%), so the description must compensate: it explains the role parameter's use with change_role and, critically, that memberId is the member id from list_members rather than the user id. It also explains confirmationToken's purpose, though organizationId and requestId remain somewhat unaddressed (requestId is covered in schema).

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

Purpose5/5

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

States a specific verb+resource (change an organization member) and enumerates the three operations with their distinct effects: change_role, suspend, reactivate. This clearly separates it from siblings like list_members and invite_member.

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

Usage Guidelines5/5

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

Explicitly describes the required workflow: call preview_operation with tool 'update_member' first, show the plan, and call this tool only after explicit user agreement. It also states the required permission (organization:manage) and owner role, leaving no ambiguity about prerequisites.

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

update_organizationUpdate an organizationA
Idempotent
Inspect

Change the name, description or contact email of an organization; arguments left out are unchanged. Requires a confirmationToken: call preview_operation with tool "update_organization" and these arguments first, show the returned plan to the user, and call this tool only after the user explicitly agrees. Needs the organization:manage permission and the owner role.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
requestIdNoOptional idempotency key, 8-255 printable characters. Reuse it only to retry this same call.
descriptionNo
contactEmailNo
organizationIdYes
confirmationTokenYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
roleYesThe caller's current role in this organization
statusYes
imageUrlNo
createdAtYes
descriptionNo
contactEmailNo

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare it is a non-readOnly, non-destructive, idempotent mutation, but the description adds critical context the annotations cannot: the partial-update semantics (omitted args unchanged), the mandatory confirmation-token handshake, and the permission/role gate. 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.

Conciseness4/5

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

A single dense paragraph that front-loads purpose, then the confirmation workflow, then permissions. Every clause carries information, though the run-on structure could be broken into shorter sentences for faster scanning.

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

Completeness5/5

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

An output schema exists, so return values need no explanation. Between the annotations, the partial-update rule, the confirmation workflow, and the permission requirements, an agent has everything needed to call this correctly.

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

Parameters4/5

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

Schema coverage is only 17%, so the description must compensate. It names the three updatable fields (name, description, contactEmail) and explains the confirmationToken's role plus the default-unchanged behavior. It leaves organizationId semantics and format constraints (e.g. name maxLength, email format) to the schema.

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

Purpose5/5

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

States a specific verb+resource (change name, description or contact email of an organization) and adds the partial-update rule. This clearly distinguishes it from siblings like create_organization, archive_organization, and restore_organization.

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

Usage Guidelines5/5

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

Gives an explicit prerequisite workflow: call preview_operation with tool "update_organization" first, show the returned plan, and only call after explicit user agreement. It also names the required permission (organization:manage) and role (owner), so the agent knows when the call is even permitted.

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

update_projectUpdate a projectC
Idempotent
Inspect

Rename a project, replace the website domains and brand names it is monitored for, or both. brandProfile replaces both lists entirely: pass every domain and name the project should keep. Safe to retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
projectIdYes
brandProfileNoReplaces the website domains and brand names the project is monitored for.
organizationIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectYesThe project after the rename; null when no name was given.
brandProfileYesThe brand profile after the replacement; null when no brandProfile was given.

TDQS

C2.9/5.0
Behavior1/5

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

The description states that brandProfile 'replaces both lists entirely' and warns to 'pass every domain and name the project should keep', which implies omitted entries are removed. That is a destructive update, but the annotations declare destructiveHint=false. This is a contradiction. The description also restates idempotency from the annotations via 'Safe to retry'.

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

Conciseness5/5

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

Three short, front-loaded sentences with no filler. The first sentence states capabilities, the second explains the critical replacement behavior, and the third adds retry safety.

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

Completeness4/5

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

An output schema exists, so return values need not be described. The description covers the key mutation semantics and idempotency, but it omits any mention of required organizationId/projectId and does not address permissions or auth requirements. Given the tool's complexity, it is mostly complete but has minor gaps.

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

Parameters3/5

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

Schema description coverage is only 25%. The description compensates for brandProfile by explaining full replacement semantics and clarifies that name and brandProfile are optional ('or both'). However, the required organizationId and projectId parameters receive no explanation beyond their self-evident names.

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

Purpose4/5

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

The description gives specific verbs and resources: rename a project and replace the website domains and brand names it is monitored for. It clearly distinguishes update_project from create_project or get_project by focusing on modification. However, it does not explicitly name any sibling tool or clarify when to use it instead of those alternatives.

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

Usage Guidelines2/5

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

The description implies usage by listing what can be changed, but it offers no explicit when-to-use guidance, prerequisites, or alternatives. It does not tell the agent when not to use this tool versus create_project, update_organization, or rename_cluster.

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

update_tracked_queriesChange tracked queriesA
Idempotent
Inspect

Change up to 100 tracked queries at once. operation "pause" stops their checks, "resume" restarts them, "set_check_frequency" changes how often they are checked (pass checkFrequency), "set_passes" changes how many answers each check captures (pass nPasses; above 1 only for AI engines). Lower frequency or fewer passes spend less budget; use get_usage to see the effect. Each one that cannot be changed is reported in "failed". Safe to retry.

ParametersJSON Schema
NameRequiredDescriptionDefault
nPassesNo
operationYes
projectIdYes
checkFrequencyNo
organizationIdYes
trackedQueryIdsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedNoAlways present, empty list included: read it rather than inferring success from the status code.
successfulNoThe resources the operation was applied to.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false; the description adds real value beyond that by disclosing budget spend behavior, the AI-engine-only constraint ('above 1 only for AI engines'), partial-failure reporting into 'failed', and 'Safe to retry'. This is meaningful behavioral context layered on top of the annotations.

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

Conciseness4/5

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

Front-loads purpose and batch limit, then operation semantics, then budget/failure notes. Dense but each sentence carries information; no filler.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and the description nonetheless flags the 'failed' reporting so the agent knows partial results are possible. For a batch mutation with annotations covering the safety profile, this is complete enough.

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

Parameters4/5

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

Schema coverage is 0%, so the description must carry the load, and it does for the non-obvious params: it documents all four operation enum values, explains checkFrequency (how often checked), and nPasses (answers per check). The remaining params (organizationId, projectId, trackedQueryIds) are self-evident identifiers, so the compensation is strong.

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

Purpose5/5

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

States a specific verb and resource ('Change tracked queries') plus batch scope ('up to 100 ... at once'), which cleanly separates it from create_tracked_queries, delete_tracked_queries, and get_tracked_query. An agent can identify the tool without opening the schema.

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

Usage Guidelines4/5

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

Each operation value is defined (pause stops checks, resume restarts, set_check_frequency, set_passes) and the budget effect plus a pointer to get_usage is given. It stops short of explicit when-not-to-use or routing rules against siblings, but the operation semantics make correct selection clear.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updates
    • Changedcreate_tracked_queries2 fields changed
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
      • changedInput schema / properties / nPasses / description
        Previous value: -"Answers captured per check; more than 1 only for AI engines. Each pass costs one check."New value: +"Answers captured per check; more than 1 only for AI engines. Each pass counts as one check against your plan; a Claude pass counts as five."
    • Changedget_cited_sources2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode (only AI engines carry citations)"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (only AI engines carry citations)"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_cluster_breakdown2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_competitor_cooccurrence2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions)"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions)"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_mention_mix2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_mention_samples3 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
      • addedOutput schema / properties / samples / items / properties / citations
        Added value: +{
        +  "description": "Sources the engine cited, in the order it cited them",
        +  "items": {
        +    "description": "A source cited inside one AI answer",
        +    "properties": {
        +      "anchorText": {
        +        "description": "The visible link text, when the engine provided one",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "domain": {
        +        "description": "Host of url. Belongs to the redirector, not the publisher, when unresolved is true",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "position": {
        +        "description": "Place within this answer, starting at 1",
        +        "minimum": 1,
        +        "type": "integer"
        +      },
        +      "publicationDate": {
        +        "description": "Publication date the engine reported, when it provided one",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "snippet": {
        +        "description": "Excerpt the engine showed for this source, when it provided one",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "sourceName": {
        +        "description": "Publisher name the engine reported, when it provided one",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "thumbnailUrl": {
        +        "description": "Preview image the engine showed for this source, when it provided one",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "title": {
        +        "description": "Title of the cited page, when the engine provided one",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "unresolved": {
        +        "description": "True when url still points at a redirector: count the citation, do not attribute the domain",
        +        "type": "boolean"
        +      },
        +      "url": {
        +        "description": "The URL exactly as the engine cited it, redirector included when unresolved is true",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "position",
        +      "unresolved"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
    • Changedget_project_rank_tracking_stats2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_query_movers2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_rank_tracking_time_series2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_sentiment_breakdown2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_tracked_query1 field changed
      • changedOutput schema / properties / engine / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedget_usage1 field changed
      • changedOutput schema / properties / projectedMonthlyChecks / properties / projectedMonthlyChecks / description
        Previous value: -"Checks a month of the current configuration would consume: for each ACTIVE tracked query, its runs per month (daily 30, weekly 4, monthly 1) multiplied by its nPasses, summed. Never null."New value: +"Checks a month of the current configuration would consume: for each ACTIVE tracked query, its runs per month (daily 30, weekly 4, monthly 1) multiplied by its nPasses and engine weight, summed. Claude uses five checks per pass; every other engine uses one. Never null."
    • Changedlist_ai_responses1 field changed
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode"
        +]
    • Changedlist_keyword_listings3 fields changed
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
      • changedOutput schema / properties / items / items / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
      • changedOutput schema / properties / items / items / properties / nPassesValues / description
        Previous value: -"Distinct pass counts across the variants. A pass is one budget unit per check."New value: +"Distinct pass counts across the variants. Each Claude pass consumes five checks; each other engine pass consumes one."
    • Changedlist_untracked_competitors2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions)"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions)"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
    • Changedsearch_tracked_queries2 fields changed
      • changedInput schema / properties / engines / description
        Previous value: -"allowed values: chatgpt, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"New value: +"allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping"
      • changedInput schema / properties / engines / items / enum
        Previous value: -[
        -  "chatgpt",
        -  "perplexity",
        -  "google_ai_overview",
        -  "google_ai_mode",
        -  "google_serp",
        -  "google_shopping"
        -]New value: +[
        +  "chatgpt",
        +  "claude",
        +  "perplexity",
        +  "google_ai_overview",
        +  "google_ai_mode",
        +  "google_serp",
        +  "google_shopping"
        +]
  2. 43 tool updates
    • Addedapply_auto_clustering
    • Addedarchive_organization
    • Addedarchive_project
    • Addedcancel_invitation
    • Addedcreate_clusters
    • Addedcreate_competitor
    • Addedcreate_organization
    • Addedcreate_project
    • Addedcreate_tracked_queries
    • Addeddelete_cluster
    • Addeddelete_competitor
    • Addeddelete_tracked_queries
    • Addeddiscover_brands
    • Addeddiscover_keywords
    • Addeddiscover_prompts
    • Addedget_job
    • Addedget_mencoro_guide
    • Addedget_organization
    • Addedget_project
    • Addedget_tracked_query
    • Addedget_tracked_query_matches
    • Addedget_usage
    • Addedinvite_member
    • Addedlist_ai_responses
    • Addedlist_clusters
    • Addedlist_keyword_listings
    • Addedlist_members
    • Addedlist_search_snapshots
    • Addedlist_untracked_competitors
    • Addedpreview_operation
    • Addedrename_cluster
    • Addedreport_ai_response
    • Addedrestore_organization
    • Addedrestore_project
    • Addedrun_checks
    • Addedset_tracked_query_clusters
    • Addedstart_auto_clustering
    • Addedsuggest_brand_names
    • Addedupdate_competitor
    • Addedupdate_member
    • Addedupdate_organization
    • Addedupdate_project
    • Addedupdate_tracked_queries
  3. 2 tool updates
    • Changedget_rank_tracking_time_series4 fields changed
      • changedOutput schema / properties / points / items / properties / brand / properties / mentionRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's AI checks (one per query, engine and day) in which this entity was mentioned; higher is better. 0 means checked and not mentioned; null means no AI check in the bucket."
      • changedOutput schema / properties / points / items / properties / brand / properties / serpRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's SERP checks (one per query, engine and day) in which this entity appeared in the results; higher is better. 0 means checked and absent; null means no SERP check in the bucket."
      • changedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's AI checks (one per query, engine and day) in which this entity was mentioned; higher is better. 0 means checked and not mentioned; null means no AI check in the bucket."
      • changedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's SERP checks (one per query, engine and day) in which this entity appeared in the results; higher is better. 0 means checked and absent; null means no SERP check in the bucket."
    • Changedget_tracked_query_time_series4 fields changed
      • changedOutput schema / properties / points / items / properties / brand / properties / mentionRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's AI checks (one per query, engine and day) in which this entity was mentioned; higher is better. 0 means checked and not mentioned; null means no AI check in the bucket."
      • changedOutput schema / properties / points / items / properties / brand / properties / serpRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's SERP checks (one per query, engine and day) in which this entity appeared in the results; higher is better. 0 means checked and absent; null means no SERP check in the bucket."
      • changedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's AI checks (one per query, engine and day) in which this entity was mentioned; higher is better. 0 means checked and not mentioned; null means no AI check in the bucket."
      • changedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of the bucket's SERP checks (one per query, engine and day) in which this entity appeared in the results; higher is better. 0 means checked and absent; null means no SERP check in the bucket."
  4. 3 tool updates
    • Changedget_cluster_breakdown2 fields changed
      • changedOutput schema / properties / rows / items / properties / mentionRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of AI checks (one per tracked query x engine x UTC day) in the period that mentioned the brand, each check counted as the share of its passes that did; higher is better."
      • changedOutput schema / properties / rows / items / properties / serpRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of traditional-search checks (one per tracked query x engine x UTC day) in the period in which the brand ranked; higher is better."
    • Changedget_organization_overview1 field changed
      • changedOutput schema / properties / projects / items / properties / mentionRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of AI checks (one per tracked query x engine x UTC day) across all retained data that mentioned the brand, each check counted as the share of its passes that did; higher is better."
    • Changedget_project_rank_tracking_stats7 fields changed
      • changedOutput schema / properties / mentionRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of AI checks (one per tracked query x engine x UTC day) in the period that mentioned the brand, each check counted as the share of its passes that did; higher is better."
      • changedOutput schema / properties / serpRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of traditional-search checks (one per tracked query x engine x UTC day) in the period in which the brand ranked; higher is better."
      • changedOutput schema / properties / shoppingRate / description
        Previous value: -"Percentage 0-100 of tracked queries with a result in the period; higher is better."New value: +"Percentage 0-100 of shopping checks (one per tracked query x engine x UTC day) in the period in which the brand ranked; higher is better."
      • changedOutput schema / properties / trendLink / description
        Previous value: -"Signed change in position vs the previous period; negative = improved (rank moved up)."New value: +"Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up)."
      • changedOutput schema / properties / trendMention / description
        Previous value: -"Signed change in position vs the previous period; negative = improved (rank moved up)."New value: +"Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up)."
      • changedOutput schema / properties / trendSerp / description
        Previous value: -"Signed change in position vs the previous period; negative = improved (rank moved up)."New value: +"Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up)."
      • changedOutput schema / properties / trendShopping / description
        Previous value: -"Signed change in position vs the previous period; negative = improved (rank moved up)."New value: +"Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up)."
  5. 12 tool updates
    • Changedget_cited_sources6 fields changed
      • addedOutput schema / properties / sources / items / properties / avgPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / sources / items / properties / avgPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / sources / items / properties / domain / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / sources / items / properties / domain / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / sources / items / properties / sampleTitle / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / sources / items / properties / sampleTitle / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedget_cluster_breakdown26 fields changed
      • addedOutput schema / properties / dataDirtySince / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / dataDirtySince / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / avgLinkPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / avgLinkPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / avgMentionCount / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / avgMentionCount / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / avgMentionPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / avgMentionPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / avgSerpPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / avgSerpPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / clusterId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / clusterId / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / mentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / mentionRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / positivityIndex / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / positivityIndex / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / sentimentNegative / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / sentimentNegative / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / sentimentNeutral / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / sentimentNeutral / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / sentimentPositive / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / sentimentPositive / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / serpRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / serpRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / rows / items / properties / shareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / rows / items / properties / shareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedget_competitor_cooccurrence12 fields changed
      • addedInput schema / properties / competitorId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / competitorId / type
        Removed value: -[
        -  "null",
        -  "string"
        -]
      • addedOutput schema / properties / competitors / items / properties / avgCompetitorPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / competitors / items / properties / avgCompetitorPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / competitors / items / properties / avgOwnPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / competitors / items / properties / avgOwnPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / competitors / items / properties / exampleAiResponseId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / competitors / items / properties / exampleAiResponseId / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / competitors / items / properties / exampleQueryText / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / competitors / items / properties / exampleQueryText / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / competitors / items / properties / winRate / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / competitors / items / properties / winRate / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
    • Changedget_mention_samples10 fields changed
      • addedInput schema / properties / competitorId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / competitorId / type
        Removed value: -[
        -  "null",
        -  "string"
        -]
      • addedInput schema / properties / mentionType / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / mentionType / type
        Removed value: -[
        -  "null",
        -  "string"
        -]
      • addedInput schema / properties / sentiment / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / sentiment / type
        Removed value: -[
        -  "null",
        -  "string"
        -]
      • addedOutput schema / properties / samples / items / properties / competitorId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / samples / items / properties / competitorId / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / samples / items / properties / mentionPosition / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / samples / items / properties / mentionPosition / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
    • Changedget_organization_overview16 fields changed
      • addedOutput schema / properties / aggregate / properties / avgMentionPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / aggregate / properties / avgMentionPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / aggregate / properties / avgMentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / aggregate / properties / avgMentionRate / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / aggregate / properties / avgPositivityIndex / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / aggregate / properties / avgPositivityIndex / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / aggregate / properties / avgShareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / aggregate / properties / avgShareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / projects / items / properties / avgMentionPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / projects / items / properties / avgMentionPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / projects / items / properties / mentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / projects / items / properties / mentionRate / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / projects / items / properties / positivityIndex / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / projects / items / properties / positivityIndex / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / projects / items / properties / shareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / projects / items / properties / shareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedget_project_rank_tracking_stats68 fields changed
      • addedOutput schema / properties / aiQueriesWithMention / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / aiQueriesWithMention / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / aiTrackedQueryCount / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / aiTrackedQueryCount / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / avgLinkPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / avgLinkPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / avgMentionPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / avgMentionPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / avgSerpPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / avgSerpPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / avgShoppingPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / avgShoppingPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / mentionCount / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / mentionCount / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / mentionPositionStability / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / mentionPositionStability / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / mentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / mentionRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / positivityIndex / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / positivityIndex / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / sentimentNegative / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / sentimentNegative / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / sentimentNeutral / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / sentimentNeutral / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / sentimentPositive / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / sentimentPositive / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / serpPositionStability / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / serpPositionStability / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / serpQueriesWithResult / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / serpQueriesWithResult / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / serpRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / serpRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / serpTrackedQueryCount / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / serpTrackedQueryCount / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / shareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / shareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / shoppingPositionStability / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / shoppingPositionStability / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / shoppingQueriesWithResult / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / shoppingQueriesWithResult / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / shoppingRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / shoppingRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / shoppingTrackedQueryCount / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / shoppingTrackedQueryCount / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / trendLink / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendLink / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendMention / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendMention / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendMentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendMentionRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendPositivity / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendPositivity / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendSerp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendSerp / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendSerpRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendSerpRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendSerpStability / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendSerpStability / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendShareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendShareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendShopping / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendShopping / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendShoppingRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendShoppingRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendShoppingStability / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendShoppingStability / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / trendStability / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / trendStability / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedget_query_movers2 fields changed
      • addedOutput schema / properties / dataDirtySince / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / dataDirtySince / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedget_rank_tracking_time_series34 fields changed
      • addedOutput schema / properties / dataDirtySince / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / dataDirtySince / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / link / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / link / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / mention / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / mention / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / mentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / mentionRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / positivity / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / positivity / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / serp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / serp / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / serpRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / serpRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / shareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / shareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / shopping / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / shopping / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / link / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / link / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedget_sentiment_breakdown4 fields changed
      • addedOutput schema / properties / perCompetitor / items / properties / positivityIndex / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / perCompetitor / items / properties / positivityIndex / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / perEngine / items / properties / positivityIndex / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / perEngine / items / properties / positivityIndex / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedget_tracked_query_time_series34 fields changed
      • addedOutput schema / properties / dataDirtySince / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / dataDirtySince / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / link / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / link / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / mention / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / mention / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / mentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / mentionRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / positivity / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / positivity / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / serp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / serp / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / serpRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / serpRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / shareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / shareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / brand / properties / shopping / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / brand / properties / shopping / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / link / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / link / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
    • Changedget_tracking_coverage2 fields changed
      • addedOutput schema / properties / sample / items / properties / lastCheckedAt / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / sample / items / properties / lastCheckedAt / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
    • Changedsearch_tracked_queries24 fields changed
      • addedInput schema / properties / search / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / search / type
        Removed value: -[
        -  "null",
        -  "string"
        -]
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedInput schema / properties / status / type
        Removed value: -[
        -  "null",
        -  "string"
        -]
      • addedOutput schema / properties / items / items / properties / lastCheckedAt / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastCheckedAt / type
        Removed value: -[
        -  "string",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastLinkPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastLinkPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastMentionPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastMentionPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastNegativeMentionCount / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastNegativeMentionCount / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastNeutralMentionCount / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastNeutralMentionCount / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastPositiveMentionCount / anyOf
        Added value: +[
        +  {
        +    "type": "integer"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastPositiveMentionCount / type
        Removed value: -[
        -  "integer",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastPositivityIndex / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastPositivityIndex / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastSerpPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastSerpPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastShareOfVoice / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastShareOfVoice / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
      • addedOutput schema / properties / items / items / properties / lastShoppingPosition / anyOf
        Added value: +[
        +  {
        +    "type": "number"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / items / items / properties / lastShoppingPosition / type
        Removed value: -[
        -  "number",
        -  "null"
        -]
  6. 17 tool updates
    • First observedget_available_filters
    • First observedget_cited_sources
    • First observedget_cluster_breakdown
    • First observedget_competitor_cooccurrence
    • First observedget_mention_mix
    • First observedget_mention_samples
    • First observedget_metric_glossary
    • First observedget_organization_overview
    • First observedget_project_rank_tracking_stats
    • First observedget_query_movers
    • First observedget_rank_tracking_time_series
    • First observedget_sentiment_breakdown
    • First observedget_share_of_voice_formula
    • First observedget_tracked_query_time_series
    • First observedget_tracking_coverage
    • First observedlist_projects
    • First observedsearch_tracked_queries

Publisher details

Operator
Virality Media S.L. · Publisher source
Operator website
https://mencoro.com
Vendor relationship
First-party
Trust center
Unknown
Restrictions
Unknown

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Monitors brand mentions, citations, sentiment, competitor share of voice, and GEO performance across AI search engines.
    1
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    22 npm
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Track how your brand appears in AI-generated answers across ChatGPT, Perplexity, and other AI models. Analyze visibility, sentiment, citations, and domain rankings with 31 tools — including analytics reports, chat inspection, query analysis, and full CRUD for brands, prompts, tags, and topics.
    17
    111 npm
    2
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.