MisarSEO MCP Server
Server Details
Research keywords, track rankings, audit sites, monitor backlinks and AI-search visibility — from…
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
- Repository
- Misar-AI/misarseo-mcp
- GitHub Stars
- 0
TDQS
Scored across 180 tools
The set spans dozens of SEO sub-domains, and many tools sit in closely related clusters (eight Search Console reads, ten rank-tracking reads, multiple AI-answer tools), so misselection is a real risk despite descriptions that carefully distinguish them. Boundaries are usually explicit, but the sheer number of adjacent tools makes it hard to pick the right one without reading long descriptions.
Nearly all tools are snake_case and mostly follow verb_noun, but creation is split across add_, create_, set_, and upsert_; linking uses set_ while other families use add_; and a few tools use noun-first naming (log_analyzer_*) or inconsistent abbreviations (gbp vs google_business). The result is readable and largely predictable, but not a single consistent convention.
At 180 tools, the surface is far beyond the 3-15 well-scoped range and well past the 25+ 'too many' threshold. The platform is broad, but no agent can hold this many tools in context or reliably choose among them.
Coverage is broad across audits, rank tracking, backlinks, GSC, GA4, GBP, Bing/Yandex/Baidu, AI visibility, link building, reports, logs, and local SEO, with most sub-domains having create/read/update/delete support. Notable gaps remain around connection lifecycle (no GSC connect/disconnect tool despite many tools requiring it) and project CRUD (no create/delete project), but agents can work around these via the UI.
Available Tools
180 toolsadd_competitor_monitorAIdempotentInspect
Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarity score), outbound links, and structured-data types. Checked once a day; the first snapshot is captured on the NEXT scheduled pass, not immediately. FREE — this codebase's own SSRF-safe fetch, no paid provider. Idempotent (re-adding an already-tracked URL is a no-op). A project can monitor at most 20 URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The specific competitor page URL to monitor — not a domain to crawl. Normalised and SSRF-validated server-side; a URL resolving to a private/loopback/metadata address is rejected. | |
| label | No | Optional human-readable label, e.g. 'Acme pricing page'. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the daily check cadence, the important latency caveat that the first snapshot lands on the NEXT scheduled pass rather than immediately, the cost profile (free, internal SSRF-safe fetch, no paid provider), and a hard quota of 20 URLs per project. The idempotency claim duplicates idempotentHint=true but is consistent with it.
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 the tracked signals, followed by cadence, cost, idempotency and quota. All five clauses carry information, though the 'FREE' emphasis and the 'never a fabricated similarity score' aside lean slightly promotional rather than purely functional.
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 three simple parameters, full schema coverage and annotations covering the safety profile, the description supplies the operational facts an agent needs (timing, cost, quota, idempotency). The only gap is that with no output schema it never indicates what is returned on success (e.g. a monitor ID) or how to subsequently read detected changes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so url, label and projectId are already fully documented with validation, normalisation and SSRF-rejection semantics. The description reinforces the url scope ('not a domain to crawl') but adds no new per-parameter syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (start monitoring) and a precisely scoped resource (one competitor page, not a domain to crawl), then enumerates exactly what is tracked: title/meta, line-level content diff, outbound links, structured-data types. This clearly separates it from siblings like get_competitor_monitor_changes, list_competitor_monitors and remove_competitor_monitor.
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 establishes clear context for when this tool applies (setting up ongoing daily change tracking on a single page) and clarifies the scope limit 'not a domain to crawl'. It does not, however, explicitly name alternatives such as list_competitor_monitors for reviewing existing monitors or remove_competitor_monitor for stopping one, so routing relies on inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_disavow_entryAIdempotentInspect
Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must be a full absolute URL); entryType 'domain' disavows the whole domain AND its subdomains (value is a bare host, no scheme) — per Google's own documented disavow-file format, there is no way to disavow just a subpath.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional reason, written as a comment above the entry in the exported file. | |
| value | Yes | A full absolute URL for entryType 'url'; a bare domain (no scheme) for entryType 'domain'. | |
| source | No | Where this entry came from. Defaults to 'manual'. | |
| entryType | Yes | 'url' disavows one page; 'domain' disavows the whole domain and its subdomains. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavioral context beyond the annotations: it is a mutation (consistent with readOnlyHint=false) but FREE (no credits), and it documents the Google disavow-file format constraint. Cost information is not derivable from annotations, though idempotency and openWorldHint are left for the annotations to 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 the action, then the cost/mutation warning, then the entryType semantics. It is one long sentence with a parenthetical aside, so slightly denser than ideal, 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?
For a 5-parameter mutation tool with no output schema and full annotation coverage, the description covers cost, mutation status and format semantics. It omits what the call returns or confirms, but the annotations and schema absorb most remaining ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description goes further by explaining why 'value' must be a bare host for 'domain' and why no subpath form exists per Google's format. This clarifies the semantics of a required parameter beyond the enum text.
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: 'mark one URL or domain for disavowal' within 'Disavow file management'. An agent can immediately separate this from list_disavow_entries, remove_disavow_entry and export_disavow_file 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 selection guidance between the two entryType modes — 'url' for exactly that page, 'domain' for the domain and its subdomains, plus the caveat that subpaths cannot be disavowed. It does not, however, say when to reach for this tool versus add/remove/list siblings in the disavow family.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_link_prospectAIdempotentInspect
Link Building Tool: add one prospect domain/page to a project's list. FREE (no credits), but this is a MUTATION. White-hat scope: contact fields are plain manually-typed free text — NEVER auto-scraped or guessed. New prospects start at status 'prospected'; use update_link_prospect_status to move them through the pipeline.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Optional specific page on domain, a full absolute URL. | |
| note | No | Optional first activity-log entry, e.g. 'Found via competitor backlink profile.' | |
| label | No | ||
| domain | Yes | Bare domain, e.g. example.com. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| targetUrl | No | The project's OWN page this outreach is trying to get linked. | |
| contactName | No | ||
| contactEmail | No | ||
| contactNotes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=true; the description adds real value beyond them: cost (FREE/no credits), the fact it is a mutation, the new-record default status, and the white-hat guarantee that contact fields are manually entered rather than scraped. Idempotency is not restated, but there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but well front-loaded: purpose first, then cost/safety, then scope note, then routing. Every clause carries information, though the 'Link Building Tool:' prefix is slightly redundant with the tool name.
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 9-parameter mutation with no output schema, the description covers cost, mutation status, white-hat constraints, default state, and next-step routing. Remaining gaps (label, targetUrl usage) are minor relative to what the schema already explains.
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 56%, and the schema documents projectId, domain, url, note, and targetUrl. The description adds a genuine constraint on the contact* fields (plain typed free text, never auto-scraped), but says nothing about label or targetUrl semantics, 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?
Opens with a specific verb+resource+scope: 'add one prospect domain/page to a project's list.' This is clearly distinguishable from siblings like update_link_prospect, add_link_prospect_note, and import_link_prospects_csv.
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 names the follow-up tool (update_link_prospect_status) and the lifecycle starting point ('prospected'), so an agent knows this is the entry step. It does not, however, contrast with import_link_prospects_csv for bulk adds or with add_link_prospect_note for appending activity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_link_prospect_noteAInspect
Link Building Tool: add one manual activity-log entry to a prospect, e.g. "emailed on 9/5" or "follow-up sent". FREE (no credits), but this is a MUTATION.
| Name | Required | Description | Default |
|---|---|---|---|
| note | Yes | ||
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| prospectId | Yes | Prospect id, from list_link_prospects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context: it is FREE (no credits) and that it is a MUTATION, plus append-only single-entry semantics ('add one ... entry'). It does not describe anything contradictory.
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?
One tight sentence with the resource and verb front-loaded and examples inline. The 'Link Building Tool:' prefix is slightly redundant but provides category context cheaply.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-required-param mutation with no output schema, the description covers purpose, cost, and mutating nature, while annotations carry the safety/idempotency profile and the schema documents two of three params. Only minor gap is the return/confirmation behavior, which is arguably not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and both projectId and prospectId carry their own 'get one from list_projects / list_link_prospects' descriptions. The description adds content examples that clarify the note parameter's intent, but nothing about length limits or format beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'add one manual activity-log entry to a prospect', with two concrete examples ('emailed on 9/5', 'follow-up sent') that pin down what a 'note' is. It is distinguishable from list_link_prospect_activity (read) and add_link_prospect (create prospect), though it doesn't name those siblings explicitly.
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 by the examples and by 'one manual activity-log entry', giving an agent a reasonable sense of when to log an activity. However there is no explicit when-not guidance and no routing to related siblings like update_link_prospect_status for actual status changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_portfolio_projectsAIdempotentInspect
Adds projects to a portfolio. Returns { added } — only ids that resolve to a project of the CALLER'S organization are added; any other id is silently dropped rather than erroring the whole call. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectIds | Yes | MisarSEO project IDs. Use list_projects to find them. | |
| portfolioId | Yes | Portfolio ID. Use list_portfolios to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false and openWorldHint=false, yet the description adds genuinely new behavior: partial-failure semantics where unresolvable ids are silently dropped instead of failing the call, org-scoping of accepted ids, and the return shape `{ added }`. It stops short of covering invalid portfolioId handling or auth prerequisites, 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?
Three short sentences, front-loaded with the action, then the return/error semantics, then the cost profile. No filler and nothing repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the return payload `{ added }`. Combined with the silently-dropped-id rule and the free/no-credits note, an agent has enough to call this correctly and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above baseline by adding a semantic constraint on projectIds that the schema does not express — only ids resolving to a project in the caller's organization are accepted, and the rest are silently dropped. It does not restate the array bounds or ID format the schema already covers.
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 ("Adds projects to a portfolio") and distinguishes itself from the sibling pair create_portfolio and remove_portfolio_projects. An agent can identify the operation 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?
Usage is implied by the verb but there is no explicit when-to-use guidance and no named alternative (e.g. remove_portfolio_projects, create_portfolio). The cost note ("no credits are spent") is decision-relevant context, but it describes the operation rather than routing the agent between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_rank_annotationAInspect
Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword or per-device. A config can hold at most 100 notes.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | UTC day the note applies to, YYYY-MM-DD. | |
| label | Yes | What happened, 1-200 characters. | |
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the write/side-effect profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely non-structured context: no external SEO provider is called, no credits are spent, and a hard cap of 100 notes per config – all useful operational facts not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with zero filler, front-loaded with the core action followed by cost, scope, and limit. Every clause carries information the agent can act on.
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 4-param write with a fully-described schema and no output schema, the description covers cost, scope, and the 100-note constraint. It lacks only a pointer to the read/remove counterparts, so it is complete enough but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents projectId, configId, date, and label, including the config-lookup hint via get_rank_tracker. The description reinforces that configId is config-level rather than keyword/device scoped, a marginal add over the schema, landing at 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?
States a specific verb and resource – 'Adds a chart note to a rank tracker's own timeline' – which is precise and distinguishable from sibling writes like add_rank_tracking_keywords or add_link_prospect_note. The object (a chart annotation on the rank timeline) is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clarifies when this applies with 'Config-level, not per-keyword or per-device,' which tells the agent the correct scope before calling. It does not name the natural alternatives (list_rank_annotations / remove_rank_annotation) or exclusions, 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.
add_rank_tracking_keywordsAIdempotentInspect
Adds keywords to an existing rank tracker config. Returns { added, addedIds } — added counts only genuinely new keywords; anything already tracked for this config is silently skipped, so added can legitimately be lower than the number of keywords sent. FREE: database only, no SEO data provider is called and no credits are spent — but this CAN fail with a plan-limit error if adding these keywords would put the organization over its plan tier's rank-tracked-keywords cap, since that is a count limit, not a spend limit. This does not trigger a rank check or refresh keyword metrics — call get_rank_tracker afterward once you want positions.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Rank tracker config ID. | |
| keywords | Yes | 1-100 keywords to add. Duplicates of already-tracked keywords are silently skipped. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that duplicates are silently skipped, that `added` may be lower than keywords sent, that it can fail with a plan-limit error (a count cap, not a spend cap), and that no rank check or metrics refresh is triggered. This is exactly the operational 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-loads purpose, then layers return semantics and free/failure behavior in a compact run of sentences. Dense and largely waste-free, though the plan-limit explanation is slightly long-winded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description correctly supplies the return shape ({ added, addedIds }) and its counter semantics, plus follow-up guidance. An agent has everything needed to call it and interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, and the duplicate-skip note appears in both places. The description adds semantics around the `added` output counter rather than the input params themselves, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Adds keywords to an existing rank tracker config'), immediately distinguishing it from create_rank_tracker, list_rank_tracking_keywords, and remove_rank_tracking_keywords 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?
Clarifies it operates on an existing config, that it is free/no credits spent, that it does not trigger a rank check, and routes to get_rank_tracker as the follow-up. It stops short of naming explicit alternative tools for other cases, 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.
batch_draft_patchesAInspect
Patches: AI-drafts title AND metaDescription for up to 10 pages in one call. This is a MUTATION and costs one AI-gateway operation per field per page (up to 20) — never a bulk discount. One page/field failing is reported in that entry's own error without sinking the rest of the batch. Requires an org admin.
| Name | Required | Description | Default |
|---|---|---|---|
| pageUrls | Yes | 1-10 crawled page URLs to draft title+metaDescription patches for. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that it is a MUTATION, that it costs one AI-gateway operation per field per page (up to 20), that there is no bulk discount, that partial failures are isolated per entry, and that org-admin rights are required. This is rich behavioral context an agent could not derive from readOnlyHint/destructiveHint alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded narrative where every clause earns its place: purpose, cost, failure isolation, and prerequisite in a handful of sentences. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a non-idempotent mutation tool with no output schema, the description covers the critical gaps: cost model, partial-failure behavior, and authorization requirement. Nothing an agent needs in order to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both params are already documented (pageUrls with its 1-10 range and projectId with the list_projects pointer). The description's 'up to 10 pages' restates the schema's maxItems constraint rather than adding new syntax or format meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('AI-drafts title AND metaDescription') with a clear scope ('up to 10 pages in one call'), which inherently distinguishes it from the single-page sibling draft_patch. An agent immediately knows this is the batch variant.
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 strong usage context: batch-of-up-to-10, cost implication (one operation per field per page), and a prerequisite ('Requires an org admin'). It does not explicitly name draft_patch or state when to prefer one over the other, so it's clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
capture_domain_authority_snapshotAIdempotentInspect
Capture a domain-authority snapshot now: calls the same free resolver get_domain_overview already uses and records today's reading, so get_domain_authority_history has a trend to read back. FREE (no credits), but this is a MUTATION — idempotent per UTC day, so calling it twice in one day does not write twice. Useful for a domain get_domain_overview would not auto-capture on its own — e.g. a tracked competitor rather than the project's own domain.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to capture a snapshot for (e.g. 'example.com'). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false. The description adds real value on top: it is FREE (no credits) and that idempotency is per UTC day, so a second same-day call does not write twice. It does not describe the return payload, but the write effect is well characterized.
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 action and central mechanic, then layers the cost, mutation/idempotency caveat, and use case. Dense and mostly waste-free, though the sentence count is higher than strictly needed for a two-param 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?
For a no-output-schema mutation tool, the description covers effect, cost, idempotency granularity, and sibling relationships, which is enough to call it correctly. The only minor gap is no explicit statement of what the call returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required params (domain, projectId) are already documented with examples and sourcing (list_projects). The description adds no syntax or format beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (capture) and resource (domain-authority snapshot) with timing ('now'), and positions it against two named siblings: it uses the same resolver as get_domain_overview and feeds get_domain_authority_history. An agent can distinguish it from both 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?
Explicitly states when it is useful ('a domain get_domain_overview would not auto-capture on its own — e.g. a tracked competitor rather than the project's own domain') and clarifies the relationship to get_domain_overview and get_domain_authority_history. Clear when-to-use and implicit when-not (the project's own auto-captured domain).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classify_keyword_intentARead-onlyIdempotentInspect
Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic keyword research already applies as its free-tier fallback, made directly callable for a keyword list with no research/volume data yet. FREE and purely local: no upstream call, no billing, no market dependency. Navigational detection is limited to destination/account phrasing ("login", "official website", ...) that means the same thing regardless of brand — a brand-name navigational query with no such phrasing classifies as unknown rather than a guessed label.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | 1-200 keywords to classify. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the readOnly/idempotent annotations: it is FREE, purely local, with no upstream call, no billing, and no market dependency. It also discloses a real limitation — navigational detection only covers destination/account phrasing, and brand-name navigational queries deliberately return `unknown` rather than a guessed label.
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 output labels, then the operational characteristics, then the caveat. It is dense but long, and a few clauses (the 'free-tier fallback' lineage) serve explanation more than invocation, keeping it just under 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?
For a two-parameter, no-output-schema tool this is close to complete: it names the labels, the input bounds, the cost profile, and the accuracy limitation. The one gap is the return shape (e.g., per-keyword label mapping vs. a plain list), which neither the description nor an output schema specifies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented; the description only echoes the 1-200 keyword bound that the schema's minItems/maxItems already encode. It adds no format guidance for keywords or projectId beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource (classify keywords' search intent) and enumerates the exact output labels, so the agent knows what it produces. It also distinguishes itself from keyword research by noting it operates on wording alone 'with no research/volume data yet'.
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 clearly frames when this is the right call: a bare keyword list that has no research/volume data yet, using the same heuristic research_keywords applies as its free-tier fallback. It stops short of explicitly naming a sibling alternative and stating when NOT to use this (e.g., when volume/CPC data is required).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_ai_competitor_positioningAInspect
Runs ONE prompt through the explore_ai_prompt pipeline and checks a brand plus its named competitors against the SAME real per-model answers for mentions and citations. Bounded scope, stated plainly: this is what one prompt's observed answers show for the named entities — never a comprehensive cross-prompt visibility score. mentionedByCount / citedByCount are raw counts out of successfulModelCount, never a percentage or ranking. entities[0] is always the target brand; the rest are the competitors in submitted order. A model that failed upstream reports status: "error" with mentioned/cited: null for every entity — null, not false, because that model was never checked. REQUIRES A PAID PLAN and CHARGES the same as explore_ai_prompt for the requested models; comparing more competitors against that one set of answers costs nothing extra.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | The target brand, domain or product checked in each answer. | |
| models | Yes | 1-4 model personas, as for explore_ai_prompt (persona labels, not vendor-verified models). | |
| prompt | Yes | The one prompt every requested model answers. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| webSearch | No | Ground the answers in a real retrieval pass with cited sources. Defaults to true. | |
| competitors | Yes | 1-5 competitor brands/domains checked against the same answers. | |
| webSearchCountryCode | No | Two-letter country the retrieval pass searches from. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: it discloses that successfulModelCount is the denominator (raw counts, not percentages or rankings), that entities[0] is always the target brand with competitors in submitted order, that a failed model reports status error with mentioned/cited null (not false) because it was never checked, and that it requires a paid plan and charges per-request.
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 'what it does' in the first sentence, then layers in scope limits, output semantics, and cost. It is dense and long, but virtually every clause carries distinct information an agent needs, so only minor trimming would be possible.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full burden and delivers: it explains mentionedByCount/citedByCount denominators, entities[0] ordering, and error/null handling per failed model. Combined with the cost and plan disclosures, an agent has everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents brand, competitors, models, prompt, projectId, and the optional web/locale params. The description's added detail (entities ordering, persona nature of models, per-answer comparison) mostly pertains to output semantics rather than the parameters themselves, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: runs ONE prompt through the explore_ai_prompt pipeline and checks a brand plus competitors against the same per-model answers. It explicitly distinguishes its scope ('what one prompt's observed answers show for the named entities') from a comprehensive cross-prompt visibility score, and names the pipeline it builds on.
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: use it for a single-prompt, bounded entity comparison, and explicitly warns it is 'never a comprehensive cross-prompt visibility score.' It also discloses cost/plan requirements. It stops short of naming an alternative sibling to use when comprehensive, cross-prompt visibility is actually needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_gbp_postADestructiveInspect
Publishes a new "What's New" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here. Show the user the exact text and get their explicit approval before calling. Only standard posts are supported (no event, offer or alert fields).
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | The post text. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language of the post. Defaults to en. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, but the description adds critical context they don't convey: the post goes LIVE and PUBLIC immediately, there is no draft state and no undo. That directly changes agent behavior (mandatory human approval) and exceeds what the structured hints provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action and its immediacy, then the approval requirement, then the scope limit. No filler; every sentence carries an actionable constraint.
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 non-idempotent, destructive write with no output schema, the description supplies the missing behavioral essentials: immediate public effect, irreversibility, required human confirmation, and unsupported post types. An agent has everything needed to invoke it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (summary, projectId, languageCode) are documented in-schema with constraints and sourcing. The description adds no parameter-level syntax or format detail, so the baseline 3 for a fully-documented schema applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Publishes) and resource (a new "What's New" post on the linked Google Business Profile location). It is unambiguous and clearly distinguished from read-side siblings like list_gbp_posts or delete_gbp_review_reply.
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 pre-call procedure (show the user the exact text and get explicit approval) and a scope limit (only standard posts, no event/offer/alert). It does not name an alternative tool or restate the when-not condition in terms of siblings, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_local_pack_rank_configAInspect
Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query as " in " — not geocoded. Run checks with run_local_pack_rank_check and read them with get_local_pack_rank. FREE: database only.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | The search keyword, e.g. 'coffee shop'. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| businessName | Yes | The business name as it appears on Google. | |
| languageCode | No | Search language code. | |
| locationLabel | Yes | Place appended to the query, e.g. 'Shoreditch, London'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, non-idempotent, non-destructive, closed-world), and the description adds non-obvious behavior beyond them: the location is string-composed into the query as '<keyword> in <locationLabel>' and is explicitly NOT geocoded. That is a real implementation trait an agent would otherwise assume wrongly.
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 compact sentences, front-loaded with the definition, followed by the composition rule and the next-step tools. No filler and no repetition of schema or annotation data.
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 config-creation tool with no output schema, the description covers what is created, how the location is interpreted, and which tools consume/read the result. The only minor gap is that it does not mention the created config's identifier being returned for later use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantics for locationLabel: it explains how the value is composed into the query and warns that no geocoding occurs. It does not cover languageCode, which the schema handles.
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 ('Creates a local pack rank check config') and immediately defines the resource's semantics: where businessName sits in Google's local pack for one keyword at one location. This clearly distinguishes it from siblings like create_local_rank_grid_config and create_rank_tracker.
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 through the lifecycle: run checks with run_local_pack_rank_check and read them with get_local_pack_rank. It also flags cost context ('FREE: database only'). It does not state when NOT to use it (e.g. grid vs single-location), but the use case is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_local_rank_grid_configAInspect
Creates a geo-grid rank-tracking config: a 3x3 grid of points around a centre coordinate, checking ORGANIC rank for one keyword and domain from each point. centerLabel must name the place the grid is centred on — a heatmap with no stated centre is a claim about nowhere. Run it with run_local_rank_grid and read it with get_local_rank_grid. FREE: database only.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain whose organic rank is checked. | |
| keyword | Yes | The search keyword. | |
| centerLat | Yes | Latitude of the grid centre. | |
| centerLng | Yes | Longitude of the grid centre. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| spacingKm | Yes | Distance between grid points, 0.5-25 km. | |
| centerLabel | Yes | What the centre point is called, e.g. 'Manchester city centre'. | |
| languageCode | No | Search language code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false). The description adds context the annotations cannot: the call is database-only and FREE, i.e. it persists a config without triggering a paid rank run, and centerLabel is effectively mandatory in substance, not just by schema. The non-idempotent behaviour (what happens if a duplicate config is created) is left unstated.
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 definition, then the centerLabel constraint, then the workflow and cost note. Every sentence carries information, though the rhetorical clause 'a heatmap with no stated centre is a claim about nowhere' is slightly ornate for a tool 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?
Covers creation semantics, the required labelling constraint, the follow-up tools for running and reading, and the cost model — enough for an agent to call it correctly without an output schema. It stops short of documenting duplicate-config behaviour or what the created config ID looks like for subsequent run/get calls.
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 already 100%, so the baseline is 3. The description goes beyond it by explaining the semantics of the grid itself (3x3 points around a centre, organic-only rank, one keyword/domain per point) and by giving centerLabel a stated requirement plus rationale rather than only an example value.
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 ('Creates a geo-grid rank-tracking config') and immediately defines the object: a 3x3 grid around a centre coordinate checking ORGANIC rank for one keyword/domain. This is precise enough to separate it from the sibling run_local_rank_grid and get_local_rank_grid, which it names as the lifecycle partners.
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 what to do after creation ('Run it with run_local_rank_grid and read it with get_local_rank_grid'), which routes the agent into the correct workflow. It does not, however, address the closest alternative (create_local_pack_rank_config) or state when a grid config is preferable to other rank-tracking setups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_portfolioAInspect
Creates a portfolio. Returns { id }. Starts with no member projects — use add_portfolio_projects next. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Portfolio name, 1-100 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-destructive, non-idempotent write, so the safety profile is covered. The description adds genuine value beyond them: it discloses the return shape ({ id }), the empty starting state, and the cost profile ('FREE: database only, no SEO data provider is called and no credits are spent') — a real operational trait an agent could not 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?
Three short sentences, zero filler, each carrying distinct information (what it does, what it returns, what to do next, and what it costs). The next-step guidance and cost note are front-loaded rather than 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?
No output schema exists, but the description supplies the return value ({ id }), the follow-up action, and the cost/credit implication, which is everything an agent needs to invoke this simple single-parameter creation 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 100% (the single 'name' parameter is documented as 1-100 characters), so the schema carries the parameter semantics. The description adds no format or constraint detail beyond it; the 'no member projects' note describes state, not the parameter. Baseline 3 is appropriate for a one-parameter tool with full 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 ('Creates a portfolio') and immediately disambiguates it from the sibling add_portfolio_projects by declaring the initial state ('Starts with no member projects'). An agent can distinguish this from list_portfolios, get_portfolio, delete_portfolio and rename_portfolio 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 the follow-up tool ('use add_portfolio_projects next'), which is the natural workflow after creation. It does not state exclusions or prerequisites (e.g. naming collisions, uniqueness constraints), so it falls short of a full when/when-not specification.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_rank_trackerAInspect
Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords. Positions are collected by the SCHEDULED check ('daily' or 'weekly'; 'manual' means never on a schedule) and read with get_rank_tracker — nothing here triggers a check on demand. One tracker per (domain, market) per project: repeating a pair is a validation error, not a second tracker. FREE at creation: database only, no credits spent.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain whose positions are tracked, e.g. example.com. | |
| devices | No | Devices to track. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| serpDepth | Yes | How deep to search, 10-100 in steps of 10. | |
| languageCode | No | Language code (e.g. 'en'). Omit it to use the project's default market language. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market. | |
| locationHint | No | Free-text city/region hint, honoured only where the SERP provider supports it. | |
| scheduleInterval | No | How often the scheduled check runs. | |
| newKeywordAlertEnabled | No | Notify when the domain starts ranking for a keyword it did not rank for before. | |
| rankDropAlertThreshold | No | Notify when a keyword falls by at least this many positions. null turns it off. | |
| competitorMoveAlertThreshold | No | Notify when a tracked competitor gains at least this many positions. null turns it off. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say it is a non-read-only, non-idempotent, non-destructive create. The description adds the crucial behavioral fact that creation is FREE (database only, no credits) — a claim annotations cannot express — plus the constraint that scheduled checks are the sole mechanism for data collection. This is exactly the 'beyond annotations' value the dimension rewards.
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 single paragraph is front-loaded with the action and return value, then routes to the follow-up tool, then discloses constraints. Dense but every sentence earns its place; four separate facts in four sentences 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 an 11-parameter create tool with no output schema, the description supplies the return value (configId), the follow-up workflow, the uniqueness constraint, the scheduling semantics, and the cost — everything an agent needs to call it correctly and without surprise.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters (domain, devices, scheduleInterval, serpDepth, etc.) are already fully documented in the schema. The description confirms the shape (domain + market + devices + schedule) and clarifies 'manual' means no schedule, but adds no syntax or defaults beyond the schema. Baseline 3 per the high-coverage rule.
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 ('Creates') and resource ('rank tracker config') and enumerates the config contents (domain + market + devices + schedule). It also names the sibling it hands off to (add_rank_tracking_keywords) and the reader (get_rank_tracker), distinguishing it from other create_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the next step (add keywords with add_rank_tracking_keywords), that positions come only from the schedule and are read via get_rank_tracker, and that nothing triggers an on-demand check. It also states the uniqueness constraint (one tracker per domain+market per project) and that repeats are a validation error, so an agent knows when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_report_definitionAInspect
Creates a report definition with a chosen set of widgets, in print order. Returns { id }. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Report name, 1-100 characters. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| widgetTypes | Yes | Widget types, in print order. Catalogue: site_health (Crawl findings and issue counts from the latest audit.); internal_linking (Orphan pages, dead ends and link depth from the latest crawl.); rank_tracking (Rank-tracker scorecards per tracked domain.); keywords (Saved keywords with volume, difficulty and CPC.); search_console (Search Console totals and top queries/pages.); web_analytics (Sessions, pageviews and bounce rate from the tracking snippet.); gsc_coverage (How many of your pages Search Console has inspected, and their most common state.); rank_movers (Keywords that newly started ranking or climbed fast.); rank_volatility (How much your own positions churned between the last two checks.); share_of_voice (Your tracked domain's share of visibility against its competitors.); log_analyzer (Total server hits and the AI-crawler share of them.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare it's a write (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds valuable context: returns { id }, no SEO provider calls, no credit spend. It could go further by stating what happens on duplicate name or permission requirements.
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: the first states the action and result shape, the second gives the cost/free-tool context. Front-loaded with the core verb+resource and zero 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?
Covers the essentials for a create tool: what it makes, the ordering behavior, return shape, and cost profile. Missing only edge-case guidance (duplicate names, limits, permissions), which is minor given the 100% schema 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 coverage is 100%, so the schema fully documents all 3 parameters including the widgetTypes enum with descriptions. The description adds the print-order concept for widgets but this is already stated in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Creates) and resource (report definition) with the key detail of print order for widgets. Distinguishes from set_report_widgets by implying creation rather than modification, but doesn't explicitly name any sibling for comparison.
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 FREE clause hints at cost guidance but doesn't specify when to use this vs set_report_widgets, rename_report_definition, or render_report_definition. No explicit when-to-use or when-not-to-use guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_brand_monitorADestructiveIdempotentInspect
Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors.
| Name | Required | Description | Default |
|---|---|---|---|
| monitorId | Yes | Brand monitor ID, from list_brand_monitors. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, covering the safety profile. The description goes beyond this by revealing the side effect on scheduled scans and the admin-role requirement, which the annotations do not 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, no filler. The core action is front-loaded, with the side effect and prerequisites following without redundant restatement of the tool name.
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, idempotent delete with no output schema, the description covers the essential points: what is deleted, the consequence, and the authorization requirement. It is nearly complete, lacking only a note on reversibility or failure behavior, which is minor given annotation 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 100%, so both monitorId and projectId are fully documented in the schema, including their provenance. The description reiterates where to get monitorId but adds no format or constraint detail beyond the schema; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Deletes a brand monitor') and adds the consequential effect 'stopping its scheduled scans', which distinguishes it from siblings like remove_competitor_monitor. An agent can immediately tell 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?
Provides a concrete prerequisite ('Requires the admin role in the calling organization') and points to list_brand_monitors for obtaining the ID. There is no explicit when-not-to-use guidance (e.g., prefer keeping the monitor vs deleting), 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.
delete_gbp_review_replyADestructiveIdempotentInspect
Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| reviewId | Yes | Review ID, from get_gbp_reviews. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds genuinely new behavioral context beyond those hints: the removal is public-facing and takes effect immediately, plus a user-confirmation requirement, which the 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?
Three short sentences, each carrying distinct information (what is deleted, its visibility/timing, the confirmation requirement), with the core action front-loaded and 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 two-parameter destructive tool with no output schema and rich annotations, the description supplies what an agent most needs: exact scope, irreversibility via public/immediate framing, and a confirmation gate. Minor omissions (error or permission behavior on an already-deleted reply) are acceptable since the tool is idempotent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both reviewId and projectId are already documented in the schema, including the get_gbp_reviews provenance that the description repeats. No additional format, constraint, or example is added, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Removes the owner's published reply from one Google review'. The scope ('one Google review') is explicit and it is distinguishable from the sibling reply_to_gbp_review, which adds or edits a reply rather than deleting one.
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 prerequisite for the key parameter ('reviewId from get_gbp_reviews') and an operational caution ('Confirm with the user before calling'), which tells the agent when this call is appropriate. It does not, however, explicitly contrast itself with the alternative reply_to_gbp_review or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_local_pack_rank_configADestructiveIdempotentInspect
Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Config ID, from the matching get_* tool called without configId. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the destructive nature is known. The description adds context the annotations do not: the deletion is cascading, taking the config's entire check history with it, and it demands user confirmation. That is exactly the extra behavioral detail the 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?
Two short sentences, zero filler. The irreversible consequence is front-loaded and capitalized, and the confirmation requirement follows immediately after.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter deletion tool with no output schema and fully documented parameters, the description covers what is deleted, how far the deletion reaches, and the confirmation requirement. Only a note on how to discover existing configs (or on error behavior for a bad configId) is arguably absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: configId documents its provenance (from the matching get_* tool without configId) and projectId points at list_projects. The description adds no parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Deletes) and resource (local pack rank check config), which cleanly separates it from sibling delete_local_rank_grid_config and from create_local_pack_rank_config. No schema inspection is needed to know what it acts on.
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 one directive — 'Confirm with the user before calling' — which is a gating condition rather than a when-to-use rationale. It never states when to prefer this over alternatives such as delete_local_rank_grid_config or disabling a config instead of deleting it, so usage is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_local_rank_grid_configADestructiveIdempotentInspect
Deletes a geo-grid rank-tracking config, INCLUDING its whole run and point history. Confirm with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Config ID, from the matching get_* tool called without configId. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds valuable specifics beyond annotations: that the whole run and point history are deleted (scope of destruction) and a user-confirmation requirement. This is genuine added 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?
Two short sentences, front-loaded with the action and the critical 'INCLUDING history' warning before the confirmation instruction. No waste.
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 2-param destructive delete with full schema coverage and annotations, the description covers the key extras an agent needs: destruction scope and confirmation requirement. No output schema is needed for a delete. Minor gap: no mention of irreversibility beyond 'deletes'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with configId and projectId fully documented in the schema. The description adds no parameter syntax or format details. Baseline 3 is correct when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Deletes) and resource (geo-grid rank-tracking config), enough to distinguish from siblings like delete_local_pack_rank_config. Doesn't explicitly name the sibling it differs from, but the resource is specific.
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?
Adds a 'Confirm with the user before calling' instruction, which is useful guidance for a destructive op. However, it does not say when to use delete_local_rank_grid_config vs delete_local_pack_rank_config or other config deletion tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_portfolioADestructiveIdempotentInspect
Deletes a portfolio. Member projects themselves are untouched — only the grouping is removed. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolioId | Yes | Portfolio ID. Use list_portfolios to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description adds blast-radius detail the annotations cannot express: deletion is scoped to the grouping and does not cascade to member projects, and no external provider call or credit spend occurs. It does not cover permissions or error 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?
Three short sentences, zero filler, with the core action front-loaded and the side-effect and cost caveats following in priority order. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive tool with no output schema, the definition covers action, blast radius, idempotency context, and cost. Only permission requirements and failure modes are unaddressed, which is a minor gap on a tool whose annotations already mark it destructive.
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?
One parameter with 100% schema description coverage, and the schema already tells the agent to use list_portfolios to find the ID. The description adds nothing about the portfolioId itself, so this is the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes a portfolio') and immediately disambiguates it from the similarly named remove_portfolio_projects by clarifying that member projects are untouched and only the grouping is removed. An agent can pick between the two 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?
Cost guidance is explicit ('no SEO data provider is called and no credits are spent'), which is real usage signal in a toolset full of credit-consuming calls, but there is no explicit when-to-use/when-not or named alternative tool. The routing to remove_portfolio_projects is only implied by the 'member projects untouched' clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_report_definitionADestructiveIdempotentInspect
Deletes a report definition. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is covered. The description adds context annotations do not carry: the operation is database-only, invokes no SEO data provider, and consumes no credits. It does not say whether the deletion is permanent or what happens to dependent report schedules.
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, zero filler, with the core action front-loaded and the cost consequence immediately after. Every clause carries information an agent can act on.
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, annotation-covered delete with no output schema, the description covers cost behavior but omits cascade/reversibility facts, notably whether associated report schedules are also removed. Adequate but with a clear gap given the sibling delete_report_schedule.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are fully documented in the schema, including the 'Required.' marker and pointers to list_projects and list_report_definitions. The description adds nothing about either parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource ('Deletes a report definition'), which cleanly separates it from get_report_definition, rename_report_definition and render_report_definition. It does not explicitly name the nearest confusable sibling, delete_report_schedule, so an agent must rely on the resource noun alone to distinguish the two deletions.
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 explicit when-to-use or when-not-to-use guidance and no alternative is named. The 'FREE' note does give a decision-relevant cost signal (no credits spent), which helps an agent route among operations, but it is not usage guidance in the strict sense.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_report_scheduleADestructiveIdempotentInspect
Deletes a report definition's schedule. Requires the admin role in the calling organization, same as creating one. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is known; the description adds genuinely useful context beyond them — the required admin role and the fact that no SEO data provider is called and no credits are spent. It does not, however, state whether the parent report definition survives or whether re-creation is needed.
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, purpose first, then the permission prerequisite, then the cost/side-effect note. No filler; each sentence contributes a distinct, actionable fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter delete with no output schema and strong annotations, the description covers purpose, gating, and side-effect cost sufficiently. The only minor gap is not telling the agent what happens to the underlying report definition or how to restore the schedule.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — both projectId and reportDefinitionId are documented in-schema with sourcing hints (list_projects, list_report_definitions). The description adds no additional parameter-level meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ("Deletes a report definition's schedule"), which cleanly separates it from the sibling delete_report_definition (the definition itself) and upsert_report_schedule (the writer counterpart). An agent can pick the right tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a prerequisite (admin role) and that it is free/credit-less, which frames cost and gating, but it never says when to delete a schedule versus using upsert_report_schedule to change it, nor what effect removal has on the parent definition. 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.
delete_tracked_promptADestructiveIdempotentInspect
Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| trackedPromptId | Yes | Tracked prompt ID, from list_tracked_prompts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety is covered by structured data. The description adds value beyond them by disclosing the auth requirement and the downstream effect that scheduled checks stop, which an agent would not infer from the annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and its effect, then auth requirement, then ID provenance. Every sentence carries distinct operational 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 two-parameter mutation with no output schema, the description covers effect, permissions, and ID source, and both params are fully documented in the schema. It stops short of stating whether the deletion is recoverable or what happens to historical trend data, which would complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters documented in the schema including that projectId is required and where to obtain it. The description reinforces the ID source but adds no syntax, format, or constraint beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Deletes a tracked prompt') and adds the consequential side effect ('stopping its scheduled checks'), so the agent understands this is more than a record removal. It does not explicitly distinguish itself from the many other delete_* siblings, but the named resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a hard prerequisite ('Requires the admin role in the calling organization') and routes the agent to the source of the ID ('Get the trackedPromptId from list_tracked_prompts'). No explicit when-not or alternative-tool guidance, but the context needed to invoke successfully is present.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disable_patch_auto_publishADestructiveIdempotentInspect
Patches: stops auto-publishing freshly AI-drafted patches for this issue type — future drafts wait for a manual publish_patch call again. Already-published patches are unaffected. FREE (no credits), but this is a MUTATION. Requires an org admin.
| Name | Required | Description | Default |
|---|---|---|---|
| issueType | Yes | Which issue type's auto-publish rule to remove. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry destructiveHint, idempotentHint and readOnlyHint, so the bar is lower, yet the description adds real context beyond them: FREE/no credits, org admin requirement, and the important nuance that already-published patches are unaffected. This directly addresses the surprising part of a destructive-hinted 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, front-loaded with the primary effect ('stops auto-publishing...') before the scope caveat and the cost/permission notes. No filler and 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?
For a two-parameter mutation with no output schema, the description covers effect, scope, side effects on existing patches, cost, and the admin prerequisite. Nothing an agent needs to decide 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 100%, so both parameters and the issueType enum are already documented in the schema. The phrase 'for this issue type' reinforces the scoping of issueType but adds no syntax or selection guidance beyond the enum, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('stops auto-publishing freshly AI-drafted patches for this issue type') and defines scope precisely as per-issue-type. Named context (publish_patch, drafted patches) makes it distinguishable from the sibling enable_patch_auto_publish even though that sibling isn't named explicitly.
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 establishes the when: this affects future auto-drafts and routes them back to manual publish_patch calls, and clarifies already-published patches are untouched. It never states the inverse action ('use enable_patch_auto_publish to restore'), so the alternative is only 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.
disconnect_ahrefsADestructiveIdempotentInspect
Full disconnect: drops BOTH the Rank Tracker and Site Audit bindings and the stored grant. Breaks Ahrefs data for every member of the organization, not just the caller — requires at least the admin role.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds the crucial blast radius detail that it destroys TWO bindings plus the stored grant and breaks Ahrefs data for all organization members, not just the caller. The admin-role prerequisite is authorization context the annotations do not 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?
Two sentences, zero filler, and the destructive scope statement is front-loaded before the permission note. Every clause carries operational weight.
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 one-parameter destructive mutation with no output schema, the description covers what is destroyed, who is affected, and the role requirement. It could go slightly further by noting the operation is not undoable without reconnecting (and which tool re-establishes the connection), but nothing essential 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?
Single parameter with 100% schema description coverage; the schema already explains projectId and points to list_projects. The description adds no additional parameter meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (disconnect/full disconnect) and precisely enumerates the resource scope: both the Rank Tracker and Site Audit bindings plus the stored grant. This cleanly distinguishes it from sibling disconnects like disconnect_bing and from set_ahrefs_project, which is the inverse operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for invocation: it is the 'full' teardown, it affects every member of the organization rather than just the caller, and it 'requires at least the admin role.' It never explicitly names the alternative (e.g., a partial unbind or set_ahrefs_project for rebinding), so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_baiduADestructiveIdempotentInspect
Remove a project's Baidu Webmaster connection. Breaks Baidu push submission for every member of the organization, not just the caller — requires at least the admin role.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint/idempotentHint annotations, the description discloses blast radius ('Breaks Baidu push submission for every member of the organization, not just the caller') and an authorization requirement (admin role). Those are exactly the side-effect and permission facts an agent cannot derive from 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?
Two sentences, both earning their place: the first identifies the action, the second front-loads the two facts that affect the decision (scope of damage, role requirement). No filler or restatement of the name.
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 one-parameter destructive tool with no output schema and annotations already covering safety semantics, the description supplies the missing pieces: side-effect scope, permission gate, and target resource. Nothing needed to invoke it correctly is absent.
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 a single parameter at 100% schema description coverage, the schema already documents projectId fully (including how to obtain it). The description only implies project scoping through the phrase 'a project's connection' and adds no format or constraint detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove a project's Baidu Webmaster connection'), which cleanly separates it from the disconnect_ahrefs/disconnect_bing/disconnect_yandex/disconnect_ga4 siblings that share the same verb. No schema lookup is needed to know 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?
It gives a concrete prerequisite ('requires at least the admin role') and warns about org-wide impact, which tells the agent when the call is appropriate and when it may fail. It stops short of naming alternatives or exclusions, e.g. pointing at get_baidu_connection to verify state first or set_baidu_connection to restore it, so it is clear context rather than 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.
disconnect_bingADestructiveIdempotentInspect
Unlink a project's Bing Webmaster site. Breaks Bing Webmaster data for every member of the organization, not just the caller — requires at least the admin role.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so safety is partly covered. The description earns credit for adding the blast radius ('breaks Bing Webmaster data for every member of the organization, not just the caller') and the authorization requirement — both genuinely beyond what annotations 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?
Two sentences, front-loaded with the action, then the consequence and prerequisite. No filler or redundancy; 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?
For a one-parameter destructive mutation with no output schema, the definition covers purpose, org-wide impact, and role requirement — enough to call it safely. Minor gap: it does not say what state the project is left in after disconnection.
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?
Single parameter with 100% schema coverage; the schema already documents projectId fully, including where to obtain it. The description adds no syntax or semantic detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (unlink) and resource (a project's Bing Webmaster site), which cleanly distinguishes it from the parallel disconnect_ahrefs/disconnect_baidu/disconnect_ga4/disconnect_gbp/disconnect_yandex siblings. An agent can identify the target integration 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?
Provides a precondition ('requires at least the admin role') but never states when to prefer this over the inverse operation set_bing_site or other disconnect variants, nor what happens on subsequent calls. Usage is implied by the name and prerequisite rather than explicitly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_ga4ADestructiveIdempotentInspect
Unlink a project's Google Analytics property. Breaks Analytics data for every member of the organization, not just the caller — requires at least the admin role.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, but the description adds real context beyond them: the blast radius is organization-wide ('Breaks Analytics data for every member of the organization, not just the caller') and it states the authorization requirement. It does not discuss reversibility or how to reconnect.
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 short sentences: the action first, then the consequence and permission requirement. No filler, no repetition of the name 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?
For a single-parameter destructive mutation with no output schema, the description covers purpose, org-wide impact and required role, which is nearly everything an agent needs. Minor gaps remain around whether the link can be restored and what happens to historical data.
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?
Only one parameter (projectId) with 100% schema coverage, including guidance to get it from list_projects. The description adds no parameter-level meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Unlink a project's Google Analytics property.' It is unambiguous about what is being removed, but it never names or distinguishes itself from the other disconnect_* siblings (ahrefs, baidu, bing, gbp, yandex), so sibling differentiation comes only from the tool name.
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 by the name and the tool is clearly the inverse of set_ga4_property, but the description gives no explicit when-to-use/when-not guidance or alternatives. It does supply one useful prerequisite ('requires at least the admin role'), which lifts it above pure implication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_gbpADestructiveIdempotentInspect
Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — but every GBP tool stops working for the project until it is linked again.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
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 adds material context they cannot convey: the deletion is scoped to MisarSEO's own record only and the Google location itself is untouched, plus the cascading side effect that all GBP tools break until relinking. This is exactly the behavioral detail an agent needs before invoking a destructive unlink.
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, and the effect-plus-scope caveat is front-loaded before the downstream consequence. Every clause earns its place and the em-dash clause clarifies the blast radius efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter destructive toggle with no output schema, the description covers what is removed, what is not, and the operational fallout — enough for an agent to call it correctly and warn appropriately. No meaningful gap remains given annotations already carry the safety profile.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — projectId is documented in-schema with required-ness and a pointer to list_projects. The description adds no parameter-level detail, so the baseline of 3 applies; the schema does the work here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
'Removes the project's link to its Google Business Profile location' names a specific verb (removes) and a precise resource (the GBP link record), and is immediately distinguishable from the write-side sibling set_gbp_connection. An agent knows exactly what operation this is 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 states the consequence-driven context ('every GBP tool stops working for the project until it is linked again'), which tells the agent when this action is appropriate and what it costs. It does not explicitly name set_gbp_connection as the counterpart/reversal route, so the routing guidance is strong but not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
disconnect_yandexADestructiveIdempotentInspect
Unlink a project's Yandex Webmaster host. Breaks Yandex Webmaster data for every member of the organization, not just the caller — requires at least the admin role.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: annotations say only destructiveHint=true and idempotentHint=true, while the description discloses that data is broken for every organization member, not just the caller, and sets a minimum permission (admin role). Those are exactly the impact and authorization facts an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both load-bearing: the first names the operation, the second front-loads the blast radius and permission requirement. No filler or restated 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?
For a single-parameter, no-output-schema, destructive tool, the description covers the essentials: what is unlinked, how broad the damage is, and who is allowed to do it. Nothing an agent needs to invoke it 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?
Only one parameter (projectId) and schema coverage is 100%, so the schema already carries its meaning including where to obtain the ID (list_projects). The description adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Unlink a project's Yandex Webmaster host.' This clearly distinguishes it from the connect-side sibling set_yandex_host and from the other disconnect_* tools (ahrefs, bing, ga4, gbp), which target different integrations.
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 a precondition ('requires at least the admin role') and implies scoping to one project, but never states when to use this versus alternatives (e.g., re-pointing a host via set_yandex_host) or what happens if the host is already unlinked. Usage is inferable from the purpose but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draft_patchAInspect
Patches: drafts a title/metaDescription/canonical/redirect fix for one page's finding. FREE for canonical/redirect (deterministic — canonical is always the page's own URL, redirect always needs an explicit value); title/metaDescription cost one AI-gateway operation UNLESS value is given, which sets an explicit replacement instead of drafting one. This is a MUTATION — it creates or overwrites this page+field's draft, but does not publish it (use publish_patch for that). Requires an org admin.
| Name | Required | Description | Default |
|---|---|---|---|
| value | No | An explicit replacement value instead of AI-drafting one. Required for redirect (broken_page) — there is no computable default. Never used for canonical, which is always the page's own URL. | |
| pageUrl | Yes | The exact crawled page URL this finding is on. | |
| issueType | Yes | Which finding this patch addresses — determines the field (title/metaDescription/canonical/redirect). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly=false, destructive=false), yet the description adds substantial context the annotations don't: it is a mutation that creates/overwrites a per-page+field draft but does not publish, it consumes an AI-gateway operation in specific cases, and it requires an org admin. These are exactly the behavioral facts an agent needs beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and scope, and every sentence carries load (cost, mutation, alternative, auth). It is dense and somewhat run-on with heavy parenthetical nesting, which slightly hurts scanability but wastes no 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?
With no output schema, the description still covers everything an agent needs to call this correctly: what it creates, that it isn't published, the cost model, the auth requirement, and the sibling to use instead. Nothing material is missing for a 4-parameter mutation 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 coverage is 100%, and the schema already documents value, issueType, pageUrl and projectId in detail, so baseline is 3. The description adds meaning beyond the schema by tying value to cost (skips the AI operation) and to the free deterministic canonical/redirect cases, which the schema only partially conveys.
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 (drafts) and resource (a title/metaDescription/canonical/redirect fix for one page's finding), naming the exact issue classes it covers. It explicitly distinguishes itself from publish_patch and implies the batch alternative, so an agent can tell what it does and doesn't do 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?
Provides explicit when/when-not and routing: use publish_patch to publish, and use value when an explicit replacement is needed instead of AI drafting. It also names conditions that change cost (canonical/redirect free, title/metaDescription cost unless value given), giving the agent decision-relevant guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
enable_patch_auto_publishAIdempotentInspect
Patches: from now on, a freshly AI-drafted patch for this issue type publishes immediately instead of waiting for a manual publish_patch call — capped at 20 auto-publishes per project per day. A hand-typed replacement value (draft_patch's value argument) is NEVER auto-published regardless of this rule. FREE (no credits), but this is a MUTATION. Requires an org admin.
| Name | Required | Description | Default |
|---|---|---|---|
| issueType | Yes | Which finding type to auto-publish AI-drafted patches for. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses traits well beyond the annotations: a 20-per-project-per-day cap, that it is FREE, that it is a MUTATION, and that it requires org admin rights. Annotations already mark it non-readonly, non-destructive, and idempotent, so the description's added caveats about limits, cost, and permissions are genuinely valuable.
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 that are front-loaded with the core effect before the cap, exception, and permission notes. Every clause carries information, though the embedded draft_patch value-argument clause makes it slightly dense rather than crisply scannable.
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 2-parameter mutation with no output schema, the description supplies everything needed: the behavioral change, the cap, cost, permission requirements, and the critical exception. Annotations cover the safety profile, so no essential context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented, giving a baseline of 3. The description adds meaningful interpretation by clarifying that the rule applies only to freshly AI-drafted patches and never to hand-typed replacement values, which shapes how the issueType scope should be understood.
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 (enable) and resource (patch auto-publish) for a given issue type, and describes the exact behavioral change: AI-drafted patches publish immediately rather than waiting for a manual publish_patch call. This lets an agent distinguish it immediately from the sibling publish_patch and disable_patch_auto_publish 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?
Clearly explains the operational context (replaces the manual publish_patch step, applies per issue type, requires org admin) and notes the key exception that hand-typed draft values are never auto-published. It does not explicitly point to disable_patch_auto_publish as the reversal path, leaving that inference to the sibling name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explore_ai_promptAInspect
Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/claude/gemini/perplexity) are NOT vendor-verified — none is guaranteed to be that vendor's own model; 'claude' and 'perplexity' in particular have no real vendor route at all. Treat every answer as 'a model answering as X', never as ground truth from X. REQUIRES A PAID PLAN and CHARGES one shared AI-gateway operation per call (not per model) — plus one more if analyzeSentiment and highlightBrand are BOTH set.
| Name | Required | Description | Default |
|---|---|---|---|
| models | Yes | 1-4 model personas to answer the prompt (chat_gpt, claude, gemini, perplexity). See this tool's own description for what these labels do and do not guarantee. | |
| prompt | Yes | The prompt to send to each requested model. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| webSearch | No | Ground the answer in a real retrieval pass with cited sources, shared across every requested persona. Defaults to true. | |
| highlightBrand | No | A brand/entity name to highlight mentions of in each answer. Required for analyzeSentiment. | |
| analyzeSentiment | No | Classify sentiment toward highlightBrand in each answer. Requires highlightBrand. Spends one EXTRA AI-gateway operation on top of the base call — never charged unless both this and highlightBrand are set. | |
| webSearchCountryCode | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses that a paid plan is REQUIRED, that one shared gateway operation is charged per call (not per model), and that an extra operation is spent only when both analyzeSentiment and highlightBrand are set. It also honestly warns that persona labels are not vendor-verified and that 'claude'/'perplexity' have no real vendor route.
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 tightly-packed sentences, front-loaded with what it does, then the critical persona caveat, then the cost model. 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?
Covers purpose, the crucial interpretation caveat, cost/auth preconditions, and roughly what it returns ('each answer verbatim, with real citations'), which is sufficient given there is no 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?
With 86% schema coverage the schema carries most parameter detail, but the description adds non-obvious semantics: webSearch is shared across all personas, and the analyzeSentiment+highlightBrand combination triggers an extra charge. This meaningfully enriches the schema beyond field definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Runs one prompt through up to 4 model personas') and scope ('returns each answer verbatim, with real citations when webSearch is on'), which cleanly distinguishes it from siblings like research_ai_prompts and get_direct_vendor_answers.
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 strong interpretive guidance ('treat every answer as a model answering as X, never as ground truth from X') and states the paid-plan precondition. It does not, however, explicitly name an alternative tool or the condition that selects this over research_ai_prompts, 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.
export_disavow_fileARead-onlyIdempotentInspect
Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/2648487) — one bare URL per line to disavow that exact page, or domain:<host> to disavow an entire domain and its subdomains. FREE (no credits). Save fileContent to a .txt file as-is (UTF-8).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds significant context beyond annotations: FREE (no credits), UTF-8 encoding requirement, exact save instructions, and the Google disavow syntax. Annotations already cover read-only/idempotent safety; the description adds operational details about the output artifact itself.
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?
Single dense sentence pack with the critical output format front-loaded, followed by syntax definition and save instructions. No waste, 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 single-parameter read-only export tool, the description covers everything needed: what it does, the output format, the syntax rules, encoding, and the downstream usage pattern. With annotations covering safety profile, no further behavioral disclosure is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the projectId parameter is fully documented in the schema including how to obtain it. The description doesn't add parameter-specific meaning beyond what's in the schema — baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (export) and resource (disavow file) and precisely defines what the output represents — the exact .txt content Google's disavow tool accepts. This distinguishes it from siblings like list_disavow_entries, which lists entries rather than producing a Google-ready file.
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 context about free usage and the output format, but doesn't explicitly state when to use this vs list_disavow_entries or add_disavow_entry. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_link_prospects_csvARead-onlyIdempotentInspect
Link Building Tool: export a project's prospect list as CSV text. FREE (no credits). Save csvContent to a .csv file as-is (UTF-8).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is lower; the description adds non-annotation context that it is credit-free and that the payload should be written verbatim with UTF-8 encoding. It does not mention size limits, truncation, or error behavior for large prospect lists.
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 clauses, front-loaded with the tool family and action, with zero filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the return field (`csvContent`), its format (CSV text), and required encoding — exactly what an agent needs to consume the result. Nothing essential is missing for a single-param export 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?
Only one parameter, and schema description coverage is 100% — the schema already documents `projectId` including its source (list_projects). The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (export) and resource (a project's prospect list) plus the exact form of the output (CSV text). This clearly differentiates it from sibling read tools like list_link_prospects and the inverse import_link_prospects_csv.
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 notes the operation is FREE (no credits) and instructs the agent to save the returned `csvContent` to a .csv file as-is (UTF-8), which is useful post-call guidance. However, it gives no explicit when-to-use vs. alternatives guidance (e.g., list_link_prospects for paged JSON access, import_link_prospects_csv for the reverse direction).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_serp_competitorsAInspect
Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inverse of get_keyword_gap, which asks what one competitor ranks for that we do not. CHARGES CREDITS ON THE PAID DATA PROVIDER, which is also the only one that honours resultTypes and includeSubdomains and that measures visibility, etv and rating. On the default free provider competitors are aggregated from one live SERP per keyword: NOTHING IS CHARGED, only ORGANIC results are counted whatever resultTypes says, includeSubdomains is ignored, and visibility/traffic-estimate/rating are left unmeasured. Sorting never treats an unmeasured field as zero: rows the provider did not measure sort last and are reported in unmeasuredForSort. If that count equals the row count, the list is NOT ranked by anything — say so instead of presenting the first row as the strongest competitor. Omit locationCode/languageCode to use the project's default market.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum competitors to return (1-100). Defaults to 50. | |
| offset | No | Rows to skip for pagination. | |
| sortBy | No | Sort order for returned competitors. Defaults to visibility. Only `keyword_count` and `avg_position` are measured on every provider — `visibility` and `traffic_estimate` are unmeasured on the free provider, and rows without the chosen field sort last rather than as zero. Prefer `keyword_count` when you need an order that always means something. | |
| keywords | Yes | Keywords whose SERPs are compared (1-100). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| resultTypes | No | SERP result types to include. Defaults to organic and local_pack. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. | |
| excludeDomains | No | Domains to exclude from results (e.g. the user's own site). | |
| includeSubdomains | No | Count subdomains as part of the same competitor domain. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover only the generic safety profile (readOnlyHint=false, idempotentHint=false), so the description carries real weight here and delivers: credit charges on the paid provider, the free provider aggregating one live SERP per keyword, resultTypes/includeSubdomains being ignored on the free tier, and the critical 'unmeasured sorts last, not zero' behaviour with the unmeasuredForSort field. This is exactly the context annotations cannot provide.
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 text is dense and long, but front-loaded with the purpose before the caveats, and nearly every clause conveys a distinct operational fact. The credits/provider material is slightly repetitive in phrasing, which keeps it from 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?
For a 10-parameter, no-output-schema tool with only generic annotations, the description supplies the missing pieces: cost model, provider-dependent semantics, sorting pitfall, and a warning not to present an unranked list as ranked. Nothing an agent needs before calling it is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning the schema does not: which parameters only the paid provider honours (resultTypes, includeSubdomains) and that omitting locationCode/languageCode falls back to the project default market. It stops short of explaining excludeDomains or the limit/offset relationship, keeping it at a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('compares domains competing in search results for a supplied keyword set') and explicitly distinguishes itself from the sibling get_keyword_gap, which it calls 'the inverse'. An agent can pick this tool over its neighbours 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?
It names the intended use case (market and search-intelligence reports), an explicit exclusion ('not radius-based local SEO'), and the alternative tool plus the question that should route to it instead. This is about as complete as routing guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_comparisonARead-onlyIdempotentInspect
Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visited are compared, so a shorter crawl never reports the pages it missed as fixed — those are reported separately as notComparableCount. newIssues only ever covers an existing page newly showing a finding, never a brand-new page's own findings (those fold into notComparableCount/addedUrlCount instead, since a page neither crawl could compare has no meaningful 'new' vs. 'always there' answer). Returns an error when there is no earlier completed audit to compare against. Free — charges no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| auditId | Yes | Audit ID to compare, from crawl_site or get_crawl_results. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| baselineAuditId | No | Audit ID to compare against. OMIT IT unless you have a reason: omitting picks the COMPLETED run immediately before auditId, while a baseline named here is used as given with no completed-status check — pointing it at a failed or still-running crawl diffs against a partial page set. Comparing an audit to itself is a validation error. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, and the description goes well beyond them: it discloses the exact comparison scope, the notComparableCount fallback for pages a shorter crawl missed, the precise boundary of newIssues, the self-comparison validation error, the failure mode when no baseline exists, and that the call costs no credits.
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 comparison and the notComparableCount caveat lead, and the error/cost facts are tacked on at the end. It is dense with two nested parentheticals, but each sentence carries distinct information rather than 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 no output schema, the description carries the return-value burden and does it: it names the issue categories, notComparableCount, addedUrlCount, and the health-score delta. For a read-only diff tool, nothing an agent needs to call and interpret 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 100%, and the schema itself already documents auditId, projectId, and the baselineAuditId omission/fallback behavior in detail. The description adds comparison semantics but no parameter-level syntax or format beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (compare a site audit against an earlier one) and enumerates the exact outputs: new issues, fixed issues, persisting count, health-score delta. An agent can distinguish this from sibling audit tools (get_audit_core_web_vitals, get_audit_https_report) purely from the description.
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 conditions clearly: only pages both crawls visited are compared, an error is returned when no earlier completed audit exists, and it states the tool is free. It does not name an alternative tool to use instead when comparison is impossible, so it stops just short of explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_core_web_vitalsARead-onlyIdempotentInspect
Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fetch — reads audit_lighthouse_results, the same table the results UI already renders as raw numbers. LAB DATA ONLY, never Search Console's real Chrome UX Report (CrUX) field data — every number is a single simulated Lighthouse run, not an aggregated real-user measurement. This codebase's audit pipeline runs local headless Chrome as its PRIMARY path, so CrUX field data is not reliably available for any given page. ALWAYS narrow on state first: no_lighthouse_data (this audit has no Lighthouse rows at all — an absence of data, NOT every page passing) or analysed. Errors when no audit with that id belongs to the project. pages[].allGood is true only when all three metrics were measured AND all three are "good". Free — charges no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| auditId | Yes | Audit ID, from crawl_site or get_crawl_results. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), yet the description adds substantial non-schema context: no new fetch, source table, single simulated run vs aggregated CrUX, and 'charges no credits'. The remaining gap is pagination/response-size behavior, but for a cache-read tool this is strong.
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 what the tool is and where the data comes from, then layers constraints in descending priority. It is dense and slightly run-on, but nearly every clause carries operationally relevant information rather than 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 no output schema, the description compensates by explaining return semantics (`allGood` computed only when all three metrics measured and good), the state classifier, cost, and error behavior. An agent has everything needed to call and interpret 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 coverage is 100%, which sets the baseline at 3, but the description adds real meaning beyond the schema: the `state` filter values and their semantics, and what `pages[].allGood` encodes. The declared params (auditId, projectId) are already documented in the schema, so credit here is for the extra field/enum semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (Core Web Vitals report) and pins the exact data source ('reads audit_lighthouse_results'), so an agent can distinguish it from the many get_*_report siblings at a glance. It also declares scope (per page/strategy) and the LAB-vs-field-data 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?
Explicitly tells the agent to 'ALWAYS narrow on state first' and enumerates the two meaningful states with their interpretation, plus a when-NOT ('never Search Console's real Chrome UX Report field data'). It also notes the error condition when the audit doesn't belong to the project, 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.
get_audit_https_reportARead-onlyIdempotentInspect
HTTPS Report: percentage of pages secure, mixed-content and insecure-link counts, homepage HTTPS-path status, and HTTP URLs in an HTTPS site's sitemap — for a project's latest completed crawl (or a named earlier one). Derives entirely from already-computed crawl data — no new work at read time. SOCKET-LEVEL TLS CHECKS STAY EXPLICITLY UNBUILT: expiring/expired certificate, old security protocol, incorrect certificate name, and subdomains without SNI/HSTS all need a real TLS handshake this fetch-based crawler does not make. notDerivable lists these with the reason. homepageStatus.redirectsToHttps is null (not measured), never assumed healthy, unless a standalone fetch actually observed a failure — this report cannot distinguish "checked and fine" from "never checked" from stored issue rows alone. ALWAYS narrow on state first: no_audit (no completed crawl yet), analysed. Free — charges no credits, makes no external call.
| Name | Required | Description | Default |
|---|---|---|---|
| auditId | No | Audit ID, from crawl_site or get_crawl_results. Omitted means the latest completed audit for this project. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/non-destructive annotations: it discloses that results derive entirely from already-computed crawl data with no new work, that TLS checks are deliberately unbuilt and surfaced via notDerivable, that homepageStatus.redirectsToHttps is null rather than assumed healthy, and that the call is free with no external call. This is exactly the 'checked vs never checked' nuance an agent cannot get 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-loads the report contents before the caveats, and each caveat (unbuilt TLS checks, null redirect status) carries real decision value. It is dense and slightly overlong with stacked parentheticals, but no sentence 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?
There is no output schema, so the description carries the full burden and does so: it enumerates returned fields (notDerivable, homepageStatus.redirectsToHttps, state), explains their semantics, and covers the safety profile already implied by annotations. An agent has everything needed to interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both auditId and projectId are already documented in the schema, including that omission means the latest completed audit. The description only loosely echoes this ('latest completed crawl (or a named earlier one)') and adds no syntax or format detail beyond the schema. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (HTTPS report) and enumerates exactly what it contains: secure-page percentage, mixed-content and insecure-link counts, homepage HTTPS-path status, and HTTP URLs in the sitemap. Scoped to a project's latest or named crawl, which cleanly separates it from siblings like get_audit_core_web_vitals and get_audit_internal_links.
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 the prerequisite flow ('narrow on state first: no_audit vs analysed') and the auditId omission behavior, giving clear context for when the call is meaningful. However it does not name a specific alternative report tool or explicitly state when-not-to-use, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_internal_linksARead-onlyIdempotentInspect
Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed crawl (or a named earlier one). No new computation — reads the same audit_pages/audit_issues columns already powering the in-app internal-links page. INTERNAL LINKS ONLY. External links are explicitly out of scope: an external link graph needs data this codebase does not collect. totals.externalLinkOccurrences is the one external-facing number here — a raw per-page outbound tally, never a graph. ALWAYS narrow on state first: no_audit (no completed crawl yet), signal_not_captured (a crawl exists but its link counts predate the inbound-link/click-depth migration or were otherwise never computed — an absence of data, NOT a site with no internal links), analysed. notDerivable is returned with every state and lists what this report can never compute from what is stored, and why. Free — charges no credits, makes no external call.
| Name | Required | Description | Default |
|---|---|---|---|
| auditId | No | Audit ID, from crawl_site or get_crawl_results. Omitted means the latest completed audit for this project. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/closed-world, but the description adds genuinely non-derivable behavior: no new computation, free of credit charges, no external call, and a `notDerivable` block explaining what the report can never compute. The one ding is that it instructs the agent to narrow on `state`, which is not present in the input schema, leaving it unclear whether state is an input filter or a returned field.
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?
Content is front-loaded: what the report contains comes first, then scope disclaimers, then state semantics. It is dense and slightly repetitive ("INTERNAL LINKS ONLY" followed by a full external-links explanation), but nearly every sentence carries distinct scope or data-limitation 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 no output schema, the description does meaningful work describing return shape (totals.externalLinkOccurrences, notDerivable, state values) and the absence-of-data semantics, which is exactly what an agent needs to interpret results. The unresolved ambiguity about whether `state` is an input or an output field is the only 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 100% and both parameters (auditId, projectId) are already fully documented in the schema, including the "omitted means latest completed audit" default. The description adds no per-parameter syntax or format detail beyond that, so the baseline 3 applies; its `state` reference matches no declared parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific report and enumerates its exact contents: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution, scoped to a project's latest (or named) completed crawl. It also explicitly carves itself off from external-link tooling, so an agent can distinguish it from siblings like get_backlinks_overview or get_audit_structured_data 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?
It gives a strong usage rule ("ALWAYS narrow on `state` first") and explains each state value so the agent knows when an empty result means no crawl vs. missing data. It does not name a sibling alternative for the adjacent use cases (e.g. external links, comparison audits), so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_audit_structured_dataARead-onlyIdempotentInspect
Structured Data Report: pages grouped by schema.org @type, which pages have none, and which pages carry an unparseable JSON-LD block — for a project's latest completed crawl (or a named earlier one). Derives entirely from structured data already extracted at crawl time — no new crawl-time work. PRESENCE AND PARSE VALIDITY, NOT A RICH-RESULTS ELIGIBILITY CHECK. Only typeGroups[].invalidCount on the BreadcrumbList group is a real, verified per-type validity verdict; every other type reports only whether pages declare it and whether ANY block on the page failed to parse (page-level — never attributable to one type when a page declares several). ALWAYS narrow on state first: no_audit (no completed crawl yet), analysed (typeGroups: [] means every page was measured and none declared any structured data — a real finding, not a withheld section). notDerivable lists what this report can never compute, and why. Free — charges no credits, makes no external call.
| Name | Required | Description | Default |
|---|---|---|---|
| auditId | No | Audit ID, from crawl_site or get_crawl_results. Omitted means the latest completed audit for this project. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, closed-world read. The description adds substantial non-obvious behavior: it is free and charges no credits, makes no external call, derives entirely from crawl-time data, correctly warns that only BreadcrumbList's invalidCount is a per-type verdict and every other type is page-level, and documents the `notDerivable` section. This is far beyond what the annotations 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?
The definition is long but front-loaded with the core purpose, then layered with caveats that each carry real weight (validity semantics, state handling, cost). It is dense rather than padded, though the cautionary sentences could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does so: it describes typeGroups grouping, invalidCount, the `state` field with its values, and the `notDerivable` section. For a read-only report tool this is complete enough to call and interpret correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `auditId` (optional, defaults to latest completed audit) and `projectId` (required) are already fully documented in the schema. The description adds no parameter-level detail beyond repeating the latest-vs-named-audit default, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource — a structured-data report grouped by schema.org @type for a project's latest completed crawl — and immediately contrasts it against cousins by naming the report's scope ('PRESENCE AND PARSE VALIDITY, NOT A RICH-RESULTS ELIGIBILITY CHECK'). An agent can distinguish it from other get_audit_* siblings 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?
Gives concrete usage instructions ('ALWAYS narrow on `state` first') and explains what the `no_audit` and `analysed` states imply, including the critical note that `typeGroups: []` is a real finding, not withheld data. It does not explicitly route the agent away from sibling reports like get_audit_comparison, so it stops short of a full when-not rubric.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backlink_anchorsAInspect
Anchor-text distribution for a domain or URL, one page at a time: which anchor texts link to it, with backlinks, referring domains, referring pages and dofollow links per anchor. This is what reveals an over-optimised profile (one exact-match commercial phrase dominating) or a hacked one (pharma/casino anchors nobody wrote) — both invisible link by link. CHARGES CREDITS ON THE PAID DATA PROVIDER (~200-500 typical). UNAVAILABLE ON THE DEFAULT FREE DATA PROVIDER, like the rest of the backlinks surface: SEO_DATA_UNAVAILABLE there means the question was never asked, never an empty distribution. There is deliberately no spam-score column — an averaged spam score is not a spam score.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. Defaults to 1. | |
| scope | No | Whether target is a whole domain or one page. Defaults to domain. | |
| target | Yes | Domain or URL whose inbound anchor texts to list. | |
| pageSize | No | Rows per page. Defaults to 100. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sortField | No | Sort column. Defaults to backlinks. | |
| sortOrder | No | Sort direction. Defaults to desc. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and openWorldHint=true but say nothing about cost or provider gating; the description fills both gaps by disclosing ~200-500 credit charges on the paid provider, unavailability on the free provider, and the SEO_DATA_UNAVAILABLE error semantics. This is exactly the 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, then cost and provider caveats — an efficient ordering. The closing remark about the absent spam-score column is editorial and slightly expendable, but it does preempt an agent expecting that field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys the return shape (anchors with per-anchor counts), the billing model, provider availability, and the meaning of the SEO_DATA_UNAVAILABLE signal. Nothing needed to invoke or interpret the call 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 100%, so every parameter (page, scope, target, pageSize, sortField, sortOrder) is already documented. The description adds only loose hints ('one page at a time', 'domain or URL') and no format or default details beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Anchor-text distribution for a domain or URL') and enumerates the payload per row (backlinks, referring domains, referring pages, dofollow). An agent can distinguish it from get_backlinks_overview or get_link_intersect 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 clear motivating context for when it matters: revealing an over-optimised or hacked profile that is 'invisible link by link'. It also flags non-availability on the free provider. It stops short of naming an alternative tool for anchor data, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_backlinks_overviewAInspect
Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDITS ON THE PAID DATA PROVIDER (~200-500 typical): two lookups per call, the summary and one page of referring domains. UNAVAILABLE ON THE DEFAULT FREE DATA PROVIDER: a backlink graph needs a proprietary web-scale crawl index, so every method of this surface throws SEO_DATA_UNAVAILABLE there and nothing is charged. That error means the question was never asked — never report it as a site with no backlinks. Self-hosted deployments also need the Backlinks API enabled on their DataForSEO account. The two halves count DIFFERENT populations: the summary totals are unfiltered, while the referring-domain list has domains above the spam-score threshold filtered out. Do not present the listed domains as the top slice of the summary total, and do not subtract one from the other.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | 'domain' analyzes the whole domain; 'page' analyzes a specific URL. Defaults to 'domain'. | |
| target | Yes | Domain or URL to analyze (e.g. 'example.com' or 'https://example.com/blog'). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral context beyond annotations: credit charges on the paid provider, the SEO_DATA_UNAVAILABLE error on the default free provider, the requirement to enable the Backlinks API for self-hosted deployments, and the critical distinction that the summary totals and referring-domain list count different populations. This goes well beyond the readOnly/openWorld/idempotent annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the return value in the first sentence, followed by tightly packed operational caveats. It is longer than average but each sentence carries distinct and necessary information about billing, availability, and result interpretation.
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 no output schema and annotations that do not cover billing or provider behavior, the description supplies everything an agent needs: what is returned, cost, provider availability, error semantics, and a warning not to misinterpret the two result populations. Nothing essential 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 100%, so the schema already fully documents projectId, target, and scope. The description does not add parameter-specific syntax or format guidance, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: returns a backlinks profile summary with total backlinks, referring domains, referring pages, rank, plus top referring domains by backlink count. It implicitly distinguishes this overview from sibling tools like get_backlink_anchors by focusing on the aggregate profile rather than detailed anchor text.
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 clearly explains when the tool is available versus unavailable, including the free-provider failure mode and self-hosted API prerequisite. It does not explicitly name a sibling alternative to use instead when the paid provider is unavailable, so it falls short of a full when/when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_baidu_connectionARead-onlyIdempotentInspect
The project's current Baidu Webmaster (百度搜索资源平台) connection, plus today's push-quota usage. today.lastRemain is Baidu's own authoritative remaining-quota count as of the last push (null until the first push of the day) — today.assumedDailyQuota is a courtesy default only, never a real ceiling, since Baidu computes quota per-site dynamically and publishes no fixed number.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description goes beyond that by disclosing that `today.lastRemain` is authoritative and null until the first push, and that `today.assumedDailyQuota` is a courtesy default rather than a real ceiling — genuinely useful behavioral context about the returned 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?
The purpose is front-loaded in the first clause, and the second clause spends its length on quota semantics that genuinely matter for interpretation. It is dense but every part is justified; the only minor weakness is the fragment-style opening rather than a clear 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 no output schema, the description carries the burden of explaining returns, and it does so well for the quota fields (including the null-until-first-push behavior). It leaves the shape of the connection object itself implicit, but for a simple read tool this is nearly 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 100%, and the schema already documents projectId fully, including the 'Get one from list_projects' hint. The description adds no parameter-level meaning beyond that, so the baseline 3 for high-coverage schemas applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (the project's current Baidu Webmaster connection) and its additional payload (today's push-quota usage), which cleanly separates it from siblings like set_baidu_connection, disconnect_baidu, and submit_baidu_urls. An agent can identify this as the read-side counterpart 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?
Usage is implied rather than stated: it's clearly the tool to call to inspect connection status and remaining quota, but there is no explicit when-to-use, prerequisite, or named alternative guidance. The quota explanation aids interpretation of results but is not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bing_backlinksARead-onlyIdempotentInspect
GetLinkCounts: own-site inbound-link page list for a project's matched Bing site — the focused, single-call form of the backlinks field already embedded in get_bing_site_overview. FREE (no credits). OWN-SITE ONLY: Bing exposes no competitor/any-domain backlink lookup, and some verified sites are known to return an empty result here even when populated. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 0-based page of Bing's own pagination (default 0). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only cover read-only/idempotent/open-world safety) by disclosing that the call is FREE/zero-credit, requires BING_WEBMASTER_API_KEY, and returns structured failure modes ('not_configured', 'no_matching_site'). It also warns that some verified sites return empty results even when populated, a genuine edge case an agent cannot infer elsewhere.
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 but front-loaded: the identity and the get_bing_site_overview relationship come first, followed by cost/auth/error details. Every clause earns its place; only the trailing error-mode sentences make it slightly long for a two-parameter 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?
With no output schema, the description carries return-value disclosure itself by naming the { ok: false, reason: ... } shapes, and it covers cost, auth prerequisites, scope limits, and known false-empty behavior. 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 description coverage is 100%, so both parameters (page, projectId) are already documented, including projectId's pointer to list_projects. The description adds no additional parameter meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Get) and resource (own-site inbound-link page list for a project's matched Bing site) and explicitly positions it as the focused, single-call form of the backlinks field embedded in get_bing_site_overview. An agent can distinguish it from the broader overview sibling 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 scope ('OWN-SITE ONLY') and explicitly rules out competitor/any-domain lookups, which is exactly the kind of when-not guidance that separates it from other backlink tools. It stops short of naming a specific alternative to use for competitor backlinks, so it is 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_bing_detail_statsARead-onlyIdempotentInspect
GetQueryTrafficStats + GetPageStats + GetPageQueryStats + GetQueryPageStats + GetQueryPageDetailStats: per-query and per-page search-performance detail for a project's matched Bing site. FREE (no credits). pageStats (site-wide, weekly) is always attempted. queryTrafficStats/queryPageStats are null unless query is given; pageQueryStats is null unless pageUrl is given; queryPageDetailStats is null unless both are given — a null section absent from errors was not requested, not a failure. pageStats carries one unresolved caveat: Microsoft's own doc page is internally inconsistent about whether that method's query field on each row holds a query string or a page URL — surfaced as-is. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | The search query to fetch traffic/page stats for. Required for queryTrafficStats/queryPageStats (and, with pageUrl, queryPageDetailStats). | |
| pageUrl | No | The page to fetch query stats for. Required for pageQueryStats (and, with query, queryPageDetailStats). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only/idempotent/non-destructive profile, and the description adds substantial context on top: it is free (no credits), requires a bring-your-own BING_WEBMASTER_API_KEY, returns structured { ok: false, reason } shapes ('not_configured', 'no_matching_site'), and discloses an unresolved upstream doc inconsistency about pageStats' `query` field.
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?
Information-dense and front-loaded, with the scoping sentence first and caveats after. The opening enumeration of five internal API method names is slightly verbose relative to what an agent needs, but every subsequent sentence (free tier, key requirement, null semantics, error shapes) 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?
With no output schema, the description carries the full burden of describing returns and it does so: which sections appear, when they are null, why, and the two failure reasons. An agent has everything needed to call and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema by explaining the conditional-null semantics that link parameters to output sections — and crucially that a null section absent from `errors` means 'not requested,' not 'failed.' That meaning is not derivable from the parameter descriptions alone.
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 — per-query and per-page Bing search-performance detail for a project's matched site — and names the five underlying stat sections it composes. This clearly separates it from siblings like get_bing_site_overview, get_bing_url_info, and get_bing_keyword_research.
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 conditional guidance: queryTrafficStats/queryPageStats require `query`, pageQueryStats requires `pageUrl`, queryPageDetailStats requires both, and pageStats is always attempted. It does not, however, explicitly contrast when to call this versus get_bing_site_overview or get_bing_feed_details, so the routing is inferred from 'detail' rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bing_feed_detailsARead-onlyIdempotentInspect
GetFeedDetails: the same Feed shape as one entry from Bing's GetFeeds list, for one specific feed URL on a project's matched site. FREE (no credits), read-only. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| feedUrl | Yes | Absolute URL of the previously-submitted sitemap/feed. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already cover safety/idempotency), the description adds real behavioral value: no credit cost, the BING_WEBMASTER_API_KEY requirement, and two named failure modes with their reason strings. The return shape is only referenced indirectly ('the same Feed shape as one entry from Bing's GetFeeds list'), which leaves some ambiguity since that list isn't a visible sibling.
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?
One compact paragraph, front-loaded with the operation and its scope, then cost, auth, and error behavior in descending priority. Every sentence adds information; only the vendor-list reference slightly muddies the 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?
With no output schema, the description carries the return-shape burden and does so only by reference to Bing's GetFeeds entry type. Auth, cost, and error states are covered, so an agent can invoke it correctly, but there is no pagination or response-field detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema (feedUrl format/purpose, projectId sourcing from list_projects). The description adds no syntax, format, or constraint detail beyond what the schema already states, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource (fetch one Bing feed's details for a given feed URL) and scopes it precisely to 'one specific feed URL on a project's matched site.' This distinguishes it from siblings like submit_bing_feed (write) and list_bing_sites, and the title annotation reinforces the same framing.
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 operating context (free, read-only, BYO key) and the conditions that produce failure results ('not_configured', 'no_matching_site'), which help an agent anticipate prerequisites. It does not, however, explicitly state when to prefer this over alternatives such as get_bing_site_overview or when a feed URL is unavailable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bing_keyword_researchARead-onlyIdempotentInspect
GetKeyword + GetKeywordStats + GetRelatedKeywords: real Bing impression data for a query, its recent weekly history, and related queries — read straight from the Bing Webmaster API. FREE (no credits). Unlike derived/estimated keyword metrics, these numbers come from Bing's own search-impression logs. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | The search query to research. | |
| country | No | Two-letter country code, e.g. 'us'. | |
| endDate | No | YYYY-MM-DD. Applies to keyword/relatedKeywords only. | |
| language | No | Language-region code, e.g. 'en-US'. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | No | YYYY-MM-DD. Applies to keyword/relatedKeywords only. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/openWorld/idempotent/non-destructive, and the description adds substantial behavioral value beyond them: size is FREE (no credits), it requires a bring-your-own BING_WEBMASTER_API_KEY, and it enumerates the exact error payloads (not_configured, no_matching_site). This is exactly the extra context an agent needs before calling.
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 what the tool returns before the API-key and error caveats, and every sentence carries information. Slightly dense with stacked clauses and em-dashes, but no wasted 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 no output schema, the description carries return-value burden and does reasonably well: it names the three data blocks returned and the failure responses. It doesn't detail the shape of the weekly history or related-query payloads, leaving a small 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 100%, so all six parameters are already documented in the schema. The description adds only marginal meaning (date fields apply to keyword/relatedKeywords) which the schema itself already states, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: real Bing impression data for a query, its weekly history, and related queries, naming the underlying GetKeyword/GetKeywordStats/GetRelatedKeywords methods. It distinguishes itself from derived/estimated keyword siblings by emphasizing Bing's own impression logs.
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 frames the use case (real impression data vs derived/estimated metrics) and prerequisite (BING_WEBMASTER_API_KEY), giving the agent context for when this is the right choice. It stops short of explicitly naming an alternative sibling to use instead, so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bing_site_overviewARead-onlyIdempotentInspect
Bing's own view of a project's domain: daily search performance (clicks/impressions), per-query stats, own-site inbound links, remaining URL Submission quota, crawl diagnostics (crawl stats, crawl issues, crawl settings), submitted feeds and query-parameter settings — read straight from the Bing Webmaster API. FREE (no credits). Bring-your-own-key: requires the deployment operator to set BING_WEBMASTER_API_KEY (one key covers every site verified on that Bing account — no per-project connect step). Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account. Backlinks here are OWN-SITE ONLY — Bing exposes no competitor/any-domain backlink lookup, so this does not substitute for general backlink research. Per-URL lookups and keyword research have their own tools: get_bing_url_links, get_bing_url_info, get_bing_keyword_research.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive behavior, and the description adds substantial non-redundant context: FREE/no credits, bring-your-own-key auth via BING_WEBMASTER_API_KEY, one key covering all verified sites, no per-project connect step, and the exact failure payloads ({ok:false, reason:'not_configured'} and 'no_matching_site'). These are the operational details an agent needs before calling and cannot get from annotations alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a dense block, but it is front-loaded with the core purpose and each sentence carries distinct information (data scope, cost, auth, failure modes, boundaries). A slightly tighter grouping of the auth details could improve it, but 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?
With no output schema, the description compensates by enumerating returned data categories and documenting configuration failure modes. Combined with full annotation coverage and a fully-described single parameter, an agent has everything needed to invoke it correctly and interpret common failures.
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?
Only one parameter (projectId) exists and schema description coverage is 100%, so the schema already carries the meaning including the pointer to list_projects. The description adds nothing specific about projectId beyond what the schema provides, matching the baseline-3 expectation for a fully-covered single param.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource frame — 'Bing's own view of a project's domain' — and enumerates the exact data surfaces (daily performance, per-query stats, own-site inbound links, URL submission quota, crawl diagnostics, feeds). It also names the sibling tools it does NOT cover (get_bing_url_links, get_bing_url_info, get_bing_keyword_research), so an agent can separate it from its neighbors 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?
Explicitly routes per-URL lookup and keyword research to their own named tools, and states the own-site-only scope so the agent knows when this does not substitute for general backlink research. The when-to-use context (Bing Webmaster API data for a project's connected domain) is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bing_url_infoARead-onlyIdempotentInspect
GetUrlInfo + optionally GetChildrenUrlInfo: index/crawl metadata (anchor count, discovery/last-crawled dates, HTTP status, whether Bing considers it a page) for one URL on a project's matched Bing site, and, when includeChildren is set, the same metadata for every URL Bing discovered under it. FREE (no credits). Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL to look up. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| includeChildren | No | Also fetch the index/crawl metadata for URLs discovered under this one (one page of Bing's own pagination). Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only cover read-only/idempotent/open-world) by disclosing cost (FREE, no credits), the BYOK auth requirement (BING_WEBMASTER_API_KEY), and the exact failure payloads ('not_configured', 'no_matching_site'). This is exactly the operational context an agent needs before calling.
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 scope are front-loaded, and the error/auth details are useful, but the single dense paragraph packs a lot together. Slightly long, though 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 no output schema, the description carries the return-value burden and does so: it enumerates the metadata returned (anchor count, discovery/last-crawled dates, HTTP status, page classification) and describes the error object shapes. Auth prerequisites and cost are also 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 100%, so all three parameters are already documented. The description reinforces includeChildren ('the same metadata for every URL Bing discovered under it') but adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get index/crawl metadata) and resource (one URL on a project's matched Bing site), and even names the underlying endpoints GetUrlInfo/GetChildrenUrlInfo. It is clearly distinguishable from siblings like get_bing_url_links or get_bing_backlinks, which cover links rather than index/crawl status.
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 clear context for use and explicitly conditions the child-URL behavior on includeChildren. It does not, however, name alternatives or exclusions (e.g., when to prefer get_bing_url_links or inspect_urls instead), so routing is left partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bing_url_linksARead-onlyIdempotentInspect
GetUrlLinks: the inbound links (anchor text + source URL) pointing at one specific page on a project's matched Bing site, read straight from the Bing Webmaster API. FREE (no credits). Own-site only — Bing exposes no competitor/any-domain backlink lookup, and some verified sites are known to return an empty result here even when populated. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The specific page to find inbound links for. | |
| page | No | 0-based page of Bing's own pagination (default 0). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, openWorld), it discloses cost ('FREE, no credits'), a prerequisite credential (BING_WEBMASTER_API_KEY), and two concrete failure envelopes ({ ok: false, reason: 'not_configured' } and 'no_matching_site'), plus the edge case of verified sites returning empty data. This is exactly the 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?
Front-loads the core identity ('GetUrlLinks: the inbound links...') and each subsequent sentence carries real information (cost, scope limits, key requirement, error shapes). It is dense and slightly run-on, but no sentence is 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 no output schema, the description compensates fully: it names the returned fields (anchor text + source URL) and the error response shapes, and flags the empty-result caveat. Nothing an agent needs to call or interpret 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 coverage is 100% — url, page, and projectId are all documented in the schema, including the 0-based pagination and the pointer to list_projects for the ID. The description adds no syntax or format detail beyond restating that it targets one specific page, so the 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?
States a specific verb and resource — inbound links (anchor text + source URL) pointing at one specific page on a project's matched Bing site — which distinguishes it from site-wide siblings like get_bing_backlinks and get_backlinks_overview. An agent can tell exactly what it fetches 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?
Clear context: it's the per-URL Bing look, own-site only, with an explicit exclusion ('Bing exposes no competitor/any-domain backlink lookup'). It also warns that some verified sites return empty results. It stops short of naming the sibling alternatives an agent should use for competitor or site-wide backlink data, leaving that inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_radar_scan_statusARead-onlyIdempotentInspect
Status of a Brand Radar scan started by run_brand_radar_scan, by its jobId. status is queued/running/complete/errored; a complete scan carries the shaped result (share of voice, top cited pages, top prompts), an errored one carries error.message. FREE to poll: a completed scan re-reads the cached result and charges nothing. The one exception is a scan whose cached result has already expired (older than ~24h) — answering that re-runs the lookup and is charged and rate limited like a new scan, so collect results promptly. Use this instead of re-running run_brand_radar_scan, which always spends another monthly scan.
| Name | Required | Description | Default |
|---|---|---|---|
| jobId | Yes | The `jobId` returned by run_brand_radar_scan. | |
| projectId | Yes | Required. The MisarSEO project ID the scan was run for. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly, idempotent, non-destructive) but say nothing about billing or cache behavior. The description adds the crucial nuances: polling is free on a cached result, but a scan whose cache expired (>~24h) re-runs the lookup and is charged and rate limited like a new scan. These cost/rate-limit disclosures go well beyond structured data and are consistent with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and status values, then cost semantics and the routing rule. Four dense sentences with parenthetical enumerations; the length is largely earned by the billing warning, though the status/result enumeration and the cost caveat could be tightened slightly.
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?
There is no output schema, so the description carries the return-value burden and does so: enumerated status values, the shaped result on success (share of voice, top cited pages, top prompts), and error.message on failure. For a 2-param polling tool, nothing an agent needs is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both jobId and projectId are already documented in the schema. The description only restates that jobId comes from run_brand_radar_scan, adding no format or constraint detail beyond the schema. Baseline 3 is correct where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: polls the status of a Brand Radar scan, keyed by jobId, and names its producer run_brand_radar_scan. An agent can distinguish it from the sibling scan-launch tool 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?
Explicitly says to use this instead of re-running run_brand_radar_scan because the latter spends another monthly scan. It also gives an operational rule (collect results promptly, before the ~24h cache expiry) that tells the agent when polling is free vs. billable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brand_scan_trendARead-onlyIdempotentInspect
The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers whether visibility in AI answers is moving, which a single run_brand_radar_scan cannot. Returns only scans that actually ran — empty for a target never scanned, filling in as scans run, with nothing interpolated or back-filled. FREE — reads recorded scans, charges no credits.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | Inclusive lower bound, YYYY-MM-DD. | |
| target | Yes | Brand or domain, matched case-insensitively against past scans. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
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), yet the description still adds real behavior: no interpolation or back-filling, only scans that actually ran are returned, oldest-first ordering, and an explicit billing statement ('FREE — charges no credits').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with what is returned before the comparison and the caveats. Each clause carries distinct information — payload, contrast with the sibling, empty/fill-in behavior, cost.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden and does it reasonably well: it names the fields seen per scan and the ordering, and explains empty results as scans accumulate. It stops short of stating volume limits or pagination, a minor gap for a history endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so target matching semantics, the YYYY-MM-DD pattern for since, and the projectId provenance ('Get one from list_projects') are already documented. The description adds no parameter-level detail beyond that, which is the expected baseline when the schema does the work.
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 ('recorded AI-visibility history for one brand or domain') and enumerates the payload ('mentions, cited sources and competitors'), plus the ordering ('oldest first'). It is immediately distinguishable from run_brand_radar_scan and from the status sibling.
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 names the alternative and the condition that selects it: 'Answers whether visibility in AI answers is moving, which a single run_brand_radar_scan cannot.' It also sets a when-not expectation by noting the result is empty for a target never scanned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_brave_search_rank_checkARead-onlyIdempotentInspect
Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and index since 2023 — a genuinely separate, separately-licensed data source, distinct from this server's free SearXNG/openserp-backed rank checks. Every successful response carries engine: 'brave_search' so it can never be mistaken for a free-tier number. PAID: bring-your-own-key — requires the deployment operator to set BRAVE_SEARCH_API_KEY (a single paid credential, like OPENPAGERANK_API_KEY — no OAuth flow). Every call spends that key's Brave Search API budget. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_domain' when neither targetDomain nor the project's own domain is set. Makes exactly one Brave Search API call per check — depth (max 20) is Brave's own per-request ceiling, never paginated to search deeper. Brave publishes no submission/indexing API at all, only manual re-fetch/delist web forms — this tool is query-only.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Results to fetch, 1-20 (Brave's own per-request ceiling). Default 20. | |
| country | No | 2-letter country code Brave uses to target results, e.g. 'US'. | |
| keyword | Yes | Keyword to check. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| searchLang | No | ISO 639-1 language code Brave uses to filter results, e.g. 'en'. | |
| targetDomain | No | Domain or URL to check. Defaults to the project's own domain when omitted. | |
| competitorDomains | No | Competitor domains to also resolve positions for, free within the same fetched result set. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly/idempotent/openWorld), and the description adds substantial context beyond them: pay-per-call key budget consumption, required env-var credential, exact failure reasons ('not_configured', 'no_domain'), one API call per check, no pagination, and query-only with no submission API.
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, and each sentence carries real information (pricing model, credential, error states, pagination limits). It is dense and the em-dash asides make it longer than strictly necessary, but nothing is 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 no output schema, the description compensates fully by describing the response contract: the engine marker on every success and the two failure reasons. For a paid, credentialed, single-call tool, 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 100%, so all seven parameters are already documented. The description reinforces semantics (targetDomain defaulting to the project domain, depth being Brave's ceiling, competitorDomains being free within the fetched set) but adds little that the schema does not already state; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Checks where a project's domain ... ranks in REAL Brave Search results for one keyword') and immediately distinguishes itself from the server's free SearXNG/openserp-backed rank checks by naming the engine. An agent can tell it apart from other rank tools 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?
Gives strong context: it is a PAID, bring-your-own-key tool requiring BRAVE_SEARCH_API_KEY, and it contrasts itself with the free-tier rank checks. However, it never names a specific sibling tool to use instead when the paid source is not wanted, so routing is inferred from category rather than an explicit alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cannibalisation_reportARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | Finding 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. | |
| window | No | Analysis 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. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
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.
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.
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.
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.
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.
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.
get_competitor_monitor_changesARead-onlyIdempotentInspect
Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real diff: line-level content added/removed/unchanged counts with a short sample (never a fabricated similarity score), plus title/meta/status-code before-after values and added/removed external links and structured-data types.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max entries to return. Defaults to 50, capped at 200. | |
| targetId | Yes | Monitored URL's target ID, from list_competitor_monitors or add_competitor_monitor. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already state readOnly and idempotent, but the description adds substantial return-behavior detail: newest-first ordering, omission of checks with no detected changes, the specific diff fields (line counts, sample, title/meta/status-code before/after), and an explicit non-fabricated similarity statement. This goes well beyond the safety annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence front-loads what the tool returns and its ordering, and the second sentence explains entry contents. Both sentences carry useful information, especially because no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and minimal annotations beyond safety, the description supplies the return-shape details an agent needs: ordering, excluded records, and the fields in each diff entry. It is complete for invoking the tool and interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are documented in the schema, including limit's default and cap. The description does not add new parameter syntax or format guidance, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (detected changes for one monitored competitor URL) and its ordering (newest first), which distinguishes it from monitor-management siblings like list_competitor_monitors. It stops short of explicitly naming an alternative tool, so it is clear but not fully sibling-routing.
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: call this after obtaining a targetId to inspect that monitor's change history, and no-change checks are excluded. There is no explicit when-to-use condition or a named alternative to use instead, so guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_content_decay_reportARead-onlyIdempotentInspect
Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the top-200-per-day per-page archive the nightly sync fills in). Read-only and FREE (no credits), and makes NO live Search Console call — unlike get_cannibalisation_report, this spends no Google quota, so it is rate limited only against ordinary abuse. Requires Search Console to be connected for the project. Returns exactly ONE of three states, which are three different facts — branch on state before reading anything else: not_connected (nothing is bound; tell the user to connect a property), insufficient_history (bound, but one of the two comparison windows has no archived rows at all — an absence of data, NOT a clean bill of health), analysed (we looked; findings may legitimately be empty and coverage is the proof). In both of the first two states nothing was measured, so never report either as 'no content decay found'. window selects the RECENT period length; the EARLIER period compared against it is the same length immediately before it, not a calendar-month split. minEarlierClicks (default 10) and declineThresholdPct (default 20) are this codebase's own chosen defaults, not a published vendor formula. A page that fell out of the archive's top-200-per-day entirely reports recentClicks: 0 — correctly the most severe decay, not a data hole.
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | The RECENT period length (default last_28_days). The EARLIER period compared against it is the same length immediately before it — a period-over-period comparison, not a calendar-month split. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| minEarlierClicks | No | A page must have had at least this many clicks in the earlier window to be considered at all (default 10) — a noise floor, not part of the decay definition. | |
| declineThresholdPct | No | How big a decline (percent) is required to be reported (default 20). 0 disables reporting entirely. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only/idempotent safety profile, but the description adds substantial behavior beyond them: no live Search Console call, rate limiting only against abuse, the Search Console connection prerequisite, and a three-state result contract with explicit branching instructions. This is exactly 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, then behavior, then the state-branching contract, and essentially every sentence earns its place. It is dense and slightly long, but there is little waste; the state-branch guidance in particular is load-bearing.
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?
There is no output schema, so the description must carry the return semantics — and it does, spelling out all three states, warning that findings may legitimately be empty, and noting coverage as the proof. For a read-only report tool with no output schema, nothing an agent needs to interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so most parameter text is redundant with the schema. However the description adds genuine meaning: window's earlier period is the same length immediately before (not a calendar split), the defaults are this codebase's own and not a vendor formula, and a page dropping out of the top-200 reports recentClicks: 0. That is real semantic value over the documented 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?
States a precise verb+resource+scope: 'Finds pages whose clicks declined by a meaningful amount between two adjacent windows,' and immediately clarifies the data source (MisarSEO's archived Search Console history). It explicitly contrasts itself with the sibling get_cannibalisation_report, so an agent can route 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 selection context: read-only, FREE, spends no Google quota unlike get_cannibalisation_report, and requires Search Console to be connected. It names one alternative and the condition that differentiates it. It does not enumerate when this beats other GSC-based siblings like get_search_console_performance, so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_content_optimizer_reportARead-onlyInspect
On-page recommendations and an AI content grade for one page, benchmarked against the pages currently ranking for its target keyword, built together — one AI-gateway call produces both the grade and the recommendations). CHARGES ONE AI-gateway operation against the organization's shared monthly ceiling — not a plan-quota dimension of its own. The page crawl (target + up to 5 competitors) and the SERP fetch are both free. url does not have to belong to the project's own domain or to a page a site audit has crawled — any http(s) URL is graded fresh. ALWAYS narrow on state first: target_unreachable means the target page itself could not be fetched — an ordinary outcome, never treat it as 'this page scored zero'. analysed carries the full report; check coverage.serpUnavailable and competitorsCrawled before trusting the competitor comparison. grade is an AI-generated qualitative read of the measured signals, NOT a calibrated industry score. Does NOT detect AI-written content — that is not built; no reliable free technique exists for it.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page to grade (any http(s) URL). | |
| keyword | Yes | The keyword this page is meant to rank for. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code. Defaults to the project's stored market, else 'en'. | |
| locationCode | No | Numeric location code. Defaults to the project's stored market, else 2840 (United States). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it charges exactly one AI-gateway operation against the org's shared monthly ceiling (not a plan quota), the page crawl and SERP fetch are free, and a URL is graded fresh regardless of domain or audit history. It also warns that `grade` is a qualitative AI read rather than a calibrated score, and documents key output `state` values.
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 but front-loaded: purpose, then billing, then input scope, then output-reading caveats. Nearly every sentence earns its place, though the parenthetical '(built together ... recommendations)' has a stray unbalanced paren and some cost/state detail could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining the return shape: `state` values, `analysed` carrying the full report, and the `coverage.serpUnavailable` / `competitorsCrawled` fields to check. Combined with billing and input-scope detail, an agent has everything needed to call and interpret this 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 100%, so the baseline is 3; the schema already documents projectId, url, keyword, languageCode and locationCode including their defaults. The description only adds a nuance on `url` (out-of-domain URLs are acceptable and graded fresh), which slightly extends but does not meaningfully exceed 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+resource: on-page recommendations plus an AI content grade for one page, benchmarked against pages ranking for its target keyword. It is clearly distinguishable from siblings like get_content_page_metrics or the get_audit_* family, and it explicitly declares what it is not (no AI-written-content detection).
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 operational guidance: 'ALWAYS narrow on state first', how to read `target_unreachable` (ordinary, not a zero score), and to check `coverage.serpUnavailable` / `competitorsCrawled` before trusting the comparison. It also clarifies the url scope (any http(s) URL, not only crawled project pages). It stops short of naming a specific alternative sibling tool to use instead in any condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_content_page_metricsARead-onlyIdempotentInspect
Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser extension's on-page panel checking whatever page the user is currently viewing) with none of get_content_optimizer_report's cost: no keyword required, no AI-gateway charge, no competitor crawl or SERP fetch. url does not have to belong to the project's own domain — any http(s) URL is analyzed fresh. ALWAYS narrow on state first: unreachable means the page itself could not be fetched — an ordinary outcome for an arbitrary URL check, never treat it as an error.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page to analyze (any http(s) URL). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, open-world), but the description adds substantial behavior beyond them: `url` need not belong to the project's domain and is analyzed fresh, and the `state` field's `unreachable` value signals a failed page fetch that 'is never an error' — critical guidance for interpreting results.
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 cost/behavioral context; every sentence carries useful signal. The browser-extension aside is slightly verbose but grounds the intended use case, so it 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?
With no output schema, the description does well by disclosing the `state` return field and error semantics, and the cost model. It stops short of naming which on-page metrics are returned, which leaves a modest gap for a metrics-reporting 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 coverage is 100% so both params are already documented, but the description adds meaning beyond the schema: that `url` accepts any http(s) URL outside the project's own domain and is re-fetched each call, and that `state` must be inspected first — the latter being a return-field hint rather than a param.
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 (lightweight on-page metrics for one URL) and explicitly positions it as the 'keyword-free, AI-free sibling' of `get_content_optimizer_report`, so an agent can distinguish it from that sibling 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?
Names the moment to use it ('ambient per-page checks, e.g. the browser extension's on-page panel') and contrasts the tradeoff against the alternative (no keyword, no AI-gateway charge, no competitor crawl or SERP fetch). The routing condition between this tool and its sibling is explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboardARead-onlyIdempotentInspect
One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database only. No SEO data provider is called and no credits are spent — GSC and backlinks are deliberately excluded from this view rather than fetched live, so calling this never spends a Search Console quota unit or a paid-provider credit. audit/rankTracking/webAnalytics are null on a card whose project has none of that data yet (never audited, no tracker configured, no analytics traffic) — a real 'not set up' fact, not a zero standing in for missing data.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only profile, and the description adds genuinely non-derivable behavior: the call is free, spends no Search Console quota and no paid-provider credit, and never calls an SEO data provider. The null semantics for audit/rankTracking/webAnalytics (real 'not set up' rather than zero) is exactly the kind of semantic disclosure structured fields 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 the return shape, then cost, then null semantics — a sensible ordering. It is slightly redundant, saying essentially the same thing twice ('no credits are spent' and 'never spends ... a paid-provider credit') and using a lengthy em-dash aside, which costs a point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return contract itself, and it does: card granularity, the three data blocks, and the null-vs-zero rule. There is no output schema and no parameters, so nothing an agent needs in order 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?
Zero parameters, so there is nothing to disambiguate and the baseline is 4. The description appropriately frames the tool as taking no arguments by describing the whole-organization scope, which is the only parameter-relevant fact available.
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 spells out the exact return shape: one card per active project with latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. It also distinguishes itself from the many single-domain get_* siblings by explicitly declaring what is out of scope (GSC, backlinks).
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 — a cross-project roll-up drawn from the database only — and effectively routes the agent away from SEO-provider lookups by noting GSC and backlinks are deliberately excluded. It stops short of naming the alternative tools an agent should call for that data, so it is clear context without explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_direct_vendor_answersARead-onlyInspect
Runs a prompt against up to 5 REAL, directly-verified vendor models — you_com (You.com Answer API), deepseek, grok (xAI), meta_ai (Meta's Model API) and minimax — each called through that vendor's own public API. Unlike explore_ai_prompt's persona labels, every result here reports the real vendor model id in modelName. A model whose API key is not configured on this deployment answers status: "unavailable" with no call made — a deployment fact, not an error; status: "error" means the vendor is configured but the call failed. webSearch is best-effort per vendor: You.com is always grounded, grok honours it, and deepseek, meta_ai and minimax always answer webSearch: false. meta_ai is a US-developers-only public preview, so an ineligible account reports an error naming that. Billed on the operator's own vendor keys: no plan gate and no MisarSEO credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| models | Yes | 1-5 vendor models to ask. | |
| prompt | Yes | The prompt to send to each requested vendor model. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| webSearch | No | Ask for grounded answers where the vendor supports it (see the tool description). Defaults to false. | |
| highlightBrand | No | A brand/entity name to highlight mentions of in each answer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, openWorld, non-idempotent, non-destructive), the description discloses rich behavioral details: status values (unavailable vs error), per-vendor webSearch behavior, meta_ai eligibility restrictions, and billing implications (operator keys, no credits spent). No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the core purpose and then adds only high-value details (status semantics, webSearch variance, eligibility, billing). Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and annotations covering only safety, the description must carry behavioral burden. It thoroughly explains statuses, model id reporting, and webSearch variation, but does not explicitly describe the overall response structure (e.g., array of results for each model).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful semantic detail for the webSearch parameter by explaining per-vendor support (You.com always grounded, grok honours it, others always false), which is not 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 (runs a prompt) and resource (directly-verified vendor models), names the exact vendors, and explicitly distinguishes itself from the sibling explore_ai_prompt by contrasting persona labels with real vendor model ids.
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 the alternative (explore_ai_prompt) and the condition that selects this tool (you want real vendor model ids rather than persona labels), but does not explicitly state when not to use it or give a full decision procedure.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_authority_historyARead-onlyIdempotentInspect
Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already captured, no provider call. Empty until at least one snapshot exists: get_domain_overview auto-captures one whenever domain is the project's own domain, or call capture_domain_authority_snapshot directly for any domain (including a tracked competitor).
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to read history for (e.g. 'example.com'). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses non-obvious behavior: zero cost ('FREE (no credits)'), no provider call, the empty-until-a-snapshot-exists condition, and which sibling triggers auto-capture. This is exactly the behavioral context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core definition and ordering, then cost, then the empty-state gotcha. Information-dense and every sentence earns its place, though the third sentence is somewhat packed and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of describing returns, and it does: the shape (dated authority snapshots), ordering (oldest first), and the empty-state case. An agent has everything needed to call and interpret 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 coverage is 100%, so the schema documents both parameters; baseline would be 3. The description adds value by clarifying that `domain` accepts any domain, including 'a tracked competitor', and that the call is scoped to one project+domain, which sharpens how the two required params combine.
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 ('the stored trend of dated authority snapshots for one project+domain') and even specifies ordering ('oldest first'). It is clearly distinguishable from get_domain_overview and capture_domain_authority_snapshot, which it names explicitly.
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 covers when to use it (free read-back of already-captured snapshots) and how to make it non-empty, naming the two alternatives: get_domain_overview auto-captures for the project's own domain, or capture_domain_authority_snapshot for any domain. 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_domain_batchARead-onlyIdempotentInspect
Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. organicTraffic, organicKeywords, backlinks and referringDomains are ALWAYS null on every row — batch mode never attempts the per-domain paid rank-overview call the single-domain overview makes, since fanning that out across many domains in one call is a materially bigger paid-provider commitment than anything else this codebase does in one request. organicUnavailableReason states this once for the whole response; use get_domain_overview for organic figures on one domain at a time. Malformed domain entries are dropped and counted in skippedInvalid rather than failing the whole call. authorityUnavailableReason is set only when the authority provider itself failed to answer — null authority on every row without it set means every domain was looked up and found unranked, not that nothing could be looked up.
| Name | Required | Description | Default |
|---|---|---|---|
| domains | Yes | 1-100 domains or URLs, any mix. Malformed entries are dropped, not rejected — see skippedInvalid in the result. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| includeSubdomains | No | Count subdomains as part of each domain. Defaults to false, unlike get_domain_overview's default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, openWorld), and the description adds rich behavior beyond them: which fields are ALWAYS null (organicTraffic, organicKeywords, backlinks, referringDomains) and why, the meaning of organicUnavailableReason and authorityUnavailableReason, and that malformed entries are dropped and counted rather than failing the call. This is exactly the costly-to-discover context the description should 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?
It is front-loaded and mostly earns its place, but the middle clause ('since fanning that out across many domains in one call is a materially bigger paid-provider commitment than anything else this codebase does in one request') is verbose internal rationale that an agent does not need to invoke the tool correctly. The valuable null-field and reason-code facts are buried within this long run-on.
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 batch read tool with no output schema, the description supplies the otherwise-invisible response contract — always-null fields, once-per-response reason flags, skippedInvalid counting, and the authority-failed-vs-unranked distinction. Nothing an agent needs to interpret results correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds meaning: it explains that malformed entries are dropped into skippedInvalid (corroborating the domains param semantics) and highlights the includeSubdomains default differing from get_domain_overview. It adds a bit beyond the schema without fully re-documenting all params.
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 ('Domain batch analysis: one authority row per domain, up to 100 at once') and explicitly distinguishes itself from the sibling get_domain_overview by contrasting cost ('FREE — no paid provider call') and mode (batch vs single). An agent can immediately tell what this tool does and how it differs.
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 explicit routing: use this for batch authority rows across many domains, use get_domain_overview for organic figures on one domain at a time. The when-to-use and the alternative are both named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_domain_overviewAIdempotentInspect
Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first for domain research. backlinks and referringDomains are ALWAYS null on this tool — no data provider feeds them here, so a null is the absence of a source, not a domain with no links. Call get_backlinks_overview for those. CHARGES CREDITS ON THE PAID DATA PROVIDER (~100-300 typical) for the organic traffic/keyword figures. On the default free provider that endpoint has no equivalent, so organicTraffic and organicKeywords come back null, nothing is charged, and only the authority score is populated. Null there means not measured — never report it as zero traffic. Read authoritySource before quoting authority: 'openpagerank' is link-graph authority, 'tranco' is a POPULARITY rank used as a stand-in and must be labelled as such; a domain outside Tranco's top million honestly returns null. A result carrying data is cached 12 hours per domain; a result with neither organic keywords nor an authority score is deliberately not cached, so retrying it re-runs the lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | Domain to analyze (e.g. 'example.com'). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. | |
| includeSubdomains | No | Include subdomains in the domain's metrics. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: credit charging on the paid provider (~100-300), the free-provider fallback where organicTraffic/organicKeywords return null and nothing is charged, the 12-hour cache and the deliberate non-caching of empty results. The null-vs-zero semantics and authoritySource labelling rules ('tranco' is a popularity stand-in, not link-graph authority) are exactly the kind of disclosure annotations cannot carry, and readOnlyHint=false is consistent with a billable lookup.
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?
Purpose and the 'use this first' directive are front-loaded, and nearly every sentence carries distinct, non-redundant operational information (null semantics, billing, caching). It runs long with several stacked caveats, but there is very little pure 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?
With no output schema and read-only-but-billable behaviour, the description carries the full burden and does so: it enumerates the returned metrics, explains null origin per field, states the cost profile, and describes the authority source semantics. An agent has everything needed to call this correctly and interpret the result honestly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents domain, projectId, languageCode, locationCode and includeSubdomains, including defaults and fallbacks. The description adds no parameter-level meaning (it discusses organicTraffic, organicKeywords and authoritySource, which are return fields, not inputs), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: 'a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score.' It also explicitly names the sibling it is not (backlinks/referringDomains vs get_backlinks_overview), so an agent can distinguish it from get_domain_authority_history, get_domain_batch and get_backlinks_overview 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?
'Use this first for domain research' gives explicit ordering guidance, and it routes the backlink/referring-domain case to get_backlinks_overview. It does not, however, position this against close siblings such as get_domain_batch or get_domain_authority_history, so the coverage is clear-but-not-exhaustive rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ga4_channel_breakdownARead-onlyIdempotentInspect
MisarSEO's own retained daily GA4 channel breakdown (sessionDefaultChannelGroup) for the connected property — isolating Organic Search from every other acquisition channel, the SEO-relevant signal GA4 adds beyond Search Console's own click/impression data. Read-only and FREE (no credits), archive-only — same sync/quota story as get_ga4_performance_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. |
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 genuinely useful context beyond them: FREE with no credit cost, archive-only data, and a pointer to the sync/quota behaviour of get_ga4_performance_summary. The cross-reference is somewhat indirect but still conveys real operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence, but it is front-loaded with the core identity (retained daily GA4 channel breakdown) before the qualifying clauses. The em-dash-heavy construction is information-rich and nothing is redundant, though the same-sync-story tail is slightly elliptical.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does useful work by naming the breakdown dimension (sessionDefaultChannelGroup) and the daily granularity, which tells the agent what comes back. It also covers cost and data-currency constraints. Missing only an explicit statement of the return shape (records/fields), so not a full 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all three parameters (projectId, startDate, endDate) are documented in the schema, including format and ordering constraint. The description adds no parameter-level detail beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (MisarSEO's retained daily GA4 channel breakdown via sessionDefaultChannelGroup) and scopes it to the connected property. It explicitly positions itself against siblings, calling out that it isolates Organic Search and delivers the SEO signal GA4 adds beyond Search Console data, so an agent can differentiate it from get_ga4_performance_summary and get_search_console_performance.
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 the context clearly: use this for channel-level acquisition breakdown with Organic Search isolated, complementing Search Console. It routes to get_ga4_performance_summary for the sync/quota story but never states an explicit when-not or a full alternative-selection rule, so it stops just 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_ga4_landing_pagesARead-onlyIdempotentInspect
MisarSEO's own retained daily GA4 landing-page breakdown for the connected property: sessions/engagement/conversions per landing page, ordered by sessions descending within each day. Read-only and FREE (no credits), archive-only — same sync/quota story as get_ga4_performance_summary.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows to return, 1-1000 (default 1000). Landing-page cardinality is unbounded for a large site. | |
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. |
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 new behavior: the tool is FREE (no credits), archive-only, and shares a sync/quota story with get_ga4_performance_summary. It stops short of spelling out what that quota/sync behavior actually is, deferring to a sibling 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?
A single dense sentence that front-loads the resource and metrics before the operational caveats. Each clause earns its place, though the run-on construction packs several distinct ideas (metrics, ordering, cost, archive/quota) into one breath.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool, annotations cover safety and the schema covers inputs, while the description supplies metrics, ordering, cost, and archive-only nature. Since there is no output schema, a bit more on the returned shape or pagination behavior would help, but nothing critical for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with 4 well-documented params, so the schema carries full parameter burden and the baseline of 3 applies. The description adds only the ordering semantics (sessions descending), not syntax or format meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (retained daily GA4 landing-page breakdown), the exact metrics returned (sessions/engagement/conversions), the ordering (sessions descending per day), and the scope (connected property). An agent can distinguish it from get_ga4_channel_breakdown and get_ga4_performance_summary 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 gives useful context that the tool is archive-only and shares the sync/quota story of get_ga4_performance_summary, implying it is the granular per-landing-page view. However, it never states explicitly when to choose this over the channel or summary siblings, nor any exclusion. Usage is implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ga4_performance_summaryARead-onlyIdempotentInspect
MisarSEO's own retained daily Google Analytics totals for the connected property: sessions, activeUsers, newUsers, engagementRate, bounceRate, conversions, screenPageViews. Read-only and FREE (no credits) — makes NO call to Google, reads only what the nightly sync (04:25 UTC) has archived. A property with no completed sync yet simply has no rows, not stale data.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. |
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), yet the description adds substantial context: no credits, no live Google call, data provenance (nightly 04:25 UTC sync), and the edge case that an unsynced property returns zero rows rather than stale data. This is exactly the kind of operational behavior structured fields 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 sentences, front-loaded with the resource and metrics before the operational caveats. Dense but every clause carries information; 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?
For a simple read-only summary tool, the description covers purpose, returned metrics (compensating for the absent output schema), cost, data source, and freshness edge cases. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so projectId, startDate and endDate are already documented (including the startDate ordering constraint and the list_projects pointer). The description adds no syntax or meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (retained daily GA4 totals) and enumerates the exact metrics returned (sessions, activeUsers, conversions, etc.), so an agent knows precisely what it yields. It implicitly distinguishes itself from GA4 siblings like get_ga4_channel_breakdown and get_ga4_landing_pages via the 'totals' framing, but never names them explicitly.
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 signals a cost-based preference by stating 'FREE (no credits)', which nudges usage, but gives no explicit when-to-use or when-to-prefer-alternatives guidance versus the other GA4 tools. Usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gbp_connectionARead-onlyIdempotentInspect
The project's currently linked Google Business Profile location, or { connection: null } when none is linked yet. FREE: database only.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
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), so the bar is lower. The description still adds value beyond them by disclosing the null-return shape when nothing is linked and the 'FREE: database only' scope/cost trait.
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 short, front-loaded sentences with essentially no waste; the return contract leads and the cost note follows. Minor room to be more explicit about the retrieval 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?
For a single-parameter read tool with no output schema, the description gives enough: what it returns, the empty-state shape, and the scope. An agent can call it correctly; only the sibling relationship is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single projectId parameter is fully documented in the schema (including how to obtain it via list_projects). The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what is returned: the project's currently linked Google Business Profile location, including the null case. It reads as a noun phrase rather than an explicit verb+resource, and it never names the sibling it differs from (e.g., get_gbp_profile, list_gbp_locations, or the write-side set_gbp_connection), so an agent must infer the distinction.
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 explicit when-to-use guidance and no alternatives named. The 'FREE: database only' note hints at a cost/scope model but does not tell the agent when to prefer this tool over get_gbp_profile or set_gbp_connection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gbp_optimizationAInspect
Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The score (0-100) is a DETERMINISTIC heuristic checklist over real measured facts — not AI-generated. Only recommendations comes from the model. CHARGES ONE AI-GATEWAY OPERATION against the organization's shared monthly ceiling.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that only `recommendations` is AI-generated while `score` is a deterministic heuristic over measured facts, and that the call charges ONE AI-gateway operation against a shared monthly ceiling. This cost/budget disclosure is exactly the kind of behavioral context annotations (readOnly=false, openWorld=true) 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 sentences, front-loaded with the purpose and return values, then the deterministic-vs-AI distinction, then the cost warning. No filler; every sentence carries information an agent needs to interpret the result or budget the call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description correctly compensates by explaining the two return components (score and recommendations). Combined with the fully documented parameter and the safety annotations, an agent has everything required to call and interpret this 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 coverage is 100% and the single projectId parameter is already fully documented in the schema (including how to obtain it via list_projects). The description adds nothing further about the parameter, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (get GBP optimization) and precisely what the tool returns: a 0-100 completeness/quality score plus AI-grounded recommendations. It clearly distinguishes itself from siblings like get_gbp_profile, get_gbp_performance and get_gbp_reviews by characterizing its output rather than just its target.
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 — you'd call this to obtain a GBP quality score and optimization advice — but the description names no alternatives and gives no explicit when-to-use/when-not conditions. The cost warning implies 'use deliberately,' yet no sibling is offered as a cheaper substitute.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gbp_performanceARead-onlyIdempotentInspect
Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. metrics must be real DailyMetric values: BUSINESS_IMPRESSIONS_DESKTOP_MAPS, BUSINESS_IMPRESSIONS_DESKTOP_SEARCH, BUSINESS_IMPRESSIONS_MOBILE_MAPS, BUSINESS_IMPRESSIONS_MOBILE_SEARCH, BUSINESS_CONVERSATIONS, BUSINESS_DIRECTION_REQUESTS, CALL_CLICKS, WEBSITE_CLICKS, BUSINESS_BOOKINGS, BUSINESS_FOOD_ORDERS, BUSINESS_FOOD_MENU_CLICKS.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | Inclusive end date, YYYY-MM-DD. | |
| metrics | Yes | Which daily metrics to fetch. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | Inclusive start date, YYYY-MM-DD. |
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 fully covered and 'read-only' in the description is largely redundant. The description adds the inclusive date-range semantics, but says nothing about rate limits, per-location scoping when a project has multiple locations, or behavior for unavailable metrics.
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 first sentence is well front-loaded and dense, but the second sentence repeats all eleven enum values verbatim from the input schema, adding length without new information. Roughly half the description is schema duplication.
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 4-required-parameter read tool with 100% schema coverage and no output schema, the description covers inputs adequately but omits anything about the return shape (per-day metric rows, units, zero-fill behavior), date-range limits, or how the 'linked location' is resolved. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in the schema, including the enum of valid metric values. The description's enumeration of the 11 metrics duplicates the schema enum rather than adding meaning; the 'inclusive' framing for startDate/endDate also already appears in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (read), a specific resource (Business Profile Performance API metrics), and the exact scope (the project's linked location over an inclusive date range). It is clearly distinguishable from siblings like get_gbp_profile, get_gbp_reviews, and get_gbp_optimization 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?
Usage is implied by the purpose statement — call this to pull daily GBP performance metrics — but there is no explicit when-to-use guidance, no mention of alternatives such as get_gbp_profile for profile data, and no stated prerequisite that a GBP connection must exist. The reference to 'the project's linked location' hints at a prerequisite but never says so.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gbp_profileARead-onlyIdempotentInspect
Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and which of Google's attribute taxonomy entries are set. Fetched LIVE from Google on every call. Returns NOT_FOUND if no location is linked yet — link one with set_gbp_connection (list_gbp_locations has the ids).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds context annotations cannot: the data is 'Fetched LIVE from Google on every call' (no cached/stale reads, external dependency) and the NOT_FOUND failure mode with a fix path. It does not mention rate limits, latency or auth scopes, which keeps it 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?
Two sentences, front-loaded with what is returned, followed by the behavioral note and the failure/remediation path. The field enumeration is dense but each item carries retrieval value given there is no output 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?
With no output schema, the description compensates by naming the returned fields, and it covers the external-live-fetch behavior plus the NOT_FOUND case and its remedy. An agent has everything needed to call this correctly and to interpret failure.
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?
There is a single parameter at 100% schema description coverage, so the schema already explains projectId and where to obtain it. The description only implies project scoping via 'the project's linked location' and adds no new syntax or format detail. 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?
Specific verb plus resource ('Read-only Google Business Profile listing profile') and an explicit enumeration of the fields returned (title, categories, phone, website, description, hours-period count, attribute taxonomy). This clearly separates it from the other get_gbp_* siblings such as get_gbp_connection, get_gbp_performance, get_gbp_reviews and list_gbp_locations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the failure precondition (NOT_FOUND when no location is linked) and routes the agent to the two remediation tools, set_gbp_connection and list_gbp_locations, which is genuinely actionable. What it does not do is contrast itself directly against get_gbp_connection or get_gbp_optimization, so the sibling-selection reasoning is only partly covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gbp_reviewsARead-onlyIdempotentInspect
Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time.
| Name | Required | Description | Default |
|---|---|---|---|
| pageToken | No | ||
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful behavioral note that results come one Google-paginated page at a time, but does not explain authentication needs, rate limits, or pagination-token behavior beyond that single phrase.
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, front-loaded with scope and resource, with no wasted words. The pagination constraint is included compactly, and nothing extraneous is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, two-parameter listing tool with rich annotations and no output schema, the description covers resource, scope, safety, and pagination behavior. The remaining gap is pageToken mechanics, but the annotations and pagination phrase provide enough context for a basic call sequence.
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%: projectId is documented in the schema, while pageToken is not. The description's 'one Google-paginated page at a time' signals that pagination exists but does not explain how pageToken should be used, so it only partially compensates for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific resource ('reviews') scoped to the project's linked Google Business Profile location, clearly distinguishing it from sibling tools about posts, profile, performance, or questions. It does not name an alternative tool, but an agent can identify the core purpose from the resource and scope.
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 implies when to use it: to read reviews for the project's linked GBP location, one page at a time. It provides no explicit when-not guidance and does not name alternatives such as list_gbp_posts or get_gbp_profile, leaving usage context implied rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_google_business_questionsAInspect
Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY WHICH YOU HAVE. On the paid data provider these are real Google Business Profile questions and answers for a profile near near, and it CHARGES CREDITS. On the default free provider they are Google/Bing autocomplete completions reframed as questions — real search phrasings, but NOT anybody's Business Profile Q&A, with no answers and no asker — and NOTHING IS CHARGED. Never attribute a free-provider row to a business or quote it as a customer's question. near IS IGNORED ON THE FREE PROVIDER: the suggest APIs take no geography, so the same keyword returns the same rows from any coordinate. It is required because the paid provider needs it, not because the result is always localised. On the paid provider radiusKm is converted to metres and clamped into 200 m - 199,999 m, so a radius above about 200 km is silently reduced to that ceiling. An empty result means no Q&A was found for this phrasing; whether the business has questions elsewhere was not measured.
| Name | Required | Description | Default |
|---|---|---|---|
| near | Yes | Coordinate and radius to search around. | |
| depth | No | Maximum Q&A rows to fetch (1-100). Defaults to 20. | |
| keyword | Yes | Business name or search phrase identifying the Google Business Profile. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it warns that the paid provider CHARGES CREDITS and the free provider does not, that the two providers return fundamentally different data, that `near` is silently ignored on the free provider, and that radius is clamped to 0.2-200 km. It also cautions against misattributing free-provider rows, which aligns with (rather than contradicts) readOnlyHint=false for a credit-consuming call.
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 the call gate, then provider divergence, then parameter caveats, then empty-result meaning. Despite its length, every sentence carries decision-relevant 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?
With no output schema, the description competently covers what rows mean on each provider and what an empty result implies. It could go slightly further in describing the returned row fields (answers, asker, timestamps), but the substantive gaps are covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, yet the description adds real meaning: it explains why `near` is required despite being ignored on the free provider, and details the radius clamping/unit conversion beyond what the schema states. This is value beyond the structured fields, not repetition.
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 (fetch question-and-answer rows for one business keyword) and immediately scopes it with two distinct provider behaviors. An agent can tell this apart from the many get_gbp_* siblings because it is explicitly about Q&A evidence, not profile, reviews, or performance.
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?
"Run this only when Q&A evidence is needed" gives a clear when-to-use gate and an implicit exclusion, plus provider-selection guidance. It does not name a specific alternative tool to use instead, so it falls just short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gsc_anonymous_queriesARead-onlyIdempotentInspect
Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documented behaviour, not this codebase's assumption). This compares the SUM of named per-query clicks/impressions against the property's TRUE undimensioned total for the same window — the gap is a real, derived anonymized-query volume. Charges no credits but spends TWO Search Console requests of Google's per-property quota per call. ALWAYS narrow on state first: not_connected, requires_reconnect (the bound property's Google grant can no longer be used), no_search_data (Search Console returned nothing for the window — an absence of data, NOT zero anonymization), analysed. On analysed, ALWAYS check possiblyRowCapped: when true, part of the gap is queries the 1,000-row named-query fetch did not reach, not privacy anonymization — the estimate then overstates true anonymization.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | Explicit end date (YYYY-MM-DD). Use with startDate. | |
| dateRange | No | Convenience window (default 'last_28_days'). This DOES call Google, so Search Console's usual ~16-month clamp and ~3-day data lag both apply. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | No | Explicit start date (YYYY-MM-DD). Use with endDate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile, and the description adds genuinely valuable context beyond them: cost behaviour (no credits but TWO Search Console requests of the per-property quota per call), the external-source caveat that Google itself omits rare queries, and the row-cap caveat that can inflate the estimate. This is exactly the kind of undisclosed behavior an agent needs before calling.
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 mechanism before cost and usage detail; every sentence carries information. The state enumeration is dense but each entry is distinct and necessary, so length is justified rather than 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?
There is no output schema, so the description carries the full burden of describing return semantics — and it does, explaining the `state` values and the `possiblyRowCapped` flag, including the critical distinction that `no_search_data` is an absence of data rather than zero anonymization. Nothing essential is missing for correct interpretation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters, including enums, date patterns, and the ~16-month clamp / ~3-day lag. The description adds no parameter syntax beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and an unusual, precisely defined one: it compares the sum of named per-query clicks/impressions against the property's true undimensioned total, with the gap being the anonymized volume. This is clearly distinguishable from siblings like get_search_console_performance and get_search_console_coverage.
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 operational guidance ('ALWAYS narrow on `state` first') and enumerates the state values with their meanings, plus a conditional follow-up ('On `analysed`, ALWAYS check `possiblyRowCapped`'). It stops short of naming a sibling alternative for when this estimate is not wanted, but the when/how guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gsc_ctr_by_positionARead-onlyIdempotentInspect
CTR by ranking position: the site's own historical Search Console clicks/impressions bucketed by position (1-3, 4-10, 11-20, 21+ — mirroring this codebase's existing rank-tracking position-distribution buckets), with the REAL clicks-weighted CTR this project achieved at each bucket. NEVER a fabricated industry-average CTR curve (the generic 'position 1 gets X% CTR' tables third-party vendors publish) — every figure is computed from this project's own archived Search Console history. Free and makes NO live Google call: reads only the archive get_content_decay_report also reads. ALWAYS narrow on state first: not_connected (connect a property), no_data (a property is bound but the archive has no rows at all for this dimension/window — an absence of data, NOT zero traffic), analysed.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | No | Explicit end date (YYYY-MM-DD). Use with startDate. | |
| dateRange | No | Convenience window over MisarSEO's own archive (default 'last_28_days'). No Google clamp applies — this never calls Google. | |
| dimension | No | Bucket by query or page position (default 'query'). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | No | Explicit start date (YYYY-MM-DD). Use with endDate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld=false, and the description adds substantial context beyond them: it reads only the local archive (no Google call), shares its data source with get_content_decay_report, and carefully defines not_connected vs no_data (absence of data, NOT zero traffic) vs analysed. This is exactly the kind of behavioral disclosure that prevents misevaluation of empty results.
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 definition and packed with useful constraints, but it is long and dense; several clauses (e.g., the parenthetical explaining the generic vendor tables) border on defensive elaboration rather than actionable content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description largely carries the return semantics via its state enumeration and bucket explanation, which is the key information an agent needs. It could say more about the returned metrics/shape, but coverage is strong for a read-only analytical tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3, but the description adds meaning the schema lacks: the concrete position buckets (1-3, 4-10, 11-20, 21+) and the clicks-weighted CTR semantics. It also explains the date window behavior ('no Google clamp applies'), which supplements the enum values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (CTR bucketed by ranking position) sourced from the site's own archived Search Console history, and explicitly distinguishes it from the generic industry-average CTR curves and from live GSC tools. An agent can tell this apart from get_search_console_performance or get_content_decay_report 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 operational guidance ('ALWAYS narrow on state first') and enumerates the state values with their meanings, plus clarifies it is free and makes no live Google call. It does not name sibling alternatives for when a live GSC read is the better choice, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_gapAIdempotentInspect
Compares the project's own domain against up to 3 competitor domains and classifies every keyword a competitor ranks for as missing / behind / tied / ahead / unknown. The inverse of find_serp_competitors, which asks who competes for a keyword set. CHARGES CREDITS: one ranked-keywords lookup per domain, so one call costs up to 4 upstream requests (our domain plus the competitors). Each lookup is cached 12h per domain, so re-running the same comparison with a different sort or classification filter is free — do that rather than issuing a new comparison. Compares the top 1000 keywords per domain by search volume, so a large domain is compared on a slice; per-domain coverage reports keywordsFetched, keywordsTotal, truncated and volumeFloor. missing and unknown are NOT interchangeable: missing means a competitor ranks and we provably do not; unknown means our own slice ran out above that keyword's volume, so nothing was measured about whether we rank. Never present unknown as a gap. The project's own domain is read from the project record and cannot be passed in — if the project has no domain the call fails with a validation error telling the user to set one. When unavailable is true, no configured data provider has a ranked-keyword source and no comparison happened; the empty rows in that case does NOT mean the competitors rank for nothing. At most 200 rows are returned; totalRows is the real match count.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sortField | No | Sort column: 'volume' (default), 'theirPosition' or 'ourPosition'. All three are measured values — there is deliberately no composite opportunity score. Nulls sort last in both directions. | |
| sortOrder | No | Sort direction. Defaults to 'desc'. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. | |
| classifications | No | Restrict rows to these classifications. Omit for all five — omitting never hides `unknown`. The filter is applied before the row cap, and `totalRows` reports the pre-cap match count. | |
| competitorDomains | Yes | 1–3 competitor domains (bare domain or full URL). Each one is a separate billable ranked-keywords lookup, so pick the rivals actually being chased. The project's own domain is added automatically and is ignored if it appears here. | |
| includeSubdomains | No | Count subdomains as part of a domain. Defaults to true, and applies to every compared domain including ours. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Far exceeds the annotations: discloses credit cost (one ranked-keywords lookup per domain, up to 4 upstream requests), 12h per-domain caching, the top-1000-keywords slice with per-domain coverage fields, and the critical missing-vs-unknown semantics plus the truncated-slice caveat. It also explains the unavailable flag and why empty rows then does not mean no rankings. The readOnlyHint=false is consistent with the credit-charging behavior, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded and the dense informational sentences each carry distinct value (cost, caching, slice/coverage, missing vs unknown, unavailable, row cap). It is long, but nearly every clause earns its place; the length is driven by necessary semantics rather than 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?
With no output schema, the description carries the full return-value burden and does so: it names coverage sub-fields, the 200-row cap vs totalRows, and the unavailable/empty-rows case. Nothing an agent needs to call it or read its result correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine interpretation beyond the schema: the missing/unknown distinction ('never present unknown as a gap'), the fact that omitting classifications never hides unknown, and that competitorDomains billing is per-domain. These add semantic meaning the enum list alone does not convey.
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 ('compares the project's own domain against up to 3 competitor domains') and a precise output classification set (missing/behind/tied/ahead/unknown). It further distinguishes itself from the sibling by describing itself as 'the inverse of find_serp_competitors, which asks who competes for a keyword set,' so an agent can disambiguate 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?
Explicitly names the alternative (find_serp_competitors) and the condition that selects this tool over it. It also gives a concrete reuse rule — re-run with a different sort or classification filter rather than issuing a new comparison, because lookups are cached 12h — and states the failure precondition (no project domain → validation error).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_potentialARead-onlyIdempotentInspect
Parent Topic and Traffic Potential for one keyword, built from real SERP overlap across a BOUNDED set (up to 5) of related keywords — not a full keyword-to-URL reverse index, which this codebase's free stack does not have. Parent Topic is the related keyword whose SERP shares the most top-10 organic URLs with the seed's. Traffic Potential is the seed's own volume plus the volume of every candidate whose own #1-ranking URL is the exact same page as the seed's — a bounded floor, never the true total traffic across every keyword that page ranks for. FREE — no paid provider or plan gate. Up to 7 upstream calls per cache miss, each independently cached (30 days for the combined result), so look keywords up one at a time. parentTopic/trafficPotential are null, not zero, when the bounded sample carries no qualifying evidence. A keyword whose SERP has no organic result throws SEO_DATA_UNAVAILABLE rather than returning zeros.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | The keyword to analyze. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent annotations by disclosing that the sample is bounded (up to 5 related keywords), that values are a floor rather than true totals, that parentTopic/trafficPotential are null (not zero) when no evidence qualifies, and that a SERP with no organic result throws SEO_DATA_UNAVAILABLE. These are exactly the behavioral traits an agent needs to interpret results and handle failure.
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 definitions of Parent Topic and Traffic Potential are front-loaded before the caveats, which is good structure for a complex tool. It is necessarily dense, but a few clauses (e.g. restating the bounded floor as 'never the true total') are slightly 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 no output schema, the description carries the full burden of explaining return values and does so completely: field names, null-vs-zero semantics, and the error case. Nothing an agent needs to call or interpret this tool 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 100%, so keyword, projectId, languageCode, and locationCode are already fully documented in the schema. The description adds no per-parameter semantics of its own, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) and resource (keyword potential), then defines exactly what both outputs mean: Parent Topic is the related keyword with the most shared top-10 URLs, Traffic Potential is a bounded floor. It explicitly contrasts itself with a 'full keyword-to-URL reverse index' the codebase lacks, so the agent knows what this is and is not.
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 operating context: it's FREE with no plan gate, requires 'one at a time' lookups due to up to 7 upstream calls per cache miss, and each call is independently cached for 30 days. It does not, however, name sibling alternatives (e.g. get_keyword_serp_overview, get_topic_research) or state when to prefer them, so routing guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_serp_overviewARead-onlyIdempotentInspect
Per-keyword SERP overview: a fresh live SERP snapshot for the keyword, PLUS — when this exact keyword happens to already be tracked in this project's rank tracking — its historical position trend and SERP volatility, read straight from the SAME rank-tracking services (get_rank_keyword_history/get_rank_volatility_index) already use. tracked.isTracked: false means this keyword is not currently tracked in any of the project's active rank-tracking configs — an honest absence, never a fabricated trend. One upstream call (the live SERP fetch, cached 12h); the rank-tracking portion is DB-only reads. sinceDays only affects tracked.history and is ignored when the keyword is not tracked.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | The keyword to look up. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sinceDays | No | How many days of tracked history to return, 1-730 (default 365). Only meaningful when the keyword is tracked. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive. The description adds valuable behavioral detail beyond them: one upstream call cached 12h, the rank-tracking portion is DB-only reads, and the tracked.isTracked:false honesty note. It could say more about rate limits or response shape, but the annotations carry the safety profile and the description adds real operational context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose (live SERP snapshot) then the optional tracked add-on. The parenthetical backtick references are dense but purposeful. Slightly heavy for one paragraph 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?
No output schema, but the description discloses the key output fields (the live SERP snapshot, tracked.history, tracked.isTracked, volatility) sufficiently for an agent to interpret the response. It covers sourcing, caching, and failure/absence semantics. Missing only minor details like exact freshness guarantees beyond the 12h cache.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all five parameters are already documented in the schema. The description reinforces that sinceDays only affects tracked.history and is ignored when untracked — useful but the schema already says 'Only meaningful when the keyword is tracked.' Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb+resource ('Per-keyword SERP overview: a fresh live SERP snapshot for the keyword') and clearly distinguishes the two modes of output (live SERP plus optional tracked history/volatility). It also names the sibling tools it draws from (get_rank_keyword_history/get_rank_volatility_index), making the relationship explicit.
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 explains the semantics of the tracked block: 'tracked.isTracked: false means this keyword is not currently tracked,' giving clear context for when the historical portion applies. However, it doesn't explicitly tell the agent when to prefer this tool over get_rank_keyword_history or a plain SERP fetch — no 'use this when... instead of...' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_keyword_strategyAInspect
Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keyword lookup, the same shared-phrase clustering engine the saved-keyword Topic Clusters feature and get_topic_research both already use, a text-match against the project's own crawled pages, and a BOUNDED number of AI-gateway content-brief calls (one per cluster among the top few by measured volume, gated by the shared AI-gateway budget). page.status: "existing" on a cluster means the site already has a page ABOUT that topic (title/URL text-match), never a verified ranking claim — this codebase has no keyword-to-URL index. A cluster beyond the brief limit gets brief: null, briefSkipped: true — an honest 'not attempted', not an empty brief. Consumes the SAME keyword_lookups_per_day plan quota bulk lookups do (once per request) plus up to a handful of AI-gateway operations.
| Name | Required | Description | Default |
|---|---|---|---|
| keywords | Yes | 1-500 keywords to analyze (e.g. from a bulk research run or an export). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Very strong: it discloses quota consumption (once per request against keyword_lookups_per_day), a bounded number of AI-gateway brief calls, and the exact semantics of briefSkipped (honest 'not attempted' vs empty brief) and page.status (text-match, never a verified ranking). This goes well beyond the annotations; the readOnlyHint=false and non-idempotent annotations are consistent with the quota/AI side effects it describes.
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 pipeline definition, and most sentences carry genuine semantic weight (quota, AI budget, briefSkipped, page.status). It is dense and long, with some clauses that could be trimmed, but it is 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 no output schema, the description does the work of explaining the return shape (clusters, page.status, brief/briefSkipped), which is the critical part for an agent to interpret results. It doesn't enumerate the full response structure, but the semantically important fields are 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 100%, so the schema already documents all four parameters (keywords range, projectId, languageCode, locationCode). The description adds pipeline context but no parameter-level meaning beyond the schema's own descriptions, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource and the exact transformation pipeline: 'a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords'. It explicitly distinguishes itself from siblings by naming the shared components it reuses (bulk keyword lookup, the Topic Clusters clustering engine, get_topic_research), so an agent can tell it apart 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 role is implied (a full strategy pipeline over a pasted keyword list), and it references related tools/features, but it never states plainly when to choose this over get_topic_research or research_keywords, nor any exclusion condition. Usage context is inferable but no explicit routing guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_link_intersectAIdempotentInspect
Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to something in this space, which is what makes it the most actionable backlink report there is. CHARGES CREDITS — the most expensive call in the backlinks surface: one referring-domains lookup per request, 5 of them paging the project's OWN referring domains plus 1 per competitor, so one run costs up to 9 upstream requests of 1000 domains each. Every request is cached per organization+target+page, so re-running the same intersect with a different threshold, proof filter or sort is FREE — do that rather than issuing a new run, and confirm with the user before sweeping several competitor sets. UNAVAILABLE ON THE FREE DATA PROVIDER: a backlink graph needs a proprietary web-scale crawl index, so a deployment on the free provider answers with unavailable: true, a reason, and no rows. totalRows, provenRows and unprovenRows are 0 on that response and are NOT measurements — they travel beside the flag precisely so an empty table is never read as an answer. Check unavailable before rows, and never report an unavailable run as 'no opportunities exist'. absence has two states that must NOT be conflated. proven means our own referring-domain read ruled the domain out, so "does not link to us" is a measurement. unproven means our read was cut off at or above that domain's authority, so it may already link to us and nothing was established — never present an unproven row as a confirmed opportunity. provenRows is the headline count and excludes them by construction. absenceBound says which regime applies: complete (our whole profile was read) or authority-floor with the authorityFloor strictly above which absence is evidence. coverage[] is the per-target ledger — domainsRead, the provider's domainsTotal, requestsSpent/requestBudget, truncated, authorityFloor, and a per-target unavailable/unavailableReason. A competitor cell's found: false only means 'does not link to them' when that competitor's coverage is not truncated. The project's own domain is read from the project record and cannot be passed in — if the project has no domain the call fails with a validation error telling the user to set one. minCompetitors is clamped to the number of competitor domains that actually resolved (duplicates and the project's own domain are dropped); compare it with minCompetitorsRequested before calling a run empty. At most 200 rows are returned; totalRows is the real match count. There is deliberately no composite opportunity score and no subdomain toggle.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sortField | No | Sort column: 'competitors' (default), 'authority' or 'linkingPages'. All three are values the provider measured — there is deliberately no composite opportunity score. Re-sorting a run reuses the cached lookups and costs nothing. | |
| sortOrder | No | Sort direction. Defaults to 'desc'. | |
| minCompetitors | No | Keep only domains linking to at least this many of the compared competitors. Defaults to 2, and is clamped to the number of competitors that actually resolved — compare `minCompetitors` against `minCompetitorsRequested` on the result before calling a run empty. | |
| includeUnproven | No | Include rows whose absence from our own profile could not be proven. Defaults to true — leave it true: unproven rows are labelled rather than hidden, and excluding them silently drops real candidates. | |
| competitorDomains | Yes | 2–4 competitor domains (bare domain or full URL). Each one is a separate billable referring-domains lookup, so pick the rivals actually being chased. 2 is the floor because with a single competitor this degenerates into a one-sided referring-domain diff, not an intersect. The project's own domain is added automatically and is dropped from this list if it appears here. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety/idempotency, but the description adds the cost model (1 referring-domains lookup per request, up to 9 upstream requests, 1000 domains each), the per-org+target+page cache semantics, and a detailed contract for unavailable, proven/unproven absence, truncation and coverage[] ledger.
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: purpose and credit cost come first, then edge-case semantics. It is dense and long, but nearly every clause carries a distinct operational fact; the backtick-heavy clause stacking occasionally slows reading.
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 tool with no output schema: it explains what the response fields mean (totalRows, provenRows, unprovenRows, absence, absenceBound, coverage[]) and the 200-row limit, plus the validation failure when the project has no domain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented; the description still adds value by explaining why minCompetitors is clamped and must be compared with minCompetitorsRequested, why 2 is the floor for competitorDomains, and that each competitor costs a separate lookup. It complements rather than duplicates 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+resource+scope: domains linking to 2–4 competitors but not the project. It is immediately distinguishable from siblings like get_backlinks_overview, get_unlinked_mentions_report and get_keyword_gap.
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 when-to-use (cached re-runs with different threshold/proof filter/sort are free, so prefer re-running over a new run), when to seek confirmation (confirm before sweeping several competitor sets), and when-not-to expect data (free data provider returns unavailable).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_pack_rankARead-onlyIdempotentInspect
Read-only access to local pack rank check configs and their latest check. With configId, returns that config's latest check: status is "found" (a real 1-based position within Google's local pack), "not_found" (the page parsed cleanly but the business was not among the entries seen), or "unavailable" (the scraper is disabled, blocked, or nothing could be parsed) — never a fabricated position or confidence score. Without configId, lists all local pack rank configs in the project. This checks Google's LOCAL PACK for a named BUSINESS, distinct from get_local_rank_grid, which checks ORGANIC rank for a DOMAIN across a geo-grid. Create a config with create_local_pack_rank_config and run a new check with run_local_pack_rank_check.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | No | Local pack rank config ID. If omitted, lists all configs in the project. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe/read-only/idempotent profile, and the description goes further by enumerating the three possible `status` values and what each means, including the guarantee that a position is never fabricated and no confidence score is invented. That is substantive behavioral disclosure 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?
Front-loaded with the core purpose and the two modes, and every sentence carries routing or return-value information. The status enumeration is dense with em-dash parentheticals but does not waste words; slightly verbose packaging is the only cost.
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?
There is no output schema, so the description must carry return semantics itself, and it does: it explains both the list-mode result and the per-config check result with its status vocabulary. For a two-parameter read tool, 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 description coverage is 100%, and the description's account of configId (present = latest check, absent = list all configs) essentially restates what the schema property text already says. It adds no syntax, format, or constraint detail for either parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Read-only access to local pack rank check configs and their latest check') and spells out the two operating modes keyed on configId. It explicitly contrasts itself with get_local_rank_grid (organic rank for a domain vs. local pack for a business), so an agent can distinguish it from the nearest sibling 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 when-to-use routing: use get_local_rank_grid for organic rank across a geo-grid, use create_local_pack_rank_config to make a config, and run_local_pack_rank_check to produce a new check. The condition selecting each alternative is stated rather than implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_local_rank_gridARead-onlyIdempotentInspect
Read-only access to geo-grid rank-tracking configs and their latest run. With configId, returns that config's latest run plus per-point results (position, url, and the place name each point was reverse-geocoded to for its location override — null means no override was applied). Without it, lists all grid configs in the project. Reports ORGANIC rank at each point, NEVER local-pack position — the free SERP backend does not parse a local pack. Create a config with create_local_rank_grid_config and trigger a run with run_local_rank_grid.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | No | Grid config ID. If omitted, lists all grid configs in the project. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive, and the description adds genuinely non-redundant behavior: it reports ORGANIC rank only and NEVER local-pack position because the backend does not parse a local pack. That caveat prevents a real misinterpretation of the returned data, and the null meaning for the reverse-geocoded place name is also 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?
Front-loaded with the read-only scope and the two behavioral branches, then the CRM caveat, then the related-tool pointers. Every sentence carries load; there is 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?
With no output schema, the description carries the return-value burden and does describe the per-point fields and the null convention. It stops short of the full response shape (e.g. list-mode payload, volume of points, pagination), but it is sufficient to call 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 coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining what the configId branch actually yields (latest run plus per-point position/url/place-name results). It does not add syntax or format detail for projectId, but the added return semantics for configId justify a step above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource: reading geo-grid rank-tracking configs and their latest run. It spells out the two distinct modes (with configId = single config's latest run + per-point results; without = list all configs), and explicitly names the sibling tools used to create a config and trigger a run, so an agent can place it 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?
It clearly states the calling context for both branches and explicitly routes to create_local_rank_grid_config and run_local_rank_grid for the write/trigger paths. It does not, however, say when to prefer this over nearby siblings like get_local_pack_rank or get_rank_config_trend, so the alternative-selection guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_media_monitoring_reportARead-onlyIdempotentInspect
Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform breakdown from a Prompt Explorer scan you already ran for the same brand. Same cost profile as get_unlinked_mentions_report, which this calls internally — no AI-gateway spend, even when citations is supplied (that data is only classified here, never fetched). NOT a real-time media-monitoring product: no social-platform API polling, no forum-API crawling, no news-aggregator feed — scopeNote states this on every analysed response. ALWAYS narrow on state first, same as get_unlinked_mentions_report. aiCitationPlatforms: null means no citations were supplied — distinct from an empty array, which would mean a scan cited nothing on a known platform.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | Brand name or bare domain to search for as a SERP QUERY (not a URL to fetch). | |
| citations | No | Citations from an ALREADY-RUN Prompt Explorer scan for this brand (map its `citations` to {url, domain}). Never fetched here — omitting it leaves `aiCitationPlatforms: null`. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code. Defaults to the project's stored market, else 'en'. | |
| locationCode | No | Numeric location code. Defaults to the project's stored market, else 2840 (United States). | |
| trackedDomain | Yes | Bare domain each result page is checked for a link to, e.g. 'acme.com'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the cost profile (no AI-gateway spend, citations only classified never fetched), the fact that it is not real-time polling, the presence of `scopeNote` on every analysed response, and the null-vs-empty-array semantics of aiCitationPlatforms. This is substantial behavioral context an agent could not get from annotations or schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but front-loads the core purpose ('Media Monitoring: ...') and each sentence carries information (cost, caveats, response semantics). It is somewhat verbose and backtick-heavy, but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only report tool with no output schema, it covers cost, caveats, and return-value semantics well. The one gap is the reference to narrowing on `state`, a parameter absent from this schema, which may confuse an agent about what inputs control the result set.
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 already 100%, so the baseline is 3; the description adds genuine meaning by clarifying that `citations` is never fetched here and that omitting it yields aiCitationPlatforms: null (distinct from an empty array). This goes beyond the schema's field-level docs.
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 and distinguishes it from the sibling get_unlinked_mentions_report by describing itself as that tool's candidates filtered to known social/forum/news platform domains, with an optional citation-platform merge. It is clear what the tool returns, though the purpose is framed indirectly through another tool rather than stated standalone.
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 some conditional guidance (supply `citations` only from an already-run Prompt Explorer scan; omit to get null) and asserts a cost profile, but there is no explicit when-to-use-this-vs-get_unlinked_mentions_report framing. The instruction to 'ALWAYS narrow on `state` first' references a `state` parameter that does not exist in this schema, which muddies rather than clarifies usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolioARead-onlyIdempotentInspect
One card per member project (same shape get_dashboard returns — no GSC, no backlinks, see its own description for why) plus aggregate totals. totals.averageHealthScore is averaged over member projects that HAVE been audited, not over every member. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolioId | Yes | Portfolio ID. Use list_portfolios to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description adds real behavioral value: it declares the call is FREE, hits the database only, calls no SEO data provider, and spends no credits, and it explicitly excludes GSC and backlink data. It also flags a non-obvious aggregation rule (averageHealthScore only over audited members). Auth needs and pagination behavior remain unstated, keeping this below 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the return shape and the cost guarantee. The nested parenthetical ('same shape get_dashboard returns — no GSC, no backlinks, see its own description for why') is dense and slightly convoluted, 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 no output schema, the description carries the return-shape burden and largely does so: card-per-project plus totals, the aggregation caveat, and the data exclusions. The main gap is delegating the card definition to get_dashboard's description, which an agent may not have read.
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?
There is a single parameter with 100% schema description coverage, and the schema already tells the agent to use list_portfolios to find the ID. The description adds no syntax or format detail beyond that, so the 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 conveys the return shape precisely: one card per member project plus aggregate totals, with a caveat about averageHealthScore. However, it never states the retrieval verb/resource explicitly in its own words and leans on a cross-reference to get_dashboard's description to define the card shape, rather than differentiating itself from siblings like list_portfolios.
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 — this is the portfolio-level aggregate read — but there is no explicit when-to-use guidance and no naming of alternatives such as list_portfolios (for enumerating) or get_dashboard (for single-project detail). The reference to get_dashboard is for output shape, not routing, so the agent must infer the selection criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rank_ai_overview_trendARead-onlyIdempotentInspect
AI Overview presence trend across a tracker's keywords, oldest first — what share of tracked keywords showed Google's AI Overview in the SERP, per check run, and how that has moved over time. FREE: database only, no SEO data provider is called and no credits are spent. Reuses rank_snapshots.serpFeatures, already populated by the SERP-feature capture the rank checker already does — no new SERP calls. aiOverviewPresenceRatePct is keywordsWithAiOverview / keywordsTotal * 100, rounded to one decimal, and null (not 0) for a run where keywordsTotal is 0 — nothing was checked that run, which is a missing measurement, not a truthful "0% presence".
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed. Defaults to desktop. | |
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sinceDays | No | How many days back to look, 1–730. Defaults to 365. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only/idempotent annotations, it discloses rich behavior: no provider call, no credits, reuses already-populated rank_snapshots.serpFeatures, and incurs no new SERP calls. It also explains the null-vs-0 semantics of the metric ('nothing was checked that run... a missing measurement, not a truthful 0% presence'), which is exactly the kind of edge-case behavior 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?
Purpose is front-loaded in the first sentence, followed by cost/model context and the metric definition. It is longer than strictly minimal and the null-handling explanation is dense, but every clause carries useful information rather than restating the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of explaining returns and does so for the key field: aiOverviewPresenceRatePct with its formula and null semantics, plus oldest-first ordering. It stops short of describing the overall series shape or pagination, but is largely sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (including the device enum caveat and sinceDays range) are already documented in the schema. The description's added detail concerns the output metric formula rather than parameter meaning, so the baseline 3 for full schema coverage 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?
It names a specific verb+resource (AI Overview presence trend) and defines the exact scope: share of a tracker's keywords showing Google's AI Overview per check run, ordered oldest first. This is specific enough that an agent can distinguish it from sibling trend tools like get_rank_config_trend or get_tracked_prompt_trend 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 clearly signals usage context by stating 'FREE: database only, no SEO data provider is called and no credits are spent,' which tells the agent when this is the cheap option. However it does not explicitly name alternatives or state when-not-to-use relative to other trend tools, so routing is implied rather than enumerated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rank_config_trendARead-onlyIdempotentInspect
Per-run keyword-position-distribution buckets for a tracker, oldest first — how many tracked keywords sit in the top 3, 4-10, 11-20, or outside the top 20, per check run. Use it to answer 'is this domain's visibility trending up or down' without re-checking anything. FREE: database only. No SEO data provider is called and no credits are spent. Buckets are disjoint and cover every tracked keyword: notRanking is derived as the remainder, not fetched separately, and top3 + top4to10 + top11to20 + notRanking always equals the tracker's keyword count at that run. device is accepted but on every free SERP source today it narrows nothing — see get_rank_tracker's own note on this deployment's device support.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Which device's positions to bucket. On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed. Defaults to desktop. | |
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sinceDays | No | How many days back to look, 1–730. Defaults to 365. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare read-only/safe; the description adds crucial behavioral context beyond them: it is free (database only, no provider, no credits), the buckets are disjoint and complete, notRanking is derived rather than fetched, and the device parameter is a no-op on free sources. That is exactly the kind of extra context that adds value over 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 core purpose and mostly efficient, but goes slightly long with restated bucket invariants and a device caveat that is also covered in the schema. Still, every sentence carries useful 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?
Given no output schema, the description fully explains the return shape (the four buckets per run), their ordering (oldest first), the summation invariant, and the no-cost behavior. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description reinforces the disjointness/summation invariant and calls out the device caveat, but adds no syntax or format details beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (per-run keyword-position-distribution buckets for a tracker) and explains precisely what is bucketed (top3/4-10/11-20/outside top20) per check run. Distinguishes itself from siblings like get_rank_keyword_history or get_rank_movers by emphasizing the distribution/trend answer.
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 concrete use case ('is this domain's visibility trending up or down') and clarifies that no re-checking is needed. However, it does not explicitly name sibling alternatives (e.g., get_rank_keyword_history) or state when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rank_keyword_historyARead-onlyIdempotentInspect
Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO data provider is called and no credits are spent. A position of null means checked but not found within that check's searchedDepth — a real event, not a missing check or a lost ranking. searchedDepth: null means the run predates that column, not that any particular depth was searched. At most one point per UTC day: a same-day re-check collapses to its latest reading.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sinceDays | No | How many days back to look, 1–730. Defaults to 365. | |
| trackingKeywordId | Yes | The tracked keyword's own row ID (from get_rank_tracker's results), not the keyword text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already cover read-only/idempotent safety), the description discloses real behavioral traits: no provider call and no credit spend, the null-vs-not-found semantics of `position`, the legacy `searchedDepth: null` meaning, and same-day collapse to the latest reading. That is exactly the kind of interpretation guidance 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 the core identity, then cost, then edge-case semantics — a sound ordering with no obvious filler. The illustrative clause 'the same series the app's SERP-history chart draws' is pleasant but slightly padded given the rest of the sentence already says it.
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?
There is no output schema, so the description must carry the return-value burden, and it does: ordering (oldest first), granularity (one point per UTC day, latest same-day reading wins), and the two null cases. Combined with annotations covering safety and schema covering inputs, an agent has everything needed to call and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already carries its own guidance (including the sinceDays range and default), so the baseline is 3. The description's null/ordering notes concern returned values rather than the input parameters, so it adds nothing further on that dimension.
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 ('per-keyword position series over time, oldest first') and pins the scope to 'one tracked keyword,' which separates it from the config-level trend siblings like get_rank_config_trend. An agent knows exactly what it retrieves 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 'FREE: database only. No SEO data provider is called and no credits are spent' line gives a concrete cost signal that shapes tool choice among the many rank-related siblings. However, it never names an explicit alternative or states when this tool is the wrong choice (e.g. a config-wide view).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rank_moversARead-onlyIdempotentInspect
Newcomers and fast climbers for a tracker's OWN domain, over a window. newlyRanking is keywords that started ranking during the window (no earlier position, or an earlier position of null). fastClimbers is keywords that ranked at both ends of the window and gained at least minGain positions. FREE: database only. No SEO data provider is called and no credits are spent. THIS IS NOT COMPETITOR DISCOVERY. No corpus of undeclared domains exists in this codebase to discover a newcomer domain from — a rank check only ever persists positions for the target domain and the already-tracked competitor list; every other domain in a fetched SERP is read and discarded. Do not describe a newlyRanking entry as a 'new competitor' or 'newly discovered domain' — it is a keyword the TRACKED domain itself started ranking for, nothing about a competitor. newlyRanking entries always have gain: null — there is no earlier position to measure a gain from, and minGain never filters them.
| Name | Required | Description | Default |
|---|---|---|---|
| minGain | No | Positions a keyword must have gained to count as a fast climber, 1–100. Defaults to 5. Does not affect newlyRanking, which has no earlier position to measure a gain from. | |
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| sinceDays | No | How many days back to look, 1–730. Defaults to 365. |
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), and the description adds meaningful semantics beyond that: no external provider is called, no credits are spent, newlyRanking entries always carry gain: null, and minGain never filters them. It also corrects a likely misinterpretation (newlyRanking is not a new competitor domain).
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 and mostly earned, but the anti-competitor point is made twice and the gain:null / minGain-doesn't-filter facts are repeated in both the first and third blocks. Tightening would help.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully defines what newlyRanking and fastClimbers contain and how the window works, which is what an agent needs to interpret results. Pagination, ordering and result limits are not addressed, leaving a minor 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 100%, so minGain, configId, projectId and sinceDays are already documented with defaults and ranges. The description restates the minGain/newlyRanking interaction but adds little the schema does not already say, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (newcomers and fast climbers for a tracker's OWN domain over a window) and defines the two output buckets. It explicitly distinguishes itself from competitor-discovery siblings, so an agent can route correctly without opening other 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 strong negative guidance ('THIS IS NOT COMPETITOR DISCOVERY') and a cost condition (FREE, no provider called, no credits spent). It lacks positive routing to alternatives like get_rank_config_trend or get_rank_keyword_history, so it is clear context but not full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rank_trackerARead-onlyIdempotentInspect
Read-only access to rank tracker configs and their latest results. With trackerId, returns the config plus the latest snapshot per keyword. Without it, lists all trackers in the project. FREE — reads stored MisarSEO state only, runs no SERP query and charges no credits. To trigger a new check, use the dashboard. A null position means THE DOMAIN WAS NOT FOUND WITHIN THE DEPTH SEARCHED. The response states that depth as a number — use THAT number, not the config's serpDepth, which is what was asked for and can be several times deeper than the search source reaches. Everything past the depth searched was not measured, so a null is neither a rank of zero nor proof the page stopped ranking — say 'not found in the top N' and give the N the response states. Device columns are printed only where this deployment measures desktop and mobile as separate searches; where it does not, the response says so and prints ONE position per keyword. Never report a mobile or desktop absence from a column the response did not print, and never infer one from the config's devices value. previousPosition is a roughly 7-day-old comparison point, and when no snapshot that old exists it falls back to the EARLIEST snapshot on record — so a 'was' figure can be much older than a week. Do not quote it as a week-over-week change without checking the tracker's history length.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| trackerId | No | Rank tracker config ID. If omitted, lists all rank trackers in the project. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds substantial behavioral context beyond that: no SERP query is run, no credits are charged, null positions mean not found within the searched depth, the response's depth number should be used instead of config serpDepth, device columns are only printed when separately measured, and previousPosition may fall back to the earliest snapshot. This is rich and useful transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured and front-loads the core behavior, parameter modes, cost, and the alternative for triggering checks. The later caveats about null positions, depth, device columns, and previousPosition are valuable because there is no output schema, though the length and repeated emphasis make it slightly verbose rather than perfectly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the burden of explaining return semantics. It covers the return shape for both trackerId modes, null-position interpretation, depth reporting, device-column behavior, and previousPosition caveats. Given the complexity and lack of output schema, it is complete enough for an agent to call and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the behavioral difference of including trackerId: with it, the response returns the config plus the latest snapshot per keyword; without it, the tool lists all trackers in the project. projectId is not elaborated beyond the schema, but the trackerId semantics are clearly expanded.
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 and operation: read-only access to rank tracker configs and their latest results. It also distinguishes the two parameter-dependent modes, with trackerId returning config plus latest snapshot per keyword, and without trackerId listing all trackers in the project. An agent can tell this apart from create_rank_tracker or other rank tools 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?
It explicitly explains when to provide trackerId versus when to omit it, and states that new checks are triggered via the dashboard rather than this tool. It also clarifies that the call is free, runs no SERP query, and charges no credits, which sets clear usage expectations. This is strong when/when-not guidance with an explicit alternative for triggering checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rank_volatility_indexARead-onlyIdempotentInspect
SERP volatility index across recent runs — how much this tracker's own positions churned run over run, derived entirely from already-stored history (no new SERP calls). FREE: database only, no SEO data provider is called and no credits are spent. Modeled on the one step AccuRanker publicly discloses for their Grump Rating (sum of per-keyword differences / number of results), but CTR-weighted rather than a raw position delta — a #1-#2 swap counts far more than a #18-#19 swap. NOT a 0-10 Sensor score or a mood label (Semrush and MozCast do not publish their formulas, and both are calibrated against panels of hundreds of thousands to millions of keywords spanning the whole web). volatilityIndex is meaningful only relative to THIS tracker's own history over time, not as an absolute severity — do not describe a given value as 'high' or 'low' without comparing it to this same tracker's other points.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed. Defaults to desktop. | |
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| runLimit | No | How many recent completed runs to compare consecutively, 2-26. Defaults to 12. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/closed-world, but the description adds genuinely new operational facts: it is FREE, database-only, issues no new SERP calls, spends no credits, and is derived entirely from stored history. That cost/data-source disclosure materially affects whether an agent should call it.
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 definition and the free/no-calls constraint, and most sentences earn their place. The 'Modeled on AccuRanker Grump Rating' and 'MozCast calibrated against hundreds of thousands of keywords' passages are somewhat tangential for selection purposes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully explains what volatilityIndex means and how to interpret it (relative, CTR-weighted, not absolute severity). Complete enough for a 4-param read tool, though return shape/series granularity is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including the no-op device enum, runLimit range, and configId pointer is already documented in the schema. The description adds no parameter-level detail beyond what the schema provides, making 3 the correct 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?
States a specific resource ('SERP volatility index') and precisely defines the measure as this tracker's own run-over-run churn. It explicitly distinguishes itself from the Sensor score, MozCast, and mood labels, so an agent can tell what it is and is not 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 strong interpretive guidance ('meaningful only relative to THIS tracker's history', don't call a value high/low in isolation) but never routes the agent among siblings — no mention of when to prefer get_rank_movers, get_rank_config_trend, or get_rank_keyword_history. Usage context is implied, not enumerated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_report_definitionARead-onlyIdempotentInspect
Gets a report definition's name and ordered widget types. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
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. The description adds genuinely new context: the exact shape of what is returned (name plus ordered widget types) and the cost model (database-only, no SEO provider, no credits spent).
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 short sentences with zero filler; the return content is stated first and the cost constraint second. Every clause carries information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly compensates by summarizing the return value, and it discloses the no-credit cost model. For a simple two-parameter read tool this is nearly complete; only the relationship to render_report_definition and list_report_definitions is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, including cross-references to list_projects and list_report_definitions. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Gets') and resource ('report definition'), and goes further by naming the returned payload: name and ordered widget types. It is distinguishable from list_report_definitions and render_report_definition by what it returns, though it never explicitly names those 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?
The 'FREE: database only... no credits are spent' note gives useful context for choosing this over credit-consuming calls like render_report_definition, but there is no explicit when-to-use statement or named alternative. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_report_scheduleARead-onlyIdempotentInspect
Gets a report definition's schedule, if it has one. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely useful context beyond that: the call is database-only with no SEO provider invocation and no credit spend, and the 'if it has one' wording warns the schedule may not exist.
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 short sentences, front-loaded with the action and immediately followed by the cost profile. Every clause carries actionable information 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?
For a two-parameter read tool with no output schema, the description covers what is returned conceptually (a schedule, possibly absent), and annotations cover safety. It could say a little more about the return shape or absent-schedule behavior, but it is adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% – both projectId and reportDefinitionId are fully documented with lookup hints (list_projects, list_report_definitions) in the schema. The description adds nothing param-specific, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving the schedule attached to a report definition, with the scope qualifier 'if it has one'. This distinguishes it implicitly from get_report_definition (the definition itself) and upsert/delete_report_schedule (mutations), though no sibling is named explicitly.
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 the call is free and touches only the database, which helps decide whether to call it, but it gives no explicit when-to-use versus alternatives and no prerequisites. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_console_coverageARead-onlyIdempotentInspect
MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to Google — unlike get_search_console_performance, this reads gscUrlCoverage, populated by a nightly scan built on the URL Inspection API's ~2000/day quota, so coverage fills in over days rather than in one pass. summary is the headline count per coverageState. rows is one page (default 200, max 1000) of the URLs themselves, newest-inspected first — filter to one state with coverageState. An empty summary/rows with ok: true means the nightly scan has not populated this property yet, not that every page is fine.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| coverageState | No | Filter to one state, e.g. "Submitted and indexed". Free text, matching Google's own strings verbatim. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, but the description adds substantial behavioral context beyond them: no credit cost, no live Google call, data source (URL Inspection API ~2000/day quota, nightly scan), and that empty results with ok:true mean the scan has not populated the property yet rather than every page being clean. This is exactly the kind of context annotations cannot provide.
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 and cost/behavior caveats, then details on output shape, pagination, and the empty-result edge case. Every sentence carries unique, useful 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?
With no output schema and only safety annotations, the description supplies the return structure (summary vs rows), pagination defaults, filtering, data latency, and empty-result semantics. An agent has everything needed to call it correctly and interpret the response.
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 the description compensates well: it explains that `rows` is one page (default 200, max 1000), that `summary` is a headline count per coverageState, and that `coverageState` filters to one state matching Google's strings. It leaves `offset` implicit, but the added meaning on limit, rows, and coverageState meaningfully exceeds the schema text.
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: 'index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why.' It explicitly contrasts itself with the sibling get_search_console_performance, so an agent can route between the two 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?
Explains key usage conditions: it is FREE (no credits) and makes no Google call, unlike get_search_console_performance, and notes data is populated by a nightly scan so coverage fills in over days. It also explains how to filter to one state. It stops short of an explicit 'use this when X / avoid it when Y' rule, but the alternatives context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_console_hourly_performanceARead-onlyIdempotentInspect
MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE (no credits) and makes NO call to Google: reads MisarSEO's own Postgres. Unlike the daily archive, a wider date range does not mean more history — Google itself only offers roughly the trailing 8-10 days of hourly data, and the nightly sync only ever fetches that same window, so a startDate earlier than it simply returns nothing for the days outside it. Each row's hour is 0-23 in Search Console's own America/Los_Angeles reporting hour.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that the call is FREE/no credits, makes NO call to Google (reads MisarSEO's own Postgres), and critically that Google only retains ~8-10 trailing days of hourly data so an earlier startDate returns nothing. Annotations only cover read-only/idempotent/closed-world; the description adds the operational and data-window 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-loads the purpose and then layers the cost/behavioral caveats. Dense but every sentence carries distinct information (free, no Google call, data window, hour timezone). Slightly long, but nothing is 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 rich annotations and full schema coverage and no output schema, the description covers the remaining gaps an agent needs: the data availability window, the cost profile, the upstream source, and the row field semantics. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real meaning to startDate: a wider date range does not yield more history and an earlier startDate silently returns nothing. It also documents the `hour` field's 0-23 semantics in America/Los_Angeles, which is not in the schema at all.
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 (hourly Search Console totals for the connected property) and explicitly frames itself as the hourly counterpart to get_search_console_performance's daily archive. An agent can distinguish it from the sibling 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?
Names the alternative (the daily archive get_search_console_performance) and clarifies the distinction (hourly vs daily) plus the 8-10 day window constraint. It gives clear context for when this is the right choice, though it stops short of an explicit 'use X instead when Y' conditional.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_console_performanceARead-onlyIdempotentInspect
Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party data — use it for what already ranks, near-ranking queries, and pages with real demand. ctr is a 0-1 fraction; position is a 1-based average; dates are Pacific Time; the last ~3 days may be incomplete. Read-only and FREE (no credits) — Search Console is first-party data and meters nothing. It does spend Google's per-property request quota. Google omits rows it will not disclose (anonymised queries) and returns at most rowLimit of the rest, so what it withholds is not measured rather than absent: zero rows is not zero demand, and a total summed from these rows is a floor, never the property's real total. When hasMore is true you have seen only part of the match set — page with startRow before reporting any sum or count as complete.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Search type (default web). | |
| endDate | No | Explicit end (YYYY-MM-DD, Pacific Time). Use with startDate. | |
| filters | No | AND-combined filters. To get the queries for one page: [{dimension:'page',operator:'equals',expression:'https://example.com/post'}] with dimensions ['query']. | |
| rowLimit | No | Rows per call (default 1000, max 1000). GSC sorts by clicks desc and can't filter by position — filter 'striking distance' positions client-side, and paginate with startRow when hasMore is true. | |
| startRow | No | Pagination offset. | |
| dataState | No | 'all' (default) includes fresh/incomplete recent data. | |
| dateRange | No | Convenience window (default last_28_days). End is set ~3 days back for GSC data lag. Ignored if startDate+endDate are given. Max lookback is 16 months. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | No | Explicit start (YYYY-MM-DD, Pacific Time). Use with endDate. | |
| dimensions | No | Group rows by these dimensions. Default ['query']. Use ['page'] for top pages, ['query','page'] to map queries to pages / spot cannibalization, ['date'] for a time series. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial context: it is FREE (no credits) but consumes Google's per-property quota, Google withholds anonymised rows so sums are a floor not a total, dates are Pacific Time, the last ~3 days may be incomplete, and hasMore means the result is truncated. This is exactly the behavioral burden the 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 what the tool returns before the operational caveats, and every sentence carries weight (fraction units, quota cost, anonymisation floor, pagination). It is dense but slightly long; no fluff sentences, though the caveats could be tightened marginally.
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 10 parameters, no output schema, and complex semantics, the description covers data units, quota cost, incompleteness windows, anonymisation truncation, and pagination completeness — everything an agent needs to call and correctly interpret the result. Nothing materially important is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds interpretation semantics the schema lacks: ctr is a 0-1 fraction, position is a 1-based average, and pagination must use startRow when hasMore is true. It clarifies how outputs relate to the filter/pagination parameters, going beyond raw schema 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 (Query) and resource (Search Console Search Analytics) and enumerates the metrics (clicks, impressions, CTR, average position) and dimensions (query/page/country/device/date). This distinguishes it from siblings like get_search_console_coverage, get_search_console_hourly_performance, and get_gsc_ctr_by_position, which are narrower views.
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 usage context: 'use it for what already ranks, near-ranking queries, and pages with real demand,' and the schema guidance reinforces when to filter by page vs query. It never explicitly names when NOT to use it versus the narrower GSC siblings, so it falls short of full when/when-not/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_search_console_sitemapsARead-onlyIdempotentInspect
Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error counts, per-content-type submitted counts), or one named sitemap. Read-only — needs only the webmasters.readonly scope this deployment's Search Console connection already requests. Submit/delete need the broader webmasters scope and are deliberately not offered. Free (no credits) but spends one call of Google's per-property quota. Omit feedpath to list every sitemap; pass one (a sitemap's own URL) to fetch just that one instead — either way the response is sitemaps, a one-entry array for feedpath. lastSubmitted/lastDownloaded/warnings/errors are absent, not zero, when Google has nothing to report for that field.
| Name | Required | Description | Default |
|---|---|---|---|
| feedpath | No | A specific sitemap's own URL (e.g. another entry's own `path`). Omitted lists every sitemap Search Console has on record for the property. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses the exact OAuth scope required, that the operation consumes Google's per-property quota despite costing no credits, and the crucial absence-not-zero semantics for lastSubmitted/lastDownloaded/warnings/errors. That last point is non-obvious behavior an agent could easily misread as a bug.
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 verb+resource, then scope, then quota/scope caveats, then the feedpath rule. It is dense and every clause carries information, though the single long paragraph is heavier 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 no output schema, the description compensates by describing the return shape (a `sitemaps` array) and the null-field semantics, and it covers auth scope, quota cost, and the list-vs-get switch. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes further by explaining feedpath is the sitemap's own URL and that the response is always a `sitemaps` array (one entry when feedpath is supplied), which clarifies how the parameter shapes output beyond what the schema 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?
Names a specific verb+resource (Search Console sitemaps.list/sitemaps.get) and precisely delineates the scope: every sitemap for the property with its processing status, or one named sitemap. An agent can distinguish this from siblings like get_search_console_coverage or get_search_console_performance 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 states the selection rule for the alternative behaviors: omit feedpath to list all, pass one to fetch a single sitemap. It also preempts the obvious question of why submit/delete aren't available, closing off exploration of non-existent tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_site_audit_statusARead-onlyIdempotentInspect
Progress of a site audit started by start_site_audit: { status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase, startedAt, completedAt }. status is 'running', 'completed' or 'failed' — poll until it is 'completed' or 'failed'; there is no 'complete' status, so waiting for that string never ends. It does NOT return crawled pages or individual issues. Once completed, read it with get_audit_comparison, get_audit_core_web_vitals, get_audit_https_report, get_audit_internal_links and get_audit_structured_data. FREE.
| Name | Required | Description | Default |
|---|---|---|---|
| auditId | Yes | The auditId (or jobId — the same value) returned by start_site_audit. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a safe read (readOnlyHint, idempotentHint, non-destructive), and the description adds real value on top: the exact status vocabulary, the polling contract, what it does NOT return (pages or individual issues), and cost ('FREE'). The 'no complete status' note prevents a genuine failure mode.
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 purpose and return shape, then constraints, then follow-ups; no filler sentences. The inline field list is dense but earns its place by defining the response contract in the absence of an output 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?
There is no output schema, but the description compensates by enumerating every returned field, defining the status values, and pointing to the downstream read tools. Nothing an agent needs to poll or hand off 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 100%, so auditId and projectId are already fully documented in the schema, including the auditId/jobId equivalence and where projectId comes from. The description adds only the implicit lineage to start_site_audit, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (progress/status of a site audit) and ties it to the sibling that creates it (start_site_audit), then enumerates the returned fields. An agent can immediately distinguish it from get_audit_comparison, get_audit_core_web_vitals, etc.
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 explicit polling instructions ('poll until it is completed or failed'), an explicit anti-pattern warning ('there is no complete status'), and routes the agent onward to the five reporting siblings once the audit completes. When-to-use and what-to-do-next are both stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_topic_researchARead-onlyIdempotentInspect
Content ideas for a seed keyword, composed from three sources this codebase already fetches for other features: the SERP for the seed (titles of pages already ranking for it), PAA-style questions (real autocomplete completions reframed as questions), and autocomplete keyword suggestions. Grouped into topic clusters by shared phrasing, using the same phrase-clustering engine the saved-keyword Topic Clusters feature uses. FREE — none of the three sources is billable in this codebase today. Three real upstream calls per request, so it is rate limited. NOT a Keywords-Explorer-style overlap report: this codebase has no keyword-to-URL index, so clusters group the REAL text of three OBSERVED sources rather than a fabricated 'what else these pages rank for'. coverage.serpUnavailable/suggestionsUnavailable mean that source could not be asked at all — distinct from that source genuinely returning nothing — and one source being unavailable never sinks the other two. Every idea not assigned to a cluster is still returned in ungrouped, never discarded.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | The seed keyword to research. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code. Defaults to the project's stored market, else 'en'. | |
| locationCode | No | Numeric location code. Defaults to the project's stored market, else 2840 (United States). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnly/idempotent/openWorld annotations: it discloses cost (FREE, non-billable sources), rate limiting driven by three upstream calls, the absence of a keyword-to-URL index, and precise semantics for coverage.serpUnavailable/suggestionsUnavailable (source unreachable vs. genuinely empty, partial failure tolerated). This is exactly the kind of operational 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-loads the one-line purpose before any caveats, and each following sentence adds a distinct operational fact (free, rate limit, no URL index, coverage semantics, ungrouped retention). It is dense but slightly long, with a couple of clauses that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-shape burden and does: it explains the clusters grouping, the ungrouped bucket, and the coverage flags that signal partial failures. Combined with the cost and rate-limit notes, an agent has everything needed to call and interpret this 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 100%, so keyword, projectId, languageCode, and locationCode are already documented with defaults and constraints. The description adds nothing about parameter formats or interactions, which is the expected baseline when the schema does the work.
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 the specific resource (content ideas / topic research for a seed keyword) and spells out what composes it: SERP titles, PAA-style questions, and autocomplete suggestions clustered by shared phrasing. It clearly separates itself from adjacent siblings like research_keywords, get_keyword_serp_overview, and the saved-keyword Topic Clusters feature.
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 strong context for when to reach for it — free sources, three upstream calls, rate limited — and explicitly says what it is NOT (a keyword-to-URL overlap report). It never names a concrete sibling to use instead when the agent wants overlap data or broader keyword research, so the alternative routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tracked_prompt_trendARead-onlyIdempotentInspect
Observed history for one tracked prompt — one point per real scheduled check (mentionedByCount/citedByCount out of successfulModelCount), oldest first. Empty until checks accumulate; never interpolated or back-filled. FREE — reads recorded checks.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| trackedPromptId | Yes | Tracked prompt ID, from list_tracked_prompts. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the bar is lower, yet the description still adds real behavioral context: one point per real scheduled check, oldest-first ordering, empty-until-populated, and explicitly never interpolated or back-filled. That directly answers what the returned series does and does not contain.
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?
Purpose is front-loaded in the first clause, with supporting semantics (ordering, emptiness, no back-fill) and the cost note following in tight, non-repetitive sentences. 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?
For a read-only trend tool with no output schema, the description does useful work by naming the fields in each point, its ordering, and its emptiness/gap behavior, which compensates for the missing return schema. Minor gap: it doesn't state pagination or point-count limits for long histories.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both required params (projectId, trackedPromptId) are already documented with sourcing hints (list_projects, list_tracked_prompts). The description adds no parameter-level detail, so baseline 3 applies; the mentionedByCount/citedByCount fields it cites are outputs, not inputs.
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: observed history for one tracked prompt, one point per scheduled check. It is distinguishable from sibling trend tools (get_brand_scan_trend, get_rank_ai_overview_trend) by scoping to a tracked prompt, though it never names an alternative explicitly, so sibling differentiation is only implicit.
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 — the agent can infer this returns a time series once checks accumulate, and the 'empty until checks accumulate' note warns against expecting data. But it never says when to reach for this versus list_tracked_prompts or the other trend endpoints, and gives no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unlinked_mentions_reportARead-onlyIdempotentInspect
Unlinked brand mentions: searches the free SERP backend for brand as a QUERY, then checks whether each result page already links to trackedDomain. Free: one SERP fetch plus up to 10 live third-party page fetches, no AI-gateway spend. ALWAYS narrow on state first: serp_unavailable means no free SERP provider could be reached — never treat it as "zero mentions found". analysed carries candidates[], each status: "linked" | "unlinked" | "unreachable". Bounded by SERP result count (the first page or two of free-SERP results), never an exhaustive web crawl or a full content index — the Common Crawl-based version of this gap is a decided wont-fix; scopeNote states this on every response. candidates[].platform reuses the AI-citation platform classification (YouTube/TikTok/Reddit/Wikipedia/LinkedIn/Quora, or null) at no extra cost.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | Brand name or bare domain to search for as a SERP QUERY (not a URL to fetch). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code. Defaults to the project's stored market, else 'en'. | |
| locationCode | No | Numeric location code. Defaults to the project's stored market, else 2840 (United States). | |
| trackedDomain | Yes | Bare domain each result page is checked for a link to, e.g. 'acme.com'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover read-only, idempotent, open-world, non-destructive safety, and the description adds crucial behavior: cost model (one SERP fetch plus up to 10 live third-party fetches), result-bound limitation, error state semantics, and the fact that `scopeNote` is always returned. This goes well beyond what the annotations provide.
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 operation, then cost, then state handling; every sentence carries operational information, including limitations and return shape. It is long but dense and free of filler, appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description fully documents returned states, candidate statuses, platform classification, and scope limitations, so an agent can interpret results and handle errors correctly. Annotations already cover the safety profile, and nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all five parameters with descriptions. The description reiterates the brand/query and trackedDomain semantics but adds no syntax, defaults, or examples beyond what the schema provides, making the baseline 3 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?
States a specific verb and resource: searches the free SERP backend for `brand` as a query, then checks each result page for a link to `trackedDomain`. This distinguishes it from siblings by defining exactly the unlinked-mention gap it measures.
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 to check `state` first and warns that `serp_unavailable` must never be treated as zero mentions, which is a clear when-not caveat. It also frames the tool as free/no AI-gateway spend, but does not name alternative tools for the same job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_usageARead-onlyIdempotentInspect
Plan tier, credits remaining, and every quota/count dimension tracked against it for the caller's organization. FREE: reads counters this codebase already maintains for its own gating — nothing here calls a paid provider or spends a credit. gatingActive is false on a self-hosted deployment with no billing provider configured: tier, creditsRemaining and quotas are all null there, not a fabricated tier. counts (projects/rank-tracked keywords/API keys) is always populated. Inside a quota dimension, used: null means NOT TRACKED — an unlimited tier's counter is never incremented in the first place — never a real zero; used: 0 IS a real measured zero. aiGatewayOps is the shared platform AI-gateway key's own monthly ceiling, reported separately because it is a platform-abuse ceiling, not a plan entitlement.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint/idempotent/destructive=false, so the safety profile is covered. The description goes well beyond that by disclosing non-obvious output semantics: gatingActive=false on self-hosted means tier/creditsRemaining/quotas are null rather than fabricated, counts is always populated, and used:null means NOT TRACKED while used:0 is a real zero. It omits auth/error behavior, which keeps it at a strong 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?
The purpose is front-loaded in the first sentence, followed by dense semantic qualifications. Every subsequent sentence adds a distinct, non-redundant caveat (self-hosted nulls, tracked-vs-zero counters, the separate aiGatewayOps ceiling), though the backtick-heavy, em-dash-laden prose is heavier than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries full responsibility for return-value interpretation, and it delivers: it enumerates the returned fields (tier, creditsRemaining, quotas, counts, gatingActive, aiGatewayOps) and defines each one's null semantics. For a zero-parameter read tool, an agent has everything needed to interpret the response correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters (empty object schema), so per the rubric the baseline is 4. There is no parameter surface for the description to clarify, and it correctly does not waste space inventing any.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific resource and scope: plan tier, credits remaining, and every quota/count dimension for the caller's organization. An agent can tell this is an account-usage read, distinct from analytics siblings like get_dashboard or get_ga4_performance_summary. It stops short of explicitly differentiating itself from those siblings, so it lands at a clear-but-undifferentiated 4.
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: the FREE note clarifies that calling it spends no credit and hits no paid provider, which is useful operational guidance for deciding whether to call it. However, there is no explicit when-to-use or when-not-to-use guidance, and no alternative sibling is named for overlapping needs such as dashboard summaries.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_web_analytics_devicesARead-onlyIdempotentInspect
Device/browser/OS breakdown for a project's own tracking snippet. Every field is derived server-side from the visitor's User-Agent header at collection time. FREE, first-party.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive and closed-world behavior, so the bar is lower. The description adds genuinely useful context beyond them: every field is derived server-side from the User-Agent at collection time, implying the values reflect collection-time data and are not re-parsed retroactively, plus a cost/first-party signal.
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 clauses, front-loaded with the resource and dimension before the provenance note and the cost tag. Nothing is repeated and no sentence can be dropped without losing information an agent uses for selection.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys what the result represents (a device/browser/OS breakdown) and where the data comes from, which is enough for a three-required-param read tool. It could have hinted at the shape of the rows or any grouping thresholds, but the gaps are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for all three parameters (projectId, startDate, endDate), including format and ordering constraints, so the schema does the heavy lifting. The description adds no parameter-level meaning at all, making the baseline 3 the correct 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 names a precise dimension triple (device/browser/OS breakdown) scoped to a project's own tracking snippet, which clearly separates it from sibling analytics reads like get_web_analytics_sources, get_web_analytics_top_pages and get_web_analytics_summary. It stops short of naming those siblings, so the differentiation is inferable rather than explicit.
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 explicit when-to-use or when-not-to-use statement, and no alternative is named. The 'FREE, first-party' tag hints at a preference over third-party/paid sources such as the GA4 tools, but this is an implication the agent must construct, not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_web_analytics_sourcesARead-onlyIdempotentInspect
Referrer/channel/UTM breakdown for a project's own tracking snippet, including AI referral attribution: aiReferral.bySource breaks the ai-referral channel out by assistant (chatgpt/claude/perplexity/gemini/copilot/you/poe). aiReferral.undercountNote is not decoration — industry measurement puts a large share of real AI-assistant referrals arriving with no referrer header at all, landing in the direct channel instead. This number is a measurable floor, never a complete count. FREE, first-party.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. | |
| referrerLimit | No | Rows in topReferrers, 1-200, default 50. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read-only/idempotent profile, so the bar is lower. The description adds genuine value beyond that: it warns that aiReferral.undercountNote means the AI-referral figure is a floor, never a complete count, which is important interpretation context an agent cannot get from the schema or 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 purpose in the first clause, then spends the remainder on the AI-referral interpretation caveat. The 'not decoration' phrasing is slightly editorial but the sentences are otherwise substantive and non-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?
For a read-only analytics tool with full schema coverage and no output schema, the description covers purpose plus the one non-obvious interpretation trap (undercounting AI referrals). It never enumerates the referrer/channel/UTM output fields, but the schema and the sibling set make the shape inferable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so projectId, startDate, endDate, and referrerLimit are all documented in the schema. The description adds nothing about parameter syntax or defaults, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (referrer/channel/UTM breakdown) and scopes it to 'a project's own tracking snippet,' which distinguishes it from the GA4 siblings. It does not explicitly name which sibling to prefer, but the first-party vs third-party framing makes the boundary reasonably clear.
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?
No explicit when-to-use/when-not guidance or named alternative. The 'FREE, first-party' note implies a reason to choose this over GA4 channel breakdowns, but the agent must infer that routing decision rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_web_analytics_summaryARead-onlyIdempotentInspect
Sessions/pageviews/bounce-rate time series for a project's own tracking snippet. FREE — first-party data collected by MisarSEO's own snippet (/api/analytics/snippet.js), never a paid or rate-limited third-party call. totals.bounceRate is null (not 0) when there were no sessions in the range.
| Name | Required | Description | Default |
|---|---|---|---|
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds real value beyond that: it states the data is free, never rate-limited, and comes from MisarSEO's own snippet, plus a specific edge-case behavior (totals.bounceRate is null, not 0, with no sessions).
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 compact sentences, front-loaded with what the tool returns, followed by the cost/source note and a single null-value caveat. No filler, though the em-dash cost framing is slightly promotional rather than strictly operational.
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?
There is no output schema, so the description carries the return-value burden and does describe the shape (metrics time series) plus one important null caveat. Annotations cover the read-only/idempotent profile. Only the absence of pagination/range-size limits or explicit alternative-tool routing keeps it 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 100%, so projectId, startDate and endDate (format, pattern, ordering constraint) are already fully documented in the schema. The description adds no parameter-level syntax or format detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact resource (time series of sessions/pageviews/bounce rate) and scopes it to 'a project's own tracking snippet', which implicitly separates it from the GA4-based siblings. It never names an alternative tool, so the differentiation is inferable rather than explicit.
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?
No explicit when-to-use or when-not-to-use guidance and no named alternatives among get_web_analytics_devices/sources/top_pages or get_ga4_performance_summary. The 'first-party snippet' framing implies the use case (wanting snippet-collected data rather than a third-party integration), but the agent must infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_web_analytics_top_pagesBRead-onlyIdempotentInspect
Top pages by view count, plus separate entry-page and exit-page breakdowns, for a project's own tracking snippet. FREE, first-party.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Rows per list (topPages/entryPages/exitPages), 1-200, default 50. | |
| endDate | Yes | YYYY-MM-DD, required, not before startDate. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| startDate | Yes | YYYY-MM-DD, required. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds useful provenance ('first-party' tracking snippet, 'FREE'), which tells the agent the data is self-hosted rather than vendor-sourced, but says nothing about return format or pagination.
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 efficient sentence that front-loads the returned resource and its breakdowns before appending source/cost context. Nothing is wasted, though the trailing 'FREE, first-party.' is terse enough to read as a fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, fully-schema-documented analytics tool with annotations covering the safety profile, the description is broadly adequate and even names the three output lists. It stops short of routing the agent among the web-analytics siblings, leaving that gap in an otherwise complete definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (projectId, startDate, endDate, limit) are already fully documented in the schema. The description adds no syntax, format, or default details beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Top pages by view count') and further specifies it returns entry-page and exit-page breakdowns, which distinguishes it from get_web_analytics_summary/devices/sources. However it never names those siblings, so the differentiation is implicit rather than explicit.
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 'for a project's own tracking snippet' and 'FREE, first-party' phrases imply the data source and cost context, but there is no explicit when-to-use statement and no guidance on choosing this over get_web_analytics_summary or the other analytics siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_yandex_site_overviewARead-onlyIdempotentInspect
Yandex's own view of a project's domain: the indexing summary — including the Site Quality Index (SQI), a third independent authority signal alongside OpenPageRank and Tranco — and popular search queries, read straight from the Yandex Webmaster API. FREE (no credits). Bring-your-own-token: requires the deployment operator to set YANDEX_WEBMASTER_OAUTH_TOKEN (one token covers every host verified on that Yandex account — no per-project connect step, and MisarSEO never drives the OAuth flow itself). Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_host' when the project's domain has no verified match on the account. Yandex publishes no backlink-lookup endpoint at all, so unlike get_bing_site_overview this has no backlinks section. diagnostics lists individually named issues (e.g. NO_SITEMAPS, DNS_ERROR) that summary.siteProblems only counts by severity.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| queryLimit | No | Max popular queries to return (1-500). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the readOnly/idempotent/openWorld annotations by disclosing the cost model (FREE, no credits), the bring-your-own-token requirement and the exact YANDEX_WEBMASTER_OAUTH_TOKEN env var, the one-token-per-account scope, and the two distinct failure payloads ({ ok:false, reason:'not_configured' } and 'no_matching_host'). It also explains what diagnostics adds over summary.siteProblems.
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 and authority-signal framing, and every sentence carries real information. It is dense and slightly over-long for a single paragraph, but there is little genuine waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotation coverage of errors, the description fills the gap: it explains what is returned (indexing summary, SQI, popular queries, diagnostics), names the error shapes, and notes the missing backlinks section. An agent has what it needs to call and interpret the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are already documented in the schema; the description adds no syntax or filtering detail for queryLimit or projectId. Baseline 3 applies when the schema carries the full parameter burden.
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 (Yandex's own view of a project's domain: indexing summary, SQI, popular queries) and a specific source (Yandex Webmaster API). It explicitly distinguishes itself from the nearest sibling, stating that unlike get_bing_site_overview it has no backlinks section because Yandex publishes no backlink endpoint.
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 when to reach for it: a third independent authority signal alongside OpenPageRank and Tranco, read from Yandex Webmaster. It also flags the free/no-credit condition and the token prerequisite, but does not state explicit exclusions beyond the backlinks contrast with get_bing_site_overview.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
import_link_prospects_csvAInspect
Link Building Tool: bulk-add up to 500 prospects at once from already-parsed rows (each with at least a domain). FREE (no credits), but this is a MUTATION. One bad or duplicate row never aborts the rest — the response reports added/duplicates/errors per row.
| Name | Required | Description | Default |
|---|---|---|---|
| rows | Yes | Rows to import, each with at least a domain. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond the annotations: it is labeled a MUTATION, is FREE (no credits), and crucially discloses partial-failure semantics ('one bad or duplicate row never aborts the rest') plus the per-row added/duplicates/errors reporting. This directly explains the non-idempotent duplicate handling the annotation only flags as a 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?
Single dense sentence-pair that front-loads the bulk/scope facts and then the mutation and error semantics. The 'Link Building Tool:' prefix is mild filler, but otherwise 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 mutation tool with no output schema, the description covers cost, partial-failure behavior, and the shape of the response summary. It omits permission/auth requirements and does not explicitly route against add_link_prospect, but the essentials an agent needs to call it safely are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, including projectId's origin from list_projects. The description's 'each with at least a domain' and the 500 cap restate what the schema already enforces (minItems/maxItems, required domain), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('bulk-add ... prospects'), plus concrete scope (up to 500, from already-parsed rows with at least a domain). It implies but never names the single-item sibling add_link_prospect, so sibling differentiation is left to inference. Clear enough to know what the tool 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?
Conveys implied usage through 'bulk-add up to 500 prospects at once' and contrasts with a single-add flow only implicitly. There is no explicit when-to-use vs add_link_prospect or when-not guidance, and no prerequisites beyond the schema. The FREE note is context, not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_urlsARead-onlyIdempotentInspect
Run Google Search Console's URL Inspection on up to 10 URLs of the connected property: index/coverage state, last crawl time, Google-selected vs declared canonical, and mobile/rich-results verdicts. Use it to answer 'is this page indexed? why not?'. Read-only and FREE (no credits) — Search Console is first-party data and meters nothing. Every submitted URL comes back as a row, but a row carrying error was NOT inspected: Google refused or failed on it, so its index state was not measured rather than found to be bad. Count the rows without an error when saying how many URLs you checked. A verdict of UNKNOWN is Google's own 'no determination', not a page that is missing from the index.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | 1–10 absolute URLs to inspect. Each must belong to the connected property. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | BCP-47 language for the inspection result (e.g. 'en-US'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only/idempotent safety, and the description goes well beyond them: it discloses the free/no-credit billing model, the meaning of error rows (URL not actually measured), and the semantics of UNKNOWN as Google's own non-determination. These are exactly the traps an agent would otherwise misreport.
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 the triggering question, then the caveats. It runs slightly long, but the error-row and UNKNOWN guidance each prevent a real reporting mistake, so almost every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so: it describes the row-per-URL result shape, the error field, and how to count inspected URLs correctly. Nothing needed to call or interpret the tool 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 100%, so projectId, urls, and languageCode are already documented in the schema; the description only restates the 1-10 property-scoped URL constraint. That is the baseline 3 when the schema carries the load.
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 (Google Search Console URL Inspection) and enumerates what is returned: index/coverage state, last crawl time, canonical selection, mobile/rich-results verdicts. It is clearly distinct from sibling GSC report tools like get_search_console_coverage because it is explicitly per-URL.
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 concrete triggering question ('is this page indexed? why not?') and notes the 10-URL cap and property scoping. It never names an alternative tool for bulk coverage questions, so the when-not-this-tool case 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.
list_ahrefs_projectsARead-onlyIdempotentInspect
Every Rank Tracker AND Site Audit project the caller's connected Ahrefs Connect grant can access — the data source for picking which project(s) to bind to a MisarSEO project (see set_ahrefs_project). Live call to the Ahrefs API v3 under the caller's OWN OAuth token. Read-only and FREE (no credits). Check requiresReconnect before treating both lists as 'no projects': true means the stored grant can no longer reach Ahrefs.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses that this is a live API v3 call under the caller's own OAuth token, that it is free with no credits consumed, and — critically — that requiresReconnect=true means the stored grant can no longer reach Ahrefs and the empty lists should not be read as 'no projects'. That is real behavioral context the annotations do not provide.
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 but front-loaded: purpose and data-source role come first, then behavioral caveats. Every clause carries information, though the em-dash-heavy single paragraph is slightly cramped for such a short list 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?
With no output schema, the description usefully flags the requiresReconnect field and the auth/free-call characteristics, covering what an agent needs to interpret results. It could say a bit more about the returned list shape, but nothing essential 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?
Only one parameter and schema coverage is 100%, with the schema already explaining projectId and its provenance (list_projects). The description adds no parameter-level detail, so the baseline of 3 is appropriate; its reference to requiresReconnect concerns a return field, not an input.
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 and resource (list Rank Tracker AND Site Audit projects) and states the scope precisely: projects reachable via the caller's Ahrefs Connect grant. It also distinguishes itself from the sibling that consumes its output (set_ahrefs_project), so an agent can tell them apart 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 context for use — it is the data source for picking which project(s) to bind to a MisarSEO project, with an explicit pointer to set_ahrefs_project as the follow-up. It stops short of stating when NOT to call it, but the routing intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_bing_sitesARead-onlyIdempotentInspect
Every site the caller's connected Bing Webmaster OAuth grant can access — the data source for picking which site to bind to a project (see set_bing_site). Live call to the Bing Webmaster API (GetUserSites) under the caller's OWN OAuth token, not the operator key. Read-only and FREE (no credits). Check requiresReconnect before treating an empty sites list as 'no sites': true means the stored grant can no longer reach Bing Webmaster.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses this is a live API call, that it runs under the caller's OWN OAuth token rather than the operator key, that it is free (no credits), and provides a behavioral warning to check `requiresReconnect` before interpreting an empty `sites` list. This is exactly the kind of auth, cost, and failure-mode context 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?
Front-loaded with the core statement, then layered context. Slightly dense with parenthetical asides, but every clause carries information an agent needs (auth scope, free cost, reconnect caveat) rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single-parameter, no-output-schema read tool, the description still conveys the return shape (`sites` list), the empty-list edge case, and the auth/cost profile. Nothing needed to invoke or interpret the result 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?
Only one parameter and schema description coverage is 100%, so the schema already documents projectId fully (including its provenance from list_projects). The description adds nothing extra about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (every site accessible to the caller's Bing Webmaster OAuth grant) and names the underlying API call GetUserSites. It also positions itself relative to the sibling set_bing_site, so an agent can distinguish it 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?
Explains the when: it is the data source for picking which site to bind to a project, and explicitly points to set_bing_site as the follow-up action. There is no explicit when-not, but the routing context is clear and unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_brand_monitorsARead-onlyIdempotentInspect
Lists a project's brand monitors — targets re-scanned by Brand Radar on a schedule rather than only when run_brand_radar_scan is called. FREE: database only, no credits spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/non-destructive/non-open-world, so the bar is lower; the description still adds non-obvious cost context ('FREE: database only, no credits spent') that an agent cannot derive from annotations. It stops short of disclosing pagination or result 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?
Two compact clauses with the resource definition front-loaded and the cost note second; no filler and 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?
For a one-parameter, read-only listing tool with no output schema, the description covers what the resource is and the cost profile, but it does not say what a returned monitor record contains, which is the main remaining 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 coverage is 100% and the single projectId parameter is fully documented in-schema (including where to get an ID), so the description adds no parameter-level meaning beyond what is already provided. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Lists a project's brand monitors') and then defines the resource itself as targets re-scanned by Brand Radar on a schedule, which implicitly separates it from the sibling list_competitor_monitors and from run_brand_radar_scan.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the scheduling distinction versus run_brand_radar_scan, which hints at the usage context, but never states when to call this tool (e.g. before upsert_brand_monitor or delete_brand_monitor) or what alternatives exist for inspecting monitors.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_competitor_monitorsARead-onlyIdempotentInspect
Competitor page change detection: the specific competitor URLs monitored for a project, with lastCheckedAt (null until the first scheduled check reaches it). FREE — database only, no credits spent. Use get_competitor_monitor_changes for the actual detected-change timeline of one URL.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint=false, so safety is covered; the description adds meaningful non-obvious context instead — that no credits are spent because it is database-only, and that lastCheckedAt is null until the first scheduled check reaches the URL. That null-state disclosure prevents a common misreading of an unmonitored-looking result.
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 the resource is, the notable field caveat, the cost note, then the alternative. Nothing is padded and the alternative routing is front-loaded before the reader has to guess.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so for the key fields (URLs plus lastCheckedAt semantics). It omits ordering, pagination, and what an empty list means, but those are minor for a single-parameter, database-only listing 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?
Only one parameter and schema coverage is 100%, with the schema itself explaining projectId and pointing to list_projects. The description's 'monitored for a project' restates scoping already documented in the schema, adding no syntax or format detail, so the baseline applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — the competitor URLs monitored for a project — and frames it as 'Competitor page change detection', which disambiguates it from the generic list_* siblings. An agent can immediately tell this apart from get_competitor_monitor_changes, which is named explicitly.
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_competitor_monitor_changes for the detected-change timeline of a single URL, which is the key usage distinction. It also flags the cost profile (FREE, no credits), which is a real selection criterion. It stops short of stating when-not to use it (e.g., relative to add_competitor_monitor/remove_competitor_monitor).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_disavow_entriesARead-onlyIdempotentInspect
Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt content.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
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. The description adds genuinely new context beyond that: deterministic ordering ('oldest first') and cost behavior ('FREE (no credits)'), which help an agent decide whether to call it.
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 compact sentences with the scoping/ordering fact front-loaded and the sibling pointer at the end. No filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but for a single-parameter list tool the description covers ordering, cost, and the alternative route, and annotations cover safety. It could note what fields each entry carries, but nothing essential to calling 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?
There is a single parameter with 100% schema description coverage, including a 'Required' flag and a pointer to list_projects for obtaining the ID. The description adds no parameter-level meaning, so the baseline 3 for schema-covered params applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('every disavow entry for a project') and adds scope detail (oldest first) plus an explicit boundary against the export sibling. An agent can distinguish it from add_disavow_entry, remove_disavow_entry, and export_disavow_file 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 alternative export_disavow_file and the condition that selects it ('actual Google-format .txt content'), which is clear routing. It does not spell out the inverse use case (inspecting/auditing the raw entry list), but for a list-vs-export pair this is adequate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ga4_propertiesARead-onlyIdempotentInspect
Every GA4 property the caller's connected Google Analytics grant can access — the data source for picking which property to bind to a project (see set_ga4_property). Live call to the Analytics Admin API (accountSummaries.list), not an archive read. Read-only and FREE (no credits). Check requiresReconnect before treating an empty properties list as 'no properties': true means the stored grant can no longer reach Google Analytics.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the readOnlyHint/idempotentHint/openWorldHint annotations: it discloses that this is a live Admin API call rather than an archive read, that it costs no credits, and — most valuably — that an empty result must be interpreted together with the `requiresReconnect` flag before concluding 'no properties.' That is exactly the kind of operational nuance 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 tight sentences, front-loaded with identity and scope, then the live-call/cost note, then the requiresReconnect caveat. No filler and no repetition of 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?
For a one-parameter, no-output-schema read tool, the description supplies everything an agent needs: what is returned conceptually (the accessible property list), that it is a live call, its cost profile, the downstream tool to use it with, and how to disambiguate an empty result. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter projectId is fully documented in the schema (100% coverage, including where to obtain an ID from list_projects), and the description adds nothing about it. With the schema carrying the entire burden, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list every GA4 property accessible to the caller's connected grant) and immediately scopes it against the sibling list tools for other providers (list_ahrefs_projects, list_bing_sites, list_yandex_hosts) by naming Google Analytics and the underlying accountSummaries.list endpoint. An agent can identify this tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly frames the tool as 'the data source for picking which property to bind to a project' and points to the follow-up tool set_ga4_property, which gives clear when-to-use context. It stops short of stating when not to call it (e.g., after a property is already bound, or when no GA4 connection exists beyond the requiresReconnect hint), so it lands just below the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gbp_locationsARead-onlyIdempotentInspect
Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped data (the answer does not depend on the project passed; projectId only satisfies the ownership check). Returns { accounts: [{ name, accountName, locations: [...] }] }. Live Google API calls.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds meaningful context beyond that: the data is limited to what the deployment's operator credential can manage, the projectId does not affect the answer, and the tool makes live Google API calls. It stops short of disclosing pagination, rate limits, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose, followed by the key scoping caveat, the exact return shape, and the live-API note. Every sentence carries distinct information and there is 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 only one required parameter, no output schema, and annotations covering the safety profile, the description is complete. It supplies the exact return object shape, clarifies the projectId caveat, identifies the consumer tool, and notes live API calls, leaving no critical gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents projectId as required and sourced from list_projects. The description adds critical semantic clarification that the answer does not depend on the project passed and that projectId only satisfies an ownership check, which materially changes how an agent should interpret the parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: listing every Google Business Profile account and location manageable by the deployment's operator credential. It distinguishes this tool from set_gbp_connection by calling itself the picker data for that tool, and it clarifies that the result is not project-scoped. An agent can identify its role 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 phrase 'the picker data for set_gbp_connection' clearly signals when to use this tool, and the note about projectId only satisfying an ownership check prevents a common misuse. It does not explicitly compare against other GBP listing siblings such as get_gbp_profile or get_gbp_connection, so it falls just short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_gbp_postsARead-onlyIdempotentInspect
Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, non-destructive profile. The description adds meaningful behavioral context by disclosing that a 404 means no linked location and by naming the prerequisite connection 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?
Two tightly written sentences: the resource is stated first, then the important error-handling note. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter list tool with no output schema, the definition covers purpose and the key 404 precondition. It does not mention pagination or returned fields, but the scope is narrow enough that the omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single required projectId is fully documented in the schema with its source. The description adds no additional parameter semantics beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource precisely: posts published on the project's linked Google Business Profile location. It is clear what data the tool returns, but it does not explicitly distinguish this list operation from sibling GBP tools such as get_gbp_profile or list_gbp_locations.
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 explicit conditional guidance for the 404 case, directing the agent to set_gbp_connection first. That is a useful alternative path, though general when-to-use guidance versus other GBP tools is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_link_prospect_activityARead-onlyIdempotentInspect
Link Building Tool: a prospect's activity log — every manually-typed note plus every auto-recorded status change, newest first. FREE (no credits).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| prospectId | Yes | Prospect id, from list_link_prospects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the log mixes human notes with automatic status-change entries and is ordered newest first, plus the cost model (no credits consumed). It does not mention pagination or result limits, 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?
A single tight sentence that front-loads the resource and immediately follows with content scope, ordering, and cost. Every clause carries information; nothing is 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 no output schema, the description does the work of characterizing the return: an ordered list of note and status-change entries. Combined with annotations that cover the safety profile, an agent has what it needs to call and interpret this correctly; only pagination/limit behavior is 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 100% — both projectId and prospectId are documented, including where to obtain each value (list_projects, list_link_prospects). The description adds nothing about the parameters, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (a prospect's activity log) and defines its exact contents: manually-typed notes plus auto-recorded status changes, newest first. That precision distinguishes it from list_link_prospects (which lists prospects themselves), add_link_prospect_note, and update_link_prospect_status without the agent needing to open 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?
Usage is only implied — an agent infers you call this when you need the history of a prospect. There is no explicit when-to-use, no statement of when another tool (e.g. list_link_prospects) is the better choice, and no prerequisites. The 'FREE (no credits)' note is a mild selection signal but is not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_link_prospectsARead-onlyIdempotentInspect
Link Building Tool: every prospect for a project, newest first, each enriched with a LIVE domain-authority read (never cached, never an invented score). FREE (no credits). White-hat scope: research + outreach assistance only.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
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 traits the annotations cannot: the domain-authority read is LIVE and never cached, scores are never fabricated, the call costs no credits, and the tool's scope is white-hat research/outreach only. That is meaningful context beyond 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?
A single front-loaded sentence with no filler; the ordering, enrichment, cost, and scope each earn their clause. Slightly dense with four colon-separated claims, 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?
For a one-parameter list tool with no output schema, the description tells the agent what comes back (prospects enriched with live DA) and in what order. Pagination is not addressed, though 'every prospect' implies a full return; otherwise 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 100%, so projectId is fully documented in the schema ('Required. The MisarSEO project ID... Get one from list_projects'). The description adds no parameter-level meaning, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope and ordering: 'every prospect for a project, newest first'. An agent can tell it apart from the write siblings (add_link_prospect, update_link_prospect) and the export sibling by the resource and read framing. It stops short of naming any alternative, so it's clear but not fully differentiated in prose.
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 implies the usage context (browse a project's prospect pool) and volunteers 'FREE (no credits)', which is a real selection signal against metered alternatives. However it never states when to use this over list_link_prospect_activity or export_link_prospects_csv, so the guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_patch_auto_publish_rulesARead-onlyIdempotentInspect
Patches: every issue type this project auto-publishes a freshly AI-drafted patch for, immediately on draft (capped at 20 auto-publishes per project per day). FREE (no credits), read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only profile, so the bar is lower, and the description still adds real behavioral context: the 20 auto-publishes per project per day cap, the fact that drafting triggers an immediate auto-publish, and that calls consume no credits.
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?
One dense sentence plus a short qualifier; the scope (which issue types are auto-published) is front-loaded and every clause adds information. The opening 'Patches:' fragment is slightly telegraphic but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only list tool with no output schema, the description conveys what each entry represents (an issue type auto-published on draft) plus the rate cap and cost, and annotations cover safety. Only the exact return shape is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a single required projectId documented in the schema (including how to obtain it), so the description rightly does not repeat parameter details. Baseline 3 applies since the schema carries full parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly which resource is returned: every issue type the project auto-publishes AI-drafted patches for. Combined with the name, the verb+resource pair is unambiguous, though it does not explicitly contrast itself with sibling list_patches or enable/disable_patch_auto_publish.
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 explicit when-to-use guidance or mention of alternatives such as enable_patch_auto_publish/disable_patch_auto_publish, which manage the very rules this tool reads. The 'FREE (no credits), read-only' note hints at cost considerations but is not usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_patchesARead-onlyIdempotentInspect
Patches: every title/metaDescription/canonical/redirect fix drafted for a project, newest first, one active row per (page, field). FREE (no credits), read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring read-only, idempotent, and non-destructive behavior, the description adds useful context: the call is FREE (no credits), results are newest first, and only one active row per page/field is returned. It does not describe pagination limits or auth requirements, but the annotation coverage lowers the burden.
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 sentence with zero filler. The resource and scope are front-loaded, and every clause — patch types, ordering, cardinality, cost, and read-only status — carries useful 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?
For a one-parameter read-only listing tool, the description covers the return shape, ordering, deduplication rule, and cost. The only notable gap is pagination or result-limit behavior, but that is minor given the schema and annotations already cover safety and input.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the sole projectId parameter is already fully documented in the schema, including where to obtain it. The description's phrase 'for a project' adds no syntax or meaning beyond the schema, so the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact resource (patches) and the specific subset returned: drafted title/metaDescription/canonical/redirect fixes for a project. It also states the ordering and uniqueness semantics, making it immediately distinguishable from mutation siblings such as draft_patch or publish_patch.
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 implies when to use it — to inspect patches already drafted for a project — but gives no explicit when-not guidance or named alternatives. It does not tell the agent whether to prefer this over list_patch_auto_publish_rules or how it relates to draft_patch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_portfoliosARead-onlyIdempotentInspect
Lists the caller organization's portfolios, each carrying projectCount. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive, and closed-world, so the safety profile is provided. The description adds context annotations cannot: that no external SEO provider is invoked, no credits are consumed, and each result carries `projectCount` — useful for an agent predicting cost and payload shape.
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 the resource, the returned field, and the cost profile front-loaded. Nothing is wasted and no sentence is redundant with the annotations or 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?
For a zero-parameter read tool with no output schema, the description supplies the essential return shape (`projectCount` per portfolio) and the cost model. It omits nothing an agent needs to invoke it, though a note on ordering or emptiness handling would have made it fully self-contained.
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, which is the baseline-4 case; nothing needs documenting and the description correctly implies an unfiltered list. No syntax or format detail is required here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (the caller organization's portfolios) and even names the payload field returned, `projectCount`. It does not explicitly contrast itself with the sibling `get_portfolio` (single-portfolio fetch), so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'FREE: database only, no SEO data provider is called and no credits are spent' line is a genuine decision signal for an agent weighing cost, but there is no explicit when-to-use versus when-not-to-use, and no alternative sibling is named. Usage is implied 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_projectsARead-onlyIdempotentInspect
Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a projectId for another MisarSEO tool. Returns {id, name, domain, url} per project; pass the id value as projectId. domain is null for a project that has never had one set, which is not a missing lookup — get_keyword_gap and get_link_intersect read the project's own domain from this record and refuse to run without it. Archived projects are not listed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 behavior they cannot express: it is free/no credits, it queries the database only, it excludes archived projects, and it warns that a null `domain` is a legitimate state rather than a failed lookup. That null-domain caveat prevents a real misdiagnosis.
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 ordered by importance: what it is, what it costs, when to call it, what comes back plus the gotchas. No filler, and the practical warning about `domain` is placed right where an agent would need it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-shape burden itself by listing {id, name, domain, url}, and it covers cost, scope, and downstream prerequisites. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero input parameters, so the schema imposes no burden and the baseline is 4. The description goes beyond parameters by documenting the returned field set and how to map `id` to `projectId`, but it doesn't need to do more here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Lists the active projects in the user's organization') and immediately scopes it ('Archived projects are not listed'), which distinguishes it from sibling listers like list_ahrefs_projects or list_portfolios. An agent knows exactly what this 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 states the trigger condition: 'Use this whenever you need a `projectId` for another MisarSEO tool,' and even names downstream consumers (get_keyword_gap, get_link_intersect) that depend on the record's `domain`. This is a when-to-use rule an agent can apply directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rank_annotationsARead-onlyIdempotentInspect
Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword or per-device: a deploy or algorithm change is a fact about the date, not about any one reading.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
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). The description adds genuinely new behavioral context beyond them: no external SEO data provider is called, no credits are spent, results are ordered oldest-first, and scope is config-level rather than per-keyword or per-device.
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 the core concept, then the cost profile, then the scope. Each sentence carries distinct information with no filler, though the opening 'Chart notes' phrasing is slightly idiomatic.
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 2-param read tool with no output schema, the description conveys what is returned (dated chart notes on a timeline), the ordering, and the scope. It is close to complete, though it does not describe the per-annotation fields (date, text, author) an agent might need when consuming the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both required params (projectId, configId) are documented in the schema with sourcing hints. The description reinforces that configId is the scoping unit via 'config-level, not per-keyword or per-device', but adds no syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource ('Chart notes on a rank tracker's own timeline') with concrete examples ('deployed new title tags', 'algorithm update') and an ordering rule ('oldest first'). It distinguishes itself from per-keyword/per-device siblings by declaring config-level scope, though it never names the add_rank_annotation/remove_rank_annotation siblings by name.
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 context is implied rather than stated: the FREE/no-credits note tells an agent this call is cheap and safe to make freely, and the config-level framing hints when it applies. But there is no explicit 'use this before/after X' or a named alternative, so an agent must infer when to reach for it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rank_cannibalisationARead-onlyIdempotentInspect
Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provider is called and no credits are spent. NOT the same detector as get_cannibalisation_report (Search Console-based), which finds two-or-more of the site's OWN pages splitting Search Console impressions for one query. A rank check records only the single best-ranking URL per keyword per run, so this can only tell you the winning page was not the one you intended — not that a second own page also appeared in the SERP.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, so the bar is low, yet the description adds substantial context: it is FREE (database-only, no provider call, no credits spent) and discloses a real detection limitation — a rank check records only the single best-ranking URL per keyword per run, so a second own page in the SERP cannot be seen. That is exactly the kind of operational caveat 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?
Front-loads the definition before the disambiguation and the caveat, and every sentence carries information (free/no-credits, sibling contrast, detection limitation). It is dense but not padded; only the SERP-caveat sentence is long relative to its weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers what is returned, its data source, its cost profile, and its accuracy limits, plus the alternative tool — everything needed to call and interpret it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (projectId, configId) are fully documented with acquisition paths in the schema, so the baseline of 3 applies. The description adds no parameter-level syntax or constraints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+condition: 'Tracked keywords whose latest ranking URL is not the target URL you declared for them.' It explicitly names the sibling it is NOT (get_cannibalisation_report) and points to the setup tool (set_rank_keyword_target_url), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance by contrasting this detector with the Search Console-based get_cannibalisation_report, and clarifies the underlying data source. The setup prerequisite (declared target URL via set_rank_keyword_target_url) is also named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rank_keyword_tagsARead-onlyIdempotentInspect
Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see how a tracker with hundreds of keywords is already organised. FREE: database only. No SEO data provider is called and no credits are spent, so it is safe to call as often as needed. The two lists mean different things and are deliberately separate. tagsInUse is what THIS tracker's keywords actually carry, and its keywordCount counts TRACKED keywords carrying the tag — not the saved-keyword count the same tag carries elsewhere, which would never match the rows it filters. It is empty for a tracker that has never used a tag. projectTags is the project's full vocabulary including tags unused here, so a tag can be reused rather than re-coined. The vocabulary is the project's EXISTING saved-keyword tags: one namespace shared with the saved-keyword list, not a second set.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
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 genuinely new behavioral context: it is free, calls no SEO data provider, spends no credits, and is safe to call repeatedly. It also discloses edge cases such as tagsInUse being empty for a tracker that never used a tag.
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 and the primary use case before the detailed return-semantics explanation. It is somewhat long for a two-parameter read tool, but most sentences earn their place by pre-empting the two-list confusion.
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?
There is no output schema, so the description must explain the return values, and it does: it defines tagsInUse, the precise meaning of its keywordCount, the empty case, and projectTags as the shared saved-keyword vocabulary. An agent has everything needed to call and interpret 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 100%, and both parameters carry their own discovery hints (get_rank_tracker, list_projects). The description adds no parameter-level syntax or format detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary.' It is immediately distinguishable from the mutation sibling update_rank_keyword_tag and from list_saved_keywords, so 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?
Gives explicit when-to-use guidance ('Use it to find tag IDs before calling update_rank_keyword_tag') and names the downstream alternative. It also describes the secondary use case ('see how a tracker with hundreds of keywords is already organised'), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rank_tracking_keywordsARead-onlyIdempotentInspect
Lists the keywords tracked by ONE rank tracker: { keywords, totalCount, page, pageSize }, each row { id, configId, keyword, searchVolume, keywordDifficulty, cpc, metricsFetchedAt, createdAt }. It returns NO positions and runs no check — read positions with get_rank_tracker. The row id is the tracking-keyword ID that remove_rank_tracking_keywords, update_rank_keyword_tag and set_rank_keyword_target_url take. FREE: database only.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number. Defaults to 1. | |
| configId | Yes | Rank tracker config ID. | |
| pageSize | No | Rows per page. Defaults to 50. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive, so the bar is lower; the description still adds return shape, the fact that no rank check is performed, and a cost signal ('FREE: database only'). It omits any note on error or pagination edge behavior, keeping it just 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?
Two dense sentences, front-loaded with the scope constraint, followed by the return shape, negative capability statement, id semantics and cost. No filler; 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 no output schema, the description compensates by naming the top-level return fields and per-row fields, and clarifies what is not returned. For a paginated read-only list tool this is complete enough to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description goes further by explaining the semantic role of the returned row 'id' (the tracking-keyword ID consumed by remove_rank_tracking_keywords, update_rank_keyword_tag and set_rank_keyword_target_url), which the schema does not convey.
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 ('Lists'), a tightly scoped resource ('keywords tracked by ONE rank tracker'), and explicitly disambiguates from the sibling get_rank_tracker by noting it returns no positions. An agent can distinguish this from the ~150 siblings 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 states the when-not ('returns NO positions and runs no check') and names the alternative tool to use instead ('read positions with get_rank_tracker'), plus identifies the three consumer tools that take the returned id. Routing guidance is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_report_definitionsARead-onlyIdempotentInspect
Lists a project's report definitions, each carrying widgetCount. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly/idempotent/non-destructive, so the bar is lower; the description still adds real value by disclosing that no SEO data provider is called and no credits are spent. It stops short of describing pagination or result 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?
Two short sentences, front-loaded with the action and payload detail, followed by the cost disclaimer. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers purpose, scope, cost behavior, and one returned field (widgetCount). Missing pagination/volume hints keep it just below 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 100% and the schema itself documents projectId as required and points to list_projects for obtaining one. The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (a project's report definitions), scoped to a project. It does not name the sibling it is distinguished from (get_report_definition for a single definition, render_report_definition for rendering), so differentiation is left to inference.
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 by the verb 'Lists' and the FREE/no-credits note signals a cheap discovery call, but there is no explicit when-to-use guidance or comparison against get_report_definition, render_report_definition, or set_report_widgets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_keywordsARead-onlyIdempotentInspect
Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own database, runs no provider lookup and charges no credits. Filter by keyword text with search; page through with page and limit (50, 100 or 250 rows per page — any other value is rounded down to one of those), ordered by sort/order. A metric is null when nothing has ever fetched it for that keyword — saving a keyword does not measure it. Null is not zero volume and not zero difficulty; run research_keywords to fill them. totalCount is how many keywords match the filter, and rows is only the current page of them, so report both.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number (default 1). | |
| sort | No | Sort column (default createdAt). | |
| limit | No | Maximum rows to return. Defaults to 100. | |
| order | No | Sort direction (default desc). | |
| search | No | Optional keyword text filter. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent, but the description adds material context beyond them: no credit charge, no provider lookup, limit values rounded down to 50/100/250, and critically that null metrics mean 'never fetched' rather than zero. It also warns that rows is only the current page while totalCount is the full match count.
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 what the tool does and the free/cached guarantee, then layers filters, pagination, null semantics, and result shape without a wasted sentence. Dense but every clause 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 no output schema, the description carries the return-shape burden and does it well, naming the fields (totalCount, rows, metric values) and explaining their meaning. Combined with the cost and caching disclosure, an agent can call this 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 100%, so the baseline is 3, but the description adds real value: the rounding behavior for out-of-range limit values, the semantics of a null metric, and the totalCount-vs-rows distinction that the schema does not express. It does not restate defaults, which the schema already covers.
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 ("Lists keywords saved to a project") and scopes exactly what is returned: cached metrics plus tags. It is clearly distinguishable from save_keywords and research_keywords, which appear as siblings and are referenced by name.
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 strong context for when the tool is the right one: it is free, reads the local database, and runs no provider lookup. It also routes the agent to research_keywords when metrics are null. It stops short of an explicit when-not statement or broader alternative comparison (e.g. vs list_rank_tracking_keywords).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tracked_promptsARead-onlyIdempotentInspect
Lists a project's tracked prompts — prompts re-run through explore_ai_prompt's real answer pipeline on a schedule and diffed against the previous check for mention/citation drops. FREE: database only, no credits spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the description's added value is the cost/credit profile and the fact that results come from a scheduled pipeline comparing against a previous check. That is genuine context beyond the annotations, though it says nothing about pagination or result volume for a list endpoint.
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 verb+resource, and both clauses earn their place — the em-dash definition and the cost note are each useful. Dense but not padded; the embedded definition slightly interrupts the core 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?
A read-only, single-parameter list tool with no output schema; the description conveys what the returned items represent and that querying them is free. Nothing an agent needs in order to call it correctly is missing, though return shape is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single required projectId is documented in the schema, including a pointer to list_projects. The description adds no additional parameter meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists) and resource (a project's tracked prompts) and then defines what a tracked prompt actually is — prompts re-run through explore_ai_prompt's answer pipeline and diffed against the prior check. That definition separates it from sibling list_* tools and from get_tracked_prompt_trend without needing 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 'FREE: database only, no credits spent' note gives a clear, decision-relevant reason to prefer this over the credit-consuming explore_ai_prompt, and the mention of the schedule/diff lineage frames the context. It stops short of an explicit 'use this when X, use Y when Z' routing statement, so it is not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_yandex_hostsARead-onlyIdempotentInspect
Every host the caller's connected Yandex Webmaster OAuth grant can access — the data source for picking which host to bind to a project (see set_yandex_host). Read-only and FREE (no credits). Check requiresReconnect before treating an empty hosts list as 'no hosts': true means the stored grant can no longer reach Yandex Webmaster.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful traits beyond the readOnly/idempotent/openWorld annotations: cost ('FREE (no credits)') and a subtle failure mode — interpreting an empty `hosts` list incorrectly unless `requiresReconnect` is checked. That turns a silent trap into actionable 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?
Three tight clauses ordered purpose → usage → edge case. No filler, and the most actionable warning (requiresReconnect) lands where an agent will read it before acting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description carries the return-value burden and does so by naming both `hosts` and `requiresReconnect`. Combined with the annotation-covered safety profile, 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 100% and the single parameter (projectId) is fully documented in the schema, including where to obtain it. The description adds nothing about the parameter, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('every host the caller's connected Yandex Webmaster OAuth grant can access') and immediately frames its role relative to a sibling (see set_yandex_host). An agent can distinguish it from get_yandex_site_overview, list_bing_sites, and other list_* tools 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?
Clearly signals the when: it is 'the data source for picking which host to bind to a project', pointing at set_yandex_host as the downstream consumer. It gives strong positive context but no explicit exclusion (e.g., when to reach for a different Yandex tool instead).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_analyzer_daily_summaryARead-onlyIdempotentInspect
Bot hit counts per (day, bot category, bot label, status code, content-type bucket) across every log upload in the date range — powers a time-series, status-code, or content-type view of bot traffic. Rows are { day, botCategory, botLabel, statusCode, contentType, hitCount }; botCategory is ai_crawler/search_engine/other_bot. Dates are ISO (YYYY-MM-DD), UTC. An empty result means nothing was measured in the range — no bot hits were recorded from the logs uploaded for those days, which is not the same as no bots visiting. FREE (no credits).
| Name | Required | Description | Default |
|---|---|---|---|
| sinceDay | Yes | Inclusive start day, ISO date, UTC. | |
| untilDay | Yes | Inclusive end day, ISO date, UTC. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety burden is lifted. The description adds genuinely useful context beyond that: the empty-result semantics ('nothing was measured' is not 'no bots visited'), the UTC day boundary, and the fact that the call is FREE/no credits. It stops short of stating limits such as max date range or row caps.
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 aggregation grain, then the row shape, then date semantics, then the empty-result caveat, then cost. Every sentence earns its place and no filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the full return-value burden and does so by specifying the exact row keys and types. Adding the empty-result interpretation closes the main ambiguity an agent would hit when reading zero rows. Complete for a 3-param read-only aggregation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% — all three params already document ISO format, UTC, and inclusivity. The description restates the ISO/UTC date convention but adds no new parameter-level meaning (e.g., max range, projectId sourcing is already in the schema via list_projects), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb+resource+granularity: bot hit counts per (day, bot category, bot label, status code, content-type bucket) across every log upload in the range. The explicit row shape and the enumerated botCategory values make it distinguishable from log_analyzer_top_paths (per-path) and log_analyzer_list_uploads (uploads) 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?
The phrase 'powers a time-series, status-code, or content-type view of bot traffic' implies intended use cases, and 'across every log upload' subtly signals it is not the per-upload listing tool. However, no sibling tool is named and there is no explicit when-to-use/when-not guidance against log_analyzer_top_paths or log_analyzer_list_uploads.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_analyzer_list_uploadsARead-onlyIdempotentInspect
A project's server-log uploads and their parse status — the Log File Analyzer / Bot Analytics feature. Each row is { id, fileName, sizeBytes, status, lineCount, parsedLineCount, skippedLineCount, errorMessage, createdAt, completedAt }. status is one of queued/parsing/completed/failed. lineCount/parsedLineCount/skippedLineCount are null until parsing completes — an absent count is not zero. FREE (no credits). Pair with log_analyzer_upload to add a log, log_analyzer_daily_summary / log_analyzer_top_paths for the report.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful context beyond annotations: it explains the semantics of null counts ('an absent count is not zero') and the status enum values, plus the FREE/no-credit cost signal. Annotations already cover readOnly/idempotent safety, so this adds real value. It stops short of covering pagination/order of results.
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 its scope, then the row shape, then status semantics, then sibling pairing. Efficient for the amount of information, though the embedded JSON row schema makes it dense.
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 1-param read tool with no output schema, the description covers the return shape, field semantics, status values, nullability, and cost. It omits ordering/pagination behavior, which a listing tool's caller would reasonably want to know, keeping it below a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single projectId parameter's description already tells the agent where to get a valid ID. The description adds no parameter-level detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('A project's server-log uploads and their parse status') and scopes it to the Log File Analyzer / Bot Analytics feature. Distinct from siblings, which have no other upload-listing tool. The return-row shape reinforces exactly what is listed.
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 names the sibling to pair with for adding a log (log_analyzer_upload) and which tools to use for reports (log_analyzer_daily_summary / log_analyzer_top_paths). Clear routing context, though it does not state when-not to use it (e.g., no exclusion of other log tools beyond the named siblings).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_analyzer_top_pathsARead-onlyIdempotentInspect
The paths bots hit most, per (bot category, bot label, path, status code) — the busiest-paths table of Bot Analytics. Rows are { botCategory, botLabel, path, statusCode, hitCount, lastSeenAt }, ordered by hitCount descending, capped at 200. Optionally filter to one bot category (ai_crawler/search_engine/other_bot). An empty result means nothing was measured — no bot path hits were recorded from uploaded logs. FREE (no credits).
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| botCategory | No | Filter to one bot category; omit for all. |
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 genuinely useful behavioral detail beyond them: row ordering (hitCount descending), a 200-row cap, empty-result semantics ('no bot path hits were recorded from uploaded logs'), and cost ('FREE, no credits'). It does not discuss pagination for the cap, 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?
Front-loaded with the core identity ('paths bots hit most') followed by row shape, ordering/cap, filter, and edge-case semantics. Every sentence earns its place with zero 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 no output schema, the description compensates by enumerating the returned row fields and ordering, plus the empty-result case and cost. Combined with annotations covering the safety profile, an agent has everything needed to call and interpret 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 100% with both parameters fully documented, so the schema does the heavy lifting. The description restates the botCategory enum values but adds no format, precedence, or interaction details beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: the paths bots hit most, grouped per (bot category, bot label, path, status code), explicitly framing it as 'the busiest-paths table of Bot Analytics.' An agent can distinguish this aggregation from sibling log_analyzer tools like daily_summary and list_uploads 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 gives implicit usage context ('busiest paths table,' optional botCategory filter) but never states when to choose this over log_analyzer_daily_summary or other log_analyzer siblings, nor any prerequisites beyond what the schema already carries. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_analyzer_uploadAInspect
Upload a server access log for background parsing (Log File Analyzer / Bot Analytics). Only Apache/Nginx Combined Log Format text is supported. Pass the raw log text in content; parsing runs in the background, so this returns once the upload is stored, before it is fully processed — poll log_analyzer_list_uploads for status. Requires the admin role. Plan-tier gated: the deployment's tier caps lines processed per upload and uploads per month. Practical limit: tool calls carrying megabytes of text are impractical — prefer the web UI for large logs. FREE (no credits).
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Raw Combined Log Format text, one line per request. | |
| fileName | Yes | The log file's name, e.g. 'access.log'. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give the generic non-readonly/non-destructive profile; the description adds the behavior that actually matters: parsing is asynchronous, the call returns once the upload is stored rather than processed, and status must be polled. It also discloses auth requirements and free-of-credits cost, none of which is in 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?
Dense but every sentence carries load-bearing information — format restriction, async return semantics, polling target, auth role, tier limits, practical size guidance, and cost — with the core action front-loaded in the first 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 write tool with no output schema and a fully covered input schema, the description supplies everything an agent needs to call it correctly: required role, accepted format, async semantics plus the follow-up tool to poll, and limits that affect whether to call it at all.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents content, fileName, and projectId. The description's format constraint ('Only Apache/Nginx Combined Log Format text') and 'Pass the raw log text in content' largely restate or extend what the schema's parameter descriptions already say, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Upload a server access log for background parsing') and names the feature family (Log File Analyzer / Bot Analytics), which cleanly separates it from log_analyzer_list_uploads, log_analyzer_daily_summary, and log_analyzer_top_paths.
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 covers when to use and when not: it directs the agent to poll log_analyzer_list_uploads for status, tells it to prefer the web UI for large logs, and states prerequisites (admin role, plan-tier caps on lines/upload and uploads/month). This is full when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publish_patchAIdempotentInspect
Patches: makes a drafted fix live — visible in the project's public manifest, which the embedded snippet (or, for redirects, an operator-deployed Worker) reads from the visitor's browser. The audited site's own origin content is never touched. FREE (no credits), but this is a MUTATION. Requires an org admin.
| Name | Required | Description | Default |
|---|---|---|---|
| patchId | Yes | The patch id, from list_patches or draft_patch. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly=false, idempotent=true, destructive=false), the description discloses the cost model (FREE, no credits), the auth requirement (org admin), the blast radius (public manifest consumed by visitor browsers), and a key reassurance that the audited origin is never modified. This is exactly the kind of mutation context an agent needs before calling a write 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?
The effect of the tool is front-loaded, and the sentences carry real information (mechanism, safety, cost, auth). The parenthetical about redirects and an operator-deployed Worker is a slight digression but still earns its place by clarifying where published content is read from.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema and safe-leaning annotations, the description covers effect, visibility scope, cost, and permissions. It does not state what the call returns or how to undo it, which would matter somewhat given the absence of an output schema, but the essential decision inputs are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema with their provenance (patchId from list_patches or draft_patch, projectId from list_projects). The description adds no parameter-level detail, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific state transition on a specific resource: a drafted fix becomes live and appears in the project's public manifest. It goes further than the name by explaining the delivery mechanism (embedded snippet / operator-deployed Worker reading from the visitor's browser) and clarifying that the site's origin content is untouched, which distinguishes it from any tool that edits the site 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?
It gives a clear precondition ('makes a drafted fix live', i.e. a draft must already exist, and 'Requires an org admin'), which tells the agent when this call is valid. It stops short of naming the siblings explicitly, so an agent must infer that draft_patch or batch_draft_patches must run first and that revert_patch undoes this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reindex_yandex_urlAInspect
Asks Yandex Webmaster to re-crawl one specific URL on a project's matched host. FREE (no credits), but this is a MUTATION — unlike get_yandex_site_overview, it queues real work on the operator's live Yandex Webmaster account and spends that account's daily recrawl quota. Bring-your-own-token: requires YANDEX_WEBMASTER_OAUTH_TOKEN. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_host' when the project's domain has no verified match on the account. Yandex's own documented failure cases — the URL already queued, or the account's recrawl quota already spent — surface as a normal tool error, not a 200 with ok:false.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL to re-crawl. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: it is a mutation that queues real work on a live third-party account and consumes that account's daily recrawl quota, it requires YANDEX_WEBMASTER_OAUTH_TOKEN, and it enumerates the two ok:false shapes (not_configured, no_matching_host) plus the cases that surface as hard errors (already queued, quota spent). Annotations (readOnlyHint=false, idempotentHint=false) are consistent with and enriched by this.
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, then cost, then side effects, then failure modes — a sensible priority order with no filler sentences. It is dense and runs long for a two-parameter tool, which keeps it just below the top mark.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the failure-response contract itself (ok:false reasons, and which failures raise errors instead), plus auth and quota prerequisites. Nothing an agent needs to call or interpret 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 100%, so the baseline is 3; the description adds meaning by constraining url to a host that must be verified-matched on the account, which the schema does not say. The projectId scoping instruction is already in the schema, so it earns partial rather than full credit.
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: 're-crawl one specific URL on a project's matched host' via Yandex Webmaster. It explicitly distinguishes itself from the read-only sibling get_yandex_site_overview and from the general crawl-submission family by naming the exact upstream system.
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 usage context: BYO-token requirement, cost profile (FREE, no credits), and the quota/account consequences that gate a call. It stops short of naming alternatives for the same job (submit_indexnow, submit_bing_content, submit_baidu_urls) or stating an explicit 'don't use if...' condition, so it is clear but not fully routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_competitor_monitorADestructiveIdempotentInspect
Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competitor removal, there is no separate archive kept.
| Name | Required | Description | Default |
|---|---|---|---|
| targetId | Yes | Monitored URL's target ID, from list_competitor_monitors or add_competitor_monitor. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes further and discloses the exact blast radius: historical snapshots and detected changes are deleted via cascading delete, with no archive retained. That is precisely the kind of consequence an agent needs before invoking a destructive 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?
Two sentences, zero filler. The action is front-loaded in the first clause and the destructive consequence plus the differentiation follow immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with no output schema, everything an agent needs is present: the action, the cascading data loss, and the contrast with rank tracking. Annotations carry the safety profile and the schema carries the parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (targetId, projectId) are documented with their sources, so the description does not need to explain them. It adds only the implicit 'one competitor URL' scoping, so the 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?
States a specific verb and resource ('Stops monitoring one competitor URL') and contrasts it with the rank-tracking equivalent, so an agent can distinguish it from add_competitor_monitor and list_competitor_monitors 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?
Usage is implied rather than stated: the tool is clearly the removal counterpart to add_competitor_monitor, and the rank-tracking contrast hints at the data-loss trade-off. However, it never explicitly says when to use this versus alternatives (e.g. delete_brand_monitor for brand monitors) or any preconditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_disavow_entryADestructiveIdempotentInspect
Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId existed.
| Name | Required | Description | Default |
|---|---|---|---|
| entryId | Yes | Entry id, from list_disavow_entries. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, idempotent=true, and openWorld=false, so the safety profile is covered. The description adds value the annotations do not carry: the call is FREE (no credits) and specifically that it succeeds whether or not the entryId existed, removing ambiguity about error 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?
A single compact line front-loads the category, the action, and the id source, then appends the two caveats (free, mutation) without waste. Every clause 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 2 required params, no output schema, and rich annotations, the description covers what an agent needs: what it removes, where the id comes from, cost, and the no-op success case. Minor gap: it does not say whether other entries are affected or how the file is persisted, but that is not required to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; both entryId and projectId are fully documented in the schema, including that entryId comes from list_disavow_entries and projectId from list_projects. The description's 'by id (from list_disavow_entries)' largely repeats the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (remove a disavow entry) and identifies the exact source of the identifier (list_disavow_entries), which distinguishes it from add_disavow_entry and list_disavow_entries among the disavow-family siblings. An agent can select it 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?
Provides clear operative context: it is the singular removal counterpart whose entryId comes from list_disavow_entries, and it notes the call is free though mutating. It stops short of an explicit when-not to use it (e.g. vs. bulk editing the disavow file), so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_link_prospectADestructiveIdempotentInspect
Link Building Tool: remove one prospect by id (from list_link_prospects), along with its activity log. FREE (no credits), but this is a MUTATION. Succeeds whether or not prospectId existed.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| prospectId | Yes | Prospect id, from list_link_prospects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description still adds genuine value by disclosing that the activity log is destroyed along with the prospect, that no credits are consumed, and that the call succeeds even for a non-existent id.
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?
One dense sentence that front-loads the action and scope, then adds cost and idempotency notes. Every clause earns its place, though the parenthetical id source and the pushed-together caveats make it slightly cramped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with full schema coverage and annotations carrying the safety profile, the description covers destruction scope, cost, and idempotency behavior adequately. A minor gap is the absence of guidance on when removal is the right action versus updating status.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are fully described there, including that projectId comes from list_projects and prospectId from list_link_prospects. The description merely repeats the prospectId provenance, adding no new format, constraint, or edge-case detail.
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 (remove) and resource (one link-building prospect) and clarifies the scope includes its activity log, which distinguishes it from update_link_prospect and remove_* siblings. An agent can tell exactly 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?
It points at list_link_prospects as the id source and notes the operation is free and a mutation, but gives no explicit when-to-use/when-not guidance relative to alternatives such as update_link_prospect_status or leaving the prospect in place. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_portfolio_projectsAIdempotentInspect
Removes projects from a portfolio. Succeeds whether or not an id was actually a member. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectIds | Yes | MisarSEO project IDs. Use list_projects to find them. | |
| portfolioId | Yes | Portfolio ID. Use list_portfolios to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false; the description concretizes idempotency ('succeeds whether or not an id was actually a member') and adds cost/behavioral context the annotations cannot express ('no SEO data provider is called and no credits are spent'). It does not describe partial-failure behavior for the array or any auth requirements, 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?
Three short sentences with zero filler, front-loading the action, then the idempotency behavior, then the cost profile. Nothing repeats the schema or 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?
With 2 required params, full schema coverage, and no output schema, the only real burden is behavioral explanation — idempotency and cost are both covered, and destructiveHint=false is consistent with the fact that projects themselves survive. Minor gap: no mention of how many ids can be processed (the maxItems=100 batch boundary) or of partial success 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 100% and the schema already documents both portfolioId and projectIds, including pointing to list_projects and list_portfolios. The description adds no syntax, limit, or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ('Removes projects from a portfolio'), which an agent can immediately distinguish from the sibling add_portfolio_projects and from delete_portfolio (which removes the whole portfolio). No schema inspection is needed to know 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?
It conveys two useful selection signals — that removal is tolerant of unknown ids and that the call is free — but never states when an agent should prefer this over alternatives such as delete_portfolio or add_portfolio_projects. Usage is implied rather than framed as guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_rank_annotationAIdempotentInspect
Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not id matched an existing note.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Note ID, from list_rank_annotations. | |
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=false, idempotentHint=true and openWorldHint=false, so the bar is lower; the description still adds two things not in the annotations: zero credit consumption / no provider call, and the outcome semantics that an unmatched `id` is not an error. It does not state permission requirements or whether the note is recoverable.
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 with zero filler; the operation is stated first, then cost, then edge-case behavior. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description covers the key return semantics (no error on unmatched id) plus cost behavior. For a simple 3-parameter removal whose IDs are documented in the schema, this is nearly complete; only auth/permission expectations are unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents projectId, configId and id (including where to obtain each). The description only adds tolerance semantics for `id` ('succeeds whether or not it matched'), which is implicit in idempotentHint, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a precise verb and resource ('Removes a chart note from a rank tracker's own timeline'), which is unambiguous against siblings such as add_rank_annotation and list_rank_annotations. The 'own timeline' qualifier scopes the resource so an agent cannot confuse it with rank keyword or tag removals.
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 'FREE: database only, no SEO data provider is called and no credits are spent' line gives real decision context (call it without cost concern), but no explicit when-not or named alternative is given. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_rank_tracking_keywordsADestructiveIdempotentInspect
Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snapshots are deliberately kept, so history survives. FREE: database only.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Rank tracker config ID. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| keywordIds | Yes | Tracking-keyword IDs to remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by explaining the partial nature of the destruction: keywords stop being checked while past position snapshots are deliberately retained, which is not derivable from destructiveHint/idempotentHint. The 'FREE: database only' note adds a cost signal, though it does not address reversibility of the removal itself or partial-failure behavior across many IDs.
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 key parameter, then the behavioral consequence, then the cost tier. No filler and nothing repeated from the title or 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?
For a 3-parameter mutation with no output schema and full annotation coverage, the description supplies the effect, the history-preservation guarantee, and the ID source. Minor gaps remain, such as the 1000-ID batch ceiling and handling of unknown/nonexistent IDs, but the essentials for correct invocation are present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds real meaning by tying keywordIds to list_rank_tracking_keywords as the authoritative source. It adds nothing further about projectId/configId scoping beyond what the schema already documents.
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 (Removes) and resource (keywords from a rank tracker), identifies the keying parameter (tracking-keyword IDs), and points to list_rank_tracking_keywords as the ID source, which cleanly separates it from add_rank_tracking_keywords and remove_rank_annotation.
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 by naming where the required IDs come from (list_rank_tracking_keywords) and noting the call is FREE/database-only, but it never states exclusions or an explicit alternative for the opposite operation (add_rank_tracking_keywords), so routing guidance is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_portfolioAIdempotentInspect
Renames a portfolio. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Portfolio name, 1-100 characters. | |
| portfolioId | Yes | Portfolio ID. Use list_portfolios to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context beyond that: the operation is database-only, calls no SEO data provider, and consumes no credits. It omits auth/permission requirements, but for a low-risk idempotent rename this is solid added value.
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 short sentences with the core action front-loaded and the cost/scope caveat immediately after. Every clause carries information; nothing is 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?
For a simple two-parameter rename with full schema coverage, no output schema, and annotations covering idempotency and destructiveness, the description supplies adequate context, including the useful cost/no-provider note. Only the absence of any prerequisite or error-condition guidance keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both portfolioId and name are documented, including the list_portfolios lookup hint and the 1-100 character bound), so the baseline is 3. The description adds nothing about the parameters themselves.
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 ('Renames a portfolio') in the first sentence, which is immediately distinguishable from create_portfolio, delete_portfolio, and get_portfolio. It does not explicitly name or contrast with any sibling, 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?
Usage is only implied: an agent infers this is for changing the name of an existing portfolio. There is no explicit when-to-use statement, no note about prerequisites such as owning the portfolio, and no pointer to list_portfolios (that routing hint lives in the schema, not the description).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rename_report_definitionAIdempotentInspect
Renames a report definition. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Report name, 1-100 characters. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context beyond the annotations: the operation is database-only, calls no SEO data provider, and spends no credits. It does not describe what happens on a name collision, but the cost transparency is real added value.
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: the purpose is front-loaded, followed by the cost scope. Nothing is redundant and 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 simple, non-destructive rename with a fully documented schema and no output schema, the description covers purpose and cost adequately. It could mention behavior on duplicate names, but otherwise nothing essential to calling 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 100%, so the schema already documents all three parameters (including where to source projectId and reportDefinitionId). The description adds no parameter-level detail, making the baseline 3 appropriate when the schema carries the full burden.
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 ('Renames a report definition'), which is unambiguous against the many sibling report tools (create/delete/get/render/list_report_definitions). It does not explicitly call out what separates it from those siblings, but the verb+resource is clear enough for an agent to select it.
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 'FREE' note gives practical context for when this call is cheap to make versus credit-spending render/report tools, which is implied usage guidance. However, it names no explicit alternative, prerequisite, or when-not condition, so the agent must infer the usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_report_definitionARead-onlyIdempotentInspect
Renders a report definition — fetches ONLY its selected widgets, not a fixed set. FREE: every widget is a local Postgres read, no upstream call, so this never spends a paid-provider credit or a live Search Console quota unit. rank_volatility and share_of_voice read the project's FIRST active rank tracker only; rank_movers sums across every active tracker.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| periodDays | No | 7, 28 or 90 days. Defaults to 28. | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, yet the description adds substantial context beyond them: every widget is a local Postgres read with no upstream call, no paid-provider credit or live Search Console quota is consumed, and it documents tracker-scope semantics (rank_volatility/share_of_voice read only the first active tracker; rank_movers sums across all). This is exactly the kind of non-obvious behavior 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?
Front-loads the core purpose, then layers cost and tracker-scope constraints in dense, non-redundant sentences. Nothing is padding — every clause conveys a distinct behavioral fact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only render tool with full schema coverage and complete annotations, the description covers safety, cost, and rendering scope well. It does not describe the return shape, but with no output schema and readOnly annotations that omission is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter (projectId, periodDays, reportDefinitionId) is fully documented in the schema, so baseline 3 applies. The description adds no parameter-level syntax or format detail; its widget notes concern report content, not the inputs.
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 ('Renders a report definition') and immediately clarifies scope: it fetches only the definition's selected widgets rather than a fixed set. This distinguishes it in spirit from get_report_definition (config retrieval) and list_report_definitions, though it does not name those siblings explicitly.
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 FREE/cost note implicitly signals 'safe to call freely,' but there is no explicit when-to-use guidance or comparison against the obvious alternatives (get_report_definition for config, list_report_definitions for IDs). Usage must be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_gbp_reviewADestructiveIdempotentInspect
Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Publishes immediately; there is no draft/preview step.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | ||
| reviewId | Yes | ||
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and non-readonly, but the description adds crucial context beyond the structured fields: it explicitly states that the endpoint has no separate create/update, that the call always overwrites, and that there is no draft/preview step. These are exactly the kinds of behavioral traits an agent needs to avoid accidental data loss.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the core action and the critical overwrite/immediacy warnings. No words are 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?
For a 3-parameter mutation tool with no output schema and partial schema coverage, the description covers the essential behavioral risks (overwrite, no preview) and points to a prerequisite tool for the reviewId. Nothing critical is missing for an agent 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 description coverage is only 33%, with only projectId documented in the schema. The description confirms that reviewId must come from get_gbp_reviews, which is helpful for that parameter, but it says nothing about the 'comment' parameter (e.g., formatting, limits beyond the schema maxLength) or the projectId scoping requirement. Baseline for low coverage would be lower, but the reviewId source is a valuable addition.
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+resource ('Reply to one review'), identifies the identifier source ('by reviewId from get_gbp_reviews'), and distinguishes it from the sibling delete_gbp_review_reply and get_gbp_reviews by describing its create/update operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context for when to use this call — replying to a single review — and warns that there is no draft/preview step, which implicitly steers agents to use it only for immediate publishing. However, it does not explicitly name alternatives like get_gbp_reviews or delete_gbp_review_reply as prerequisites or follow-ups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_ai_promptsARead-onlyIdempotentInspect
Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals from this project's own already-tracked prompts. This is NOT prompt search volume — no honest corpus of 'how many people ask this' exists anywhere this codebase can reach, so no volume or difficulty number is invented. FREE: no AI-gateway budget, no paid-plan gate, no credits spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| seedTopic | Yes | Topic to derive trackable prompt candidates from. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations (readOnlyHint, idempotentHint, openWorldHint, non-destructive) by disclosing what the tool does not do: no volume or difficulty numbers are invented, no AI-gateway budget or credits are spent, and it draws on this project's own tracked prompts for mention-rate signals. The output shape (autocomplete completions reframed as questions) is also disclosed. This is useful extra behavioral context, though it does not cover pagination or result 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?
Information is front-loaded with the core purpose first, which is good. However, the description spends roughly half its length on defensive disclaimers about what is not provided, which reads as verbose for what could be stated more compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only research tool with full schema coverage, no output schema, and clear annotations, the description supplies enough context to call it correctly. The main missing pieces are any statement about the volume or form of results returned and how they relate to already-tracked prompts, which the description only gestures at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters with their meanings and the languageCode default behavior. The description adds no parameter-specific syntax or format detail beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: turns a seed topic into candidate prompts for tracking, sourced from real Google/Bing autocomplete completions. Distinguishes itself from siblings implicitly by explicitly disclaiming search volume and framing the output as prompt candidates. It is clear enough to tell apart from research_keywords and explore_ai_prompt, though it never names those alternatives directly.
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?
Implies when to use it: to find prompt candidates worth tracking from a seed topic. But it never states when to prefer it over siblings like explore_ai_prompt or research_keywords, nor prerequisites such as needing an existing project. Usage context is inferable rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
research_keywordsAInspect
Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns results, one entry per seed with ok — a single bad seed won't fail the batch. CHARGES CREDITS ON THE PAID DATA PROVIDER: per seed, ~30-100 credits each depending on the source, or a flat ~96 for countries served from Google Ads data (where difficulty and intent are unavailable). On the default free provider the sources are autocomplete plus the operator's own Keyword Planner account and NOTHING IS CHARGED — but volume/CPC/competition are null unless the operator configured a Keyword Planner, and null there means not measured, never zero demand. Keyword difficulty is derived for the SEED keyword only — every other returned row has a null difficulty because it was never scored, not because it is easy. Each seed returns rowCount (every row found) but only topRows, the first 20, are included in the response; say 20 when reporting what you actually saw, and use list_saved_keywords or the dashboard for the rest.
| Name | Required | Description | Default |
|---|---|---|---|
| seeds | Yes | 1-5 seed keywords. Each seed is researched independently and returns related keywords with volume/difficulty/CPC. Bulk-friendly — prefer this over multiple single-seed calls. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| resultLimit | No | Cap on the data provider's own rows per seed. Defaults to 150. It is NOT a cap on `rowCount`: free Google Suggest ideas are appended after the cap is applied, so a seed can legitimately report more rows than this number. | |
| includeClickstreamData | No | Refine search volumes with clickstream data, which disaggregates Google Ads' grouped close-variant volumes (plurals/misspellings). On the paid DataForSEO provider this DOUBLES the credit cost of each seed. Default false (standard Google-Ads-derived volumes). Ignored — no cost, no effect — for countries served from Google Ads data, and on the free data provider, whose autocomplete + Keyword Planner sources have no clickstream refinement at all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Substantially exceeds what annotations provide. Annotations only flag non-readOnly, openWorld, non-idempotent; the description discloses per-seed credit cost (~30-100, flat ~96 for Google-Ads-served countries), that the default free provider charges nothing, that includeClickstreamData doubles cost, that the paid path is chargeable, and that null volume/CPC/difficulty mean 'not measured,' never zero demand or easy difficulty. This is exactly the extra behavioral context an agent needs before spending credits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but information-dense and front-loaded with the core purpose, then cost/behavior. Nearly every clause earns its place (credit model, null semantics, topRows vs rowCount). It is slightly dense and could be split for readability, which keeps it off 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?
For a 4-param, no-output-schema tool with real billing consequences, the description names the returned fields (`results`, per-seed `ok`, `rowCount`, `topRows`), explains truncation (only first 20 rows returned), and covers cost/null semantics. Nothing an agent needs to call it correctly and report honestly 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 100%, so the 3-baseline applies, but the description adds cross-parameter meaning beyond the schema: seeds are researched independently with a per-seed `ok` so one bad seed won't fail the batch, `resultLimit` is 'NOT a cap on rowCount' (free Suggest ideas appended after the cap), and difficulty is derived for the seed only. This clarifies interaction between parameters and results that the schema alone does not.
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 precise scope: 'Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed.' An agent immediately knows what it produces. It does not, however, explicitly distinguish itself from other keyword-research siblings like get_bing_keyword_research or get_topic_research; the only sibling named (list_saved_keywords) is a follow-up for the untruncated rows.
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 usage context: 'Bulk-friendly — prefer this over multiple single-seed calls' and 'use list_saved_keywords or the dashboard for the rest.' This tells the agent when to pick this over a per-seed pattern. It stops short of explicit when-not guidance or contrasting with competing keyword-research tools, so it is clear context rather than full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
revert_patchAIdempotentInspect
Patches: stops serving a published fix — instant, since publishing only ever controlled visibility in the public manifest, never the audited site's own origin content. FREE (no credits), but this is a MUTATION. Requires an org admin.
| Name | Required | Description | Default |
|---|---|---|---|
| patchId | Yes | The patch id, from list_patches. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains that reverting is instant because publishing only controlled visibility in the public manifest and never touched the audited site's origin content, flags it as a MUTATION, notes it is FREE with no credit cost, and states the org-admin requirement. That clarifies why destructiveHint=false even though this is a write operation — exactly the context an agent needs before invoking.
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 the effect and then the cost/auth facts. The leading 'Patches:' namespace label and the long em-dash parenthetical are marginally wasteful but carry real meaning about instant/non-destructive behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema and full schema coverage, the description supplies everything material: effect, reversibility semantics, cost, and permission requirement. 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 100%, and both patchId and projectId are documented in the schema with provenance pointers (list_patches, list_projects). The description adds nothing about the parameters, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'stops serving a published fix' for patches, which is precise about the effect rather than just restating the name. It does not name the sibling it undoes (publish_patch) or distinguish itself from draft_patch/batch_draft_patches by name, so an agent gets the concept but not the routing.
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 context is implied — undo a published fix — and it states a prerequisite (org admin) and cost (FREE). It never says when to use this instead of publish_patch or the auto-publish disable tools, and offers no 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_brand_radar_scanAInspect
Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free-tier organization gets a plan-locked error, not an empty result — and CONSUMES ONE of the organization's monthly Brand Radar scan allowance PLUS one shared AI-gateway operation, both charged BEFORE the scan runs. The allowance is spent when the scan is ACCEPTED, before any answer exists — every call submits a new scan, so ask before re-running one. The scan runs on a background queue: this tool waits up to ~45 seconds for it and returns the result when it completes; if it is still running it returns the jobId instead — collect the result with get_brand_radar_scan_status (free to poll) rather than calling this tool again, which would spend another scan. Mentions and AI search volumes are nullable: a null is 'not reported by the platform', never 0.
| Name | Required | Description | Default |
|---|---|---|---|
| brand | Yes | Brand, domain, or product name to scan. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| competitors | No | Up to 5 competitor brands/domains to compare Share of Voice against. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (readOnly=false, idempotent=false) by disclosing that the allowance is charged BEFORE the scan runs and is spent on acceptance, that the call blocks ~45s before returning a jobId, and that null means 'not reported', never 0. This is exactly the cost/idempotency behavior 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?
Long but every sentence carries load-bearing information: plan gating, cost timing, async behavior, and null semantics. The purpose is front-loaded and the warnings follow in priority order without 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 no output schema, the description carries the return-value burden and does so: it explains the blocking-vs-jobId outcome, points to the polling tool, and clarifies null semantics. Nothing an agent needs to call and interpret this tool 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 100%, so the schema already documents brand, projectId, competitors, languageCode, and locationCode. The description adds no additional parameter-level syntax or semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources') with concrete scope. It clearly differentiates from siblings by naming get_brand_radar_scan_status as the polling alternative. An agent knows exactly what this tool 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?
Explicit when/when-not: requires a paid plan (free tier yields a plan-locked error, not empty), asks the agent to confirm before re-running, and directs collection of async results to get_brand_radar_scan_status instead of calling again. Alternatives and exclusions 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.
run_local_nap_auditARead-onlyIdempotentInspect
Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE open source, not a multi-directory citation crawl (a multi-directory crawl needs licensed directory-API access this deployment does not have). A found field with no value is reported notComparable, never scored as a mismatch. overallScore on each match is a mean of comparable-field similarities (0-1), null when nothing was comparable.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Claimed business name. | |
| phone | Yes | Claimed phone number, any format. | |
| address | Yes | Claimed address, any format. | |
| latitude | Yes | ||
| radiusKm | Yes | Search radius around the claimed location, in km. | |
| longitude | Yes | ||
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, openWorld). The description adds real behavioral context beyond them: no-value fields are reported as notComparable rather than mismatches, and overallScore is a mean of comparable-field similarities, null when nothing is comparable. It doesn't describe rate limits, pagination, or the full result shape.
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 front-loaded sentences, each doing work: purpose, scope caveat, comparison semantics, score semantics. The parenthetical on licensed directory-API access is slightly verbose but justifies the PARTIAL claim rather than 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?
With no output schema, the description carries the return-value burden and does explain the two most decision-relevant output concepts (notComparable handling, overallScore definition and null case). It's a seven-required-parameter, read-only tool, so the remaining gap is only the surrounding match/list structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, so most parameters (projectId, radiusKm, field lengths/ranges) are documented in the schema itself. The description restates the claimed name/address/phone inputs and the 'near the claimed location' idea but adds no format, unit, or boundary guidance beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: compare claimed NAP against OpenStreetMap listings near a location. It also delimits scope against the sibling search_local_businesses / directory-crawl family by explicitly naming what it is not (a multi-directory citation crawl).
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 frames the tool's context (single open-source check with radius around a claimed location) and warns that a full multi-directory audit is out of reach in this deployment, which helps an agent avoid over-trusting results. It stops short of naming an alternative tool or the precise condition under which an agent should prefer one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_local_pack_rank_checkAInspect
Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns "found" with a real 1-based position, "not_found" (parsed cleanly, business absent), or "unavailable" (scraper disabled, blocked, or unparsable) — never a fabricated position. Fails with SEO_DATA_UNAVAILABLE where the deployment has not enabled the scraper. Tightly rate limited, so do not loop it.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Config ID, from the matching get_* tool called without configId. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by enumerating the three return states (found with 1-based position, not_found, unavailable) and guaranteeing no fabricated positions, plus the SEO_DATA_UNAVAILABLE failure mode and rate-limit constraint. This is exactly the kind of behavioral detail an agent needs before invoking a non-idempotent, open-world scrape.
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 layers return semantics, failure mode, and the rate-limit warning without a wasted clause. Dense but 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 no output schema, the description carries the return-value contract itself, covering all three outcomes and the error case, so an agent can interpret results correctly. Nothing essential is missing for calling or parsing this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both configId and projectId are already documented with their provenance (get_* tools, list_projects). The description adds no parameter-level detail, which is acceptable given the schema does the work.
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 (runs) plus resource (live local pack rank check) and immediately scopes it as a real-time scrape of Google's public results, explicitly not the paid Places API. This distinguishes it clearly from retrieval siblings like get_local_pack_rank.
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 triggering context (run a check now) and an explicit exclusion ('do not loop it' due to tight rate limits), plus the failure condition SEO_DATA_UNAVAILABLE when the scraper is disabled. It stops short of naming a specific alternative sibling to use instead, so it is not a full when/when-not routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_local_rank_gridAInspect
Runs a geo-grid rank check now — up to 9 live SERP calls plus up to 9 reverse-geocode calls. Reports ORGANIC rank at each grid point, never local-pack position. Fails with SEO_DATA_UNAVAILABLE where the SERP provider cannot override location per point. Tightly rate limited, so do not loop it.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Config ID, from the matching get_* tool called without configId. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: quantifies the work (up to 9 live SERP calls plus 9 reverse-geocode calls), warns about tight rate limiting, and names the exact failure mode (SEO_DATA_UNAVAILABLE where the provider cannot override location per point). Annotations already cover the safety profile (non-read-only, non-idempotent, open-world), so this added cost/limit/error detail is genuine extra value.
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 does, then the output semantics, then the failure mode and rate-limit warning. No filler and no repetition of the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does carry the key return semantics (organic rank per grid point) and the failure mode. It stops short of saying whether the run persists results for later retrieval via get_local_rank_grid, and gives no sense of the response shape or grid size, which an agent planning a follow-up call would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented there, including the provenance of configId and projectId. The description adds no syntax, format, or constraint information about the parameters, so the baseline of 3 is correct.
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 ('Runs a geo-grid rank check now') and pins down the exact semantics of the output: organic rank at each grid point, never local-pack position. That distinction cleanly separates it from run_local_pack_rank_check and from the read-side get_local_rank_grid without the agent needing to open 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 an explicit when-not instruction ('Tightly rate limited, so do not loop it') and 'now' implies immediate execution rather than retrieving stored history. It never names the alternatives it competes with (get_local_rank_grid for stored results, create_local_rank_grid_config for setup), so the routing is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_bing_crawl_settingsAIdempotentInspect
SaveCrawlSettings: overwrites a project's matched Bing site's crawl-rate/AJAX-crawling config. FREE (no credits), but this is a MUTATION — unlike get_bing_site_overview's GetCrawlSettings read, it writes to the operator's live Bing Webmaster account. crawlRate must have exactly 24 hourly values, per Bing's own documented CrawlSettings JSON sample. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| crawlRate | Yes | Exactly 24 hourly crawl-rate values, one per hour of the day. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| ajaxEnabled | Yes | Whether Bing should crawl AJAX content on this site. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, openWorldHint=true, destructiveHint=false. The description goes further: it discloses the full-overwrite nature, that the call is FREE (no credits), that it writes to the operator's live Bing Webmaster account, and gives concrete error contract ({ ok:false, reason:'not_configured' | 'no_matching_site' }). This is substantial added behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and scope, followed by the mutation/free/key caveats, then the error contract. Dense but every sentence carries information; slightly long 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?
No output schema exists, and the description compensates by specifying the error response shape and the credential/site-match preconditions. An agent has everything needed to invoke it correctly and interpret failure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already well documented (crawlRate min/max 24 with its own description, projectId, ajaxEnabled). The description reinforces the 24-hourly-values rule and cites Bing's CrawlSettings JSON sample, which adds framing but no syntax the schema lacks. 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?
States a specific verb (overwrites/saves) and resource (the project's matched Bing site's crawl-rate/AJAX-crawling config), and explicitly names the read counterpart get_bing_site_overview's GetCrawlSettings. An agent can distinguish it from the read sibling 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?
Clearly frames the tool as a mutation vs. the read alternative, and states preconditions (BYO BING_WEBMASTER_API_KEY, requires a verified site match). It stops short of explicit when-to-use/when-not phrasing, but the context for selecting it is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_keywordsAIdempotentInspect
Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are provided, missing tags may be created. Tags are appended to whatever tags a keyword already carries. Ask the user for confirmation before applying or replacing tags broadly. Keywords are normalised and de-duplicated before they are written, so savedCount is the number of DISTINCT keywords now saved by this call — it can be lower than the number of entries submitted, and that is the figure to report. Saving does not fetch metrics: a keyword saved here has null volume/difficulty/CPC until research_keywords has run for it.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | Optional tags to attach to every saved keyword. Ask the user for explicit confirmation before using this, especially when saving many keywords or creating new tag names. | |
| keywords | Yes | Keywords to save (1-100). | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| languageCode | No | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. | |
| locationCode | No | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some countries (e.g. Iceland, 2352) are served from Google Ads data: keyword volume/CPC/trends work, but keyword difficulty, search intent, and domain analytics are unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only declare idempotent/non-destructive). It discloses that the call is free, that re-saving is a no-op, that missing tags may be created and appended rather than replaced, and that saving does not fetch metrics (null volume/difficulty/CPC). This is exactly the extra behavioral context 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?
Front-loads the core purpose and cost, then layers behavior (idempotency, tags, dedup, metrics) in compact sentences. Despite being several sentences, every one carries distinct, non-redundant information that 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?
For a 5-param mutation tool with no output schema, the description is complete: it covers cost, idempotency, tag side effects, the savedCount return semantic, and the metrics gap. Defaults for languageCode/locationCode are handled by the schema, so nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline is 3, but the description adds genuine meaning beyond the schema: it explains tag append-vs-replace behavior, and clarifies that savedCount reflects DISTINCT normalized/de-duplicated keywords rather than entries submitted, which directly disambiguates the 'keywords' parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource in the first sentence: 'Save keywords to a project's saved-keywords list.' It clearly distinguishes itself from siblings like list_saved_keywords and research_keywords by describing the write-to-saved-list operation, and the metric caveat further separates it from research_keywords.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: free/credit-free saves, ask user confirmation before applying or replacing tags broadly, and an implicit when-not signal via 'until research_keywords has run for it' for metric data. It stops short of explicitly naming alternatives for keyword-research workflows, but the conditions are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_local_businessesAInspect
Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. CHARGES CREDITS ONLY WHEN APIFY IS CONFIGURED AND ITS SHARED MONTHLY BUDGET HAS ROOM: results then come from a real, independently-run scrape of Google Places (dataSource: "apify_google_places") — real ratings, since OpenStreetMap never has one. Otherwise (Apify unconfigured, over budget, or the actor call failed) NOTHING IS CHARGED and this falls back automatically to OpenStreetMap (Overpass, then Nominatim) — real point-of-interest data, no key (dataSource: "openstreetmap") — whose coverage is uneven and carries none of a commercial directory's ranking, review or category metadata. Do not present an OpenStreetMap result set as the complete set of businesses in the area; the response's own dataSource field on each row says which source actually answered it, never assume. categories values are common category names (e.g. 'restaurant', 'dentist'); OpenStreetMap matches them on a best-effort basis, so a category that returns nothing on that path may simply be unmapped there rather than absent from the area — an empty result is not measured coverage of the area, and a listing's missing rating or review count is likewise not measured, never zero.
| Name | Required | Description | Default |
|---|---|---|---|
| near | Yes | Coordinate and radius to search around. | |
| limit | No | Maximum businesses to return (1-50). Defaults to 20. | |
| query | No | Business name or title text to match. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| categories | No | Business categories to filter by (e.g. 'pizza_restaurant'). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses credit-charging conditions, the Apify-vs-OpenStreetMap fallback chain, the dataSource discriminator on each row, and the caveat that empty results or missing ratings are not measured coverage. This is exactly the behavioral context the readOnly/openWorld hints 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?
Front-loaded with purpose, then routing, then cost/fallback semantics. Dense but each sentence carries distinct information; the all-caps emphasis is heavy but the content is not padded. Slightly long, keeping it just short of 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?
For a 5-param, nested-schema tool with no output schema, the description covers sourcing, cost, fallback behavior, and result interpretation. An agent has everything needed to call it and to report its output honestly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real semantic value: categories are 'common category names' matched best-effort on OSM, and an empty category result may mean unmapped rather than absent. It meaningfully enriches how categories results should be read, though it does not touch query/limit/near beyond what the schema says.
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 ('Searches local business listings near a coordinate') and explicitly scopes out siblings: 'it does not run Maps rank checks or Q&A', naming the boundary with get_local_pack_rank and get_google_business_questions. An agent can distinguish it from other search tools 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 when-to-use ('find local business candidates or nearby competitors') and when-not ('does not run Maps rank checks or Q&A'), plus how the result should be interpreted (never present OSM as the complete set). Routing guidance is fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ahrefs_projectAIdempotentInspect
Bind (or repoint) ONE of a project's two independent Ahrefs project types — projectType selects rank_tracker or site_audit. ahrefsProjectId is re-validated against the caller's LIVE project list on every call — fails if the project fell out of the connected account's access since it was last listed via list_ahrefs_projects.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| projectType | Yes | Which of the two independent Ahrefs project types to bind. | |
| ahrefsProjectId | Yes | Ahrefs' own project id, taken verbatim from list_ahrefs_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly=false, idempotent=true, destructive=false, openWorld=true), so the bar is lower. The description still adds real behavioral value: the ahrefsProjectId is re-validated against the caller's LIVE project list every call and fails if access was revoked, which is non-obvious failure behavior not in 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 front-loaded sentences with no filler; the binding action and projectType selection come first, then the validation caveat. Formatting with backticks and em-dashes is slightly dense but every clause carries weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-param setter with no output schema, the description covers the action, the enum selection, and the key failure mode. It leaves return value and idempotency to the annotations, which is acceptable, though a note on what a successful bind changes would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema descriptions already state that projectType picks between the two independent Ahrefs types and that ahrefsProjectId comes verbatim from list_ahrefs_projects. The prose largely restates this, so the baseline 3 applies with little added 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 (bind/repoint) and resource (an Ahrefs project of one of two project types), and makes the scope explicit via the projectType enum values rank_tracker/site_audit. An agent can distinguish this from list_ahrefs_projects and disconnect_ahrefs 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?
Clearly signals when to use it (bind or repoint an Ahrefs project) and names list_ahrefs_projects as the source of valid IDs. It doesn't explicitly state when NOT to use it or contrast with disconnect_ahrefs, so it's clear context rather than full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_baidu_connectionAIdempotentInspect
Set (or replace) a project's Baidu Webmaster site + push token. Baidu exposes no API to list or verify sites on an account, unlike Bing's GetUserSites — this stores the pair as given, with no live re-validation against Baidu. Requires the operator/user to have already verified the site on ziyuan.baidu.com and minted a push token there (Resource Submission -> Standard Inclusion -> API Submission).
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The site-specific push token minted on ziyuan.baidu.com AFTER completing Baidu's own site-ownership verification there — a real, external, one-time setup step this tool cannot automate. | |
| siteUrl | Yes | Baidu's own `site` value, taken verbatim from ziyuan.baidu.com. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive, closed-world. The description adds genuinely new behavioral context: the pair is stored as given with NO live re-validation against Baidu, and 'replace' semantics for an existing connection. That is useful beyond the annotations, though it doesn't discuss permissions, errors, or what happens on token mismatch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the action, then the key behavioral caveat, then the prerequisite. The Bing comparison is a slight detour but earns its place by explaining why no validation occurs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation tool with no output schema and annotations covering the safety profile, the description supplies the missing pieces: prerequisite external setup, no-verification behavior, and replace semantics. Nothing an agent needs to call it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema (including the external-minting prerequisite for token and the verbatim site value). The description's 'site + push token' framing adds little beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource+scope: 'Set (or replace) a project's Baidu Webmaster site + push token.' It also differentiates from the Bing analogue by name ('unlike Bing's GetUserSites') and from siblings like get_baidu_connection/submit_baidu_urls, which are read/submit rather than connection setup.
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 explicit precondition: the site must already be verified on ziyuan.baidu.com and a push token minted there (Resource Submission -> Standard Inclusion -> API Submission). It does not name a sibling alternative for the case where a connection already exists, but the setup ordering and prerequisites are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_bing_siteAIdempotentInspect
Link (or repoint) a project's Bing Webmaster site. siteUrl is re-validated against the caller's LIVE site list on every call — fails if the site fell out of the connected account's access since it was last listed via list_bing_sites.
| Name | Required | Description | Default |
|---|---|---|---|
| siteUrl | Yes | Bing's own site URL string, taken verbatim from list_bing_sites. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true). The description adds genuinely new behavior: the siteUrl is re-validated against the caller's LIVE Bing site list on every call and fails if access was revoked. It does not describe what happens to a prior link beyond 'repoint', which the idempotent hint partially covers.
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 tightly written sentences, zero filler, and the key constraint (live re-validation / failure mode) is front-loaded rather than 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?
For a two-parameter mutation tool with full annotation coverage and no output schema, the description covers the critical risk (stale or revoked site URL) and the source of valid input. Only the outcome of repointing an already-linked site is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented (siteUrl's provenance, projectId's source). The description reinforces the verbatim-from-list_bing_sites constraint and adds the live re-validation rule, but adds little beyond what the schema states. 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?
States a specific verb and resource ('Link (or repoint) a project's Bing Webmaster site'), including the repoint/overwrite nuance. Easily distinguished from siblings like list_bing_sites, disconnect_bing, and save_bing_crawl_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Tells the agent where the required siteUrl value must come from (list_bing_sites) and warns that the value is re-validated against the live site list, so stale values fail. There is no explicit when-not-to-use guidance, but the context for correct invocation is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ga4_propertyAIdempotentInspect
Link (or repoint) a project's Google Analytics property. propertyId is re-validated against the caller's LIVE property list on every call — fails if the property fell out of the connected account's access since it was last listed via list_ga4_properties.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| propertyId | Yes | Bare numeric GA4 property id (no 'properties/' prefix), taken verbatim from list_ga4_properties. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false/idempotent=true/destructive=false, and the description adds genuinely new behavior: propertyId is re-validated against the caller's LIVE property list on every call and fails if access lapsed. That failure mode is real operational context beyond the annotations, though permission/auth details and the effect on any prior binding are not stated.
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, zero waste, with the action front-loaded and the validation caveat second. The em-dash clause is dense 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?
For a mutation tool with no output schema, the description covers the failure condition and the required id provenance, which is the main risk. It stops short of describing the success response or what happens to a previously linked property, a minor gap given annotations cover safety and idempotency.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not: propertyId is validated live rather than trusted as a stored value. It reinforces 'bare numeric id from list_ga4_properties' but adds no format detail beyond the schema's own note.
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 ('Link (or repoint) a project's Google Analytics property') with clear scope. The parallel sibling set_ahrefs_project/set_bing_site makes the target resource distinguishable at a glance, and '(or repoint)' signals the update-on-existing-binding case.
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 implies the workflow by naming list_ga4_properties as the source of propertyId and list... but never states when to prefer this over disconnect_ga4 or when not to call it. Usage is inferable from the prerequisite, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_gbp_connectionAIdempotentInspect
Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Google's own resource names (e.g. "accounts/123", "locations/456"), not free text. Repointing replaces the existing link.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| googleAccountId | Yes | Google account resource name, e.g. accounts/123. | |
| googleLocationId | Yes | Google location resource name, e.g. locations/456. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, destructive=false. The description adds genuine behavioral context beyond those: repointing overwrites the existing link, which sharpens the idempotent/set semantics and warns about the side effect. It does not describe auth requirements or post-link behavior, so it falls 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?
Three tightly-written sentences with the core operation front-loaded, followed by the parameter-sourcing rule and the replace warning. No filler; each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity, 3-param connection tool with no output schema and full annotation coverage, the description covers purpose, parameter sourcing, and the overwrite side effect. Minor gap: no mention of what happens on success or whether verification is required, but nothing critical 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 100%, so baseline is 3. The description adds real value beyond the schema by instructing that googleAccountId and googleLocationId be taken verbatim from list_gbp_locations and are Google resource names, not free text — preventing the most likely misuse.
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 ('links/repoints') plus resource ('a project to a Google Business Profile location'), which cleanly distinguishes it from siblings like set_ahrefs_project, set_ga4_property, set_bing_site, and disconnect_gbp. An agent can identify the operation 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?
Gives clear prerequisite context by pointing to list_gbp_locations as the source of the two Google IDs, and warns that repointing replaces the existing link. It stops short of naming explicit alternatives (e.g. disconnect_gbp) or when-not-to-use conditions, so it is clear context without full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_rank_keyword_target_urlAIdempotentInspect
Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mismatch after the next run. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| targetUrl | Yes | Absolute http(s) URL you intend to rank for this keyword, or null to clear a previously-set one. | |
| trackingKeywordId | Yes | The tracked keyword's own row ID (from the rank tracker's keyword rows), not the keyword text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true, destructiveHint=false and readOnlyHint=false, so the mutation profile is covered. The description adds genuinely new behavioral context beyond structured fields: that the call is FREE, hits only the database, and spends no credits because no SEO data provider is invoked.
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 the core action and followed by the workflow hook and cost note. Nothing is redundant and 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?
A 4-param mutation tool with full schema coverage and supporting annotations needs little more, and the description supplies the workflow linkage and cost profile. It stops short of stating overwrite semantics for an existing targetUrl or the response shape, though no 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 100% and each parameter is described there (including that null on targetUrl clears a value). The description adds only a light gloss ('the URL you intend to rank for'), so the schema does the heavy lifting and the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (sets or clears) and a precise resource (the target URL for a tracked keyword), so the mutation is unambiguous. It also names the sibling it feeds (list_rank_cannibalisation), letting an agent place it in the workflow 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?
Gives clear context: set this for the keywords you care about, then check for a mismatch via list_rank_cannibalisation after the next run. It lacks an explicit when-not-to-use or a named alternative for edge cases, but the workflow trigger is well conveyed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_report_widgetsAIdempotentInspect
Replaces a report definition's whole widget list, in print order. Returns { widgetCount }. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| widgetTypes | Yes | Widget types, in print order. Catalogue: site_health (Crawl findings and issue counts from the latest audit.); internal_linking (Orphan pages, dead ends and link depth from the latest crawl.); rank_tracking (Rank-tracker scorecards per tracked domain.); keywords (Saved keywords with volume, difficulty and CPC.); search_console (Search Console totals and top queries/pages.); web_analytics (Sessions, pageviews and bounce rate from the tracking snippet.); gsc_coverage (How many of your pages Search Console has inspected, and their most common state.); rank_movers (Keywords that newly started ranking or climbed fast.); rank_volatility (How much your own positions churned between the last two checks.); share_of_voice (Your tracked domain's share of visibility against its competitors.); log_analyzer (Total server hits and the AI-crawler share of them.) | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description usefully adds that the call is FREE (database only, no SEO provider, no credits) and that it returns `{ widgetCount }`. It does not state what happens to widgets omitted from the new list or any auth requirements, but the cost/return disclosure is meaningful context 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?
Two tight sentences: the core action and scope are front-loaded, followed by return shape and cost. Every clause earns its place with no 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?
For a list-replacement mutation, the definition gives scope, return shape, and cost behavior, and the schema fully documents parameters while annotations cover safety. Minor gaps remain (behavior on an empty list, the maxItems=11 bound), but nothing essential to calling it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the schema, including print order and the widget-type catalogue. The description's 'in print order' restates the schema's own wording and adds no new syntax or format detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Replaces) plus resource (a report definition's whole widget list) and scope (whole list, print order). This cleanly separates it from siblings like create_report_definition, rename_report_definition, and get_report_definition without the reader 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?
The phrase 'whole widget list' implicitly tells the agent this is a full-replacement operation rather than an append, which is useful. However, it names no alternatives and gives no explicit when-to-use or when-not-to-use guidance relative to create/rename/render report-definition siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_yandex_hostAIdempotentInspect
Link (or repoint) a project's Yandex Webmaster host. hostId is re-validated against the caller's LIVE host list on every call.
| Name | Required | Description | Default |
|---|---|---|---|
| hostId | Yes | Yandex's own composite protocol:domain:port host id, taken verbatim from list_yandex_hosts. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnly=false, destructive=false, idempotent=true, and openWorld=true, so the safety profile is covered. The description adds genuinely non-derivable behavior: hostId is re-validated against the caller's LIVE host list on every call, which tells the agent a stale or fabricated hostId will fail at invocation time.
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, zero padding, with the action front-loaded and the validation caveat immediately after it. Every clause 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?
For a two-parameter mutation tool with a full annotation set and no output schema, the description covers what it does, the upsert/repoint semantics, and the key failure mode (stale hostId). It does not say what is returned or what happens to a previously bound host, but those are minor gaps given the annotation 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 coverage is 100% (both parameters carry descriptions and the hostId format is spelled out), so the baseline is 3. The description goes beyond the schema by stating the live re-validation of hostId on every call, adding operational meaning about when that value can be trusted.
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 pair ('Link (or repoint)') and a specific resource ('a project's Yandex Webmaster host'), making it clearly distinct from siblings like list_yandex_hosts, disconnect_yandex, or reindex_yandex_url. It stops short of explicitly naming which sibling to use instead, so it is clear but not fully sibling-differentiated.
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 'link (or repoint)' framing implies the context of use (binding a host to a project, including overwriting an existing binding), but there is no explicit when-to-use statement, no when-not-to-use exclusion, and no named alternative. The only routing hint, that hostId comes from list_yandex_hosts, lives in the schema rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_site_auditAInspect
Starts a MisarSEO site crawl/audit from startUrl. Returns { jobId, auditId } (the same id twice) with HTTP 202; the crawl then runs in the background — poll it with get_site_audit_status. FREE of SEO credits, but it CONSUMES ONE of the organization's monthly audits from its plan quota (a spent quota is a plan-limit error), so confirm with the user before starting one and never start one speculatively.
| Name | Required | Description | Default |
|---|---|---|---|
| maxPages | No | Most pages to crawl (at most 5000). Omit for the service default of 50. | |
| renderJs | No | Run each page's JavaScript before analysing it — needed for client-rendered sites. Defaults to false. | |
| startUrl | Yes | http(s) URL the crawl starts from, usually the site's home page. | |
| strategy | No | Which pages get a Lighthouse run. Defaults to auto. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only say non-readonly, non-idempotent, open-world, non-destructive) by disclosing the async nature, the HTTP 202 response shape, that the crawl runs in the background, and the critical quota side effect (consumes one monthly audit, plan-limit error when spent). This is precisely the 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?
Front-loads the action, then the return value, then the quota warning and the confirm-first directive. Every sentence carries non-redundant information and the parenthetical clarifying the id is returned twice prevents a real confusion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by explaining the return shape and the background/poll model, and it surfaces the quota side effect that governs correct invocation. Nothing an agent needs 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 100%, so all five parameters including maxPages, renderJs, strategy, projectId, and startUrl are already documented in the schema. The description only restates startUrl as the entry point and adds no syntax or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Starts) and resource (MisarSEO site crawl/audit) scoped to startUrl, and clearly differentiates from the sibling get_site_audit_status which is used to poll it. An agent can distinguish this from the many get_/list_ siblings 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 names the follow-up alternative (poll with get_site_audit_status) and gives both a when-to-use and a when-not-to-use rule: confirm with the user before starting and never start speculatively, tied to the quota cost. This is exactly the routing guidance a start-vs-poll decision needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_baidu_urlsAInspect
Push a project's own URLs to Baidu (data.zz.baidu.com/urls) for expedited crawling. FREE (no credits), but this is a MUTATION that spends the project's real, Baidu-computed daily quota. Answers { ok: false, reason: 'not_connected' } when the project has no Baidu connection, 'quota_exceeded' (with the last-known remain) when today's quota is already spent, or 'site_not_verified' when Baidu reports the site/token pair as unverified — all as a normal result, never a thrown error, since these are expected operational states.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Absolute URLs to push to Baidu, up to 2000 per call. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing that the call consumes a scarce, vendor-computed daily quota, that it is a mutation despite destructiveHint=false, and that failure modes return as normal results rather than thrown errors — exactly the runtime behavior an agent needs to plan around.
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 operation, then cost model, then result semantics in three dense sentences with no filler; the long final sentence earns its length by enumerating the exact non-error return states.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by spelling out the result envelope (ok:false plus reason values) that the agent will actually receive, and covers cost, scope, and preconditions — nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are self-documented, so the schema carries the load; the description only adds the implicit constraint that the URLs must belong to the project itself. 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?
States a precise verb + resource ('Push a project's own URLs to Baidu') plus the exact upstream endpoint, so an agent can distinguish it immediately from siblings like submit_bing_feed, submit_indexnow, and reindex_yandex_url.
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?
Makes clear context: it is FREE (no credits) but spends the real Baidu daily quota, and it describes the operational preconditions behind its result codes. It does not explicitly name the alternative tools (submit_indexnow / submit_bing_feed) or say 'use this only when you have a Baidu connection', leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_bing_contentAIdempotentInspect
SubmitContent: pushes a page's full content (a base64-encoded HTTP message) directly to Bing for a project's matched site, bypassing a crawl. FREE (no credits), but this is a MUTATION — unlike get_bing_site_overview, it queues real work on the operator's live Bing Webmaster account. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute URL of the page being submitted. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| httpMessage | Yes | The page's full HTTP response, already base64-encoded by the caller — this tool does not encode it. | |
| dynamicServing | No | Optional dynamic-serving indicator Bing accepts alongside the content. | |
| structuredData | No | Optional structured-data payload Bing accepts alongside the content. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: states it is FREE (no credits) despite being a mutation, discloses that it queues real work on the operator's live Bing Webmaster account, and names the auth dependency (BING_WEBMASTER_API_KEY) plus concrete failure reasons ('not_configured', 'no_matching_site'). That is exactly the 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?
One dense paragraph, front-loaded with the action and followed by cost, mutation warning, auth, and error behavior. The redundant 'SubmitContent:' prefix is the only waste; everything else 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 mutation tool with no output schema, it covers cost, side effects, credentials, and the two likely error returns, so an agent has everything needed to invoke it and interpret failure. Nothing material 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 100%, so all five parameters including the base64 caller-encoding contract are already documented in the schema. The description's note that the payload is a base64-encoded HTTP message and that the tool does not encode it largely restates the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'pushes a page's full content ... directly to Bing for a project's matched site, bypassing a crawl.' This distinguishes it from the read sibling get_bing_site_overview and from the feed/URL submission tools without needing to open 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?
Explicitly flags the mutation nature and contrasts it with get_bing_site_overview, and clarifies it bypasses a crawl (the reason to use it). It stops short of routing against the closest alternatives such as submit_bing_feed or submit_indexnow, so the when-to-use-vs-sibling guidance is partial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_bing_feedAIdempotentInspect
SubmitFeed: submits a sitemap/feed URL to Bing for a project's matched site. FREE (no credits), but this is a MUTATION — unlike get_bing_site_overview, it queues real work on the operator's live Bing Webmaster account. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| feedUrl | Yes | Absolute URL of the sitemap/feed to submit. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already declaring the safety profile, the description adds substantial non-schema context: no credit cost, that it queues real work on the operator's live account, the bring-your-own-key requirement (BING_WEBMASTER_API_KEY), and two concrete failure payloads ('not_configured', 'no_matching_site'). This is exactly the value-add the dimension rewards.
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?
One dense paragraph that leads with the verb and resource, then layers behavior, cost, and error modes. Every clause carries information, though the parenthetical and error enumeration could be trimmed slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers the return semantics (the ok/reason failure shapes) and the cost/auth profile, so an agent has everything needed to invoke and interpret this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema, including the list_projects pointer for projectId. The description adds no parameter-level detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('submits a sitemap/feed URL to Bing for a project's matched site') and explicitly distinguishes itself from the sibling get_bing_site_overview by noting this one queues real mutation work. An agent can tell this apart from submit_bing_content or submit_indexnow 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 a clear condition for use (submitting a feed for a project's matched site) and contrasts with the read-only sibling. It does not, however, position itself against the other submit_* / set_bing_* siblings, so the agent must infer which submission channel to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_indexnowAInspect
Submit up to 10,000 of a project's own URLs to IndexNow (relayed to Bing, Yandex, Seznam and Naver) so they are re-crawled without waiting for the next scheduled crawl. FREE — no credits, no OAuth. Requires the project to have an IndexNow key set (PATCH /api/seo/projects/:projectId with { indexNowKey }) — the key it hosts at https:///.txt. Every completed site-audit crawl also submits its own crawled URLs automatically, so this tool is for resubmitting specific URLs on demand (e.g. right after a manual publish), not the primary path. Every URL must be on the project's own domain — a mixed-host batch is rejected before any request reaches IndexNow.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes | Absolute URLs to submit, all on the project's own domain. | |
| projectId | Yes | Project id from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare openWorldHint=true, readOnlyHint=false, idempotentHint=false, destructiveHint=false, but the description adds real mechanical detail: FREE/no credits/no OAuth, the 10,000-URL cap, the hosted key file, and crucially that a mixed-host batch is rejected before any request reaches IndexNow (atomic validation). That is context an agent cannot get from 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-loaded with what the tool does and its relay targets, then prerequisites and the when-not-to-use caveat. It is dense and every sentence carries information, though it runs long and the domain-restriction rule is partly repeated between description and 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?
No output schema exists, but the description covers scope, prerequisites, limits, host restrictions, rejection behavior, and cost model for a simple two-parameter tool. An agent has everything needed to invoke it correctly or decide against 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 coverage is 100% and both parameters are required with format/maxItems/minItems constraints and descriptions. The description reinforces the own-domain constraint and the 10,000 limit but adds no format or syntax detail beyond what the schema already carries, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (submit a project's own URLs to IndexNow) plus the downstream relays (Bing, Yandex, Seznam, Naver) and the outcome (re-crawl without waiting for the scheduled crawl). It is clearly distinguishable from sibling tools like reindex_yandex_url, submit_bing_content, and submit_baidu_urls, which target other engines.
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 frames when to use it ('resubmitting specific URLs on demand, e.g. right after a manual publish') and when not to ('every completed site-audit crawl also submits its own crawled URLs automatically, so this tool is ... not the primary path'). It also names the prerequisite (IndexNow key must be set via PATCH /api/seo/projects/:projectId).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_bing_blocked_urlADestructiveIdempotentInspect
AddBlockedUrl + RemoveBlockedUrl: tell Bing to stop, or resume, showing one URL in search results for a project's matched site. FREE (no credits), but this is a MUTATION. There is no verified GetBlockedUrls to list current blocks with — add/remove-only. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The URL (or directory) to block/unblock. | |
| date | No | ISO-8601 date for the block. Defaults to now. | |
| action | Yes | add: block this URL from search results. remove: undo a previous block. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| entityType | Yes | 0 = a single page, 1 = a directory. | |
| requestType | Yes | 0 = CacheOnly (keep out of the cache, still crawlable), 1 = full block. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (which already declare readOnlyHint=false and destructiveHint=true), the description discloses the credit cost (FREE), the bring-your-own-key auth requirement (BING_WEBMASTER_API_KEY), and concrete failure modes with payloads ({ ok: false, reason: 'not_configured' } and 'no_matching_site'). This is exactly the value-add 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?
It is front-loaded with the core action in the first sentence, followed by mutation/cost, listing limitation, and auth/error details. Slightly dense and mixes internal operation names (AddBlockedUrl/RemoveBlockedUrl) with prose, but every sentence carries distinct 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?
With no output schema, the description compensates by explaining the error/return shape and auth prerequisites. Combined with the mutation warning and the note that no listing counterpart exists, 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 description coverage is 100%, so every parameter including action, entityType, and requestType is already documented in the schema. The description only restates the add/remove intent (stop vs resume) without adding format or edge-case detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb pair (add/remove = block/unblock) and a specific resource (one URL in Bing search results for a project's matched site). It is clearly distinguishable from the many other Bing siblings (get_bing_*, save_bing_crawl_settings, update_bing_query_parameter) which are read or config tools rather than URL-level block/unblock.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use (stop or resume showing a URL) and flags the operational constraint that there is no GetBlockedUrls, so this is add/remove-only. It does not, however, explicitly name a sibling alternative or state when-not-to-use, so it stops short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_bing_query_parameterAIdempotentInspect
AddQueryParameter + RemoveQueryParameter + EnableDisableQueryParameter: add, remove, or toggle one query-string parameter Bing is told to ignore when canonicalizing URLs for a project's matched site. FREE (no credits), but this is a MUTATION. get_bing_site_overview's queryParameters field (GetQueryParameters) is the read half of this family. Bring-your-own-key: requires BING_WEBMASTER_API_KEY. Answers { ok: false, reason: 'not_configured' } when unset, or 'no_matching_site' when the project's domain has no verified match on the account.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | add: start ignoring this parameter. remove: stop ignoring it entirely. enable/disable: toggle an already-added rule without removing it. | |
| parameter | Yes | The query-string parameter name, e.g. 'utm_source'. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=true, so the MUTATION note and toggle semantics largely align. The description adds genuine context beyond them: cost model (free/no credits), byok auth requirement (BING_WEBMASTER_API_KEY), and specific failure responses ('not_configured', 'no_matching_site').
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 a compact mapping of the underlying vendor operations. Info-dense with little waste, though the parenthetical vendor operation names overlap with the tool name and add some bulk.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter mutation with 100% schema coverage and annotations, it covers the missing pieces: cost, auth requirement, read companion, and even the error-return shape in lieu of an output schema. 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 100% and the action enum values are fully documented in the schema (add/remove/enable/disable). The description confirms the single-parameter scope but adds no format, syntax, or edge-case detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Precise verb+resource: add/remove/toggle a query-string parameter Bing ignores when canonicalizing URLs, scoped to a project's matched site. It explicitly names the sibling read half (get_bing_site_overview's queryParameters / GetQueryParameters), so an agent can distinguish it from adjacent tools 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?
Clear context: it states this is the write half of the query-parameter family and points to the read counterpart, plus flags that it is FREE (no credits). It lacks an explicit 'do not use this to read' exclusion or preconditions beyond the error reasons, but the routing signal is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_link_prospectAIdempotentInspect
Link Building Tool: edit a prospect's editable fields (url/label/targetUrl/contact fields) — only fields given here are changed. FREE (no credits), but this is a MUTATION. domain and status are not editable here — use update_link_prospect_status for the pipeline stage.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| label | No | ||
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| targetUrl | No | ||
| prospectId | Yes | Prospect id, from list_link_prospects. | |
| contactName | No | ||
| contactEmail | No | ||
| contactNotes | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, idempotent, non-destructive mutation, so the bar is lower; the description still adds real value by disclosing the cost model (FREE / no credits), calling out that it is a MUTATION, and confirming merge semantics (only fields given here are changed), which is consistent with 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?
Dense but front-loaded: tool category, editable field list, merge semantics, cost, mutation warning, then the exclusion. No sentence is filler and nothing important is 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?
For an 8-param mutation with no output schema and thin schema descriptions, the reader learns what changes, what stays, what it costs, and where the excluded fields go. Only the return/confirmation behavior is unstated, which is a minor gap given no output schema exists to cover 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 25% (projectId and prospectId only), so the description must compensate — and it does, naming url/label/targetUrl/contact fields as the editable set and excluding domain/status. It stops short of format or length guidance, but it adds meaning the schema alone does not.
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 (edit/update) plus resource (link-building prospect) with an explicit enumeration of the editable fields. It explicitly distinguishes itself from the closest sibling, update_link_prospect_status, so an agent can tell them apart 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?
States the routing rule for the ambiguous case (`domain` and `status` are not editable here — use update_link_prospect_status), which is exactly the alternative an agent would otherwise guess wrong on. It does not cover every sibling (e.g. add_link_prospect vs this), but the partial-update intent is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_link_prospect_statusAInspect
Link Building Tool: move a prospect through the outreach-status pipeline — prospected -> contacted -> replied -> link_placed/declined/no_response ('declined'/'no_response' can loop back to 'contacted' for a re-approach). FREE (no credits), but this is a MUTATION. Throws on an illegal jump (e.g. prospected straight to link_placed) — the error names the allowed next stage(s). Always appends an activity-log entry describing the change.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional extra context appended to the auto-generated activity-log entry, e.g. 'sent follow-up #2'. | |
| status | Yes | ||
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| prospectId | Yes | Prospect id, from list_link_prospects. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond annotations: it confirms the mutation cost profile ('FREE (no credits), but this is a MUTATION'), discloses the illegal-transition error behavior and what the error contains, and states the side effect that an activity-log entry is always appended. This is exactly the kind of behavioral payload the 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?
One dense paragraph, front-loaded with purpose and state machine, then cost/mutation warning, then error behavior, then side effect. Every clause 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?
No output schema exists, and the description covers what the agent needs: legal transitions, failure semantics, cost, and the appended activity-log side effect. Nothing about invoking this correctly is left unstated.
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 75% and the schema already documents projectId, prospectId and note. The description adds real meaning to the status parameter by spelling out the legal transition graph and the loop-back cases, which the bare enum cannot convey. Minor gap: no mention of note's length limit or relationship to the log entry beyond what the schema says.
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 (move a prospect through the outreach-status pipeline) and names the exact state machine operated on. An agent can distinguish it from update_link_prospect, which mutates other prospect fields, 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 operating context: the pipeline stages, which transitions loop back, that this is free but a mutation, and that illegal jumps throw an error naming the valid next stage. It stops short of explicitly naming a sibling alternative for non-status updates, so it is 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.
update_rank_keyword_tagAIdempotentInspect
Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. FREE: database only. No SEO data provider is called and no credits are spent. The tag is the project's EXISTING saved-keyword vocabulary, shared with the saved-keyword list. Pass tagId for a tag that already exists (find it with list_rank_keyword_tags), or tagName to match on the normalised name. On action: "add" an unknown tagName CREATES that tag for the whole project, so check the vocabulary first rather than coining near-duplicates; on action: "remove" an unknown tag is NOT_FOUND, because there is nothing to detach. DO NOT REPORT changed AS A COUNT OF NEW LINKS ON AN ADD. action: "add" returns changed: null because the insert is idempotent and how many links were actually new is not knowable without a second read — null means "not measured". It is not zero, and it is NOT the number of keyword IDs submitted. action: "remove" returns a real changed count. When asked how many keywords were touched, report keywordCount: the tracked keywords the action was applied to, after de-duplication. Both actions return keywordCount: 0 with changed: 0 when none of the submitted IDs belong to this tracker — a no-op, not a tagging worth reporting as done.
| Name | Required | Description | Default |
|---|---|---|---|
| tagId | No | Existing tag ID from list_rank_keyword_tags. Pass this OR `tagName`, never both. | |
| action | Yes | 'add' attaches the tag, creating it from `tagName` when it does not exist yet; 'remove' detaches it. | |
| tagName | No | Tag name, matched on its normalised form — 'Branded', 'branded' and ' branded ' are one tag. Created on 'add' when it does not exist; NOT_FOUND on 'remove'. Pass this OR `tagId`, never both. | |
| configId | Yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| trackingKeywordIds | Yes | Tracking-keyword IDs to tag or untag (1–500 per call). These are the rank tracker's own keyword-row IDs — not saved-keyword IDs, and not keyword text. Duplicates are collapsed, and IDs belonging to another tracker are ignored rather than errored. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: FREE/no provider call, project-wide tag creation on add, vocabulary shared with saved keywords, idempotent insert, and the crucial semantic that `changed: null` means 'not measured' rather than zero. This directly explains and reinforces the idempotentHint=true annotation rather than contradicting it.
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?
Purpose and scope are front-loaded and each sentence carries information, but the all-caps block about `changed` vs `keywordCount` is dense and slightly over-emphasized. It earns its place for correctness yet could be tightened without losing 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?
Despite no output schema, the description documents the return shape (`changed`, `keywordCount`) and the no-op case (`keywordCount: 0` with `changed: 0` when IDs belong to another tracker). For a 6-param mutation tool this is 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 already 100%, so the baseline is 3. The description still adds real value on top of the schema: it frames the vocabulary as the project's saved-keyword vocabulary, clarifies add/remove asymmetry for tagName, and stresses reporting keywordCount (post-dedup tracked keywords) instead of submitted IDs.
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 ('attaches or detaches ONE tag across a selection of tracked keywords') plus a hard cardinality constraint (up to 500 IDs, one tag per call). This distinguishes it from siblings like list_rank_keyword_tags and add_rank_tracking_keywords 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 routing ('find it with list_rank_keyword_tags'), an action-specific rule set (add creates, remove returns NOT_FOUND), and a concrete when-not warning ('check the vocabulary first rather than coining near-duplicates'). An agent knows when to reach for this tool and when to look up tags first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_brand_monitorAIdempotentInspect
Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it starts UNATTENDED RECURRING spend from the SAME monthly Brand Radar scan quota that run_brand_radar_scan uses, which can leave less quota for ad hoc scans that month. Confirm the schedule with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| brandTarget | Yes | Brand, domain or product name to monitor. | |
| competitors | Yes | Up to 5 competitor brands/domains to compare against. Send [] for none. | |
| scheduleInterval | Yes | How often the monitor re-scans. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial context beyond the annotations: the admin-role requirement, the fact that it initiates UNATTENDED RECURRING spend, and that it draws from the SAME monthly Brand Radar scan quota as run_brand_radar_scan, reducing quota for ad hoc scans. Annotations only cover safety hints; this discloses cost and side-effect behavior they don't.
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 its whole-replacement semantics, then prerequisites and cost. It is dense but every sentence earns its place; the quota sentence is long but materially important for safe invocation.
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 no output schema, it covers action semantics, permission requirements, cost/quota side effects, and a confirmation guardrail. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine meaning: it clarifies that the competitors list and schedule are replaced wholesale rather than merged field-by-field, which affects how an agent should populate the competitors array and scheduleInterval.
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 ('Creates or replaces a brand monitor') and immediately clarifies the scope: 'the whole schedule and competitor list, not single fields.' This distinguishes the upsert-full-replace semantics from sibling tools like delete_brand_monitor, list_brand_monitors, and add_competitor_monitor.
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 prerequisites (admin role) and an explicit behavioral instruction ('Confirm the schedule with the user before calling'), plus context on quota competition with run_brand_radar_scan. It does not explicitly say when to prefer this over add_competitor_monitor or other siblings, so it stops short of full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upsert_report_scheduleAIdempotentInspect
Creates or replaces a report definition's schedule — the whole interval + recipient list, not individual fields. Requires the admin role in the calling organization, the same gate patch drafting/publishing uses, since this starts unattended recurring email delivery. FREE: database only, no SEO data provider is called and no credits are spent.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| recipientUserIds | Yes | Platform user IDs to email. Must be members of the calling organization — a non-member id is silently dropped. There is no arbitrary external-email recipient in this version; use list_team_members-style tooling to find teammate ids. | |
| scheduleInterval | Yes | How often the report is re-sent. | |
| reportDefinitionId | Yes | Report definition ID. Use list_report_definitions to find it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=true, destructive=false, but the description adds substantial context beyond them: the admin-role gate (same as patch drafting/publishing), the fact that this initiates recurring unattended email delivery, and that the operation is free with no provider call or credit spend. That is exactly the kind of side-effect and cost disclosure 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 dense sentences, front-loaded with the replacement scope, then prerequisites, then cost. No filler and no repetition of schema or annotation content for its own sake.
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 write tool with no output schema and safety fully covered by annotations, the description supplies the remaining essentials: auth gate, side effect (recurring email), cost profile, and full-replace semantics. Nothing an agent needs to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns an extra point by clarifying replacement semantics — the recipient array and interval are submitted as a whole and overwrite rather than merge, which an agent needs to know when forming the payload. It adds no per-field syntax beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (creates or replaces) and resource (a report definition's schedule) and immediately scopes it: the whole interval + recipient list, not individual fields. That distinguishes it from sibling tools like create_report_definition, set_report_widgets, and delete_report_schedule without the agent 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?
Gives clear context: use it to set the entire schedule, it requires admin role, and it starts unattended recurring email delivery. It does not explicitly name alternative tools (e.g. delete_report_schedule for removal, or how to edit a single field) or state when-not-to-use, 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.
upsert_tracked_promptAIdempotentInspect
Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for real citations) and diffed against the previous check. Requires the admin role in the calling organization, because it starts UNATTENDED RECURRING spend from the shared AI-gateway monthly budget. Confirm the schedule and models with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| models | Yes | 1-4 model personas, as for explore_ai_prompt. | |
| prompt | Yes | The prompt to re-run on every check. | |
| projectId | Yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. | |
| brandTarget | Yes | The brand whose mentions and citations are tracked. | |
| scheduleInterval | Yes | How often the prompt is re-checked. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover readOnly=false, idempotent=true, destructive=false, but the description adds traits they cannot express: full-replace (not field-level merge) semantics, that the prompt is re-run grounded on every scheduled check and diffed against the prior run, and that this starts unattended recurring spend from a shared monthly budget. That is exactly the behavioral context an agent needs before committing the organization to cost.
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, front-loaded with the create/replace action, then behavior, then authorization, then the caution. Every sentence contributes distinct information, though the capitalized emphasis (UNATTENDED RECURRING) is slightly louder than needed for an otherwise tight passage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no nested objects, the description carries the full explanatory load and does: purpose, replace semantics, runtime behavior, auth requirement, cost implication, and a pre-call confirmation step. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions on every field, so the schema already carries the per-parameter burden. The description still adds meaning by tying models and scheduleInterval to the whole-replace contract and the recurring re-run, making clear these required params must be supplied on every call rather than defaulted.
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 (creates or replaces) and resource (tracked prompt), and immediately disambiguates semantics that the name alone can't: the whole model list and schedule are replaced, not single fields. This separates it cleanly from list_tracked_prompts, delete_tracked_prompt, and get_tracked_prompt_trend.
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 preconditions (admin role in the calling organization) and a procedural instruction (confirm the schedule and models with the user before calling), which is strong context for a spend-incurring mutation. It stops short of naming sibling alternatives (e.g., explore_ai_prompt for one-off checks), so it isn't a full when/when-not set.
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.
180 tool updates
- First observed
add_competitor_monitor - First observed
add_disavow_entry - First observed
add_link_prospect - First observed
add_link_prospect_note - First observed
add_portfolio_projects - First observed
add_rank_annotation - First observed
add_rank_tracking_keywords - First observed
batch_draft_patches - First observed
capture_domain_authority_snapshot - First observed
classify_keyword_intent - First observed
compare_ai_competitor_positioning - First observed
create_gbp_post - First observed
create_local_pack_rank_config - First observed
create_local_rank_grid_config - First observed
create_portfolio - First observed
create_rank_tracker - First observed
create_report_definition - First observed
delete_brand_monitor - First observed
delete_gbp_review_reply - First observed
delete_local_pack_rank_config - First observed
delete_local_rank_grid_config - First observed
delete_portfolio - First observed
delete_report_definition - First observed
delete_report_schedule - First observed
delete_tracked_prompt - First observed
disable_patch_auto_publish - First observed
disconnect_ahrefs - First observed
disconnect_baidu - First observed
disconnect_bing - First observed
disconnect_ga4 - First observed
disconnect_gbp - First observed
disconnect_yandex - First observed
draft_patch - First observed
enable_patch_auto_publish - First observed
explore_ai_prompt - First observed
export_disavow_file - First observed
export_link_prospects_csv - First observed
find_serp_competitors - First observed
get_audit_comparison - First observed
get_audit_core_web_vitals - First observed
get_audit_https_report - First observed
get_audit_internal_links - First observed
get_audit_structured_data - First observed
get_backlink_anchors - First observed
get_backlinks_overview - First observed
get_baidu_connection - First observed
get_bing_backlinks - First observed
get_bing_detail_stats - First observed
get_bing_feed_details - First observed
get_bing_keyword_research - First observed
get_bing_site_overview - First observed
get_bing_url_info - First observed
get_bing_url_links - First observed
get_brand_radar_scan_status - First observed
get_brand_scan_trend - First observed
get_brave_search_rank_check - First observed
get_cannibalisation_report - First observed
get_competitor_monitor_changes - First observed
get_content_decay_report - First observed
get_content_optimizer_report - First observed
get_content_page_metrics - First observed
get_dashboard - First observed
get_direct_vendor_answers - First observed
get_domain_authority_history - First observed
get_domain_batch - First observed
get_domain_overview - First observed
get_ga4_channel_breakdown - First observed
get_ga4_landing_pages - First observed
get_ga4_performance_summary - First observed
get_gbp_connection - First observed
get_gbp_optimization - First observed
get_gbp_performance - First observed
get_gbp_profile - First observed
get_gbp_reviews - First observed
get_google_business_questions - First observed
get_gsc_anonymous_queries - First observed
get_gsc_ctr_by_position - First observed
get_keyword_gap - First observed
get_keyword_list_share_of_voice - First observed
get_keyword_potential - First observed
get_keyword_serp_overview - First observed
get_keyword_strategy - First observed
get_link_intersect - First observed
get_local_pack_rank - First observed
get_local_rank_grid - First observed
get_media_monitoring_report - First observed
get_portfolio - First observed
get_rank_ai_overview_trend - First observed
get_rank_config_trend - First observed
get_rank_keyword_history - First observed
get_rank_movers - First observed
get_rank_tracker - First observed
get_rank_volatility_index - First observed
get_report_definition - First observed
get_report_schedule - First observed
get_search_console_coverage - First observed
get_search_console_hourly_performance - First observed
get_search_console_performance - First observed
get_search_console_sitemaps - First observed
get_site_audit_status - First observed
get_topic_research - First observed
get_tracked_prompt_trend - First observed
get_unlinked_mentions_report - First observed
get_usage - First observed
get_web_analytics_devices - First observed
get_web_analytics_sources - First observed
get_web_analytics_summary - First observed
get_web_analytics_top_pages - First observed
get_yandex_site_overview - First observed
import_link_prospects_csv - First observed
inspect_urls - First observed
list_ahrefs_projects - First observed
list_bing_sites - First observed
list_brand_monitors - First observed
list_competitor_monitors - First observed
list_disavow_entries - First observed
list_ga4_properties - First observed
list_gbp_locations - First observed
list_gbp_posts - First observed
list_link_prospect_activity - First observed
list_link_prospects - First observed
list_patch_auto_publish_rules - First observed
list_patches - First observed
list_portfolios - First observed
list_projects - First observed
list_rank_annotations - First observed
list_rank_cannibalisation - First observed
list_rank_keyword_tags - First observed
list_rank_tracking_keywords - First observed
list_report_definitions - First observed
list_saved_keywords - First observed
list_tracked_prompts - First observed
list_yandex_hosts - First observed
log_analyzer_daily_summary - First observed
log_analyzer_list_uploads - First observed
log_analyzer_top_paths - First observed
log_analyzer_upload - First observed
publish_patch - First observed
reindex_yandex_url - First observed
remove_competitor_monitor - First observed
remove_disavow_entry - First observed
remove_link_prospect - First observed
remove_portfolio_projects - First observed
remove_rank_annotation - First observed
remove_rank_tracking_keywords - First observed
rename_portfolio - First observed
rename_report_definition - First observed
render_report_definition - First observed
reply_to_gbp_review - First observed
research_ai_prompts - First observed
research_keywords - First observed
revert_patch - First observed
run_brand_radar_scan - First observed
run_local_nap_audit - First observed
run_local_pack_rank_check - First observed
run_local_rank_grid - First observed
save_bing_crawl_settings - First observed
save_keywords - First observed
search_local_businesses - First observed
set_ahrefs_project - First observed
set_baidu_connection - First observed
set_bing_site - First observed
set_ga4_property - First observed
set_gbp_connection - First observed
set_rank_keyword_target_url - First observed
set_report_widgets - First observed
set_yandex_host - First observed
start_site_audit - First observed
submit_baidu_urls - First observed
submit_bing_content - First observed
submit_bing_feed - First observed
submit_indexnow - First observed
update_bing_blocked_url - First observed
update_bing_query_parameter - First observed
update_link_prospect - First observed
update_link_prospect_status - First observed
update_rank_keyword_tag - First observed
upsert_brand_monitor - First observed
upsert_report_schedule - First observed
upsert_tracked_prompt
Related MCP Connectors
SE Ranking SEO: keywords, backlinks, domains, SERP, audits, rank tracking, AI Search visibility.
SEO & GEO data: keywords, live SERPs with AI Overviews, backlinks, site audits, rank tracking.
SEO, GEO & AI Visibility — research, write, optimize, publish & monitor content. 121 tools.
Track AI visibility (ChatGPT, Gemini, AI Overviews), research SEO keywords, write, publish, prove.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAI search intelligence + Ahrefs-class SEO suite as 59 MCP tools. Track your brand across ChatGPT, Google AI Overview, Gemini, Claude, and Perplexity with persona-anchored Brand Radar dispatches.MIT
- AlicenseAqualityBmaintenanceAI visibility and SEO data for AI agents. Check whether ChatGPT, Claude, Perplexity and Gemini mention your brand and which sources they cite, plus keyword volume and Google Trends.29119 npmMIT
- AlicenseNot gradedqualityBmaintenanceEnables agents to research competitors, keywords, ads, and AI citations, and to audit public websites for SEO, AEO, and GEO readiness with prioritized fixes.MIT
- -licenseNot gradedqualityCmaintenanceEnables AI assistants to perform comprehensive SEO and GEO measurements, including site audits, keyword research, ranking tracking, and brand visibility analysis across search engines and generative AI platforms.-
Glama MCP Gateway
Add one secure layer between your agents and this server.