Mencoro
Server Details
Track and manage how your brand appears in AI answers: rank, mentions, sentiment, share of voice.
- Status
- Healthy
- Uptime
- 99.2% over 42 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
Scored across 66 tools
Most tools target distinct resources and actions, and descriptions explicitly cross-reference alternatives (e.g., get_mention_mix vs get_sentiment_breakdown vs get_mention_samples; get_project_rank_tracking_stats vs get_cluster_breakdown). However, with 66 tools a few analytics and discovery tools overlap enough to require careful reading (search_tracked_queries vs list_keyword_listings; discover_keywords vs discover_prompts).
Every tool follows a consistent snake_case verb_noun pattern (e.g., create_project, list_ai_responses, pause_tracked_queries). There is no mixing of camelCase, PascalCase, or inconsistent verb styles across CRUD, analytics, and lifecycle operations.
66 tools is far beyond the typical 3–15 range and qualifies as an extreme mismatch under the rubric. Even for a broad platform, this surface is likely overwhelming and hard to navigate without significant cognitive load.
The surface covers organizations, projects, competitors, tracked queries, clusters, analytics, AI responses, search snapshots, background jobs, members, billing/usage, and guides. Lifecycle operations are comprehensive, with soft-delete via archive and restore where appropriate.
Available Tools
66 toolsadd_tracked_queries_to_clustersAdd tracked queries to clustersAIdempotentInspect
Add up to 100 tracked queries to one or more query clusters. Other cluster memberships are left alone. Each tracked query that cannot be changed is reported in "failed" without stopping the rest. Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes | ||
| queryClusterIds | Yes | ||
| trackedQueryIds | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | The resources the operation was applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (idempotentHint=true, destructiveHint=false), the description adds genuinely new behavioral detail: per-item partial failure is reported in 'failed' without aborting the batch, other memberships are untouched, and the call is retry-safe. It does not cover auth/permission requirements or rate limits, so it stops short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the operation and its limits, then failure semantics and retry safety. No filler or restatement of the title; every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the key behavioral risks for a batch mutation (partial failure, non-destructive additive semantics, idempotency). It is only slightly short of complete, omitting what happens with unknown cluster or query IDs and how org/project scoping constrains the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all four required parameters. The description semantically identifies two of them (tracked queries, query clusters) and clarifies the many-to-many relationship, which is useful, but organizationId and projectId scoping go unexplained and the '100' limit merely restates the schema's maxItems constraint.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (add) and resource (tracked queries to query clusters) plus the cardinality ceiling of 100 and the many-to-many scope ('one or more query clusters'). This is unambiguously distinguishable from siblings like remove_tracked_queries_from_clusters, create_clusters, and delete_cluster without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The additive note 'Other cluster memberships are left alone' implies this tool is for augmenting existing cluster membership rather than reassigning it, and 'Safe to retry' hints it can be re-run. However, it never names an alternative or states when-not to use it (e.g. versus create_clusters or apply_auto_clustering), leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_auto_clusteringApply a proposed clusteringADestructiveInspect
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. In "full_regroup" mode a tracked query the proposal places also leaves every cluster the proposal did not put it in; "fill_gaps" and "add_on_top" only add. No cluster or tracked query is deleted. 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. The response lists each tracked query's resulting clusters, not the memberships removed, so 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.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| clusters | No | Every cluster the assignments referred to, and whether this call created it. |
| successful | No | Tracked queries written, each with the cluster ids it ended up with - the resulting state, not the delta. |
| unassigned | No | Tracked queries the job produced no assignment for. Nothing was written for them and they keep the clusters they already had, under every merge mode. |
| skippedClusters | No | Proposed names the store cannot hold. A tracked query whose proposed cluster was skipped ends up with fewer clusters than the proposal showed. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which flag destructiveHint=true and idempotentHint=false), the description discloses mode-specific semantics ('full_regroup' removes memberships from other clusters; 'fill_gaps'/'add_on_top' only add), that nothing is deleted, that cluster names are lower-cased and existing names are reused, and that the response omits removed memberships. It also explains the requestId retry contract, which reconciles with the non-idempotent hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, but every sentence carries load: mode semantics, non-deletion, naming rules, response shape, and the retry/idempotency contract. It is front-loaded with the core action, though the length is near the limit for one paragraph.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with an output schema, the description covers everything an agent needs: the workflow prerequisite, per-mode effects, non-destructive guarantees, naming behavior, and the idempotency-key contract. Return values are summarized sufficiently without duplicating the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, so the description must compensate. It adds real meaning for jobId (a completed start_auto_clustering job) and requestId ('fresh... reuse it if you retry'), but organizationId and projectId are left entirely undocumented in both schema and description. Partial compensation merits a middle score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Apply the grouping a completed start_auto_clustering job proposed') and immediately names the sibling tools involved (start_auto_clustering, get_job). Its scope is clearly distinct from siblings like create_clusters, add_tracked_queries_to_clusters, and start_auto_clustering.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear workflow context: this tool consumes the output of a completed start_auto_clustering job, and 'show the proposal (get_job) to the user first' tells the agent the required preceding step. It does not explicitly state when not to use it versus manually adding queries to clusters via add_tracked_queries_to_clusters, 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.
archive_organizationArchive an organizationADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| role | Yes | The caller's current role in this organization |
| status | Yes | |
| imageUrl | No | |
| createdAt | Yes | |
| description | No | |
| contactEmail | No |
TDQS
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.
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.
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.
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.
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.
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 projectADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| requestId | No | ||
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| status | Yes | |
| createdAt | Yes | |
| brandNames | Yes | Brand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet. |
| competitors | Yes | Competitors this project is measured against. Empty when none are configured. |
| organizationId | Yes | |
| websiteDomains | Yes | Domains the project is monitored for. Empty when the project has no brand monitoring profile yet. |
TDQS
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.
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.
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.
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.
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.
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 invitationADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| invitationId | Yes | ||
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | Yes | |
| Yes | ||
| state | Yes | |
| createdAt | Yes | |
| expiresAt | Yes | |
| acceptedAt | No |
TDQS
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.
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.
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.
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.
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.
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.
change_member_roleChange a member's roleADestructiveInspect
Give an organization member another role: owner, manager or viewer. memberId is the member id from list_members, not the user id. Requires a confirmationToken: call preview_operation with tool "change_member_role" 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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| memberId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | Yes | |
| state | Yes | |
| userId | Yes | The user this membership belongs to |
| isActive | Yes | |
| joinedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnlyHint=false, and the description reinforces this with concrete preconditions: a mandatory confirmationToken, an explicit user-approval gate, and the permission and owner-role requirements. This is real behavioral context beyond the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, each carrying load — role options, identifier source, then the confirmation/permission workflow. Front-loaded with purpose, though the confirmation sequence is long enough that it slightly crowds the opening.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described; the description instead covers the things structured fields cannot — the preview/confirm protocol, permissions, and identifier semantics. An agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 20%, so the description must compensate: it clarifies that memberId comes from list_members rather than being a user id, lists the role enum, and explains the confirmationToken's purpose and how to obtain it. organizationId is left implicit, and requestId is already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('give ... another role'), the resource (organization member), and enumerates the three role values. It also disambiguates the target identifier from a sibling concept (user id), so an agent knows exactly what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly describes the required workflow: call preview_operation with tool 'change_member_role' and these arguments, show the plan, and only call this tool after the user agrees. It also names the permission (organization:manage) and the required caller role (owner), 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.
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 add_tracked_queries_to_clusters, or let start_auto_clustering propose groups. Pass a fresh requestId and reuse it if you retry.
| Name | Required | Description | Default |
|---|---|---|---|
| names | Yes | ||
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | Clusters created by this call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-readOnly and non-destructive, and the description adds real behavior beyond them: names are lower-cased and must be unique, failures are reported per-name in 'failed' without aborting the batch, and retries are safe via requestId. It stops short of auth/permission or quota context, so 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope, and the four sentences each carry distinct information (constraints, partial-failure behavior, follow-on tools, retry key). The names clause is dense, packing normalization, uniqueness and failure reporting into one sentence, but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description still covers constraints, batch size, partial-failure semantics and idempotent retry. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (requestId only), so the description must compensate; it does so for 'names' by specifying the 100-item cap, lower-casing normalization and project-scoped uniqueness. organizationId and projectId remain unexplained in both schema and description, so it is not fully compensating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb, resource and scope ('Create up to 100 query clusters in a project') and even defines what a cluster is ('the groups tracked queries are organized in'). An agent can distinguish it from rename_cluster, delete_cluster and list_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the follow-on tools explicitly ('Assign tracked queries with add_tracked_queries_to_clusters, or let start_auto_clustering propose groups'), which effectively routes the agent. However, it gives no when-not guidance, e.g. checking list_clusters first or using rename_cluster when the group already exists.
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. list_untracked_competitors shows the brands AI answers name that are not tracked yet. Pass a fresh requestId and reuse it if you retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| brandNames | Yes | ||
| organizationId | Yes | ||
| websiteDomains | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | The competitor's display name |
| brandNames | Yes | Names a mention is matched against for this competitor |
| websiteDomains | Yes | Domains a result is matched against for this competitor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), and the description adds the consequential side effect that tracking begins immediately. It also explains the retry contract ('Pass a fresh requestId and reuse it if you retry'), which complements rather than contradicts 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The persistent-tracking effect is front-loaded in the first clause, followed by the discovery pointer and the idempotency note. Three tight sentences with little waste, though the phrasing is dense and slightly clause-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values needn't be explained, and annotations carry the safety profile. The description covers the main behavioral surprise (immediate persistent tracking) and the retry semantics; it does not mention limits, billing or failure modes, but nothing essential to invoking it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (just requestId), so the description must compensate. It does add meaning for three params in prose ('website domains' and 'the names it is mentioned by', plus name), but organizationId and projectId are left entirely undescribed, so the gap is only partially filled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (Add) and resource (competitor to a project), then explains the persistent effect: its mentions and rankings are tracked alongside the brand's. This clearly separates it from update_competitor and delete_competitor, which only modify or remove an already-tracked competitor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names an explicit discovery path ('list_untracked_competitors shows the brands AI answers name that are not tracked yet'), which tells the agent where to source candidates before calling this. It does not state exclusions (e.g. use update_competitor instead when the competitor already exists), so it falls just short of a full 5.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| status | Yes | Always active on creation. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| brandNames | Yes | The names the brand is mentioned by, e.g. ["Acme", "Acme Corp"] | |
| competitors | No | ||
| organizationId | Yes | ||
| websiteDomains | Yes | The brand's own domains, e.g. ["acme.com"] |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| status | Yes | |
| createdAt | Yes | |
| brandNames | Yes | Brand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet. |
| competitors | Yes | Competitors this project is measured against. Empty when none are configured. |
| organizationId | Yes | |
| websiteDomains | Yes | Domains the project is monitored for. Empty when the project has no brand monitoring profile yet. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| locale | No | Optional two-letter language the engines should answer in | |
| engines | Yes | ||
| nPasses | Yes | 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. | |
| countries | Yes | ISO 3166-1 alpha-2 codes, e.g. ["US", "ES"] | |
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| queryTexts | Yes | ||
| checkFrequency | Yes | ||
| organizationId | Yes | ||
| queryClusterIds | No | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | Tracked queries created by this call, one entry per query text, engine and country combination. |
TDQS
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.
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.
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.
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.
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.
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 clusterADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| clusterId | Yes | ||
| projectId | Yes | ||
| requestId | No | ||
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | The cluster that was deleted |
| name | Yes | Its name at the moment it was deleted |
| deleted | Yes |
TDQS
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.
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.
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.
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.
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.
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 competitorADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| requestId | No | ||
| competitorId | Yes | ||
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| brandNames | Yes | |
| websiteDomains | Yes |
TDQS
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.
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.
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.
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.
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.
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 queriesADestructiveInspect
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 pause_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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| requestId | No | ||
| organizationId | Yes | ||
| trackedQueryIds | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | The resources the operation was applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotency, and the description adds substantial value on top: it names the collateral data destroyed (answers, matches, metrics), declares the operation irreversible, and documents the confirmationToken gate. This is exactly the extra behavioral 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, zero filler, front-loaded with the action and blast radius before the alternative and the mandatory workflow. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, gated mutation tool with an output schema (so return values need not be described), the definition covers purpose, scope, irreversibility, alternative path, and the token acquisition workflow. Nothing an agent needs in order to call this safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It fully explains the least obvious parameter (confirmationToken: how to obtain it via preview_operation and the user-agreement precondition) and confirms the 100-item cap that matches maxItems. It leaves organizationId, projectId and especially requestId unexplained, which is a real but smaller gap since those names are largely self-describing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (tracked queries), plus the exact blast radius: 'together with their captured answers, matches and metrics history' and the batch limit of 100. An agent can distinguish this from pause_tracked_queries and delete_cluster without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides the when-not and the alternative: 'to stop spending budget without losing history, pause them with pause_tracked_queries instead.' It also spells out the required prerequisite workflow (preview_operation first, show plan, get explicit user agreement) so there is no inference required.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| country | No | ||
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| shoppingEnabled | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Pass it to get_job. May name a job started by an earlier, equivalent call. |
| nextStep | Yes | |
| deduplicated | Yes | Whether this call joined a job that was already running instead of starting one |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | ||
| country | No | ||
| language | No | ||
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| excludeQueries | No | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Pass it to get_job. May name a job started by an earlier, equivalent call. |
| nextStep | Yes | |
| deduplicated | Yes | Whether this call joined a job that was already running instead of starting one |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| input | Yes | ||
| country | Yes | ||
| language | No | ||
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| excludeQueries | No | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Pass it to get_job. May name a job started by an earlier, equivalent call. |
| nextStep | Yes | |
| deduplicated | Yes | Whether this call joined a job that was already running instead of starting one |
TDQS
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.
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.
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.
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.
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.
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 filtersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| engines | Yes | |
| clusters | Yes | |
| countries | Yes | |
| competitors | Yes |
TDQS
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.
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.
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.
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.
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.
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 pagesARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | Yes | ||
| offset | No | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (only AI engines carry citations) | |
| groupBy | No | "domain" to roll up by host, "page" to roll up by exact URL | domain |
| dateFrom | Yes | ||
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| sources | Yes |
TDQS
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.
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.
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.
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.
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.
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 clusterARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| organizationId | Yes | ||
| queryClusterIds | No | restrict to these keyword clusters | |
| includeUngroupedQueries | No | Sent alone, returns only the ungrouped row: the tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds that row to those clusters. Omit both for every cluster plus the ungrouped row. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| dataDirtySince | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive, closed-world behavior, so the bar is lower. The description adds genuine beyond-schema context: a data-retention constraint on dates and the shape of the result (per-cluster rows). It does not cover pagination or default engine/country scope, which keeps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core payload, grain and date constraint are front-loaded in the first two sentences, with the example questions last. It is efficient and free of filler, though the third sentence is arguably optional given how self-explanatory the tool name is.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the description need not explain return values, and annotations carry the safety profile. The description still supplies the key operational constraint (retention window) and the per-cluster grain. Missing details are minor – e.g. what happens when a cluster has no data, or defaults for engines/countries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, with engines, countries, queryClusterIds and includeUngroupedQueries documented in the schema itself. The description only adds meaning to the date pair via the retention-window rule; organizationId, projectId and the filter arrays get no elaboration. Baseline 3 is appropriate given the partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely ('rank-tracking metrics broken down per keyword cluster') and even states the output grain – one row per cluster with positions, share of voice and sentiment. That clearly separates it from get_sentiment_breakdown, get_share_of_voice_formula and get_rank_tracking_time_series. It stops short of naming a sibling alternative explicitly, so it is clear but not fully differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through example questions ('which keyword clusters are strongest or weakest', 'how does my niche compare to my generic queries'), which helps an agent recognize the right scenario. However, there is no explicit when-not guidance and no named alternative for the adjacent time-series or single-query tools, so routing remains partly inferential.
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)ARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions) | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| competitorId | No | optional competitor UUID to focus on a single rival; competitor UUIDs are listed by get_available_filters (competitors[].id) | |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| competitors | Yes |
TDQS
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.
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.
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.
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.
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.
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 jobARead-onlyIdempotentInspect
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. A discover_prompts job usually finishes within 15 minutes and fails with error.code timed_out after about 30 minutes. A failed job carries error.code (timed_out, provider_failed, submission_failed or internal_error) and error.message, which says what to do next.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | What the job produces, and therefore the shape of `result` |
| error | No | Why the job failed, and what to do next. Null unless `status` is `failed`. |
| jobId | Yes | |
| result | No | The 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. |
| status | Yes | A job in `pending`, `running` or `awaiting_retry` is still in flight; `completed` and `failed` are terminal. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial context beyond them: polling cadence, that discover_prompts typically finishes in 15 minutes and times out around 30, and the failure taxonomy (timed_out, provider_failed, submission_failed, internal_error) with error.message guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then progressive operational detail. Dense but each sentence contributes (poll behavior, timing, error codes). Slightly long, but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a polling tool with an output schema and full safety annotations, the description covers behavior, timing, and error handling well. The only gap is identifying the two required inputs, which the schema does not document either.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden of explaining jobId and organizationId, yet neither parameter is described. It implies jobId originates from the job-starting tools but never states the identifier source explicitly, and organizationId is entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: the status and result of a background job. It also names the exact sibling tools that create such jobs (discover_brands, suggest_brand_names, discover_keywords, discover_prompts, start_auto_clustering), so an agent can immediately place it relative to the job-starting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit operational guidance: poll every few seconds until status is completed or failed, and do not restart the job while it is pending or running. It also gives an expected timeline and failure conditions, which is exactly the kind of when-to-use context an agent needs to avoid duplicate work.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mencoro_guideMencoro guideARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | The topic to read; omit it, or pass "index", for the list of topics. |
Output Schema
| Name | Required | Description |
|---|---|---|
| title | Yes | |
| topic | Yes | The topic answered, or "index" for the list of topics |
| source | Yes | The public page this topic is written from |
| topics | Yes | Every topic, on the index only; empty otherwise |
| content | Yes | The guide text, in Markdown |
| related | Yes | Other topics worth reading next |
| summary | Yes |
TDQS
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.
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.
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.
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.
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.
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)ARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| byTone | Yes | |
| byType | Yes | |
| byQualifier | Yes |
TDQS
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.
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.
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.
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.
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.
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 textsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | Yes | ||
| offset | No | ||
| sortBy | No | recent | |
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| sentiment | No | ||
| mentionType | No | ||
| competitorId | No | UUID of a single competitor to filter to; competitor UUIDs are listed by get_available_filters (competitors[].id). Omit to include all competitors | |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| samples | Yes |
TDQS
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.
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.
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.
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.
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.
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 glossaryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| metrics | Yes |
TDQS
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.
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.
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.
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.
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.
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 organizationARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| stats | Yes | |
| organization | Yes | An organization the caller is a member of |
TDQS
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.
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.
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.
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.
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.
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 overviewARead-onlyIdempotentInspect
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 in total and per engine family: AI, SERP, Shopping) 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".
| Name | Required | Description | Default |
|---|---|---|---|
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| projects | Yes | |
| aggregate | Yes |
TDQS
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 structurally. The description adds one genuinely non-obvious behavioral fact — that it takes NO date window and is a current-state snapshot — which annotations cannot express. It says nothing about auth requirements, aggregation lag, or large-organization performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and output shape, then the usage constraint and the example question. The middle sentence is dense with column names but each earns its place; the only redundancy is restating the snapshot/no-date-window point in the example sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Aggregate tool with an output schema present, so return values need no further explanation — yet the description still names the row grain and aggregate. Required param, routing alternative, and the no-date-window constraint are all covered; nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single organizationId parameter is undocumented, so the description must compensate. It scopes the tool to an organization and clarifies the absence of date parameters, but adds no meaning about what organizationId accepts or where to obtain it. Marginal compensation for a one-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('rank-health board across all active projects in an organization') and enumerates the returned columns — share of voice, mention rate, position, positivity, query counts — so the agent knows exactly what this tool produces. It also explicitly distinguishes itself from the per-project time-series tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both when-to-use ('company-wide summary of share of voice and sentiment across all my projects') and when-not ('for date-ranged comparison, call the per-project tools ... for each project id returned here'), naming the specific alternative. Routing is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_projectGet a projectBRead-onlyIdempotentInspect
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).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| status | Yes | |
| createdAt | Yes | |
| brandNames | Yes | Brand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet. |
| competitors | Yes | Competitors this project is measured against. Empty when none are configured. |
| organizationId | Yes | |
| websiteDomains | Yes | Domains the project is monitored for. Empty when the project has no brand monitoring profile yet. |
TDQS
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.
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.
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.
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.
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.
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 overviewARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| organizationId | Yes | ||
| queryClusterIds | No | restrict to these keyword clusters | |
| includeUngroupedQueries | No | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| serpRate | No | 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. |
| trendLink | No | Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up). |
| trendSerp | No | Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up). |
| mentionRate | No | 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. |
| mentionCount | No | |
| shareOfVoice | No | 0-100 percentage share of weighted AI mentions vs all tracked brands; higher is better. |
| shoppingRate | No | 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. |
| trendMention | No | Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up). |
| trendSerpRate | No | Signed change in the rate vs the previous period; positive = improved. |
| trendShopping | No | Signed improvement in position vs the previous period (previous minus current); positive = improved (rank moved up). |
| trendStability | No | |
| avgLinkPosition | No | 1-based rank; LOWER is better. |
| avgSerpPosition | No | 1-based rank; LOWER is better. |
| positivityIndex | No | 0-100 sentiment score; higher is better. |
| trendPositivity | No | Signed change in the positivity index vs the previous period; positive = improved. |
| sentimentNeutral | No | |
| trendMentionRate | No | Signed change in the rate vs the previous period; positive = improved. |
| mentionTypeCounts | No | |
| sentimentNegative | No | |
| sentimentPositive | No | |
| trendShareOfVoice | No | Signed change in share of voice vs the previous period; positive = improved. |
| trendShoppingRate | No | Signed change in the rate vs the previous period; positive = improved. |
| avgMentionPosition | No | 1-based rank; LOWER is better. |
| trendSerpStability | No | |
| aiTrackedQueryCount | No | |
| avgShoppingPosition | No | 1-based rank; LOWER is better. |
| aiQueriesWithMention | No | |
| lastCheckedAtByEngine | No | |
| serpPositionStability | No | |
| serpQueriesWithResult | No | |
| serpTrackedQueryCount | No | |
| trendShoppingStability | No | |
| mentionPositionStability | No | |
| serpPositionDistribution | No | |
| checkedQueryCountByFamily | No | |
| shoppingPositionStability | No | |
| shoppingQueriesWithResult | No | |
| shoppingTrackedQueryCount | No | |
| trackedQueryCountByFamily | No | |
| mentionPositionDistribution | No | |
| shoppingPositionDistribution | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds real behavioral context the annotations don't: the data-retention window constraint on dates and the fact that results are aggregated summaries spanning competitors, sentiment, and position buckets.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the scope phrase and metric list, then the routing guidance, then the retention caveat and example questions. The metric enumeration is long but each item is informative; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described, yet the description still conveys the shape of the answer. Combined with sibling routing, the retention prerequisite, and usage triggers, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: the optional filters (engines, countries, queryClusterIds, includeUngroupedQueries) are documented in the schema, while the four required identifiers/dates are not. The description only partially compensates by tying the date parameters to the retention window and gesturing at a 'date window' scope; it says nothing about how organizationId, projectId, or the filters shape the aggregation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (project rank-tracking summary), the scope (aggregated over a date window), and enumerates the metrics returned. It explicitly separates itself from siblings by calling out 'per-cluster or time-series tools', so an agent can route correctly without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States a preference ordering ('prefer it before the per-cluster or time-series tools'), gives concrete interrogation triggers ('how visible is my brand', 'am I ahead of competitors'), and adds a hard prerequisite that dates must fall within the retention window.
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 moversARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | Yes | ||
| offset | No | ||
| sortBy | No | which trend delta to rank by | trend_share_of_voice |
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| sortOrder | No | desc for top gainers, asc for top losers | desc |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | |
| total | Yes | |
| dataDirtySince | No |
TDQS
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.
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.
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.
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.
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.
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 seriesARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| granularity | No | daily | |
| competitorIds | No | UUIDs of competitors to add as extra series; competitor UUIDs are listed by get_available_filters (competitors[].id) | |
| organizationId | Yes | ||
| queryClusterIds | No | restrict to these keyword clusters | |
| includeUngroupedQueries | No | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| points | Yes | |
| dataDirtySince | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the read-only, idempotent, non-destructive profile, so the bar is lower. The description still adds real behavioral context: the data-retention window constraint on dates, the response-size tradeoff across granularities, and the fact that competitor series are optional additions. It does not cover auth needs or rate limits, but with safety annotations present this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core purpose and the granularity/compactness guidance are front-loaded, and the sentences are dense and free of filler. The trailing 'Answers questions like ...' sentence is useful routing context but slightly softens an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with an output schema present, the description covers the essential calling axes (date window, retention constraint, bucketing, optional competitor series, per-engine split). It is complete enough to invoke correctly, though it omits any disambiguation against sibling time-series and stats tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% and there are 10 parameters. The description echoes granularity options and mentions competitor lines and per-engine splitting, but leaves the meaning of flags like includeUngroupedQueries and the organization/project/date identifiers to the schema. It adds marginal value over the structured fields rather than compensating for the half of parameters that lack documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: a time series of rank-tracking metrics for a project over a date window, with the bucketing axis named. It is clear what the tool returns, but it never distinguishes itself from the closely related get_tracked_query_time_series or get_project_rank_tracking_stats, so an agent must infer which time-series tool to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives genuine usage context by naming the questions it answers ("what changed in my AI visibility", "share-of-voice trend split by engine") and advises weekly/monthly for long windows. However it names no alternative tool and gives no when-not condition, so the agent gets implied rather than explicit routing guidance for a family with several similar reads.
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 breakdownARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| dateFrom | Yes | ||
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| organizationId | Yes | ||
| queryClusterIds | No | restrict to these keyword clusters | |
| includeUngroupedQueries | No | Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| perEngine | Yes | |
| perCompetitor | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and a closed world, so safety is covered. The description adds genuinely useful context beyond that: the breakdown dimensions returned and the data-retention constraint on dates, which affects call validity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose, then routing, then the retention caveat; the illustrative questions ('is anything negative being said about my brand') are slightly redundant but aid intent matching. No sentence is wasted, though the description is a touch longer than strictly needed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description covers purpose, alternatives, and the retention constraint. It leaves the filtering semantics (countries, query clusters) to the schema, which is acceptable but not complete for an 8-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% across 8 params; the description adds little parameter-level meaning beyond reiterating the date window (already in schema) and gesturing at engines via 'per AI engine'. Countries, queryClusterIds, and includeUngroupedQueries semantics live only in the schema, 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.
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 the brand's AI mentions over a date window') plus the grouping dimensions (per AI engine, per competitor). It clearly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('Use for tone/sentiment questions') and names two alternatives with the exact condition that selects each ('brand's own mention counts by type... use get_mention_mix', 'read the actual mention texts... use get_mention_samples'). It also flags the retention-window prerequisite for the date parameters.
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 queryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes | ||
| trackedQueryId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| engine | Yes | |
| locale | No | Language tag the query is asked in. Null when the engine is asked without one. |
| status | Yes | |
| country | Yes | ISO-3166 alpha-2 country the query is asked from |
| nPasses | Yes | Passes run per check. Greater than 1 only for AI engines. |
| projectId | Yes | The project this tracked query belongs to |
| queryText | Yes | The prompt or keyword sent to the engine |
| lastCheckedAt | No | When a check last completed. Null means no check has completed yet, which is not the same as a check that found nothing. |
| checkFrequency | Yes | How often the query is checked while active |
| queryClusterIds | Yes | Clusters (groups) this query belongs to. Empty when it is ungrouped. |
TDQS
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.
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.
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.
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.
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.
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 matchesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| limit | No | ||
| dateTo | No | ||
| offset | No | ||
| dateFrom | No | ||
| projectId | Yes | ||
| sortOrder | No | desc | |
| organizationId | Yes | ||
| trackedQueryId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| items | Yes | Mention matches when kind is "mention", search-result matches when it is "serp". |
| total | Yes |
TDQS
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.
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.
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.
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.
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.
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 seriesARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| dateTo | Yes | ||
| dateFrom | Yes | ||
| projectId | Yes | ||
| granularity | No | daily | |
| competitorIds | No | UUIDs of competitors to add as extra series; competitor UUIDs are listed by get_available_filters (competitors[].id) | |
| organizationId | Yes | ||
| trackedQueryId | Yes | a tracked query UUID from search_tracked_queries (items[].id) |
Output Schema
| Name | Required | Description |
|---|---|---|
| points | Yes | |
| dataDirtySince | No |
TDQS
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.
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.
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.
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.
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.
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 & stalenessARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| active | Yes | |
| paused | Yes | |
| sample | Yes | |
| overdue | Yes | |
| projectId | Yes | |
| neverChecked | Yes |
TDQS
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.
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.
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.
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.
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.
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 usageARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| entitlements | Yes | Null unless the caller owns the organization. |
| subscription | Yes | The current subscription contract of an organization |
| trackedQueries | Yes | How many tracked queries an organization has configured |
| projectedMonthlyChecks | Yes | What an organization's current tracking configuration would consume in a month |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| role | Yes | ||
| Yes | |||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 answersARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | No | ||
| offset | No | ||
| engines | No | ||
| dateFrom | No | ||
| projectId | Yes | ||
| sortOrder | No | desc | |
| organizationId | Yes | ||
| trackedQueryId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes |
TDQS
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.
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.
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.
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.
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.
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 clustersBRead-onlyIdempotentInspect
A project's query clusters (the groups its tracked queries are organized in), by name, with their ids.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| projectId | Yes | ||
| sortOrder | No | asc | |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes |
TDQS
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.
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.
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.
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.
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.
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 performanceARead-onlyIdempotentInspect
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). A variant not checked in the range contributes its latest earlier position; carriedPositions says which position figures were carried and from when. Filter by engine, country, cluster, status, check frequency, passes or text; sort by any metric. The keyword-level view of a project.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | Yes | ||
| offset | No | ||
| search | No | ||
| sortBy | No | keyword | |
| status | No | ||
| engines | No | ||
| nPasses | No | ||
| dateFrom | Yes | ||
| countries | No | ||
| projectId | Yes | ||
| sortOrder | No | asc | |
| organizationId | Yes | ||
| queryClusterIds | No | ||
| checkFrequencies | No | ||
| includeUngroupedQueries | No | Sent alone, restricts to keywords with variants that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all keywords. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes | |
| dataDirtySince | Yes | When the figures started being recomputed, if they are; null when they are current |
| totalVariantCount | Yes | Tracked queries behind all the matching rows |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed world), and the description adds genuinely non-obvious behavior: variants not checked in the range carry forward their latest earlier position, and carriedPositions reports which figures were carried and from when. It also pins the date format as inclusive YYYY-MM-DD, though it says nothing about pagination limits beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the row grain and metric list, followed by the carry-forward caveat and the filter/sort summary — a logical order with no filler sentences. The sentences are long and dense, but every clause adds operational information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shapes need not be restated, and the description already explains the row grain, metric meaning, carry-forward behavior, filtering, and sorting. For a 16-parameter read tool, that is enough for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 6% across 16 parameters, so the description carries most of the burden and does so reasonably: it maps the filter set (engine, country, cluster, status, check frequency, passes, text) and the sortable metrics onto the parameters, and clarifies the date range semantics. It leaves limit/offset, organizationId/projectId scoping, and the search semantics (max length) to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise verb and resource — one row per tracked query text aggregating its engine/country variants — and names the exact metrics returned (share of voice, positivity, mention, link, search and shopping positions). The closing line 'The keyword-level view of a project' explicitly positions it against sibling views such as cluster or time-series breakdowns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It enumerates the available filters (engine, country, cluster, status, check frequency, passes, text) and sorting, which implies how to narrow results, but never says when to choose this tool over search_tracked_queries, get_cluster_breakdown, or get_rank_tracking_time_series. Usage is inferable from capabilities rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersList organization membersARead-onlyIdempotentInspect
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 change_member_role, suspend_member and reactivate_member take.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| organizationId | Yes | ||
| includeInvitations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| members | Yes | |
| pendingInvitations | Yes | Null unless includeInvitations was true. Every pending invitation, oldest first, up to 100. |
TDQS
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 value beyond that: sort order (oldest first), returned fields (role, state), optional invitation inclusion, and the owner-only permission requirement. It does not mention pagination behavior, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with what is returned, then the permission constraint, then the ID-semantics tip. Every sentence earns its place, though the final sentence is slightly tangential to listing itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers permissions, ordering and the optional invitation flag. The only real gap is pagination semantics for limit/offset, which leaves the definition slightly incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It clarifies includeInvitations ("optionally also its pending invitations") and implies organizationId, but says nothing about limit/offset pagination, leaving two of four parameters undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (list) and resource (organization members) and states the scope precisely: members oldest-first with role and state, plus optional pending invitations. It is clearly distinguishable from siblings like get_organization or invite_member.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ("Owners only, as in the web app") and routes the agent by noting the returned "id" is the key consumed by change_member_role, suspend_member and reactivate_member. It does not explicitly state when to prefer this over other listing tools, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList organizations and projectsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| organizations | Yes |
TDQS
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.
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.
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.
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.
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.
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 resultsARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | ||
| limit | No | ||
| dateTo | No | ||
| offset | No | ||
| dateFrom | No | ||
| projectId | Yes | ||
| sortOrder | No | desc | |
| organizationId | Yes | ||
| trackedQueryId | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| items | Yes | Search snapshots when kind is "serp", shopping snapshots when it is "shopping". |
| total | Yes |
TDQS
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.
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.
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.
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.
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.
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 trackARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| dateTo | No | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode (SERP/Shopping have no AI text mentions) | |
| dateFrom | No | ||
| countries | No | ISO-3166 alpha-2 country codes; a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| brands | Yes | |
| dateTo | Yes | |
| dateFrom | Yes |
TDQS
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.
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.
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.
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.
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.
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.
pause_tracked_queriesPause tracked queriesADestructiveIdempotentInspect
Pause up to 100 tracked queries: their checks stop until resume_tracked_queries restarts them, so they spend no budget meanwhile; use get_usage to see the effect. Checks skipped while paused are never made up later, and pausing also cancels a check still in progress. Each one that cannot be paused is reported in "failed". Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes | ||
| trackedQueryIds | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | The resources the operation was applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint, idempotentHint) the description discloses that skipped checks are never made up, that an in-progress check is cancelled, that failures are reported in 'failed', and that retrying is safe. This is rich behavioral context that goes well past 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that front-loads the core action before the caveats. Every clause carries information; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover safety hints, so the description only needs to supply operational behavior, which it does thoroughly (budget impact, cancellation, no makeup, failure reporting, retry safety).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and organizationId/projectId are not explained at all. The description does compensate partially by clarifying the collection semantics (up to 100, per-id failure reporting), but leaves scope and identity parameters unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Pause ... tracked queries') with an explicit scope ('up to 100'). It names the counterpart sibling resume_tracked_queries, so an agent can distinguish pausing from resuming without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear operational context (checks stop and spend no budget) and points to a follow-up tool (get_usage) and the restart path (resume_tracked_queries). It does not state a when-not condition or prerequisites, so it falls short of the full when/alternatives bar.
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 itARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | ||
| arguments | Yes | The arguments the write tool would be called with, without confirmationToken and requestId. |
Output Schema
| Name | Required | Description |
|---|---|---|
| plan | Yes | |
| tool | Yes | |
| nextStep | Yes | |
| expiresAt | Yes | |
| expiresInSeconds | Yes | |
| confirmationToken | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, correctly signalling that the preview itself mutates nothing, and the description is consistent with that. It adds real context beyond the annotations — token is single-use, expires in minutes, and is refused if the underlying state changed — but omits how the token/arguments are correlated or what the returned plan contains, so it is good rather than comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five tight sentences, front-loaded with the tool's purpose, then the parameter contract, then the human-in-the-loop workflow, then the token lifecycle. Every sentence is load-bearing and no instruction is repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, return values need no explanation, and the description covers the two required parameters, the user-confirmation protocol, and token invalidation rules. An agent has everything needed to call this correctly and then safely invoke the target write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (the 'tool' enum has no schema-level description), and the description compensates well: it names both parameters and specifies the exact argument set to pass, excluding confirmationToken and requestId. It stops short of explaining how 'arguments' shape is validated per selected tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — describe what a confirmable write tool would do and return its confirmationToken — which is unambiguous and unlike any sibling (get_* / list_* / the write tools themselves). An agent can immediately tell this is a pre-flight preview step, not the write itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit workflow: pass the write tool name and its arguments, show the plan to the user, wait for an explicit yes, then call the tool with the same arguments plus the token. The condition for use (confirmable write tools) and the exact sequencing are both 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.
reactivate_memberReactivate a memberAInspect
Give a suspended member their access to the organization back. memberId is the member id from list_members, not the user id. Requires a confirmationToken: call preview_operation with tool "reactivate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| memberId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | Yes | |
| state | Yes | |
| userId | Yes | The user this membership belongs to |
| isActive | Yes | |
| joinedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is partly covered. The description adds genuinely new context beyond that: a mandatory confirmation-token workflow, an explicit user-consent gate, and permission/role prerequisites. It does not explain retry semantics despite idempotentHint=false, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, all load-bearing and front-loaded with the outcome before the sequencing and permission details. Dense but not padded; the confirmation-flow sentence is necessarily long but earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the confirmation prerequisite, consent gate, and permission requirements for this mutation. The only loose end is organizationId scoping in multi-org contexts.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25% (just requestId), so the description must compensate and largely does: it disambiguates memberId ('the member id from list_members, not the user id') and explains where confirmationToken comes from via the preview_operation flow. organizationId's scope is still not clarified, so it falls just short of full compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+effect: returning access to a suspended member of the organization. It is immediately distinguishable from sibling suspend_member and change_member_role without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the prerequisite flow: call preview_operation with tool 'reactivate_member' and these arguments, show the plan to the user, then call this tool only after explicit agreement. It also names the required permission (organization:manage) and the owner role, 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.
remove_tracked_queries_from_clustersRemove tracked queries from clustersADestructiveIdempotentInspect
Take up to 100 tracked queries out of one or more query clusters. Other cluster memberships are left alone. Removing also takes the tracked query's past results out of that cluster's reports until it is added back with add_tracked_queries_to_clusters. Each tracked query that cannot be changed is reported in "failed" without stopping the rest. Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes | ||
| queryClusterIds | Yes | ||
| trackedQueryIds | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | The resources the operation was applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive and idempotent, but the description adds substantive behavior beyond them: past results are pulled from that cluster's reports until re-added, per-item failures surface in the "failed" field without aborting the batch, and the whole operation is retry-safe. That batch semantics and downstream reporting effect are not derivable from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and scope, then the side effect, then the failure mode. Every sentence carries information; the only near-redundancy is 'Safe to retry', which restates the idempotentHint annotation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need no explanation, and the description covers the key destructive side effect and partial-failure handling. What is missing is any mention of the organization/project scoping or identity format, which matters for a 4-required-parameter mutation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the burden. It does explain the 100-item cap and the one-or-more cardinality that mirror the schema's min/maxItems, which is marginal added value, but organizationId/projectId and the ID formats go completely unaddressed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Take up to 100 tracked queries out of one or more query clusters') and immediately scopes the effect ('Other cluster memberships are left alone'). This cleanly separates it from the inverse sibling add_tracked_queries_to_clusters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the correct context for use — cluster membership removal — and points to add_tracked_queries_to_clusters as the reverse operation, which implicitly tells an agent when to pick which. It does not, however, state any preconditions or auth requirements for calling it.
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 clusterBIdempotentInspect
Rename a query cluster. The name is stored lower-cased and must be unique in the project. Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| clusterId | Yes | ||
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | Pass this value in the queryClusterIds filter of the analytics operations |
| name | Yes | Unique within the project, stored lower-cased |
| projectId | Yes | The project this cluster belongs to |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| comment | No | ||
| projectId | Yes | ||
| requestId | No | ||
| aiResponseId | Yes | ||
| organizationId | Yes | ||
| trackedQueryId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| type | Yes | The kind of problem reported |
| comment | No | The note as stored. An empty or whitespace-only comment is stored as null. |
| accepted | Yes | True once the report has been accepted for review. It is never false: a report that could not be delivered answers with an error instead. |
| aiResponseId | Yes | The captured AI answer the report is about |
| trackedQueryId | Yes | The tracked query that answer was captured for |
| missedBrandNames | Yes | Brand names reported as missed, de-duplicated and trimmed. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| role | Yes | The caller's current role in this organization |
| status | Yes | |
| imageUrl | No | |
| createdAt | Yes | |
| description | No | |
| contactEmail | No |
TDQS
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.
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.
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.
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.
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.
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 projectAIdempotentInspect
Bring an archived project back: it reappears in the project list and its active tracked queries are checked again on their schedule.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| status | Yes | |
| createdAt | Yes | |
| brandNames | Yes | Brand names matched in AI answers and search results. Empty when the project has no brand monitoring profile yet. |
| competitors | Yes | Competitors this project is measured against. Empty when none are configured. |
| organizationId | Yes | |
| websiteDomains | Yes | Domains the project is monitored for. Empty when the project has no brand monitoring profile yet. |
TDQS
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.
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.
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.
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.
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.
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.
resume_tracked_queriesResume tracked queriesAIdempotentInspect
Restart the checks of up to 100 paused tracked queries; they spend budget again, so use get_usage to see the effect. Checks skipped while they were paused are not made up. Each one that cannot be resumed is reported in "failed". Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| organizationId | Yes | ||
| trackedQueryIds | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | The resources the operation was applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: queries 'spend budget again', skipped checks 'are not made up', unresumable items surface in a 'failed' field, and 'Safe to retry' reinforces the idempotentHint. These are exactly the operational consequences an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense, front-loaded clauses with no filler; the core action leads and budget/retry caveats follow. Every sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values needn't be spelled out, yet the description still notes the 'failed' reporting, budget cost, and non-backfill behavior. Nothing essential to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it does clarify the 100-item cap on trackedQueryIds ('up to 100'), but organizationId and projectId are left unexplained. Partial compensation justifies a middling score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Restart the checks of ... paused tracked queries'), which cleanly distinguishes it from the sibling pause_tracked_queries. An agent can tell what it does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent to get_usage to observe the budget effect, and scoping to 'paused' queries is clear. It does not contrast with other resume-like siblings (e.g. run_checks), so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | ||
| projectId | Yes | ||
| requestId | No | ||
| organizationId | Yes | ||
| trackedQueryIds | No | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 queriesARead-onlyIdempotentInspect
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".
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| search | No | ||
| sortBy | No | queryText | |
| status | No | ||
| engines | No | allowed values: chatgpt, claude, perplexity, google_ai_overview, google_ai_mode, google_serp, google_shopping | |
| countries | No | ISO-3166 alpha-2 country codes (e.g. "US", "GB", "DE"); a project's configured codes are listed by get_available_filters | |
| projectId | Yes | ||
| sortOrder | No | desc | |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, so safety is covered; the description adds genuinely new behavior: pagination via limit/offset, a 1-100 limit range with default 20, and that results carry latest rank positions and metrics. It omits rate limits or scope/permission expectations, but adds solid context beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the core action before the filter/sort details and the example questions. The sort enum listing is long but functional; nothing reads as filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description supplies the filtering, sorting, pagination and use-case context an agent needs to call a 10-parameter read tool correctly. Minor gaps remain around offset/sortOrder semantics and id-parameter provenance (organizationId/projectId).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 20% schema coverage, the description carries most of the burden and does so: it names the filterable params (status active/paused, engines, countries, free-text search), reproduces the full sortBy enum, and states the limit range and default. It leaves offset, sortOrder and the id params to the schema, so it is strong but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Search and paginate the tracked queries (keywords) of a project') with the returned payload ('latest rank positions and metrics'), which cleanly separates it from the singular get_tracked_query and the mutation siblings like create/delete/pause_tracked_queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases ('list my top queries by share of voice', 'find a specific tracked query') and enumerates the filterable facets, so an agent knows when this tool applies. It does not explicitly exclude or route to a sibling (e.g. get_tracked_query for a single query by id), 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.
set_tracked_query_check_frequencySet how often tracked queries are checkedADestructiveIdempotentInspect
Change how often up to 100 tracked queries are checked: daily, weekly or monthly. A lower frequency spends less budget; use get_usage to see the effect. Checks skipped at a lower frequency are never made up later. Each one that cannot be changed is reported in "failed". Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | ||
| checkFrequency | Yes | ||
| organizationId | Yes | ||
| trackedQueryIds | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | The resources the operation was applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds behavior the annotations cannot express: skipped checks are never backfilled (a real, irreversible data consequence), per-item failures are surfaced in a 'failed' field (partial-success semantics), and the operation is safe to retry (reinforcing idempotentHint=true without contradicting destructiveHint=true).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and scope, then cost rationale, then caveats. Every clause carries information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return detail is unnecessary, and the description still flags the failure-reporting shape. Combined with the safety/retry and no-backfill disclosures, an agent has everything needed to invoke this mutation correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, and it only partially does: it restates the frequency enum and the 100-item cap already present in the schema and never explains organizationId/projectId scoping or the format of trackedQueryIds. Adequate but leaves real ambiguity for a 4-param tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (change frequency), the affected resource (tracked queries), the allowed values (daily/weekly/monthly) and the batch ceiling (up to 100), so an agent can distinguish it immediately from pause_tracked_queries, resume_tracked_queries and set_tracked_query_passes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the cost tradeoff ('A lower frequency spends less budget') and routes the agent to a concrete sibling for verification ('use get_usage to see the effect'). It does not state when to prefer pause/resume over frequency change, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_tracked_query_passesSet how many answers each check capturesADestructiveIdempotentInspect
Change how many answers each check of up to 100 tracked queries captures (nPasses; above 1 only for AI engines). Fewer passes spend less budget; use get_usage to see the effect. Passes no longer captured are never made up later. Each one that cannot be changed is reported in "failed". Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| nPasses | Yes | ||
| projectId | Yes | ||
| organizationId | Yes | ||
| trackedQueryIds | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | No | Always present, empty list included: read it rather than inferring success from the status code. |
| successful | No | The resources the operation was applied to. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the bar is lower, yet the description still adds real value: passes dropped are permanently lost ("never made up later") and partial failures surface per-item in "failed". "Safe to retry" corroborates the idempotency hint. It does not, however, say what permissions are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition front-loads what changes, then budget impact, then irreversibility. Four short sentences, all carrying information; only the repeated "up to 100" constraint is redundant with the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the description still flags the "failed" field for partial failures. For a destructive batch mutation it covers budget impact, irreversibility, and failure reporting; the only gap is the unaddressed organizationId/projectId semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains nPasses conceptually (answers per check, above 1 only for AI engines) and restates the 100-query cap already in the schema's maxItems, but organizationId and projectId get no explanation at all. Half the parameters remain undocumented anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: change how many answers each check of tracked queries captures. It defines the operative concept (nPasses) inline, so an agent can distinguish this from the sibling set_tracked_query_check_frequency, which alters cadence rather than depth.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives consequence-oriented context ("Fewer passes spend less budget") and routes to get_usage to observe the effect, but never states when to prefer this tool over the frequency sibling or any precondition for calling it. Usage 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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | ||
| projectId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| trackedQueryIds | Yes | ||
| restrictToExistingClusters | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Pass it to get_job. May name a job started by an earlier, equivalent call. |
| nextStep | Yes | |
| deduplicated | Yes | Whether this call joined a job that was already running instead of starting one |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| country | No | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| websiteDomains | Yes | ||
| enteredBrandNames | No | Names the user already knows the brand by |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobId | Yes | Pass it to get_job. May name a job started by an earlier, equivalent call. |
| nextStep | Yes | |
| deduplicated | Yes | Whether this call joined a job that was already running instead of starting one |
TDQS
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.
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.
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.
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.
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.
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.
suspend_memberSuspend a memberADestructiveInspect
Suspend an organization member: they lose access immediately but stay a member, and reactivate_member gives it back. memberId is the member id from list_members, not the user id. Requires a confirmationToken: call preview_operation with tool "suspend_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.
| Name | Required | Description | Default |
|---|---|---|---|
| memberId | Yes | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| role | Yes | |
| state | Yes | |
| userId | Yes | The user this membership belongs to |
| isActive | Yes | |
| joinedAt | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, and the description adds real context beyond them: access is lost immediately, the person remains a member, the change is reversible via reactivate_member, and a confirmation-token gating flow is required. That is exactly the behavioral disclosure a mutation tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the effect and the sibling relation, then prerequisites and the confirmation procedure. Every sentence carries an actionable fact, though the confirmation instructions are dense enough that the passage runs long for a single-sentence-per-idea structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, permission-gated mutation with an output schema present, the description supplies the side effects, the reversibility path, the required role, and the pre-flight confirmation workflow. An agent has everything needed to call it safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, so the description must compensate, and it does for the two riskiest parameters: memberId is defined as the id from list_members rather than the user id, and confirmationToken's acquisition procedure is spelled out. organizationId is left undocumented and requestId is only covered by the schema itself, so it is not fully complete, but the ambiguity that would cause a wrong call is removed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Suspend an organization member") and immediately names the sibling that reverses it (reactivate_member), so the agent can distinguish it from change_member_role, remove/invite, and archive operations without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites (organization:manage permission plus owner role) and a mandatory procedure: call preview_operation with tool "suspend_member" and these arguments, show the plan to the user, and only proceed after explicit agreement. It also names the alternative for undoing the action. 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.
update_competitorUpdate a competitorADestructiveIdempotentInspect
Replace a competitor's name, website domains and brand names. Replaces all three: pass every domain and name the competitor should keep. A domain or brand name left out is removed, and later checks no longer match on it; results already recorded are not re-matched or deleted. Show the user the full new lists before calling. Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| projectId | Yes | ||
| brandNames | Yes | ||
| competitorId | Yes | ||
| organizationId | Yes | ||
| websiteDomains | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | The competitor's display name |
| brandNames | Yes | Names a mention is matched against for this competitor |
| websiteDomains | Yes | Domains a result is matched against for this competitor |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it spells out that omitted domains/brand names are removed, that later checks stop matching them, that already-recorded results are neither re-matched nor deleted, and that it is safe to retry. This precisely delineates the blast radius of a destructive, idempotent operation. Fully consistent with destructiveHint=true and idempotentHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and scope, then builds through the replacement rule, the consequence of omission, the confirmation step, and retry safety. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations carry the safety hints while the description enriches them. For a destructive bulk-replace mutation, the description covers what changes, what is destroyed, what is preserved, and the confirmation workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 required params, so the description must compensate. It clarifies the three content parameters and, crucially, that websiteDomains/brandNames are full-replacement lists rather than appends — a distinction the bare array schema cannot convey. The three opaque ID params remain unexplained, but their names are self-descriptive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with the exact scope: replacing a competitor's name, website domains, and brand names. The full-replacement semantics sharply define the operation. It does not explicitly name or differentiate from siblings like create_competitor or delete_competitor, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear operational condition — pass every domain and name the competitor should keep, and show the user the full new lists before calling. It provides strong context for correct invocation but never states when to prefer this over create_competitor/delete_competitor or any exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_organizationUpdate an organizationADestructiveIdempotentInspect
Change the name, description or contact email of an organization; arguments left out are unchanged. A value passed overwrites the current one, and no tool returns the old value afterwards. 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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| requestId | No | Optional idempotency key, 8-255 printable characters. Reuse it only to retry this same call. | |
| description | No | ||
| contactEmail | No | ||
| organizationId | Yes | ||
| confirmationToken | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| role | Yes | The caller's current role in this organization |
| status | Yes | |
| imageUrl | No | |
| createdAt | Yes | |
| description | No | |
| contactEmail | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and idempotentHint=true, but the description goes further by explaining the destruction concretely (a passed value overwrites the current one and no tool returns the old value afterwards) and by disclosing the confirmation-token workflow and the organization:manage/owner-role requirement. This is exactly the extra 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense but purposeful clauses: what changes, overwrite/irreversibility semantics, the confirmation workflow, and the permission gate. The mutation scope is front-loaded and no sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and the description covers the remaining gaps an agent would hit: partial-update behavior, irreversibility, the mandatory preview/confirm handshake, and authorization requirements. Nothing needed to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17%, so the description must compensate, and it largely does: it defines the three payload fields and the omitted-equals-unchanged semantics of a partial update, and explains the role of confirmationToken. It leaves organizationId (self-evident) and the explicit-null-vs-omitted distinction unaddressed, which keeps it short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (change) and resource (organization) plus the exact mutable fields (name, description, contact email). Among siblings such as archive_organization, restore_organization, and create_organization, the scope is unmistakable without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites and sequencing: call preview_operation with tool "update_organization" and the same arguments first, show the plan to the user, and invoke only after explicit agreement. It also names the required permission and role, 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 projectADestructiveIdempotentInspect
Rename a project, replace the website domains and brand names it is monitored for, or both. A rename alone removes nothing. brandProfile replaces both lists entirely: pass every domain and name the project should keep. A domain or brand name left out is removed, and later checks no longer match on it; results already recorded are not re-matched or deleted. Show the user the full new lists before calling. Safe to retry.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| projectId | Yes | ||
| brandProfile | No | Replaces the website domains and brand names the project is monitored for. | |
| organizationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| project | Yes | The project after the rename; null when no name was given. |
| brandProfile | Yes | The brand profile after the replacement; null when no brandProfile was given. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Provides rich behavioral context beyond annotations: details exactly what gets removed by brandProfile replacement, clarifies that results already recorded are not re-matched or deleted, and confirms idempotency ('Safe to retry'). This exceeds the standard set by destructiveHint=true.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Highly efficient: only 6 sentences, front-loads the core purpose and usage, then details the destructive semantics of brandProfile, ending with the safety precondition and idempotency note. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a complex mutation tool. With an output schema present, return values needn't be explained. The description covers usage, destructive behavior, parameter semantics, and safety preconditions comprehensively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 25%, so the description must compensate. It does so thoroughly: explains that brandProfile replaces lists entirely, warns that omitted items are removed, clarifies that a rename alone removes nothing, and specifies that brandProfile includes both domains and names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States specific verbs and resources ('Rename a project, replace the website domains and brand names it is monitored for, or both'), clearly distinguishing it from siblings like rename_cluster or update_competitor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly states the two modes of operation and the critical precondition 'Show the user the full new lists before calling.' However, it doesn't explicitly differentiate when to use brandProfile vs name alone beyond the logical implied behavior.
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 tool update
- Changed
list_keyword_listings10 fields changed- changed
Output schema / properties / items / items / properties / avgLinkPosition / descriptionPrevious value: -"Average position of a cited link to the brand. 1-based, LOWER is better."New value: +"Average position of a cited link to the brand. 1-based, LOWER is better. A variant not checked in the window contributes its latest earlier measurement instead; see carriedPositions." - changed
Output schema / properties / items / items / properties / avgMentionPosition / descriptionPrevious value: -"Average position of the brand mention inside the AI answer. 1-based, LOWER is better."New value: +"Average position of the brand mention inside the AI answer. 1-based, LOWER is better. A variant not checked in the window contributes its latest earlier measurement instead; see carriedPositions." - changed
Output schema / properties / items / items / properties / avgSerpPosition / descriptionPrevious value: -"Average position in traditional search over the window. 1-based, LOWER is better."New value: +"Average position in traditional search over the window. 1-based, LOWER is better. A variant not checked in the window contributes its latest earlier measurement instead; see carriedPositions." - changed
Output schema / properties / items / items / properties / avgShoppingPosition / descriptionPrevious value: -"Average position in shopping results over the window. 1-based, LOWER is better."New value: +"Average position in shopping results over the window. 1-based, LOWER is better. A variant not checked in the window contributes its latest earlier measurement instead; see carriedPositions." - added
Output schema / properties / items / items / properties / carriedPositionsAdded value: +{ + "description": "Per engine family, whether the position figure includes a measurement from before the window. An active variant with no check of its engine in the window contributes the brand's position in its latest earlier capture, and nothing when the brand was absent from that capture. An entry is null when no variant behind the figure carried. Every other metric stays window-only.", + "properties": { + "link": { + "properties": { + "allCarried": { + "description": "True when every variant behind the figure carried, so it holds no measurement from the window.", + "type": "boolean" + }, + "measuredAt": { + "description": "Date (YYYY-MM-DD) of the oldest carried measurement.", + "format": "date", + "type": "string" + } + }, + "required": [ + "measuredAt", + "allCarried" + ], + "type": [ + "object", + "null" + ] + }, + "mention": { + "properties": { + "allCarried": { + "description": "True when every variant behind the figure carried, so it holds no measurement from the window.", + "type": "boolean" + }, + "measuredAt": { + "description": "Date (YYYY-MM-DD) of the oldest carried measurement.", + "format": "date", + "type": "string" + } + }, + "required": [ + "measuredAt", + "allCarried" + ], + "type": [ + "object", + "null" + ] + }, + "serp": { + "properties": { + "allCarried": { + "description": "True when every variant behind the figure carried, so it holds no measurement from the window.", + "type": "boolean" + }, + "measuredAt": { + "description": "Date (YYYY-MM-DD) of the oldest carried measurement.", + "format": "date", + "type": "string" + } + }, + "required": [ + "measuredAt", + "allCarried" + ], + "type": [ + "object", + "null" + ] + }, + "shopping": { + "properties": { + "allCarried": { + "description": "True when every variant behind the figure carried, so it holds no measurement from the window.", + "type": "boolean" + }, + "measuredAt": { + "description": "Date (YYYY-MM-DD) of the oldest carried measurement.", + "format": "date", + "type": "string" + } + }, + "required": [ + "measuredAt", + "allCarried" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "serp", + "shopping", + "mention", + "link" + ], + "type": "object" +} - changed
Output schema / properties / items / items / properties / trendLink / descriptionPrevious value: -"Signed improvement in avgLinkPosition. Positive is better."New value: +"Signed improvement in avgLinkPosition. Positive is better. Null when carriedPositions.link is set." - changed
Output schema / properties / items / items / properties / trendMention / descriptionPrevious value: -"Signed improvement in avgMentionPosition. Positive is better."New value: +"Signed improvement in avgMentionPosition. Positive is better. Null when carriedPositions.mention is set." - changed
Output schema / properties / items / items / properties / trendSerp / descriptionPrevious value: -"Signed improvement in avgSerpPosition against the previous window. Positive is better."New value: +"Signed improvement in avgSerpPosition against the previous window. Positive is better. Null when carriedPositions.serp is set." - changed
Output schema / properties / items / items / properties / trendShopping / descriptionPrevious value: -"Signed improvement in avgShoppingPosition. Positive is better."New value: +"Signed improvement in avgShoppingPosition. Positive is better. Null when carriedPositions.shopping is set." - changed
Output schema / properties / items / items / requiredPrevious value: -[ - "keyword", - "keywordNormalized", - "variantCount", - "variantIds", - "engines", - "countries", - "queryClusterIds", - "hasUnclusteredVariant", - "statusSummary", - "statuses", - "checkFrequencies", - "nPassesValues", - "sentimentPositive", - "sentimentNeutral", - "sentimentNegative", - "mentionTypeCounts" -]New value: +[ + "keyword", + "keywordNormalized", + "variantCount", + "variantIds", + "engines", + "countries", + "queryClusterIds", + "hasUnclusteredVariant", + "statusSummary", + "statuses", + "checkFrequencies", + "nPassesValues", + "sentimentPositive", + "sentimentNeutral", + "sentimentNegative", + "mentionTypeCounts", + "carriedPositions" +]
1 tool update
- Changed
search_tracked_queries1 field changed- added
Output schema / properties / items / items / properties / lastHadLinkAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] +}
4 tool updates
- Changed
get_cluster_breakdown3 fields changed- added
Output schema / properties / rows / items / properties / checkedQueryCountByFamilyAdded value: +{ + "properties": { + "ai": { + "type": "integer" + }, + "serp": { + "type": "integer" + }, + "shopping": { + "type": "integer" + } + }, + "required": [ + "ai", + "serp", + "shopping" + ], + "type": "object" +} - added
Output schema / properties / rows / items / properties / lastCheckedAtByEngineAdded value: +{ + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "object" +} - added
Output schema / properties / rows / items / properties / trackedQueryCountByFamilyAdded value: +{ + "properties": { + "ai": { + "type": "integer" + }, + "serp": { + "type": "integer" + }, + "shopping": { + "type": "integer" + } + }, + "required": [ + "ai", + "serp", + "shopping" + ], + "type": "object" +}
- Changed
get_project_rank_tracking_stats3 fields changed- added
Output schema / properties / checkedQueryCountByFamilyAdded value: +{ + "properties": { + "ai": { + "type": "integer" + }, + "serp": { + "type": "integer" + }, + "shopping": { + "type": "integer" + } + }, + "required": [ + "ai", + "serp", + "shopping" + ], + "type": "object" +} - added
Output schema / properties / lastCheckedAtByEngineAdded value: +{ + "additionalProperties": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] + }, + "type": "object" +} - added
Output schema / properties / trackedQueryCountByFamilyAdded value: +{ + "properties": { + "ai": { + "type": "integer" + }, + "serp": { + "type": "integer" + }, + "shopping": { + "type": "integer" + } + }, + "required": [ + "ai", + "serp", + "shopping" + ], + "type": "object" +}
- Changed
list_keyword_listings3 fields changed- added
Output schema / properties / items / items / properties / lastCheckedAtByEngineAdded value: +{ + "additionalProperties": { + "type": [ + "string", + "null" + ] + }, + "description": "Each engine of the matching variants with the ISO 8601 date of its latest completed check; null when none of its variants was checked. A rate of 0 for a checked engine family means the brand is absent.", + "type": "object" +} - added
Output schema / properties / items / items / properties / shoppingRateAdded value: +{ + "description": "Share of the Shopping captures in the window where the brand appeared, 0-100; null without a Shopping capture in the window.", + "type": [ + "integer", + "null" + ] +} - added
Output schema / properties / items / items / properties / trendShoppingRateAdded value: +{ + "description": "Signed improvement in shoppingRate. Positive is better.", + "type": [ + "integer", + "null" + ] +}
- Changed
search_tracked_queries4 fields changed- added
Output schema / properties / items / items / properties / lastHadAppearanceAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / items / items / properties / lastHadMentionAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / items / items / properties / lastHadSerpResultAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] +} - added
Output schema / properties / items / items / properties / lastHadShoppingResultAdded value: +{ + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "null" + } + ] +}
1 tool update
- Changed
get_organization_overview5 fields changed- added
Output schema / properties / projects / items / properties / aiTrackedQueryCountAdded value: +{ + "description": "How many of trackedQueryCount run on an AI answer engine (ChatGPT, Claude, Perplexity, Google AI Overview, Google AI Mode).", + "type": "integer" +} - added
Output schema / properties / projects / items / properties / serpTrackedQueryCountAdded value: +{ + "description": "How many of trackedQueryCount run on classic Google SERP.", + "type": "integer" +} - added
Output schema / properties / projects / items / properties / shoppingTrackedQueryCountAdded value: +{ + "description": "How many of trackedQueryCount run on Google Shopping.", + "type": "integer" +} - added
Output schema / properties / projects / items / properties / trackedQueryCount / descriptionAdded value: +"Configured tracked queries of the project, paused ones included." - changed
Output schema / properties / projects / items / requiredPrevious value: -[ - "projectId", - "name", - "status", - "trackedQueryCount" -]New value: +[ + "projectId", + "name", + "status", + "trackedQueryCount", + "aiTrackedQueryCount", + "serpTrackedQueryCount", + "shoppingTrackedQueryCount" +]
5 tool updates
- Changed
get_cluster_breakdown1 field changed- added
Input schema / properties / includeUngroupedQueries / descriptionAdded value: +"Sent alone, returns only the ungrouped row: the tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds that row to those clusters. Omit both for every cluster plus the ungrouped row."
- Changed
get_project_rank_tracking_stats1 field changed- added
Input schema / properties / includeUngroupedQueries / descriptionAdded value: +"Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries."
- Changed
get_rank_tracking_time_series1 field changed- added
Input schema / properties / includeUngroupedQueries / descriptionAdded value: +"Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries."
- Changed
get_sentiment_breakdown1 field changed- added
Input schema / properties / includeUngroupedQueries / descriptionAdded value: +"Sent alone, restricts to tracked queries that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all tracked queries."
- Changed
list_keyword_listings1 field changed- added
Input schema / properties / includeUngroupedQueries / descriptionAdded value: +"Sent alone, restricts to keywords with variants that belong to no cluster (refused if there are none). Sent with queryClusterIds, adds them to those clusters. Omit both for all keywords."
1 tool update
- Changed
get_job2 fields changed- changed
Output schema / descriptionPrevious value: -"An asynchronous job and, once it has completed, its result"New value: +"An asynchronous job and, once it has completed, its result, or once it has failed, why" - added
Output schema / properties / errorAdded value: +{ + "description": "Why the job failed, and what to do next. Null unless `status` is `failed`.", + "properties": { + "code": { + "description": "A stable code for the kind of failure: `timed_out`, `provider_failed`, `submission_failed` or `internal_error`.", + "enum": [ + "timed_out", + "provider_failed", + "submission_failed", + "internal_error" + ], + "type": "string" + }, + "message": { + "description": "A fixed, readable explanation of the code. It is the same for every job that failed with that code.", + "type": "string" + } + }, + "required": [ + "code", + "message" + ], + "type": [ + "object", + "null" + ] +}
1 tool update
- Changed
update_project1 field changed- changed
Input schema / properties / brandProfile / typePrevious value: -[ - "null", - "object" -]New value: +[ + "object", + "null" +]
13 tool updates
- Added
add_tracked_queries_to_clusters - Added
change_member_role - Added
pause_tracked_queries - Changed
preview_operation1 field changed- changed
Input schema / properties / tool / enumPrevious value: -[ - "delete_competitor", - "archive_project", - "delete_cluster", - "create_tracked_queries", - "delete_tracked_queries", - "run_checks", - "create_organization", - "update_organization", - "archive_organization", - "restore_organization", - "invite_member", - "cancel_invitation", - "update_member" -]New value: +[ + "delete_competitor", + "archive_project", + "delete_cluster", + "create_tracked_queries", + "delete_tracked_queries", + "run_checks", + "create_organization", + "update_organization", + "archive_organization", + "restore_organization", + "invite_member", + "cancel_invitation", + "change_member_role", + "suspend_member", + "reactivate_member" +]
- Added
reactivate_member - Added
remove_tracked_queries_from_clusters - Added
resume_tracked_queries - Added
set_tracked_query_check_frequency - Removed
set_tracked_query_clusters - Added
set_tracked_query_passes - Added
suspend_member - Removed
update_member - Removed
update_tracked_queries
16 tool updates
- Changed
create_tracked_queries2 fields changed- changed
Input schema / properties / engines / items / enumPrevious 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" +] - changed
Input schema / properties / nPasses / descriptionPrevious 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."
- Changed
get_cited_sources2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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)" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_cluster_breakdown2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_competitor_cooccurrence2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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)" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_mention_mix2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_mention_samples3 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +] - added
Output schema / properties / samples / items / properties / citationsAdded 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" +}
- Changed
get_project_rank_tracking_stats2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_query_movers2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_rank_tracking_time_series2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_sentiment_breakdown2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
get_tracked_query1 field changed- changed
Output schema / properties / engine / enumPrevious 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" +]
- Changed
get_usage1 field changed- changed
Output schema / properties / projectedMonthlyChecks / properties / projectedMonthlyChecks / descriptionPrevious 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."
- Changed
list_ai_responses1 field changed- changed
Input schema / properties / engines / items / enumPrevious value: -[ - "chatgpt", - "perplexity", - "google_ai_overview", - "google_ai_mode" -]New value: +[ + "chatgpt", + "claude", + "perplexity", + "google_ai_overview", + "google_ai_mode" +]
- Changed
list_keyword_listings3 fields changed- changed
Input schema / properties / engines / items / enumPrevious 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" +] - changed
Output schema / properties / items / items / properties / engines / items / enumPrevious 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" +] - changed
Output schema / properties / items / items / properties / nPassesValues / descriptionPrevious 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."
- Changed
list_untracked_competitors2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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)" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
- Changed
search_tracked_queries2 fields changed- changed
Input schema / properties / engines / descriptionPrevious 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" - changed
Input schema / properties / engines / items / enumPrevious 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" +]
43 tool updates
- Added
apply_auto_clustering - Added
archive_organization - Added
archive_project - Added
cancel_invitation - Added
create_clusters - Added
create_competitor - Added
create_organization - Added
create_project - Added
create_tracked_queries - Added
delete_cluster - Added
delete_competitor - Added
delete_tracked_queries - Added
discover_brands - Added
discover_keywords - Added
discover_prompts - Added
get_job - Added
get_mencoro_guide - Added
get_organization - Added
get_project - Added
get_tracked_query - Added
get_tracked_query_matches - Added
get_usage - Added
invite_member - Added
list_ai_responses - Added
list_clusters - Added
list_keyword_listings - Added
list_members - Added
list_search_snapshots - Added
list_untracked_competitors - Added
preview_operation - Added
rename_cluster - Added
report_ai_response - Added
restore_organization - Added
restore_project - Added
run_checks - Added
set_tracked_query_clusters - Added
start_auto_clustering - Added
suggest_brand_names - Added
update_competitor - Added
update_member - Added
update_organization - Added
update_project - Added
update_tracked_queries
2 tool updates
- Changed
get_rank_tracking_time_series4 fields changed- changed
Output schema / properties / points / items / properties / brand / properties / mentionRate / descriptionPrevious 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." - changed
Output schema / properties / points / items / properties / brand / properties / serpRate / descriptionPrevious 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." - changed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / descriptionPrevious 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." - changed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / descriptionPrevious 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."
- Changed
get_tracked_query_time_series4 fields changed- changed
Output schema / properties / points / items / properties / brand / properties / mentionRate / descriptionPrevious 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." - changed
Output schema / properties / points / items / properties / brand / properties / serpRate / descriptionPrevious 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." - changed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / descriptionPrevious 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." - changed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / descriptionPrevious 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."
3 tool updates
- Changed
get_cluster_breakdown2 fields changed- changed
Output schema / properties / rows / items / properties / mentionRate / descriptionPrevious 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." - changed
Output schema / properties / rows / items / properties / serpRate / descriptionPrevious 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."
- Changed
get_organization_overview1 field changed- changed
Output schema / properties / projects / items / properties / mentionRate / descriptionPrevious 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."
- Changed
get_project_rank_tracking_stats7 fields changed- changed
Output schema / properties / mentionRate / descriptionPrevious 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." - changed
Output schema / properties / serpRate / descriptionPrevious 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." - changed
Output schema / properties / shoppingRate / descriptionPrevious 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." - changed
Output schema / properties / trendLink / descriptionPrevious 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)." - changed
Output schema / properties / trendMention / descriptionPrevious 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)." - changed
Output schema / properties / trendSerp / descriptionPrevious 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)." - changed
Output schema / properties / trendShopping / descriptionPrevious 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)."
12 tool updates
- Changed
get_cited_sources6 fields changed- added
Output schema / properties / sources / items / properties / avgPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / sources / items / properties / avgPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / sources / items / properties / domain / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / sources / items / properties / domain / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / sources / items / properties / sampleTitle / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / sources / items / properties / sampleTitle / typeRemoved value: -[ - "string", - "null" -]
- Changed
get_cluster_breakdown26 fields changed- added
Output schema / properties / dataDirtySince / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / dataDirtySince / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / rows / items / properties / avgLinkPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / avgLinkPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / avgMentionCount / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / avgMentionCount / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / avgMentionPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / avgMentionPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / avgSerpPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / avgSerpPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / clusterId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / clusterId / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / rows / items / properties / mentionRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / mentionRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / positivityIndex / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / positivityIndex / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / sentimentNegative / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / sentimentNegative / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / sentimentNeutral / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / sentimentNeutral / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / sentimentPositive / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / sentimentPositive / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / serpRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / serpRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / rows / items / properties / shareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / rows / items / properties / shareOfVoice / typeRemoved value: -[ - "number", - "null" -]
- Changed
get_competitor_cooccurrence12 fields changed- added
Input schema / properties / competitorId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / competitorId / typeRemoved value: -[ - "null", - "string" -] - added
Output schema / properties / competitors / items / properties / avgCompetitorPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / competitors / items / properties / avgCompetitorPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / competitors / items / properties / avgOwnPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / competitors / items / properties / avgOwnPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / competitors / items / properties / exampleAiResponseId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / competitors / items / properties / exampleAiResponseId / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / competitors / items / properties / exampleQueryText / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / competitors / items / properties / exampleQueryText / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / competitors / items / properties / winRate / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / competitors / items / properties / winRate / typeRemoved value: -[ - "integer", - "null" -]
- Changed
get_mention_samples10 fields changed- added
Input schema / properties / competitorId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / competitorId / typeRemoved value: -[ - "null", - "string" -] - added
Input schema / properties / mentionType / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / mentionType / typeRemoved value: -[ - "null", - "string" -] - added
Input schema / properties / sentiment / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / sentiment / typeRemoved value: -[ - "null", - "string" -] - added
Output schema / properties / samples / items / properties / competitorId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / samples / items / properties / competitorId / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / samples / items / properties / mentionPosition / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / samples / items / properties / mentionPosition / typeRemoved value: -[ - "integer", - "null" -]
- Changed
get_organization_overview16 fields changed- added
Output schema / properties / aggregate / properties / avgMentionPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / aggregate / properties / avgMentionPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / aggregate / properties / avgMentionRate / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / aggregate / properties / avgMentionRate / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / aggregate / properties / avgPositivityIndex / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / aggregate / properties / avgPositivityIndex / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / aggregate / properties / avgShareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / aggregate / properties / avgShareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / projects / items / properties / avgMentionPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / projects / items / properties / avgMentionPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / projects / items / properties / mentionRate / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / projects / items / properties / mentionRate / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / projects / items / properties / positivityIndex / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / projects / items / properties / positivityIndex / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / projects / items / properties / shareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / projects / items / properties / shareOfVoice / typeRemoved value: -[ - "number", - "null" -]
- Changed
get_project_rank_tracking_stats68 fields changed- added
Output schema / properties / aiQueriesWithMention / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / aiQueriesWithMention / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / aiTrackedQueryCount / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / aiTrackedQueryCount / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / avgLinkPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / avgLinkPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / avgMentionPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / avgMentionPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / avgSerpPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / avgSerpPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / avgShoppingPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / avgShoppingPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / mentionCount / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / mentionCount / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / mentionPositionStability / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / mentionPositionStability / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / mentionRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / mentionRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / positivityIndex / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / positivityIndex / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / sentimentNegative / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / sentimentNegative / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / sentimentNeutral / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / sentimentNeutral / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / sentimentPositive / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / sentimentPositive / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / serpPositionStability / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / serpPositionStability / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / serpQueriesWithResult / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / serpQueriesWithResult / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / serpRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / serpRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / serpTrackedQueryCount / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / serpTrackedQueryCount / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / shareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / shareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / shoppingPositionStability / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / shoppingPositionStability / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / shoppingQueriesWithResult / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / shoppingQueriesWithResult / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / shoppingRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / shoppingRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / shoppingTrackedQueryCount / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / shoppingTrackedQueryCount / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / trendLink / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendLink / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendMention / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendMention / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendMentionRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendMentionRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendPositivity / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendPositivity / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendSerp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendSerp / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendSerpRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendSerpRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendSerpStability / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendSerpStability / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendShareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendShareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendShopping / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendShopping / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendShoppingRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendShoppingRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendShoppingStability / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendShoppingStability / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / trendStability / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / trendStability / typeRemoved value: -[ - "number", - "null" -]
- Changed
get_query_movers2 fields changed- added
Output schema / properties / dataDirtySince / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / dataDirtySince / typeRemoved value: -[ - "string", - "null" -]
- Changed
get_rank_tracking_time_series34 fields changed- added
Output schema / properties / dataDirtySince / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / dataDirtySince / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / link / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / link / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / mention / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / mention / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / mentionRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / mentionRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / positivity / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / positivity / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / serp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / serp / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / serpRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / serpRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / shareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / shareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / shopping / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / shopping / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / link / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / link / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / typeRemoved value: -[ - "number", - "null" -]
- Changed
get_sentiment_breakdown4 fields changed- added
Output schema / properties / perCompetitor / items / properties / positivityIndex / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / perCompetitor / items / properties / positivityIndex / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / perEngine / items / properties / positivityIndex / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / perEngine / items / properties / positivityIndex / typeRemoved value: -[ - "number", - "null" -]
- Changed
get_tracked_query_time_series34 fields changed- added
Output schema / properties / dataDirtySince / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / dataDirtySince / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / link / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / link / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / mention / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / mention / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / mentionRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / mentionRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / positivity / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / positivity / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / serp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / serp / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / serpRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / serpRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / shareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / shareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / brand / properties / shopping / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / brand / properties / shopping / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / link / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / link / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mention / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / mentionRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / positivity / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serp / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / serpRate / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / points / items / properties / competitors / additionalProperties / properties / shopping / typeRemoved value: -[ - "number", - "null" -]
- Changed
get_tracking_coverage2 fields changed- added
Output schema / properties / sample / items / properties / lastCheckedAt / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / sample / items / properties / lastCheckedAt / typeRemoved value: -[ - "string", - "null" -]
- Changed
search_tracked_queries24 fields changed- added
Input schema / properties / search / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / search / typeRemoved value: -[ - "null", - "string" -] - added
Input schema / properties / status / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Input schema / properties / status / typeRemoved value: -[ - "null", - "string" -] - added
Output schema / properties / items / items / properties / lastCheckedAt / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastCheckedAt / typeRemoved value: -[ - "string", - "null" -] - added
Output schema / properties / items / items / properties / lastLinkPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastLinkPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / items / items / properties / lastMentionPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastMentionPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / items / items / properties / lastNegativeMentionCount / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastNegativeMentionCount / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / items / items / properties / lastNeutralMentionCount / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastNeutralMentionCount / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / items / items / properties / lastPositiveMentionCount / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastPositiveMentionCount / typeRemoved value: -[ - "integer", - "null" -] - added
Output schema / properties / items / items / properties / lastPositivityIndex / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastPositivityIndex / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / items / items / properties / lastSerpPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastSerpPosition / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / items / items / properties / lastShareOfVoice / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastShareOfVoice / typeRemoved value: -[ - "number", - "null" -] - added
Output schema / properties / items / items / properties / lastShoppingPosition / anyOfAdded value: +[ + { + "type": "number" + }, + { + "type": "null" + } +] - removed
Output schema / properties / items / items / properties / lastShoppingPosition / typeRemoved value: -[ - "number", - "null" -]
17 tool updates
- First observed
get_available_filters - First observed
get_cited_sources - First observed
get_cluster_breakdown - First observed
get_competitor_cooccurrence - First observed
get_mention_mix - First observed
get_mention_samples - First observed
get_metric_glossary - First observed
get_organization_overview - First observed
get_project_rank_tracking_stats - First observed
get_query_movers - First observed
get_rank_tracking_time_series - First observed
get_sentiment_breakdown - First observed
get_share_of_voice_formula - First observed
get_tracked_query_time_series - First observed
get_tracking_coverage - First observed
list_projects - First observed
search_tracked_queries
Publisher details
- Operator
- Virality Media S.L. · Publisher source
- Operator website
- https://mencoro.com
- Vendor relationship
- First-party
- Documentation
- https://mencoro.com/features/mcp-server/
- Trust center
- Unknown
- Restrictions
- Unknown
Related MCP Connectors
Track how AI assistants mention, cite, and rank your brand and competitors in AI search.
Your brand's visibility in AI answers: trends, competitor ranking, cited sources and next tasks.
1Track brand visibility in ChatGPT, Gemini and Google AI answers: competitors, cited sources, checks.
Track your brand's visibility in ChatGPT, Gemini, Perplexity, Claude, Google AI Overviews and more.
Related MCP Servers
AlicenseAqualityBmaintenanceMonitors brand mentions, citations, sentiment, competitor share of voice, and GEO performance across AI search engines.1MIT- AlicenseAqualityCmaintenanceEnables 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.164 npm1MIT
- AlicenseAqualityCmaintenanceTrack brand visibility across ChatGPT, Perplexity, Claude, and Gemini.6101 npm10MIT
- AlicenseAqualityCmaintenanceTrack 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.1739 npm2MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.