Skip to main content
Glama

MisarSEO MCP Server

get_cannibalisation_report

Read-onlyIdempotent

Finds the queries where the project's connected Search Console property competes with itself: two or more of its own pages drawing impressions for the same query, splitting that query's clicks, click signals and ranking history across URLs. Read-only and FREE (no credits) — Search Console is first-party data and meters nothing. It does spend Google's per-property request quota, so it is rate limited per user. Requires Search Console to be connected for the project. Returns exactly ONE of four states, which are four different facts — branch on state before reading anything else: not_connected (nothing is bound; tell the user to connect a property), requires_reconnect (bound but the Google grant is revoked/expired; tell the user to reconnect), no_search_data (Search Console returned nothing for the window — an absence of data, NOT a clean bill of health), analysed (we looked; findings may legitimately be empty and coverage is the proof, including truncated when the property had more rows than one report can fetch). In each of the first three states nothing was measured at all, so never report any of them as 'no cannibalisation found'. Every per-page figure is Search Console's own for that (query, page) pair — ctr is a 0-1 fraction, position is a 1-based average, dates are Pacific Time and the last ~3 days are excluded for data lag. thresholds ships with each analysed report so you can say whether a threshold, rather than the absence of a problem, is why a query is missing.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
sortNoFinding order (default impressions). 'impressions' = most affected search demand first. 'position_spread' = smallest gap between the competing pages' average positions first, i.e. the pages Google rated most interchangeable. Both order by one measured quantity; there is deliberately no composite severity score.
windowNoAnalysis window (default last_28_days). Capped at three months on purpose — Search Console's longer ranges are NOT offered, because over a long window 'two pages received impressions' also describes a page migration, and calling that cannibalisation sends someone to consolidate pages that are already consolidated. The window end is backed off ~3 days for Search Console's data lag.
projectIdYesRequired. The MisarSEO project ID to scope this call to. Get one from list_projects.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.1/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, but the description adds substantial context beyond them: it is FREE with no credit cost, it spends Google's per-property request quota and is rate limited per user, it requires GSC to be connected, the last ~3 days are excluded for data lag, dates are Pacific Time, ctr is a 0-1 fraction, position is a 1-based average, and it returns exactly one of four enumerated states with explicit branching guidance.

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

Conciseness4/5

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

It is dense and long, but front-loaded with the core purpose before the state enumeration, and nearly every sentence carries actionable content (free, rate limited, four states, timezone/lag caveats). The state list is essential rather than padding, though a few clauses could be tightened.

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

Completeness5/5

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

With no output schema and no annotations covering return values, the description fully carries that burden: it explains the four states, clarifies that findings may legitimately be empty with coverage as proof (including truncated), warns against misreporting the three unmeasured states as 'no cannibalisation found,' and notes that thresholds ship with each report.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters, including the sort and window enums and the projectId source (list_projects). The description reiterates threshold context but adds no syntax or format detail beyond the schema. Per the rubric, a 3 is the correct baseline when schema coverage is this high.

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

Purpose4/5

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

The description states a specific verb and resource precisely: it finds queries where the project's connected Search Console property competes with itself, defined concretely as 'two or more of its own pages drawing impressions for the same query.' This is far more specific than a restatement of the name. It stops short of naming the sibling it is distinct from (e.g. list_rank_cannibalisation, which measures cannibalisation from rank data), so it is clear but not sibling-differentiating.

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

Usage Guidelines4/5

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

It gives clear conditions for use: Search Console must be connected for the project, it is read-only and free, and it is rate limited per user via Google's per-property quota. It also states what the states imply and how to branch. It does not explicitly name an alternative cannibalisation tool or the condition that would select one over this, so it falls short of the explicit when-not/alternatives bar.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.