Skip to main content
Glama

@bisibility/mcp

Part of bisibility - an open-source SEO platform for keyword research, backlink analysis, and Google rank tracking. This repository contains the MCP server that exposes bisibility tools to AI agents.

Docs · API reference · Roadmap

Status: Developer preview.

Distribution

npm version Official MCP Registry Glama

Distribution status and release channels

Model Context Protocol server for the bisibility REST API. It exposes stdio tools backed by the published @bisibility/sdk package.

Related MCP server: GeoRanker MCP Server

Requirements

  • Node.js 18 or newer

  • A bisibility API key

  • A bisibility API v1 base URL

Install

Run the published stdio server without a global install:

npx -y @bisibility/mcp

For local development, install and build from this package directory:

From this package directory:

npm install
npm run build

The SDK is consumed from the npm registry:

"@bisibility/sdk": "^0.22.0"

MCPB bundle

Directories and clients that support MCPB can distribute bisibility as a one-click local bundle. The bundle includes the stdio server and all production dependencies, but never a bisibility credential. The client collects configuration during installation.

Build the upload artifact with:

npm ci
npm run build
npm run build:mcpb

The versioned file is written to artifacts/.

Environment

export BISIBILITY_API_KEY="bsb_pat_live_..."
export BISIBILITY_BASE_URL="https://eu.bisibility.com/api/v1"
export BISIBILITY_PROJECT_ID="prj_..."
export BISIBILITY_MCP_READ_ONLY="1"
export BISIBILITY_MCP_TOOLSETS="projects,keywords,checks,rank-history"

BISIBILITY_BASE_URL is optional and defaults to https://eu.bisibility.com/api/v1. For self-hosted installs, set it to your API v1 root, for example https://rank.example.com/api/v1. BISIBILITY_API_KEY accepts a project key (bsb_key_live_...) or personal access token (bsb_pat_live_...). Set optional BISIBILITY_PROJECT_ID as the default X-Bisibility-Project selector for project-implicit PAT tools; a tool's optional project_id argument overrides it for that call. Every resource ID accepted by the MCP server, including BISIBILITY_PROJECT_ID, must use the current typed public ID format: a canonical lowercase prefix plus _ and a 24-character lowercase suffix, for example prj_a1b2c3d4e5f6g7h8j9k0m2n3. Malformed IDs, mixed-case IDs, and wrong resource prefixes are rejected. Location selection uses the returned location_key, never a location ID. A key can end in @language to select a non-default language for the location, for example ES/Andalusia/Malaga@en; an unqualified key uses the country's default language.

The server consumes the public ID contract from the published @bisibility/sdk package. Do not replace it with a local SDK link.

BISIBILITY_MCP_READ_ONLY accepts 1, true, yes, or on, ignoring case. When enabled, write tools are not registered and do not appear in tools/list.

BISIBILITY_MCP_TOOLSETS is an optional comma-separated allowlist. Valid toolsets are account, agent-reports, alerts, analytics, backlinks, brand-visibility, checks, competitors, domain-overview, keywords, notifications, page-indexing, project-context, projects, prompt-explorer, prompt-research, prompt-tracker, providers, rank-history, saved-keywords, saved-views, signals, site-audits, sitemaps, system, team, tokens, and webhooks. An unknown value prevents the server from starting. When the variable is unset, all toolsets are registered. The toolset filter and read-only mode compose. The allowlist is a scope control, not a way to improve tool selection.

Run

npm run build
BISIBILITY_API_KEY="bsb_key_live_..." node dist/stdio.js

When installed as a package, the bin is:

bisibility-mcp

Connect

After building the repository, connect Codex to the local stdio server:

codex mcp add bisibility \
  --env BISIBILITY_API_KEY="bsb_key_live_..." \
  --env BISIBILITY_BASE_URL="https://bisibility.com/api/v1" \
  -- node /absolute/path/to/bisibility-mcp/dist/stdio.js

The codex mcp add syntax above was verified against the Codex CLI. Replace the absolute path and credential before running it.

Other MCP clients commonly use a JSON configuration like this:

{
  "mcpServers": {
    "bisibility": {
      "command": "npx",
      "args": ["-y", "@bisibility/mcp"],
      "env": {
        "BISIBILITY_API_KEY": "bsb_key_live_...",
        "BISIBILITY_BASE_URL": "https://eu.bisibility.com/api/v1"
      }
    }
  }
}

If bisibility-mcp is installed on the client's PATH, use the package bin:

{
  "mcpServers": {
    "bisibility": {
      "command": "bisibility-mcp",
      "env": {
        "BISIBILITY_API_KEY": "bsb_key_live_...",
        "BISIBILITY_BASE_URL": "https://eu.bisibility.com/api/v1"
      }
    }
  }
}

Tools

Tools use unprefixed snake_case names and can be filtered with BISIBILITY_MCP_TOOLSETS. Tools shared with the built-in /api/mcp endpoint use the same names. The two transports have different tool inventories; check tools/list before switching.

Domain Overview tools always require a nonnegative whole-cent max_cost_cents cap. Use estimate_only: true together with max_cost_cents: 0 for the safe estimate-first step; provider estimates and returned charges may still contain fractional cents.

For rank results, read execution status and observation_completeness together with position. A null position with unknown or legacy coverage does not establish absence within Top N. Only complete coverage supports that conclusion; a positive position remains valid with truncated coverage. latest_successful_check means the most recent completed observation, which can itself have unknown coverage.

Backlinks history is optional. history_unavailable marks a history failure with confirmed cost while summary and links remain available. If accounting is unknown, the request stays failed (isError) and may carry the completed summary as current-response evidence: cost_cents is null and rows are not requested. That evidence is not a cached snapshot or a settled total, cannot be extended with load_more_backlink_rows, and does not survive reload.

Area

Examples

Discovery

Health, capabilities, provider rates, and cost estimates

Rank tracking

Projects, keywords, checks, rank history, and sitemaps

Analytics

Traffic snapshots, query statistics, signals, backlinks, and Domain Overview

Agent analysis

Project context, saved reports, Brand Visibility, synthetic prompt comparisons, and bounded site audits

Collaboration

Alerts, team members, invitations, and notifications

Administration

Providers, API keys, personal tokens, webhooks, and migration tokens

This list describes the source checkout and its unreleased changes. See the distribution status for currently published package and directory versions. The hosted endpoint has its own inventory.

  • get_session_profile

  • get_health

  • get_capabilities

  • get_cloud_import_compatibility

  • get_provider_rates

  • get_cost_estimate

  • get_me

  • update_me

  • list_projects

  • create_project

  • get_project

  • search_locations

  • update_project

  • delete_project

  • get_project_defaults

  • preview_project_defaults

  • update_project_defaults

  • list_keywords

  • list_ranked_keyword_suggestions

  • research_keywords

  • estimate_keyword_research_cost

  • analyze_backlinks

  • estimate_backlinks_cost

  • load_more_backlink_rows

  • analyze_domain_overview

  • estimate_domain_overview_cost

  • load_domain_overview_history

  • load_domain_overview_keywords

  • load_domain_overview_pages

  • get_keyword_metrics

  • add_keywords

  • get_keyword

  • update_keyword

  • set_keyword_target_url

  • delete_keyword

  • bulk_update_keywords

  • run_rank_check

  • get_rank_history

  • export_rank_history | list_rank_check_runs | Read retained run outcomes and continuation cursors, including blocked and cancelled executions without checks. | | get_rank_check_run | Read one retained execution without launching or retrying a check. |

  • list_local_monitor_runs

  • get_local_monitor_run_results

  • list_local_monitor_point_listings

  • list_local_monitor_point_history

  • export_local_monitor_run

  • get_page_indexing_report

  • list_page_indexing_urls

  • get_page_indexing_settings

  • update_page_indexing_settings

  • list_search_index_sitemaps

  • get_search_index_sitemap

  • inspect_search_index_urls

  • list_sitemap_monitors

  • enable_sitemap_monitor

  • disable_sitemap_monitor

  • get_rank_check_result

  • create_signal

  • list_signals

  • list_traffic_snapshots

  • list_search_performance_query_stats

  • sync_project_traffic

  • list_api_keys

  • create_api_key

  • revoke_api_key

  • list_project_api_keys

  • create_project_api_key

  • list_personal_tokens

  • create_personal_token

  • revoke_personal_token

  • list_webhooks

  • create_webhook

  • update_webhook

  • delete_webhook

  • list_alert_rules

  • create_alert_rule

  • update_alert_rule

  • delete_alert_rule

  • list_triggered_alerts

  • mute_triggered_alert

  • mark_project_alerts_read

  • list_team_members

  • list_team_invites

  • create_team_invite

  • revoke_team_invite

  • resend_team_invite

  • update_team_member_role

  • remove_team_member

  • list_providers

  • connect_provider (primary: true is a legacy alias for priority 0)

  • test_provider_connection

  • update_provider_settings

  • set_provider_enabled

  • set_provider_priority

  • set_primary_provider (legacy: true promotes priority 0; false is a no-op)

  • disconnect_provider

  • list_saved_keywords

  • create_saved_keywords

  • delete_saved_keyword

  • list_saved_views

  • create_saved_view

  • delete_saved_view

  • list_competitors

  • add_competitor

  • remove_competitor

  • get_notification_preferences

  • update_notification_preferences

  • list_migration_tokens

  • mint_migration_token

  • revoke_migration_token

  • get_project_context

  • update_project_context

  • list_agent_reports

  • create_agent_report

  • get_agent_report

  • analyze_brand_visibility

  • get_ai_research_catalog

  • compare_ai_prompts

  • run_site_audit

  • list_site_audits

  • get_site_audit

  • list_prompt_tracker_topics

  • create_prompt_tracker_topic

  • update_prompt_tracker_topic

  • archive_prompt_tracker_topic

  • list_prompt_tracker_prompts

  • create_prompt_tracker_prompt

  • update_prompt_tracker_prompt

  • archive_prompt_tracker_prompt

  • list_prompt_tracker_schedules

  • create_prompt_tracker_schedule

  • update_prompt_tracker_schedule

  • archive_prompt_tracker_schedule

  • preview_prompt_tracker_run

  • create_prompt_tracker_run

  • list_prompt_tracker_runs

  • get_prompt_tracker_run

  • list_prompt_tracker_samples

  • cancel_prompt_tracker_run

  • retry_prompt_tracker_run

  • get_prompt_tracker_history

  • get_prompt_tracker_trends

  • export_prompt_tracker_evidence

  • suggest_prompt_research_prompts

  • accept_prompt_research_suggestions

  • prompt_research_suggestions_preview

  • prompt_research_suggestions_generate

All protected tools use the configured BISIBILITY_API_KEY. Tools that accept an idempotency_key forward it as the API Idempotency-Key request option. The key is required for create_prompt_tracker_run, retry_prompt_tracker_run, and prompt_research_suggestions_generate; generation requires a UUID. Other tools expose optional keys where supported by their schemas.

The list above is asserted by a test (test/tools.test.ts), so it stays in sync with the registered tool surface.

Security

The credential's scope is the primary authorization control, and the server accepts two kinds. A project key (bsb_key_live_...) belongs to exactly one project, which bounds the damage from a leak and makes it a good fit for a single-project or machine setup. A personal access token (bsb_pat_live_...) covers the projects you are a member of, so one token serves them all; its effective access in each project is the lower of the token's scope and your role there, meaning a token never grants more than the person behind it. Use BISIBILITY_PROJECT_ID to set the default project for a token that spans several, as described under Environment above.

Whichever kind you use, create it with a read scope for assistant use whenever possible, and do not grant admin unless the assistant needs an administrative API operation. Server-side filtering narrows the tools presented to the model, but it does not expand or replace the permissions of the configured credential.

An agent that receives a write-scoped or admin credential can create and change project data. Provider-backed Domain Overview tools can also spend the project's own provider budget on a cache miss. Every Domain Overview call requires an explicit nonnegative integer max_cost_cents. For the safe estimate-first step, call analyze_domain_overview with estimate_only: true and max_cost_cents: 0; use the same zero cap for a cache-only attempt. A positive value caps the permitted provider charge.

Brand Visibility reads a limited provider-observed dataset. Prompt Explorer runs synthetic prompts; it does not measure all user conversations or observed Brand Visibility. Observed visibility requires an explicit whole-cent max_cost_cents cap. Prompt comparison uses that cap in default hard-cap mode; explicit provider actual-cost mode uses acknowledged non-guaranteed estimates and an advisory limit. Start with estimate_only: true and a zero cap. Site audits crawl only the project domain within a bounded page count and deadline; they do not run Lighthouse or paid provider work. Saved reports and project context retain the project's existing authorization rules.

The destructive surface includes delete_project, delete_keyword, bulk_update_keywords when its operation is delete, delete_webhook, delete_alert_rule, delete_saved_keyword, delete_saved_view, remove_team_member, remove_competitor, disconnect_provider, revoke_api_key, revoke_personal_token, revoke_team_invite, and revoke_migration_token. Revoking the credential used by the server can immediately lock the server out.

Use read-only mode and a narrow toolset allowlist as defense in depth:

export BISIBILITY_MCP_READ_ONLY="1"
export BISIBILITY_MCP_TOOLSETS="projects,keywords,checks,rank-history,alerts"

Content returned by the API is untrusted input that reaches the model. Project names, keyword phrases, alert text, and similar tracked data can contain hostile instructions intended to steer an agent that also has write tools. Keep credentials and registered toolsets as narrow as the workflow permits, and enable client-side confirmation for tool calls when the MCP client supports it.

HTTP Transport

This package ships stdio transport only. The code is split so an HTTP transport can reuse the same server factory:

import { createBisibilityClientFromEnv, createBisibilityMcpServer } from "@bisibility/mcp";

const client = createBisibilityClientFromEnv();
const server = createBisibilityMcpServer({ client });

An HTTP entry point can wrap that server with the official SDK HTTP transport, such as StreamableHTTPServerTransport, in a Node, Worker, or hosted adapter.

Development

npm run lint
npm run typecheck
npm test
npm run build

License

Licensed under the Apache License, Version 2.0. See LICENSE and NOTICE.

Prompt Tracker

The prompt-tracker toolset exposes 22 project-scoped tools for topics, immutable prompt revisions, disabled schedules, spend-free preview, consented runs, samples, history, trends and exports. Read-only sessions retain preview and evidence reads. Launch and retry require reviewed credential/budget/consent revisions, explicit paid consent, and a stable idempotency_key, forwarded through the SDK as Idempotency-Key. No operation starts an automatic paid baseline.

get_ai_research_catalog reads free model and locale capabilities. compare_ai_prompts accepts catalog model IDs, optional web search and locale hints, and an explicit actual-cost policy. Actual-cost consent acknowledges that its estimate is not a guaranteed maximum.

Prompt Research

The prompt-research toolset exposes prompt suggestions. suggest_prompt_research_prompts reads the reviewed project context and returns heuristic templates with no measured popularity. accept_prompt_research_suggestions saves explicitly accepted drafts and starts no provider work.

Model prompt generation uses prompt_research_suggestions_preview followed by prompt_research_suggestions_generate. Preview reviews all five context fields, selected competitors, model and market without paid provider work. Generation requires the complete unexpired frozen preview, explicit paid consent and a stable UUID idempotency_key. Forecasts have no guaranteed maximum; generated drafts carry no measured popularity. Accepted edits retain the trusted generation_reference; provider datasets use a verified provider_dataset_reference.

Response evidence compatibility

Rank checks expose optional observation_completeness, and keywords expose optional latest_check and latest_successful_check. Older responses can omit these fields. Only complete coverage supports absence within the requested depth; a positive position remains valid with unknown or truncated coverage. A newer failure retains the prior success.

Site backlinks normally have 12 history months. A successful partial snapshot has history: [] and history_unavailable: true; preserve its summary, rows and confirmed cost. Page scope does not request history. Missing availability metadata uses the legacy default. A failed summary remains an HTTP error with current-response evidence in problem details: cost_cents: null is an unknown total, while known_summary_cost_cents is confirmed.

Versioned retained history export (Unreleased)

Opt in with version 2 to retain report quality, metric versions, frozen selection and signed continuation cursors. Keep stream, basis, from/to and keyword selection unchanged on every page. The default remains legacy v1 rows. Observations include bounded normalized items; opaque CID strings retain all original digits. The recorded-at attempts stream also contains actual run/item variants without checks, including cancelled, deferred and blocked outcomes. Full-project exports retain explicit project-only runs; selected exports report unresolved membership exclusions. CSV contains a complete bounded report manifest and accepts no cursor. Oversized sources fail with 413, and changed signed snapshots fail with 409.

See the rank-history contract.

The served MCP tool returns JSON. Complete CSV downloads use the REST API or SDK.

Retained Local reads

The five read-only list_local_monitor_runs, get_local_monitor_run_results, list_local_monitor_point_listings, list_local_monitor_point_history and export_local_monitor_run tools call the SDK's actual Local API methods. They preserve original lmn/lmr/lmt scope, null/unknown quality, exact string CID and retained source metadata. History as_of/from/to use canonical UTC milliseconds and occurrence_created_at; preserve the full selection with a signed cursor (1..8000 characters). The export tool returns existing Local point-report-v1 JSON only. Reads never start provider work or schedules. These source changes are unreleased; packaged support follows the SDK release.

Reviewed defaults

Use preview_project_defaults to read the current draft and impact; it performs no settings writes or provider work, but the server still requires settings permission. After the caller explicitly approves that draft, call update_project_defaults with the same settings and review containing the returned expected_source_hash, string expected_revision, preview_token, a stable idempotency_key, and confirmed: true. Missing confirmation returns 428; stale or expired reviews return 409. For a lost response, reuse the exact body and command key. The tools never confirm automatically.

The SDK requires the server capability features.reviewed_project_defaults: "v1" before sending either preview or reviewed-update PATCH. It refuses older servers rather than risking a write disguised as preview. This marker does not grant settings permission.

Page indexing

See the Page indexing tool reference.

The page-indexing toolset reads Search Console sitemaps and explicitly inspects URLs. Results are Google's indexed state, not a live test, and may be partial or delayed. list_search_index_sitemaps reads the connected property's sitemaps; get_search_index_sitemap accepts the full sitemap URL in path. inspect_search_index_urls requires write scope and accepts 1-10 URLs, plus an optional idempotency_key (1-200 characters) for safe retries. Inspect each per-URL result for errors, even on success. Manual and background inspections share the project's daily allowance; inspect per-URL errors for rate-limit reset evidence. Read-only mode hides URL inspection.

get_page_indexing_report, list_page_indexing_urls and get_page_indexing_settings read stored results and settings without calling Google. The URL list supports cursor paging, group, reason, sitemap, source and substring filters, plus changed_since (an RFC 3339 date-time) and optional history via history="true". changed_since includes URLs with a stored tracked change at or after the timestamp, before pagination. Check completeness and freshness before interpreting totals. update_page_indexing_settings changes the background budget mode or fixed daily limit and accepts an optional idempotency_key (1-200 characters). Manual and background inspections share an estimated property counter with a Pacific midnight reset. Deployment-supported modes are returned in settings; available_quota is self-host only.

Available Tools

140 tools
accept_ai_tracking_suggestionsAccept ai tracking suggestionsBInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
draftsYesDrafts explicitly accepted for saving; this starts no provider work.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

B3.1/5.0
Behavior4/5

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

Annotations only give readOnly=false, openWorld=false, destructive=false. The description adds real behavioral context beyond them: immutable revision preservation, explicit budget consent, stable retry keys (idempotency), and a clear 'starts no paid baseline/provider work' guarantee. It stops short of describing atomicity or partial-failure behavior.

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

Conciseness4/5

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

Three short sentences, no padding, ending on the most decision-relevant exclusion. The opening sentence is the weakest element—vague filler ahead of the more informative behavioral clauses.

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

Completeness3/5

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

No output schema exists, and the complex nested drafts payload is fully documented in the schema, so the description covers the important guarantees (immutability, consent, retry stability, no paid work). It does not address return/confirmation semantics or partial-acceptance behavior for a tool that accepts up to 20 drafts.

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

Parameters3/5

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

Schema description coverage is 100%, including rich nested descriptions for drafts, provenance, and trust references, so the schema already carries full parameter meaning. The description adds no parameter-level detail beyond it, which is the expected baseline of 3.

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

Purpose3/5

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

"Manage project-scoped AI tracking" is a vague category verb that does not state the actual operation—accepting and saving suggestion drafts—even though the name and the drafts schema description do. It never distinguishes itself from siblings like suggest_ai_tracking_prompts, ai_tracking_suggestions_preview, or ai_tracking_suggestions_generate, which all concern the same AI tracking suggestion pipeline.

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

Usage Guidelines2/5

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

No when-to-use guidance and no named alternative. "This does not start an automatic paid baseline" is a scope exclusion but not a tool-selection rule; it never explains when an agent should pick this over the preview/generate/suggest siblings.

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

add_competitorAdd competitorBInspect

Add a tracked competitor domain to a project.

NameRequiredDescriptionDefault
labelNo
domainYesCompetitor domain to track alongside the project.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, which already indicate a non-read, non-destructive mutation. The description adds little beyond 'Add' implying a mutation. It doesn't note idempotency behavior, duplicate handling, or label uniqueness despite having an idempotency_key parameter.

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

Conciseness4/5

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

Single concise sentence, zero waste. Front-loaded with the core action. Could arguably add a bit more given the two undocumented params, but for its length it's efficiently written.

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

Completeness2/5

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

For a mutation tool with no annotations describing side effects, no output schema, and 50% param coverage, the description is thin. It doesn't address duplication behavior despite an idempotency_key, what response is returned, or how it relates to list_competitors/remove_competitor workflow. Sibling tools suggest a competitor workflow the description fails to contextualize.

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

Parameters3/5

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

Schema description coverage is 50% — the domain and project_id parameters have descriptions while label and idempotency_key do not (2 of 4 undocumented). The description mentions 'tracked competitor domain' and 'project' but adds no meaning beyond schema. With partial coverage, the description could compensate for the undocumented label and idempotency_key but doesn't.

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

Purpose4/5

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

The description 'Add a tracked competitor domain to a project' uses a specific verb (Add) plus resource (competitor domain) and scoping (to a project). It clearly distinguishes from siblings like list_competitors and remove_competitor.

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

Usage Guidelines2/5

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

No when-to-use guidance is provided. With siblings list_competitors and remove_competitor, there is no guidance on when adding vs removing/list is appropriate, nor whether a project must exist first or if there are limits on competitor count per project.

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

add_keywordsAdd keywordsAInspect

Add one or more keywords to a project, optionally with tags, target URL, and schedule. Use search_locations and pass its location_key verbatim; an @language qualifier selects a non-default language for that location.

NameRequiredDescriptionDefault
cityNo
tagsNo
topicNo
deviceNoDevice whose search or ranking data is being selected.
intentNo
countryNo
keywordsYesKeyword phrases or keyword objects to add to the project.
locationNo
scheduleNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
target_urlNoCanonical destination URL or site-relative path to associate with the keyword.
location_keyNoCanonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language.
idempotency_keyNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds context about optional attachments (tags, target URL, schedule) and the @language qualifier, but says nothing about idempotency or what happens on duplicate keywords despite an idempotency_key parameter existing.

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

Conciseness4/5

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

Two sentences with no filler, and the core action is front-loaded before the location guidance. The second sentence is dense but each clause carries real information.

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

Completeness3/5

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

For a 13-parameter tool with nested per-keyword overrides and no output schema, the description only covers the headline features and one sourcing hint. It omits the string-vs-object keyword forms, per-keyword overrides, and the 500-item ceiling, leaving the agent to reconstruct much of the call from the schema alone.

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

Parameters3/5

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

Schema description coverage is only 38%, so the description has to compensate. It names tags, target URL, and schedule, and explains the @language qualifier for location_key, but leaves city, topic, device, intent, country, location and idempotency_key entirely unexplained beyond the schema.

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

Purpose4/5

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

States a specific verb and resource: 'Add one or more keywords to a project', and enumerates the optional attributes it accepts. It never distinguishes itself from nearby siblings like create_saved_keywords or research_keywords, so an agent must still infer which one applies.

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

Usage Guidelines4/5

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

Gives a concrete cross-tool workflow: 'Use search_locations and pass its location_key verbatim', which tells the agent how to source a required value. It stops short of saying when to use this tool versus create_saved_keywords or update_keyword, so no exclusions or alternatives are stated.

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

ai_tracking_suggestions_generateGenerate AI prompt hypothesesAInspect

Generate editable hypotheses from the exact reviewed preview with explicit paid consent and a stable retry UUID. Generated prompts are hypotheses with no measured popularity and are saved only after separate acceptance.

NameRequiredDescriptionDefault
consentYesExplicit acceptance of model generation cost with no guaranteed maximum.
previewYesComplete frozen preview returned after explicit review.
project_idYesProject public ID; write membership and scope are enforced.
idempotency_keyYesStable UUID sent as Idempotency-Key; unchanged preview must be reused on retries.

TDQS

A4.3/5.0
Behavior5/5

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

Goes well beyond the annotations: discloses that generation is paid with no guaranteed maximum, that the idempotency UUID must be stable across retries, that outputs are unvalidated hypotheses with no measured popularity, and that saving requires a separate acceptance step. These are exactly the mutation-side behaviors an agent needs and none are 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.

Conciseness5/5

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

Two sentences, zero filler. The generation step and its constraints are front-loaded, and the acceptance caveat follows immediately.

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

Completeness4/5

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

For a tool taking a deeply nested frozen preview contract with no output schema, the description adequately conveys consent, idempotency, and non-persistence. It could say more about what the call returns (hypothesis objects/IDs) and its cost/confirmation behavior, but the core invocation contract is covered.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the description adds interpretive meaning: consent is explicitly 'paid consent', idempotency_key is the 'stable retry UUID', and preview is the 'exact reviewed preview' that must be reused on retries. project_id is not addressed in prose but is self-evident from schema.

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

Purpose4/5

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

States a specific verb and resource: generate editable hypotheses (prompts) from the reviewed preview. It signals its place in the preview → generate → accept chain, which differentiates it from siblings like ai_tracking_suggestions_preview and accept_ai_tracking_suggestions, though it never names those tools directly.

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

Usage Guidelines4/5

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

Clear preconditions are given: it operates on the exact reviewed preview, requires explicit paid consent, and results are not persisted until separate acceptance. It stops short of explicitly naming the preview and accept sibling tools or stating 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.

ai_tracking_suggestions_previewPreview AI prompt model generationA
Read-only
Inspect

Review the full business context, chosen competitors, model and market before model generation. This spend-free forecast never calls a model or reserves budget; its estimate is not a guaranteed maximum.

NameRequiredDescriptionDefault
project_idYesProject public ID; read membership and scope are enforced.
configurationYesReviewed model and market configuration.
input_snapshotYesComplete reviewed input snapshot, at most 5000 serialized characters; never silently truncated.
credential_connection_idNoOptional project provider connection public ID.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: it never calls a model, never reserves budget, and the estimate is not a guaranteed maximum. That is meaningful disclosure about side effects and result trustworthiness beyond the annotations.

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

Conciseness5/5

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

Two tight sentences with zero filler. The intent (review before generation) is front-loaded and the cost disclaimer follows immediately, so nothing is buried.

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

Completeness4/5

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

For a read-only, non-destructive preview tool with a fully documented nested schema and annotations covering safety, this is close to complete. Its reference to an 'estimate' hints at return content despite no output schema. A slightly clearer statement of what the preview returns would close the last gap.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema. The description names the conceptual inputs (business context, competitors, model, market) but adds no syntax, formatting, or edge-case detail beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose4/5

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

The title names it as a preview and the description implies the same with 'forecast.' It states it reviews business context, competitors, model, and market before generation, which is a specific scope. However, the verb 'Review' is slightly vague and it never explicitly names itself as a preview vs. the sibling 'ai_tracking_suggestions_generate', so an agent must infer the difference.

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

Usage Guidelines3/5

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

'...before model generation' implies this is the pre-flight check to run prior to the generate step, which is useful sequencing context. But it never names the alternative tool (ai_tracking_suggestions_generate) or states when-not to use it. Usage is implied rather than made explicit.

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

analyze_ai_visibilityAnalyze AI visibilityAInspect

Inspect provider-observed ChatGPT or Google AI Overview mentions and citations. This is a limited provider dataset, not all user conversations. Requires BYOK or deployment credits, an explicit cost cap, and project write scope.

NameRequiredDescriptionDefault
brandYesBrand name to inspect.
freshNoBypass the stored result and issue a new paid request when admitted.
limitNoMaximum mention rows.
domainYesLocal citation-matching hostname, without a scheme or path. Domain searches remove a leading www. only from the provider filter and require at most 63 characters after removal; local matching keeps the full hostname. Brand searches and prompt comparisons allow up to 253.
platformNoProvider observed dataset: ChatGPT or Google AI Overview.chat_gpt
project_idYesThe public project ID. Project membership and token scopes are enforced.
target_typeNoMatch a brand name or a domain.domain
estimate_onlyNoReturn the cost estimate without paid provider I/O.
language_codeNoDataset language.en
location_codeNoProvider location code.
max_cost_centsYesMaximum accepted provider cost in cents. Estimates and cache reads do not spend credits.
idempotency_keyNoOptional stable retry key, forwarded as the REST Idempotency-Key header.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, destructiveHint=false, and the description is consistent with them while adding real value: it flags the limited/non-representative dataset, the credit/BYOK requirement, the mandatory cost cap, and the write-scope auth need. It stops short of describing return format, pagination, or exactly how credits are spent, 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.

Conciseness4/5

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

Three tight sentences with the operation front-loaded and the constraints following. No filler, though the prerequisites sentence could be marginally tighter.

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

Completeness4/5

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

For a 12-parameter paid-read tool with a fully documented schema and no output schema, the description covers the essential context: provider scope, dataset limitation, and credit/auth requirements. It leaves out how rows are returned or bounded, but the schema already covers limit/estimate_only, so this is nearly complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already carries full parameter semantics and the baseline of 3 applies. The description adds only a passing reference to the two provider datasets and does not clarify the cost-cap or idempotency semantics beyond what the schema states.

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

Purpose4/5

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

States a specific verb ("Inspect") and resource ("provider-observed ChatGPT or Google AI Overview mentions and citations"), so the core operation is unambiguous. However, it offers no differentiation from the large AI-tracking family of siblings (compare_ai_prompts, get_ai_tracking_trends, list_ai_tracking_samples, export_ai_tracking_evidence), so an agent cannot tell from the description alone which one to pick.

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

Usage Guidelines3/5

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

It discloses prerequisites (BYOK or deployment credits, explicit cost cap, project write scope) and a scope caveat (limited provider dataset, not all conversations), which is useful implied context. But it never states when to choose this over the sibling AI-tracking tools or when not to use it, leaving the selection decision to inference.

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

analyze_domain_overviewAnalyze domain overviewAInspect

Requires API write scope because a cache miss can spend the project's own DataForSEO budget. Call with estimate_only=true and max_cost_cents=0 first for a free estimate. Every call requires an explicit max_cost_cents. fresh=true bypasses cache but never removes the cost cap. Returns an estimate, cached report, or report with charged keyword and page module outcomes.

NameRequiredDescriptionDefault
freshNoBypass cached module data and request fresh provider data.
targetYesDomain or subdomain to analyze.
page_limitNoMaximum relevant page rows to include in the initial report.
project_idYesProject id whose provider connection, budget, and Domain Overview snapshot are used.
estimate_onlyNoReturn a free cost estimate without calling the provider or spending budget.
keyword_limitNoMaximum ranked keyword rows to include in the initial report.
language_codeYesLanguage code used for the provider lookup, for example en.
location_codeYesPositive DataForSEO location code identifying the lookup market.
max_cost_centsYesMaximum provider cost for this request, in cents. Use zero for an estimate or explicit cache-only attempt.
scope_overrideNoOverride automatic target scope detection with root-domain or subdomain scope.

TDQS

A4.2/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, openWorldHint=true, destructiveHint=false. The description adds the substantive behavioral facts an agent needs: an API write scope is required, a cache miss can consume the project's own DataForSEO budget, every call requires an explicit cost cap, and fresh never removes that cap. That is exactly the kind of cost/auth context annotations cannot carry.

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

Conciseness4/5

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

Four sentences, all earning their place, with the budget/scope warning front-loaded. Dense but not redundant; a little more framing on what the report contains would improve readability.

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

Completeness4/5

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

With no output schema, the description compensates by sketching the three possible return shapes (estimate, cached report, charged report). Combined with the cost-cap and scope guidance, an agent has enough to call it correctly, though the composition of the report itself is only loosely described.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning on top: it explains the estimate_only + max_cost_cents=0 pairing for a free estimate and clarifies that fresh bypasses cache without lifting the cost cap. These cross-parameter interactions are not spelled out in the schema.

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

Purpose4/5

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

The description conveys that this is the paid Domain Overview analysis that returns an estimate, a cached report, or a report with charged keyword and page module outcomes, which is a specific verb+resource. It stops short of naming the sibling tools (estimate_domain_overview_cost, load_domain_overview_keywords/pages) that a reader would compare against, so differentiation is implied 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.

Usage Guidelines4/5

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

It gives a concrete recommended workflow: call with estimate_only=true and max_cost_cents=0 first for a free estimate, and notes fresh=true bypasses cache. It does not explicitly say when to prefer estimate_domain_overview_cost or the load_domain_overview_* readers over this tool, so exclusions are absent 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.

archive_ai_tracking_promptArchive ai tracking promptC
Destructive
Inspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
prompt_idYesPublic prompt ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description attempts context ('Preserve immutable revisions, explicit budget consent, and stable retry keys') but this phrasing is opaque about what archiving actually does to the prompt, its revisions, or associated runs — no reversibility, scope-of-effect, or consequence is disclosed.

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

Conciseness3/5

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

Only three short sentences, so it is not bloated, but the opening is a generic filler line and the actual action is never front-loaded. The 'preserve/consent/retry keys' clause reads as boilerplate rather than earned content.

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

Completeness2/5

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

For a destructive archive operation with no output schema and no annotations beyond the destructive hint, the description should explain what archiving entails (soft delete vs. hard, effect on revisions/runs, reversibility). Instead it is vague and does not tell the agent what to expect after calling it.

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

Parameters3/5

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

Schema description coverage is 100% and both params (project_id, prompt_id) are self-documented with patterns and scope notes. The description adds no parameter 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.

Purpose2/5

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

The name and title say 'archive_ai_tracking_prompt', but the description opens with the generic 'Manage project-scoped AI tracking' without ever stating that the tool archives a prompt. It restates a broad domain rather than the specific verb+resource, so it adds nothing over the title and is arguably less precise than the name.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no alternatives named — even though obvious siblings exist (archive_ai_tracking_topic, archive_ai_tracking_schedule). The only directional hint is the negative 'This does not start an automatic paid baseline', which is narrow and does not route the agent between archiving tools.

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

archive_ai_tracking_scheduleArchive ai tracking scheduleC
Destructive
Inspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
project_idYesPublic project ID; membership and token scope are enforced.
schedule_idYesPublic schedule ID scoped to this project.

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this mutates/destroys state. The description does not say what archiving does to the schedule, whether it is reversible, or what permissions are required; the vague 'Preserve immutable revisions, explicit budget consent, and stable retry keys' is not actionable and could even read as reassuring in a way that muddies the destructive framing. Only the 'no automatic paid baseline' line adds concrete behavioral value.

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

Conciseness2/5

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

At three sentences it is not bloated, but the middle sentence ('Preserve immutable revisions, explicit budget consent, and stable retry keys') is opaque boilerplate that earns no place, and the vague opener is front-loaded where the action verb should be. Under-specification disguised as conciseness.

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

Completeness2/5

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

For a destructive mutation with no output schema, the description should at minimum explain what archiving means (soft vs. hard, reversibility, effect on associated runs/prompts). None of that is present, leaving the agent with the vague 'Manage...' framing plus annotations to infer the rest.

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

Parameters3/5

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

Both parameters (project_id, schedule_id) are fully documented in the schema with patterns and scope notes (100% coverage), so the schema carries the burden. The description adds nothing about parameter meaning, which is acceptable but no better than the baseline.

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

Purpose2/5

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

The description opens with 'Manage project-scoped AI tracking,' a vague verb+domain that never states what the tool actually does to a schedule. Only the title and tool name ('archive_ai_tracking_schedule') convey the archiving action; the description itself is closer to marketing framing than a statement of function, and it does not distinguish itself from update_ai_tracking_schedule or archive_ai_tracking_prompt.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of siblings like update_ai_tracking_schedule (the non-archiving alternative), and no prerequisites. The only routing-adjacent sentence is the negative disclaimer 'This does not start an automatic paid baseline,' which hints at a side effect rather than when this tool should be chosen.

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

archive_ai_tracking_topicArchive ai tracking topicC
Destructive
Inspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
topic_idYesPublic topic ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is known, but the description does not disclose what archiving destroys, whether it is reversible, or what it does to related prompts/runs. 'Preserve immutable revisions' hints at retention but is not tied to the archive action, and the budget/retry-key sentence reads as unrelated boilerplate.

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

Conciseness2/5

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

Three short sentences, but they are not front-loaded with the actual operation and none of them explain archiving. The content is brief yet mostly filler, so it fails the 'every sentence earns its place' test despite its size.

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

Completeness2/5

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

For a destructive, non-open-world mutation with no output schema, the description should at minimum say what gets archived and what happens to dependent entities. Instead it omits the core action entirely, leaving the agent under-informed about a destructive call.

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

Parameters3/5

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

Schema description coverage is 100%, with topic_id and project_id both documented (patterns and scope enforcement). The description adds no format, syntax, or scoping 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.

Purpose2/5

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

The name says 'archive_ai_tracking_topic', but the description never mentions archiving or topics. It opens with the vague 'Manage project-scoped AI tracking' and spends its remaining sentences on 'immutable revisions, explicit budget consent, and stable retry keys', which do not describe what this tool does. A sibling-aware agent cannot distinguish it from create/update/list_ai_tracking_topic on the description alone.

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

Usage Guidelines2/5

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

No when-to-use guidance is given relative to update_ai_tracking_topic or archive_ai_tracking_prompt. The only conditional clause, 'This does not start an automatic paid baseline', is a narrow exclusion about billing rather than a routing rule, so the agent still cannot tell when archiving is the right call.

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

bulk_update_keywordsBulk update keywordsB
Destructive
Inspect

Bulk mutate keywords by adding tags, removing tags, setting frequency, setting target URL, or deleting.

NameRequiredDescriptionDefault
tagsNo
scheduleNo
frequencyNoSchedule frequency that determines when rank checks run.
operationYesBulk change to apply to every supplied keyword id.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
target_urlNoCanonical destination URL or site-relative path to associate with the keyword.
keyword_idsYesKeyword identifiers returned by the project's keyword list or create response.
idempotency_keyNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation nature is established. The description adds the scope (applies to every supplied keyword id) but doesn't disclose side effects like whether delete is permanent, whether partial failures occur, or rate limits on 500-keyword batches. With destructiveHint already set, the description adds modest value.

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

Conciseness4/5

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

Single sentence, front-loaded with the operative verb, and lists operations efficiently. No wasted words, though it could arguably add one sentence on per-operation parameter requirements without bloat.

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

Completeness3/5

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

The tool has 8 parameters with a nested 'schedule' object and no output schema, and the description covers only the operation dimension. It doesn't clarify which parameters apply to which operations (e.g., set_frequency uses frequency or schedule?), nor disclose behavior when incompatible params are passed alongside an operation. For a multi-mode mutate tool, more behavioral specification is warranted.

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

Parameters3/5

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

Schema coverage is 63%, so the schema documents most parameters including operation enum values, frequency enum, target_url, and idempotency_key format. The description adds mild value by naming the operation types in prose, but the description-to-operation mapping isn't explicit (e.g., no statement that 'add_tags' requires the tags param). The 37% uncovered schema surface (schedule nested object, jitter_minutes) isn't compensated by description detail.

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

Purpose4/5

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

Description uses a specific verb+resource ('Bulk mutate keywords') and enumerates the exact operation types (adding tags, removing tags, setting frequency, setting target URL, deleting). It distinguishes from siblings like update_keyword (single) and set_keyword_target_url, though it doesn't explicitly name a distractor sibling.

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

Usage Guidelines3/5

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

The word 'Bulk' implies this is for many keywords at once versus single-keyword siblings, providing implicit usage context. However, no explicit guidance is given about when to use this vs set_keyword_target_url or update_keyword, nor any mention of required project_id context or alternative tools for single-keyword operations.

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

cancel_ai_tracking_runCancel ai tracking runCInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
run_idYesPublic tracking run ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already establish the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description's job is to add context like what gets halted, whether cancellation is undoable, and how run_id/retry keys behave. Instead it offers opaque phrases ('preserve immutable revisions, explicit budget consent') that don't clarify the effect of a cancel and add little over 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.

Conciseness2/5

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

It is short, but it is not front-loaded: the actual action never appears, and the three sentences are jargon-heavy clauses that don't earn their place. The negative 'does not start an automatic paid baseline' is filler that consumes space without conveying usable information.

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

Completeness2/5

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

For a mutation tool with a rich AI-tracking sibling set, the description should explain cancellation semantics (idempotency, state transition, relation to retry keys), but it omits all of this. The schema covers inputs fully, yet the behavior of the operation remains unexplained, leaving an agent unable to predict the outcome.

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

Parameters3/5

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

Schema description coverage is 100% and both params (project_id, run_id) are fully documented with patterns in the schema, so baseline 3 applies. The description adds no additional meaning about the identifiers or their scope beyond what the schema already states.

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

Purpose2/5

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

The description says only 'Manage project-scoped AI tracking', which never identifies the actual action (canceling a run). The specific verb+resource exists only in the tool name/title, so the text is essentially a vague restatement of the namespace rather than a purpose statement. It does not distinguish itself from create_ai_tracking_run, retry_ai_tracking_run, or get_ai_tracking_run.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of sibling alternatives such as retry_ai_tracking_run or get_ai_tracking_run. The only scoping sentence ('does not start an automatic paid baseline') is a confusing non-exclusion that doesn't tell an agent when to pick this tool.

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

compare_ai_promptsCompare AI promptsAInspect

Run the same synthetic prompt against supported models and compare answers, brand mentions and returned citations. These tests are not observed ChatGPT/AIO visibility. Requires a guaranteed hard cap or explicit actual-cost consent with an advisory estimate limit, and project write scope.

NameRequiredDescriptionDefault
brandYesBrand name to inspect.
freshNoHard-cap mode bypasses stored results. Actual-cost retries always reuse their durable request identity; fresh never re-dispatches a pending, unknown or completed attempt.
domainYesLocal citation-matching hostname, without a scheme or path. Domain searches remove a leading www. only from the provider filter and require at most 63 characters after removal; local matching keeps the full hostname. Brand searches and prompt comparisons allow up to 253.
modelsNoDistinct model IDs advertised by get_ai_research_catalog.
promptYesSame synthetic prompt for each model; maximum 2000 UTF-8 bytes.
project_idYesThe public project ID. Project membership and token scopes are enforced.
web_searchNoEnable provider web search when supported.
cost_policyNoHard cap or explicitly consented non-guaranteed actual provider cost.hard_cap
estimate_onlyNoReturn the cost estimate without paid provider I/O.
max_cost_centsNoMaximum accepted provider cost in cents. Estimates and cache reads do not spend credits.
idempotency_keyNoStable retry key sent as a header; actual-cost mode requires a UUID also sent in the body.
country_iso_codeNoCountry hint; requires web search.
max_output_tokensNoMaximum output tokens; provider limits also apply.
response_languageNoRequested response language.en
estimate_credentials_refNoCredential identity from the estimate, required for actual-cost execution.
estimated_cost_limit_centsNoAdvisory estimate limit in cents for actual-cost consent.
actual_cost_acknowledgementNoExplicit acknowledgement that actual provider cost has no guaranteed maximum.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true), the description discloses substantial behavior: it requires either a guaranteed hard cap or explicit actual-cost consent with an advisory estimate limit, requires project write scope, and warns the tests are synthetic rather than observed visibility. This is exactly the kind of cost/auth/caveat context annotations cannot carry.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the primary action, then the visibility caveat, then the requirements. No waste, though the requirements sentence stacks two distinct constraints and could be split for cleaner scanning.

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

Completeness4/5

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

For a 17-parameter tool with a complex oneOf cost model, no output schema, and no cost-relevant annotations, the description covers the essential cost-consent, scope, and caveat context and even sketches the return content (answers, brand mentions, citations). It stops short of the idempotency/retry semantics, but those are covered in the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter (cost_policy, max_cost_cents, estimate_credentials_ref, etc.) is already documented in the schema. The description restates the cost-policy concept at a high level but adds no parameter-level detail 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.

Purpose5/5

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

States a specific verb and resource (run the same synthetic prompt against supported models and compare answers, brand mentions, citations) and explicitly carves out what it is not ('not observed ChatGPT/AIO visibility'), which separates it from the ai_tracking and ai_visibility siblings. An agent can tell what this 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.

Usage Guidelines4/5

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

The 'not observed ChatGPT/AIO visibility' line gives clear context for when this tool is the wrong choice versus observed-visibility tools, and the cost/scope prerequisites are stated. However, it never names a concrete alternative sibling to route to, so the when-not 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.

connect_providerConnect providerAInspect

Connect or update credentials for a project provider. SERP providers are dataforseo and serpapi; analytics providers are ga4, gsc, and plausible. For Plausible, credentials.login is the site domain configured in Plausible (site_id, for example example.com) and defaults to the project domain when omitted; credentials.api_key is the Stats API token. Self-hosted providers such as Plausible accept an optional credentials.endpoint base URL. Use priority for ordering (0 promotes the provider to primary and renumbers the rest; omitted keeps a reconnected provider's place and appends a new one); the deprecated primary=true alias promotes priority 0 and primary=false is a no-op.

NameRequiredDescriptionDefault
loginNo
secretNo
enabledNo
primaryNoDeprecated compatibility alias: true promotes priority 0; false is a no-op.
priorityNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
credentialsNo
provider_idYesProvider id. Known values: dataforseo, serpapi, ga4, gsc, plausible.
cost_per_checkNo
idempotency_keyNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false), and the description adds real behavioral value beyond them: priority=0 renumbers existing providers, omitted priority preserves a reconnected provider's place, and primary=true is a deprecated alias that promotes priority 0 while primary=false is a no-op. It does not mention idempotency behavior despite having an idempotency_key parameter, which is the main gap.

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

Conciseness4/5

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

The core action is front-loaded and the dense semicolon-clauses are packed with provider-specific detail rather than filler. It is long but nearly every clause conveys a distinct fact; slightly more structure (e.g., separating the priority rules) would improve scanability.

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

Completeness4/5

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

For a 10-parameter mutating tool with a nested credentials object, no output schema, and low schema coverage, the description supplies the provider-specific knowledge an agent could not infer from the schema. Missing pieces are secondary: idempotency semantics, what enabled/cost_per_check do, and any return/verification guidance.

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

Parameters3/5

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

With only 30% schema description coverage across 10 parameters, the description must compensate, and it does for credentials.login, credentials.api_key, credentials.endpoint, priority, and primary. However, top-level login, secret, enabled, cost_per_check, and idempotency_key are left entirely unexplained in both schema and description. Partial compensation, not full.

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

Purpose4/5

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

States a specific verb+resource: 'Connect or update credentials for a project provider,' then enumerates the valid provider ids by category (dataforseo/serpapi vs ga4/gsc/plausible). It is clearly distinguished from credential-unrelated siblings such as update_provider_settings and disconnect_provider by focusing on credentials, though it never names those alternatives explicitly.

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

Usage Guidelines4/5

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

Gives concrete operational context: which providers accept which credential fields, when credentials.login defaults to the project domain, when endpoint is needed, and how priority behaves for reconnected vs new providers. It does not state when to prefer this over test_provider_connection or update_provider_settings, so it stops short of explicit 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.

create_agent_reportCreate agent reportAInspect

Save an agent analysis with provenance. Its deep link inherits existing project access controls. Producer kinds site_audit, ai_visibility and prompt_explorer are reserved and rejected here.

NameRequiredDescriptionDefault
bodyYesStructured analysis. Maximum 256 KiB; untrusted text is rendered safely.
kindYesExternal analysis kind; site_audit, ai_visibility and prompt_explorer are reserved.
titleYesHuman-readable report title.
project_idYesThe public project ID. Project membership and token scopes are enforced.
provenanceNoSource attribution and limitations. Maximum 32 KiB.
idempotency_keyNoOptional stable retry key, forwarded as the REST Idempotency-Key header.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the bar is lowered. The description adds real context beyond them: the deep link inherits existing project access controls, and three producer kinds (site_audit, ai_visibility, prompt_explorer) are reserved and rejected. It does not describe what a successful save returns or any rate limits.

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

Conciseness4/5

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

Three short sentences with no filler, and the core action is front-loaded in the first sentence. The reserved-kind clause is compressed but readable; a slightly more explicit framing of the access-control note would improve it, but nothing is wasted.

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

Completeness4/5

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

For a write tool with nested objects, no output schema, and 6 parameters, the description covers the important behavioral context: access-control inheritance and the reserved-kind rejection. Remaining gaps (return shape, idempotency semantics) are handled by the schema descriptions, so the definition is close to complete.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents kind, body size limits, project_id enforcement, provenance and idempotency_key. The description's mention of provenance and the reserved kinds largely repeats what the kind parameter description already states. Baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource: saving an agent analysis (report), with a qualifier about provenance. It is clearly distinguishable from siblings like get_agent_report and list_agent_reports. It does not explicitly name those siblings, but the create-vs-read distinction is unambiguous from the wording.

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

Usage Guidelines3/5

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

Usage is implied: this is where an external agent persists an analysis it produced. The reserved-kind sentence tells the agent when this tool will reject a call, which is useful, but there is no explicit when-to-use/when-not or routing to an alternative tool (e.g., get_agent_report for retrieval).

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

create_ai_tracking_promptCreate ai tracking promptBInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
textYesPrompt text; updates create a new immutable revision.
labelNoOptional display label.
pausedNoPause or resume future planning without altering historical samples.
categoryNoPrompt intent captured in its immutable revision.
topic_idNo
project_idYesPublic project ID; membership and token scope are enforced.
generation_referenceNoTrusted model generation provenance, verified against the completed project generation.
provider_dataset_referenceNoTrusted provider dataset provenance, validated against the project report.

TDQS

B3/5.0
Behavior4/5

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

Beyond the annotations (write, non-destructive, closed-world), the description discloses that revisions are immutable, that explicit budget consent is involved, and that no automatic paid baseline is started. These are real behavioral traits not present in the structured fields. Some phrases ('budget consent,' 'stable retry keys') are cryptic and map to no schema field, which weakens the clarity but does not negate the 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.

Conciseness3/5

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

Three short sentences with no padding, which is good. However, it front-loads the vaguest sentence ('Manage project-scoped AI tracking') and the middle sentence is a cryptic list that does not clearly connect to creating a prompt. Efficient but not well-structured around the actual action.

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

Completeness3/5

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

This is a create mutation with eight parameters, nested provenance objects, and no output schema. The description covers the immutability/cost angle but says nothing about what is created or how the generation_reference / provider_dataset_reference provenance objects are expected to be supplied. The rich schema (88% coverage) and annotations carry most of the weight, leaving this just adequate.

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

Parameters3/5

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

Schema description coverage is 88%, so the schema already documents nearly all eight parameters (text, label, paused, category, topic_id, project_id, and the two nested provenance objects). The description adds no parameter-level meaning, 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.

Purpose3/5

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

The tool name signals creation, but the description opens with the generic verb 'Manage project-scoped AI tracking,' which does not actually state that a prompt is created. It never distinguishes this tool from its obvious siblings update_ai_tracking_prompt, archive_ai_tracking_prompt, or list_ai_tracking_prompts. An agent can infer the purpose from the name but the description itself is vague.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no named alternative (e.g., update vs create vs archive). The only usage-relevant statement is the negative scope note 'This does not start an automatic paid baseline,' which clarifies cost behavior but not tool selection. This is essentially no guidance.

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

create_ai_tracking_runCreate ai tracking runBInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
consentYesExplicit acceptance of paid provider work for this reviewed configuration.
deadlineYesUTC deadline after which work must stop.
planned_atNoUTC scheduled occurrence; supplied together with schedule_id.
project_idYesPublic project ID; membership and token scope are enforced.
prompt_idsYesActive public prompt IDs to observe; each run captures immutable revisions.
schedule_idNoPublic schedule ID scoped to this project.
configurationsYesExact observation configurations to review before paid launch.
budget_revisionYesBudget revision returned by preview.
idempotency_keyYesStable launch retry key sent as REST Idempotency-Key; payload must remain identical.
consent_revisionYesConsent identity returned by preview.
credential_versionYesCredential identity version returned by preview.
credential_connection_idYesProvider connection returned by the reviewed preview.

TDQS

B3/5.0
Behavior4/5

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

Annotations already declare it is a non-read-only, non-destructive, open-world mutation, so the safety bar is partly met. The description adds genuinely useful context beyond that: paid provider work requiring "explicit budget consent," immutable revisions, and stable idempotent retry keys. It stops short of explaining permissions or what happens on retry with a changed payload, but the consent/idempotency disclosure 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.

Conciseness3/5

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

Three short sentences with no padding, so it is appropriately sized. However the leading sentence is near-filler ("Manage project-scoped AI tracking") and the most decision-relevant point (this launches paid work) is buried in the trailing clause, so front-loading is weak.

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

Completeness3/5

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

For a 12-parameter, 10-required mutation with no output schema, the description conveys the consent/idempotency theme but omits the critical preview-first workflow (budget_revision, consent_revision, credential_version all "returned by preview") and any notion of the response. The rich schema compensates for parameter detail, but the dependency chain an agent must follow is left unstated.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter including the consent const, revisions, and idempotency_key is already documented in the schema. The description loosely echoes these concepts ("immutable revisions, explicit budget consent, stable retry keys") but adds no format or constraint 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.

Purpose3/5

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

The opening verb is generic ("Manage project-scoped AI tracking") rather than stating that this creates a run; the create-specific intent is only inferable from the title and from clauses about revisions/consent. The closing line ("does not start an automatic paid baseline") does help scope it against an auto-launch path, but a sibling like preview_ai_tracking_run is never named for contrast. Purpose is roughly clear but not sharply stated.

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

Usage Guidelines2/5

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

There is no explicit when-to-use guidance or named alternative. The schema repeatedly references values "returned by preview," implying preview_ai_tracking_run must be called first, yet the description never states this prerequisite or when to choose this tool over retry/cancel/schedule siblings. Only a faint negative scoping ("not an automatic paid baseline") is provided.

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

create_ai_tracking_scheduleCreate ai tracking scheduleCInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
cronYesCron recurrence evaluated in the schedule timezone.
nameYesHuman-readable schedule name.
consentNoExplicit acceptance of paid recurring work; the API requires true when enabling a schedule or changing configuration while enabled.
enabledNoSchedules default to disabled; no paid baseline or missed-run catch-up.
timezoneYesIANA timezone for this schedule.
project_idYesPublic project ID; membership and token scope are enforced.
next_run_atNoNext planned UTC occurrence, when provided.
configurationYesReviewed immutable configuration for each scheduled occurrence.

TDQS

C2.7/5.0
Behavior4/5

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

Annotations only establish that this is a non-read-only, non-destructive write with no open-world effect. The description adds real behavioral context beyond that: immutable revisions are preserved, budget consent must be explicit, and the operation is idempotent via stable retry keys. It also clarifies that no paid baseline auto-starts, which complements the schema's enabled=false default.

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

Conciseness3/5

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

Three short, front-loaded sentences with no padding, which is structurally sound. However, the first sentence spends its budget on a vague verb phrase instead of the actual create action, and the "stable retry keys" claim points at functionality not represented anywhere in the schema.

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

Completeness2/5

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

For an 8-parameter tool with a deep nested configuration object, a required preview-derived revision set, and no output schema, the description omits the prerequisite workflow (obtain budget/consent/credential revisions via preview) and any reference to the sibling that performs it. The description leaves the agent without the context needed to call this correctly on the first attempt.

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

Parameters3/5

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

Schema description coverage is 100% and the nested configuration object documents every field (budget_revision, consent_revision, credential_connection_id, etc.), so the schema does the heavy lifting. The description's "explicit budget consent" loosely maps to the consent parameter, but "stable retry keys" references no parameter in the schema, adding noise rather than meaning.

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

Purpose2/5

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

The description opens with "Manage project-scoped AI tracking," a generic verb that does not match the tool's actual action (creating a schedule) and does not distinguish it from siblings like update_ai_tracking_schedule, archive_ai_tracking_schedule, or create_ai_tracking_run. Only the name/title conveys the create-schedule action; the prose itself never states it.

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

Usage Guidelines2/5

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

"This does not start an automatic paid baseline" is a useful negative scope statement, but there is no guidance on when to call this versus preview_ai_tracking_run, update_ai_tracking_schedule, or list_ai_tracking_schedules, and no stated prerequisite (e.g. that a reviewed preview must be obtained first). Usage must be inferred entirely from the schema.

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

create_ai_tracking_topicCreate ai tracking topicCInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
nameYesHuman-readable topic name.
pausedNoPause or resume future planning for this topic without changing historical samples.
project_idYesPublic project ID; membership and token scope are enforced.
descriptionNoOptional topic description.

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds some behavioral context, notably that no automatic paid baseline is started, which sets cost expectations for this mutation. However, 'immutable revisions, explicit budget consent, and stable retry keys' is cryptic jargon that doesn't clearly tell the agent what side effects or prerequisites to expect.

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

Conciseness3/5

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

Three short sentences with little padding, and the negative cost statement is placed last. However, the middle sentence is dense, abstract jargon whose wording doesn't earn its place by informing the caller about this specific tool.

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

Completeness3/5

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

For a create mutation with no output schema and fully documented parameters, the safety profile is covered by annotations. What is missing is downstream context: what a 'topic' scopes (prompts, schedules, runs) and how it relates to the surrounding ai_tracking tool family. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (project_id, name, paused, description) are documented in the schema. The description adds nothing about parameter formats or constraints, so the baseline of 3 applies.

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

Purpose3/5

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

The description opens with 'Manage project-scoped AI tracking,' which is a vague verb rather than the create action the name implies. It never states that a new topic is being created, nor does it distinguish itself from update_ai_tracking_topic or list_ai_tracking_topics. Only the name/title carry the actual purpose.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives such as update_ai_tracking_topic or archive_ai_tracking_topic. The single negative statement ('does not start an automatic paid baseline') hints at a cost boundary but is not framed as a selection criterion against siblings.

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

create_alert_ruleCreate alert ruleCInspect

Create an alert rule for project rank changes, thresholds, SERP features, or competitors.

NameRequiredDescriptionDefault
nameYesHuman-readable name chosen for the alert rule.
top_nNo
enabledNo
channelsNo
severityNoAlert severity. When omitted, the server chooses a condition-specific default.
change_pctNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
target_idsNo
target_typeNo
serp_featureNo
recipient_idsNo
condition_typeYesCondition that determines when the alert rule fires.
drop_positionsNo
idempotency_keyNo
competitor_domainNo
threshold_positionNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations confirm this is a non-read, non-destructive mutation (readOnlyHint=false, destructiveHint=false), so the description carries the burden. It does not state whether channels default to something, whether idempotency_key guarantees deduplication behavior, whether unmapped conditions silently ignore irrelevant parameters, or what the response contains. For a create operation with no output schema, this is thin behavioral disclosure.

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

Conciseness3/5

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

The single-sentence description is concise, but it is under-specified rather than efficiently specified. It provides a topical overview without the operational detail needed for a tool with 16 parameters and 10 condition enums. Conciseness is earned by packing the right info tightly, not by brevity alone.

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

Completeness2/5

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

Given the tool's complexity (16 params, 10 condition_type enums, condition-specific parameter couplings) and low schema coverage (25%), the description should map conditions to their relevant optional parameters and explain cross-field dependencies. It does none of this. The absence of this mapping makes the tool hard to invoke correctly.

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

Parameters2/5

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

Schema description coverage is only 25% (most params are undocumented), and the description mentions only the four trigger categories. It does not explain which parameters apply to which condition_type (e.g., change_pct applies to change_pct condition, drop_positions to position_drop, competitor_domain to competitor_overtake, serp_feature to serp_feature), which is the essential semantic mapping for correctly invoking this tool. The description adds no parameter-level guidance beyond naming the trigger types.

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

Purpose4/5

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

The description states a clear verb+resource ('Create an alert rule') and enumerates the specific trigger categories: project rank changes, thresholds, SERP features, or competitors. This distinguishes it from sibling tools like create_webhook and create_signal. However, it doesn't name alternative events or clarify that these categories map to specific condition_type enum values.

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

Usage Guidelines2/5

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

No guidance on when to use this vs update_alert_rule, list_alert_rules, or delete_alert_rule. The description doesn't specify prerequisites such as needing a valid project_id or recipient_ids configuration, nor does it clarify how condition_type interacts with the optional parameters. With 16 parameters and many sibling alert tools, the lack of selection context is a notable gap.

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

create_api_keyCreate API keyAInspect

Create a new API key for the authenticated project. The raw token is returned once in the response and cannot be retrieved again; store it securely.

NameRequiredDescriptionDefault
nameYesLabel you choose to identify the API key.
scopeNoAccess tier. When omitted, defaults to admin for backward compatibility.admin
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
expires_in_daysNoLifetime in days. Use null for no expiry.
idempotency_keyNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations (readOnlyHint=false, destructiveHint=false) partially cover the safety profile. The description adds valuable behavior: 'The raw token is returned once in the response and cannot be retrieved again; store it securely.' This is important operational context beyond the annotation declarations. No contradiction with annotations since readOnlyHint=false aligns with a create/mutation operation.

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

Conciseness4/5

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

Two sentences, efficient and front-loaded with the core purpose followed by the critical security note. No redundant phrasing or filler. Slightly more could be said about idempotency or scope selection, but the current length is well-balanced.

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

Completeness4/5

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

For a create tool with 5 params (80% schema-covered), no output schema, and readOnlyHint=false, the description covers the key behavioral risk (one-time token return). It doesn't detail the response shape, but for a creation tool without an output schema this is acceptable. Could note that scopes map to access tiers, but the schema enum already covers that.

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

Parameters3/5

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

Schema description coverage is 80%, so most parameters (name, scope, project_id, expires_in_days) carry inline documentation. The description adds the critical warning that the token is one-time-returnable, but doesn't address idempotency_key (which has no schema description) or add semantics beyond what the schema provides. Baseline 3 is appropriate; no major compensation needed.

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

Purpose4/5

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

Clear verb+resource: 'Create a new API key for the authenticated project.' It distinguishes itself from sibling tools like create_project_api_key, create_personal_token, and revoke_api_key by clarifying it creates keys for 'the authenticated project,' though it doesn't explicitly differentiate from list_api_keys or the project-scoped variants.

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

Usage Guidelines3/5

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

The description implies usage via 'for the authenticated project' but doesn't explicitly state when to choose this over create_project_api_key or create_personal_token, nor explain the distinction between API keys and personal tokens. Given the large sibling set with overlapping create-key tools, this is a notable gap — no exclusions or alternative guidance is provided.

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

create_personal_tokenCreate personal tokenAInspect

Create a personal access token. The raw account-wide token is returned once. Requires an admin PAT.

NameRequiredDescriptionDefault
nameYesLabel you choose to identify the personal token.
scopeNo
expires_in_daysNo
idempotency_keyNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, openWorldHint=false, destructiveHint=false, leaving the description as the primary behavioral disclosure source. The description usefully discloses that the raw token is returned only once (a critical one-time-visibility behavior) and that admin permission is required. These add real value beyond the annotations.

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

Conciseness5/5

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

Two sentences, zero wasted words. Every sentence earns its place: one states the purpose, the other discloses the critical one-time-return behavior and the admin prerequisite.

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

Completeness4/5

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

For a token creation tool with no output schema referenced, the description covers the key behavioral facts: single-return of raw token, admin requirement. With 4 parameters and low schema coverage, it could have elaborated more on scope/expiration semantics, but the essential agent decision-making info is present.

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

Parameters4/5

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

Schema coverage is only 25% (only 'name' has a description). The description adds the crucial semantic that the returned value is a raw account-wide token visible only once, which helps understand parameter intent. While it doesn't detail expires_in_days or scope semantics specifically, the description compensates somewhat for the low schema coverage by explaining the token's nature.

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

Purpose4/5

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

The description clearly states 'Create a personal access token' with a specific verb and resource. It distinguishes from siblings like revoke_personal_token and list_personal_tokens, though it doesn't explicitly name them.

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

Usage Guidelines3/5

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

The description mentions 'Requires an admin PAT' which gives a prerequisite, and the context of 'raw account-wide token returned once' implies single-use visibility. However, it doesn't explicitly state when to use this vs create_api_key or create_project_api_key, which are closely related siblings.

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

create_projectCreate projectCInspect

Create a project. Requires a personal access token with write scope.

NameRequiredDescriptionDefault
nameYesHuman-readable name chosen for the new project.
domainYesPrimary domain the new project tracks.
tracking_scopeNo
idempotency_keyNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations declare readOnlyHint=false, which correctly signals this is a write operation, and the description confirms it with 'Requires a personal access token with write scope.' However, the description doesn't disclose what happens on successful creation (returned project ID?), whether projects are immediately active, or whether the domain must be verified. With minimal annotation coverage (no openWorldHint or destructiveHint context), the description carries moderate burden but only covers the auth angle.

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

Conciseness4/5

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

Two short sentences with no wasted wording. The description is appropriately brief and the key behavioral caveat (write-scope token) is front-loaded with the core action. It earns its place without fluff.

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

Completeness2/5

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

For a creation/mutation tool with no output schema and only 50% parameter coverage, the description is underdeveloped. It doesn't state what a successful creation returns, how to reference the new project afterward, why idempotency_key matters, or what domain validation/tracking entails. Among 100+ siblings, the description provides insufficient context for an agent to correctly create a project and use the result.

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

Parameters2/5

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

Schema description coverage is 50% — name and domain have descriptions, but tracking_scope and idempotency_key have NO descriptions. The description adds nothing about these undocumented parameters. tracking_scope's enum (city/country) leaves the agent guessing what it filters. idempotency_key is a critical semantic concept (deduplication) that the description doesn't explain at all, and the description doesn't compensate for this gap.

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

Purpose3/5

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

The description states 'Create a project' which identifies the action and resource, but it doesn't specify what creating a project entails or how it differs from similar creation tools among siblings (create_saved_view, create_signal, create_webhook, etc.). The verb+resource is clear but the scope and nature of a 'project' (a core entity with domain tracking) isn't elaborated.

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

Usage Guidelines2/5

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

No guidance on when to use this tool or what prerequisites/context are needed beyond the auth note. The description doesn't mention that this is typically a foundational setup step, when to use tracking_scope, or contrast with update_project/delete_project for lifecycle management. It only mentions the auth requirement, not usage context.

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

create_project_api_keyCreate project API keyAInspect

Create a project-scoped API key for CI or automation. The raw key is returned once.

NameRequiredDescriptionDefault
nameYesLabel you choose to identify the project API key.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.5/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, which is sparse. The description adds meaningful context: 'The raw key is returned once' — a critical behavioral fact warning the agent that the secret cannot be retrieved again after creation. This is valuable transparency beyond the annotations.

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

Conciseness5/5

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

Two sentences, zero waste. 'Create a project-scoped API key for CI or automation' plus the critical one-time-return warning. Every sentence earns its place.

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

Completeness3/5

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

The tool is a mutation (creates a resource) with no output schema, no enums, and moderate complexity (3 params). The description captures the essential purpose and the one-time-return caveat, but doesn't explain the idempotency_key semantics, what happens if creation fails/duplicates, or whether this key can be revoked via a sibling tool (revoke or list_project_api_keys). Given the annotation sparseness, a bit more context would help.

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

Parameters3/5

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

Schema description coverage is 67% (2 of 3 params documented). The description mentions 'project-scoped' which implies project_id is required, and says 'raw key returned once' indicating creation semantics. However, it adds little beyond the schema for the two documented parameters, and idempotency_key (the one undocumented param) gets no additional explanation in the description despite being non-obvious in purpose.

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

Purpose4/5

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

The description clearly states the verb+resource (create a project-scoped API key) and purpose (for CI or automation), which distinguishes it from 'create_api_key' (likely a general API key creator) and 'create_personal_token'. It doesn't explicitly call out sibling differentiation but the 'project-scoped' scoping does differentiate it.

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

Usage Guidelines2/5

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

The description states the key is for 'CI or automation' which gives some sense of when to use it, but it doesn't provide exclusions or explicitly mention alternatives like create_api_key or create_personal_token. No guidance on when NOT to use this tool versus the other key/token creation tools is given.

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

create_saved_keywordsCreate saved keywordsAInspect

Save keyword ideas without starting paid rank tracking. Keywords already tracked or saved are skipped.

NameRequiredDescriptionDefault
keywordsYesKeyword ideas to save without starting rank tracking.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds a genuinely non-obvious behavioral trait: duplicates that are already tracked or saved are silently skipped rather than erroring. It does not mention auth needs, rate limits, or the 500-item cap.

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

Conciseness5/5

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

Two short sentences, zero filler, with the core purpose front-loaded and the dedup rule immediately following. Every sentence earns its place.

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

Completeness3/5

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

For a create tool with annotations covering safety and a schema covering params, the description covers purpose and idempotency, which is adequate. It omits what a successful call returns and the 500-item batch limit, which an agent would want before a bulk save, and there is no output schema to fill that gap.

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

Parameters3/5

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

Schema description coverage is 67%, and the schema itself documents keywords and project_id (including the prj_ pattern and a pointer to list_projects). The description adds no parameter-level detail beyond restating 'keyword ideas', so the baseline 3 for a mostly self-documenting schema is appropriate.

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

Purpose4/5

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

States a specific verb (save) and resource (keyword ideas) and adds a scope qualifier ('without starting paid rank tracking') that implicitly separates it from add_keywords. However, it never names the sibling it differs from, so the differentiation relies on the reader inferring the contrast with rank-tracking tools.

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

Usage Guidelines3/5

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

The 'without starting paid rank tracking' phrasing implies the use case (research-only keyword storage), and the skip rule implies re-running is safe. But there is no explicit when-to-use vs add_keywords/research_keywords guidance and no prerequisites stated.

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

create_saved_viewCreate saved viewAInspect

Create a saved keyword view for a project. Known country filter values: 'all' or a supported market country code such as us, gb, ca, au, de, fr, es, it, nl, se, pl. Known serp filter values: ai, featured, image, paa, sitelinks, video. The API validates both against its data-driven market list.

NameRequiredDescriptionDefault
nameYesHuman-readable name chosen for the saved view.
configYesSaved-view filters and search settings chosen by the user.
surfaceNoApplication surface whose saved views should be listed or created.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations include readOnlyHint=false, openWorldHint=false, destructiveHint=false, meaning this is a mutating but not destructive operation within a bounded API. The description does not describe side effects (e.g., whether creating a view overwrites an existing one, whether validation rejects the request, response behavior). Given the readOnlyHint=false already signals mutation, the description adds the validation note but little else about behavioral effects.

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

Conciseness4/5

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

The description is compact and front-loaded, getting to the point in the first sentence. The second sentence adds useful validation context. It is appropriately sized for the tool's complexity, though it could be slightly more organized.

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

Completeness4/5

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

Given the complex nested config schema with two variants (keywords vs competitors surfaces), the description is reasonably complete. It lacks details about return values but there is no output schema, so some expectation explanation would help. The dual-surface ambiguity mentioned in purpose is the main completeness gap.

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

Parameters4/5

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

Schema description coverage is 80%, so the schema documents most parameters well (project_id, name, config). The description adds value by enumerating known valid values for the country/serp filters within config, which is genuinely useful context beyond the schema. The idempotency_key parameter is not described in the schema and remains unexplained, a minor gap.

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

Purpose4/5

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

The description states the tool creates a saved keyword view for a project, using a specific verb+resource. However, the input schema shows the config can represent two surfaces (keywords or competitors), yet the description only mentions 'keyword view' and the surface parameter permits both 'keywords' and 'competitors'. This creates slight ambiguity about whether it also creates competitor views.

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

Usage Guidelines3/5

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

The description provides helpful known-valid values for country and serp filters, which acts as implicit usage guidance. However, it does not distinguish this from siblings like create_alert_rule, list_saved_views, or explain when a saved view should be created vs. other operations. No explicit when/when-not guidance is provided.

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

create_signalCreate signalAInspect

Ingest a signal for the key-scoped project: an external event such as a deploy, CMS content change, or custom API event that may explain ranking movements. source must be deploy, cms, or api; type is a dot-separated identifier such as "deploy.completed" or "cms.page_updated". Optionally attach an ISO-8601 happened_at (defaults to now), a related keyword_id, an http(s) url, a severity (info, warning, or critical), and a JSON payload of up to 8KB.

NameRequiredDescriptionDefault
urlNourl HTTP or HTTPS URL supplied by the endpoint owner.
typeYesDot-separated signal type such as "deploy.completed".
sourceYesSystem or workflow that produced the new signal.
payloadNoJSON object payload. Serialized payloads above 8KB are rejected.
severityNoSignal severity. Defaults to "info".
keyword_idNoIdentifier of the tracked keyword to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
happened_atNoISO-8601 date-time when the signal happened. Defaults to now on the server.
idempotency_keyNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=false. The description adds useful constraints like the 8KB payload limit and the source/type validation rules, plus the happened_at default-to-now behavior. But it doesn't fully disclose the full behavioral surface for a mutation tool - e.g., whether idempotency is guaranteed, any rate limits, or what happens on duplicate signals.

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

Conciseness5/5

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

A single compact paragraph that front-loads the core purpose, then efficiently lists the optional parameters with their types and defaults. Every sentence earns its place; there's zero padding. The enum constraints and format examples are packed into a concise but complete description.

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

Completeness4/5

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

For a create-type tool with 9 params (only 2 required), the description covers the essential semantics well: required source/type constraints, optional happened_at, url, severity, and payload limits. It would benefit from noting whether idempotency_key provides deduplication guarantees, but given the high schema coverage (89%), enums on 2 params, and default behaviors documented, the completeness is strong for the tool's complexity.

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

Parameters3/5

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

Schema description coverage is high at 89%, so the schema carries most of the parameter documentation weight. The description adds value by explaining the 'type' pattern examples ('deploy.completed', 'cms.page_updated'), source enum values, and specifying event context. However, it doesn't elaborate on the idempotency_key purpose or keyword_id semantics beyond schema, which the schema describes reasonably well.

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

Purpose5/5

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

Description uses a specific verb+resource ('Ingest a signal') and clearly defines the resource as an external event (deploy, CMS content change, or custom API event) explaining ranking movements. It distinguishes itself from sibling tools by its unique purpose of creating signals versus reading/searching them (list_signals exists as sibling).

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

Usage Guidelines4/5

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

The description clearly states it's for ingesting external events that may explain ranking movements, giving concrete examples (deploy, CMS content change, custom API event). It implies this is for signaling the system about external events but doesn't explicitly contrast with alternatives or state when NOT to use it. However, the sibling list_signals clearly pairs with it, and the 'key-scoped project' scoping gives context.

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

create_team_inviteCreate team inviteCInspect

Invite a user to a project team with an admin, member, or viewer role.

NameRequiredDescriptionDefault
roleYesProject role to grant to the invited or existing team member.
emailYesEmail address of the person to invite to the project.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare this is a non-read-only, non-destructive, open-world write, so the safety profile is covered. The description adds nothing beyond that — it does not say an invitation email is dispatched, what happens when the user is already a member, or how idempotency_key affects retries, which are the behavioral details an agent would actually need.

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

Conciseness4/5

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

A single tight sentence with the action front-loaded and no filler. It is efficient, though it is arguably too terse given the mutation it performs and the untapped room for routing guidance.

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

Completeness2/5

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, four parameters, and an unexplained idempotency key, the description is under-specified. It omits the side effect (email sent), the behavior for already-existing members, and any distinction from resend/update siblings, leaving the agent without enough to invoke it confidently.

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

Parameters3/5

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

Schema coverage is 75%: email, project_id, and role all carry schema descriptions, and the enum already enumerates the three roles that the description merely repeats. The undocumented idempotency_key is not explained in the description either, so it neither compensates for the gap nor adds meaning beyond the schema; baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Invite a user to a project team') and names the grantable roles, so the agent immediately knows the operation. It does not, however, distinguish this from closely related siblings such as resend_team_invite or update_team_member_role, leaving the boundary between creating a new invite and re-issuing an existing one to inference.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives: nothing says whether an existing pending invite should be handled with resend_team_invite instead, nor any prerequisite such as project admin rights. The agent must infer the usage context entirely from the tool name.

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

create_webhookCreate webhookBInspect

Create a webhook endpoint. The HMAC secret is write-only.

NameRequiredDescriptionDefault
urlYesurl HTTP or HTTPS URL supplied by the endpoint owner.
enabledNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
descriptionNo
hmac_secretYesSecret you provide to sign webhook deliveries with HMAC.
idempotency_keyNo

TDQS

B3.3/5.0
Behavior3/5

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

The description notes 'The HMAC secret is write-only,' which is valuable behavioral context beyond annotations — it tells agents not to expect the secret back in responses. However, annotations already declare readOnlyHint=false (mutation is expected), and the description adds little else about what happens on creation, validation failures, or delivery behavior. The write-only secret note is the main 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.

Conciseness4/5

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

Two short sentences communicate the core purpose and the key behavioral caveat (write-only secret). No wasted words. Could arguably add more but for what it covers, it's tight and front-loaded.

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

Completeness3/5

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

For a create tool with no output schema, the description is thin. It doesn't mention what response to expect (webhook id? confirmation?), how the created webhook appears in list_webhooks, what auth/permissions are required, or the meaning of the idempotency_key parameter which affects retry semantics. Given 6 parameters and no output schema, more context would help.

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

Parameters4/5

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

Schema description coverage is 50%, meaning 3 parameters (enabled, description, idempotency_key) lack schema descriptions. The write-only HMAC note adds meaning beyond the schema's 'Secret you provide to sign webhook deliveries with HMAC,' clarifying the secret won't be retrievable later. However, the description doesn't explain the idempotency_key parameter, which is significant for a create operation.

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

Purpose4/5

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

The description states it creates a webhook endpoint with specific verb+resource ('Create a webhook endpoint'). It clearly distinguishes from siblings like list_webhooks, update_webhook, and delete_webhook, which are separate operations on the same resource.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. There's no mention of prerequisites like needing to list webhooks first, no mention that this is a create operation distinct from update/delete, and no context about when a webhook would be appropriate. The schema does show required params (project_id, url, hmac_secret) but the description gives no usage direction.

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

delete_alert_ruleDelete alert ruleA
Destructive
Inspect

Delete an alert rule by rule id. Use only after the user confirms deletion.

NameRequiredDescriptionDefault
rule_idYesIdentifier of the alert rule to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already declare destructiveHint=true and readOnlyHint=false, which covers the safety profile. The description adds value by noting the user-confirmation requirement, which goes beyond the annotation signal. Mutations aren't described as reversible, and no return-format information is given, but annotations do the heavy lifting here.

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

Conciseness5/5

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

Two short sentences, zero wasted words. The purpose and the critical usage constraint (confirmation) are both delivered compactly and front-loaded.

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

Completeness4/5

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

For a destructive tool with annotations declaring the destructive nature, this is reasonably complete. It adds the user-confirmation requirement which is critical safety context. No output schema exists, but for a delete operation, return value explanation is generally less critical. Could mention irreversibility, but the destructiveHint annotation plus confirmation instruction largely covers it.

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

Parameters3/5

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

Schema coverage is 67%, meaning rule_id and project_id have descriptions while idempotency_key has none (only length constraints). The description doesn't elaborate on any parameters beyond what the schema provides. The idempotency_key, undocumented in schema, is also not explained in the description — a minor gap.

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

Purpose4/5

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

The description clearly states the action (delete) and the resource (alert rule) plus the identifier method (by rule id). It distinguishes from siblings like update_alert_rule and create_alert_rule through the verb-resource pairing, though it doesn't explicitly call out the sibling distinction.

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

Usage Guidelines4/5

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

The description adds the important context that this should 'Use only after the user confirms deletion' — a clear usage constraint appropriate for a destructive action. It implies this is a user-confirmation-gated operation but doesn't name alternatives or exclusions explicitly.

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

delete_keywordDelete keywordA
Destructive
Inspect

Delete one keyword by keyword id. Use only after the user confirms deletion.

NameRequiredDescriptionDefault
keyword_idYesIdentifier of the tracked keyword to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.7/5.0
Behavior3/5

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

The destructiveHint: true annotation already flags this as a destructive operation, and the description's 'Use only after the user confirms deletion' reinforces it. However, the description doesn't disclose what happens after deletion (permanence, whether it's recoverable, related data affected). The description aligns with rather than contradicts annotations.

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

Conciseness5/5

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

Two short sentences, zero filler. The description is front-loaded with the core action and immediately follows with the critical usage constraint. Every word earns its place.

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

Completeness3/5

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

For a destructive tool with a single required parameter and good annotation coverage, the description covers the essential points: what it does and the confirmation requirement. A more complete description might note that deletion is permanent or irreversible, and the idempotency_key behavior isn't explained, but the tool is relatively simple.

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

Parameters3/5

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

Schema coverage is 67% (keyword_id and project_id both have descriptions; idempotency_key lacks a description). The description points to keyword_id but doesn't add semantic context beyond the schema's own parameter descriptions. Baseline 3 is appropriate since schema does the heavy lifting for 2 of 3 params.

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

Purpose4/5

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

The description clearly states the tool deletes one keyword by keyword id, distinguishing it from sibling tools like delete_project, delete_alert_rule, delete_webhook, etc., which target different resources. The scope ('one keyword by keyword id') is specific and unambiguous.

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

Usage Guidelines4/5

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

The description explicitly states 'Use only after the user confirms deletion', which is a clear usage constraint that can trigger confirmation workflows. However, it doesn't explicitly mention alternatives (like delete_saved_keyword for saved keywords, though the name distinction implies this).

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

delete_projectDelete projectA
Destructive
Inspect

Permanently delete a project and all of its keywords, rank history, and settings. This cannot be undone. Use only after the user confirms deletion.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A4.4/5.0
Behavior4/5

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

The annotation destructiveHint=true already flags destructiveness, and the description adds meaningful context: it enumerates exactly what gets destroyed (keywords, rank history, settings) and emphasizes irreversibility ('This cannot be undone'). This goes beyond the annotation by specifying the full blast radius and requiring user confirmation.

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

Conciseness5/5

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

Two sentences, zero waste. Every sentence earns its place: the first defines scope and consequences, the second sets the usage gate. Front-loaded with the primary verb and action.

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

Completeness4/5

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

For a destructive mutation with no output schema, the description covers the key context: what is destroyed, irreversibility, and user-confirmation requirement. The idempotency_key parameter is not described, and there's no mention of post-deletion state or error handling, but for a delete operation with the destructive annotation and clear scope, this is reasonably complete.

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

Parameters4/5

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

Schema description coverage is 50%, with project_id documented in the schema (including a pattern and pointer to list_projects) but idempotency_key undocumented in the schema. The description doesn't explain idempotency_key semantics. However, the description clarifies the destructive outcome tied to project_id, adding operational meaning. The undocumented idempotency_key is a minor gap given schema coverage of the key parameter.

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

Purpose5/5

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

The description clearly states 'Permanently delete a project and all of its keywords, rank history, and settings.' It uses a specific verb (delete) with a specific resource (project) and enumerates the cascading scope, distinguishing it clearly from sibling deletion tools like delete_keyword, delete_saved_view, and delete_alert_rule, which operate on different resources.

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

Usage Guidelines4/5

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

The description explicitly states 'Use only after the user confirms deletion,' providing a clear precondition for safe usage. It doesn't name specific alternative tools, but given the large sibling list and the destructive nature, the confirmation requirement is the key usage gate. Exclusions/alternatives are not explicitly named, but the cascading scope makes the use case self-evident.

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

delete_saved_keywordDelete saved keywordA
Destructive
Inspect

Delete one saved keyword. Use only after the user confirms deletion.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo
saved_keyword_idYesIdentifier of the saved keyword to delete.

TDQS

A3.9/5.0
Behavior4/5

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

The annotations already declare destructiveHint=true, so the destructive nature is covered. The description adds the confirmation requirement ('only after the user confirms deletion'), which is valuable safety context beyond the annotation. It doesn't discuss irreversibility explicitly, but that's implied and the confirmation gate compensates. No contradiction with annotations.

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

Conciseness4/5

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

Two concise sentences with no waste. The first states the action, the second the critical usage precondition. Efficient and front-loaded. Could arguably score 5, but the description is slightly terse and could benefit from noting the irreversible nature more directly.

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

Completeness4/5

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

For a simple delete operation with destructiveHint=true annotation, the description plus annotations adequately convey the essentials: what it does, confirmation requirement, and two key parameters documented. No output schema exists, but delete operations typically return minimal responses, so this is acceptable. The description is reasonably complete for the tool's simplicity.

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

Parameters3/5

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

Schema description coverage is 67% — project_id and saved_keyword_id are described in the schema, but idempotency_key has no description. The description adds nothing about parameters beyond what the schema provides. Baseline 3 applies given the schema covers most parameters, though the undocumented idempotency_key is a minor gap.

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

Purpose4/5

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

The description "Delete one saved keyword" clearly states the verb (delete) and resource (saved keyword), with specificity about scope (one). It distinguishes from siblings like delete_keyword (regular keyword) and delete_saved_view (different resource), though it doesn't explicitly name the distinctions.

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

Usage Guidelines4/5

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

The description provides clear context on when to use it: "Use only after the user confirms deletion." This is important confirmation-before-deletion guidance. However, it doesn't explicitly state when NOT to use it or name alternative tools (like delete_keyword for regular keywords with project_id context), so a small gap remains.

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

delete_saved_viewDelete saved viewA
Destructive
Inspect

Delete a project saved view. Use only after the user confirms deletion.

NameRequiredDescriptionDefault
view_idYesIdentifier of the saved view to operate on.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.7/5.0
Behavior3/5

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

The annotations declare destructiveHint=true and readOnlyHint=false, so the safety profile is already disclosed. The description adds the user-confirmation requirement on top, which is useful context. However, it doesn't mention whether deletion is reversible, cascading, or what happens to related views/keywords. Given annotations already cover the destructive nature, the description adds modest incremental value.

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

Conciseness5/5

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

The description is two short sentences with zero filler. Every word earns its place: the action, the resource, and a critical safety directive. Perfectly sized for a destructive delete operation.

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

Completeness3/5

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

For a fairly simple delete operation with clear annotations and 67% schema coverage, the description is mostly adequate. However, the undocumented idempotency_key parameter and lack of detail on side effects (e.g., whether deleting a view affects anything downstream) leave minor gaps. The destructive confirmation guidance compensates somewhat, but this could be more complete.

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

Parameters3/5

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

Schema coverage is 67% (view_id and project_id are described; idempotency_key has no description). The description doesn't add parameter-specific meaning beyond the schema. The idempotency_key is undocumented in both schema and description. With 2 of 3 params documented in schema, the baseline 3 applies; the description adds no parameter clarification.

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

Purpose4/5

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

The description clearly states what the tool does: 'Delete a project saved view.' This is a specific verb (delete) plus resource (saved view). The purpose is straightforward and aligns with the sibling create_saved_view. It scores 4 because while clear, it doesn't differentiate much from other delete tools like delete_project or delete_keyword, though the resource name disambiguates sufficiently.

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

Usage Guidelines4/5

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

The description provides important context: 'Use only after the user confirms deletion.' This is a clear usage directive indicating it's a destructive action that requires user consent. It doesn't explicitly mention alternatives or when-not-to-use, but the confirmation requirement is valuable safety guidance. No alternative tools are named for comparison.

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

delete_webhookDelete webhookB
Destructive
Inspect

Delete a webhook endpoint. Requires admin access.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
webhook_idYesIdentifier of the webhook endpoint to operate on.
idempotency_keyNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description's mutation nature is covered. The description adds the 'Requires admin access' permission context, which adds value beyond annotations. No contradiction detected. However, it doesn't disclose what happens to the webhook's associated behavior (e.g., no further events sent, idempotency behavior).

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

Conciseness4/5

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

Two short sentences, no wasted words. Front-loaded with the action verb. Could arguably be more concise but the current length is appropriate for a deleting operation.

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

Completeness3/5

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

With destructiveHint annotation and a clear purpose, this is largely sufficient for a simple resource deletion. However, the idempotency_key parameter is completely unexplained, there's no mention of what happens post-deletion, and the admin access requirement is the only behavioral context. Adequate but with gaps for a destructive operation.

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

Parameters3/5

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

Schema coverage is 67%: project_id and webhook_id are well-described in the schema ('list_projects returns valid project ids'), but idempotency_key is undocumented in both schema and description. The description adds no parameter-level meaning beyond the schema. Baseline 3 is appropriate given moderate schema coverage.

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

Purpose4/5

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

The description states 'Delete a webhook endpoint' with a specific verb and resource, clearly distinguishing it from siblings like create_webhook and update_webhook. However, it doesn't explicitly differentiate from other destructive operations beyond the verb-resource combination.

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

Usage Guidelines2/5

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

The description includes 'Requires admin access' which hints at a precondition, but provides no guidance on when to use this vs alternatives, no consequences of deletion, and no context about irreversible effects relative to other webhook operations. There's no when-not-to-use guidance.

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

disable_sitemap_monitorDisable sitemap monitorBInspect

Disable the project sitemap monitor while retaining its existing snapshots.

NameRequiredDescriptionDefault
monitor_idNoIdentifier of the sitemap monitor to update, as returned by list_sitemap_monitors. Optional: a project has one monitor whose id equals the project id, so it defaults to project_id.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, and the description usefully adds that existing snapshots are retained — a real behavioral guarantee not derivable from the structured fields. It does not address idempotency-key replay semantics or the reversal path, 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.

Conciseness5/5

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

One sentence, front-loaded with the action and followed by the important side-effect qualifier. Nothing is wasted and nothing is buried.

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

Completeness4/5

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

For a simple three-parameter mutation with annotations covering the safety profile and no output schema, the description is nearly sufficient — the retention guarantee is the key thing an agent needs. It is only slightly thin on the idempotency contract and reversal tooling.

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

Parameters2/5

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

Schema coverage is 67%: monitor_id and project_id are documented in the schema, but idempotency_key has no description anywhere, and the description text says nothing about any parameter. The description does not compensate for the coverage gap, so it sits below the high-coverage baseline of 3.

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

Purpose4/5

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

States a specific verb (disable) and resource (the project sitemap monitor), so the agent knows exactly what happens. The distinction from enable_sitemap_monitor is obvious from the verb, though the description never names or contrasts the sibling explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use/when-not guidance, no prerequisites (e.g. permissions), and no pointer to enable_sitemap_monitor as the reversal path. Usage is only implied by the verb.

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

disconnect_providerDisconnect providerA
Destructive
Inspect

Disconnect a provider from a project. Use only after the user confirms deletion.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
provider_idYesProvider id. Known values: dataforseo, serpapi, ga4, gsc, plausible.
idempotency_keyNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is established. The description reinforces this with the confirmation requirement ('Use only after the user confirms deletion'). However, it doesn't disclose what happens to downstream artifacts (e.g., whether associated webhooks, alerts, or keywords are affected), which would add meaningful transparency for a destructive disconnect operation.

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

Conciseness5/5

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

The description is a single, tight sentence with a guardrail attached. Two sentences, zero waste. Every word earns its place—the verb, target, scope, and usage constraint are all present.

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

Completeness3/5

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

For a destructive mutation tool with no output schema and incomplete parameter coverage (idempotency_key undocumented), the description could do more. It doesn't address reversibility, side effects on related resources, or the response format. However, it's a focused action ('disconnect a provider') and annotations carry some safety context. Adequate but not rich.

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

Parameters3/5

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

Schema coverage is 67%, so project_id and provider_id are already documented in the schema. The description adds no parameter-level detail beyond that. The idempotency_key (the third, undocumented param) is not explained anywhere—its purpose and when to set it are unknown. Baseline 3 applies since schema does most of the param work, but the undocumented idempotency_key gap slightly limits compensation.

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

Purpose5/5

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

The description uses a specific verb+resource structure: 'Disconnect a provider from a project.' This clearly distinguishes it from sibling tools like connect_provider, update_provider_settings, set_provider_enabled, and set_provider_priority. The scope (project + provider) is explicit.

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

Usage Guidelines4/5

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

The description states a clear when-to-use constraint: 'Use only after the user confirms deletion.' This is an explicit usage guardrail for a destructive operation. It doesn't name alternatives like delete_project or set_provider_enabled for similar scenarios, but the confirmation requirement is valuable and specific.

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

enable_sitemap_monitorEnable sitemap monitorAInspect

Enable the project sitemap monitor. The next scheduled worker sync fetches the sitemap; enabling does not fetch immediately.

NameRequiredDescriptionDefault
monitor_idNoIdentifier of the sitemap monitor to update, as returned by list_sitemap_monitors. Optional: a project has one monitor whose id equals the project id, so it defaults to project_id.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.7/5.0
Behavior4/5

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

The description adds genuinely non-obvious behavior beyond the annotations: enabling is deferred to the next scheduled worker sync rather than triggering an immediate fetch. Annotations only cover safety (readOnlyHint=false, destructiveHint=false), so this scheduling disclosure is the valuable addition, though it omits idempotency semantics and 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.

Conciseness5/5

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

Two short sentences, zero filler, and the deferred-fetch caveat is placed immediately after the action statement so it cannot be missed. Nothing to trim.

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

Completeness3/5

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

No output schema exists and annotations only cover the safety profile, so the description carries the rest. It covers the key timing behavior but omits prerequisites, idempotency_key semantics, and outcomes such as an already-enabled monitor. Sufficient to call correctly, not complete.

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

Parameters3/5

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

Schema coverage is 67%, and the schema itself richly documents monitor_id (including its default to project_id) and project_id. The description adds nothing about parameters, and idempotency_key has no description at all in either place, so the baseline 3 for mid coverage is appropriate.

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

Purpose4/5

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

States a specific verb and resource ('Enable the project sitemap monitor'), so the agent immediately knows this toggles the monitor on. It does not explicitly name the counterpart disable_sitemap_monitor, but the verb makes the direction of the toggle unambiguous without opening a schema.

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

Usage Guidelines3/5

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

Usage is implied by the verb 'enable' rather than stated: there is no guidance on prerequisites (a configured sitemap, an existing monitor), no mention of disable_sitemap_monitor as the inverse, and no note on what happens if the monitor is already enabled. Adequate but with clear gaps for a state-changing toggle.

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

estimate_domain_overview_costEstimate domain overview costA
Read-only
Inspect

Free. Returns the cost and eligibility of a Domain Overview analysis without calling a provider; the paid operation is analyze_domain_overview.

NameRequiredDescriptionDefault
targetYesDomain or subdomain to analyze.
page_limitNoMaximum relevant page rows the paid report would include.
project_idYesProject id whose provider connection, budget, and Domain Overview snapshot are used.
keyword_limitNoMaximum ranked keyword rows the paid report would include.
language_codeYesLanguage code used for the provider lookup, for example en.
location_codeYesPositive provider location code identifying the lookup market.
max_cost_centsYesMaximum provider cost for the paid request, in cents. Use zero for an explicit cache-only attempt.
scope_overrideNoOverride automatic target scope detection with root-domain or subdomain scope.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral context beyond that: the call is free, does not hit a provider, and returns both cost and eligibility — useful for an agent deciding whether a paid run will succeed.

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

Conciseness5/5

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

A single tight sentence with 'Free' front-loaded, followed by what it returns and the paid counterpart. No filler, no redundancy.

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

Completeness5/5

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

No output schema exists, and the description states the return payload (cost and eligibility), which is the key information an agent needs. Combined with 100% schema coverage and read-only annotations, nothing essential is missing for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% with 8 well-documented parameters (including the enum and the max_cost_cents cache-only note), so the schema carries parameter semantics fully. The description adds no parameter-level detail, making the baseline 3 correct.

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

Purpose5/5

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

States a specific verb and resource (estimate cost/eligibility of a Domain Overview analysis) and immediately scopes it as non-provider-calling. It explicitly names the sibling paid operation analyze_domain_overview, so an agent can distinguish 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.

Usage Guidelines4/5

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

The description names the paid alternative analyze_domain_overview and frames this tool as the pre-flight check ('Free', 'without calling a provider'), which strongly implies when to use it. It stops short of an explicit directive such as 'call this before analyze_domain_overview' or stating when this check is unnecessary.

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

estimate_keyword_research_costEstimate keyword research costA
Read-only
Inspect

Free. Returns the cost and eligibility of keyword research without calling a provider; the paid operation is research_keywords.

NameRequiredDescriptionDefault
modeNoResearch mode the estimate is priced for.
seedYesKeyword or phrase used as the starting point for research.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
result_limitNoMaximum number of research rows the paid call would return.
max_cost_centsNoBest-effort maximum provider cost for the paid request, in cents.
include_clickstreamNoRefine volumes with clickstream data when the paid research runs.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds useful context by stating it is 'Free' and runs 'without calling a provider', but it does not disclose rate limits, caching, or response structure beyond what annotations already imply.

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

Conciseness5/5

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

The description is two short sentences with zero waste, and it is front-loaded with the most important fact ('Free') followed by a precise explanation of what it returns and how it relates to the paid operation.

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

Completeness4/5

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

With six parameters fully documented by the schema, safety hints provided by annotations, and no output schema, the description adequately covers the tool's purpose and return nature ('cost and eligibility'). It could more explicitly tie the estimate to the passed parameters, but the definition is otherwise complete enough for an agent to invoke it correctly.

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

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented in the schema. The description adds no parameter-specific meaning, syntax, or constraints 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.

Purpose5/5

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

The description states a specific verb ('Returns the cost and eligibility') and resource ('keyword research'), and explicitly distinguishes the tool from its paid sibling by naming 'research_keywords'. An agent can tell exactly what this tool does and what it does not do without opening the schema.

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

Usage Guidelines5/5

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

It clearly positions the tool as the free, no-provider-call estimator and names the paid alternative ('the paid operation is research_keywords'), giving explicit when/when-not guidance. The routing condition between this tool and the paid sibling is unambiguous.

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

export_ai_tracking_evidenceExport ai tracking evidenceC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
limitNoPage size, at most 100.
cursorNoOpaque cursor from the previous response.
formatNoJSON evidence with cursor metadata, or one CSV evidence page.json
run_idYesPublic tracking run ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already establish the safety profile (readOnlyHint=true, openWorldHint=false, destructiveHint=false), so the bar is lower. The description adds genuine but vague behavioral context — that results carry original provenance, may be in "partial states," and include "cost uncertainty" — which usefully signals incomplete/approximate data, though it never explains pagination, page-size behavior, or what a partial state means operationally.

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

Conciseness4/5

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

A single front-loaded sentence with the verb leading and no filler sentences — structurally tight. It is slightly jargon-dense ("partial states," "cost uncertainty") in a way that costs clarity more than it costs length.

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

Completeness3/5

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

For a five-parameter, cursor-paginated export with no output schema, the description leaves the return shape largely unexplained; the format parameter's schema text only partially compensates. Annotations cover safety, but with no output schema the description should have described what an evidence page contains. It is minimally sufficient rather than complete.

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

Parameters3/5

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

Schema description coverage is 100%, so limit, cursor, format, run_id, and project_id are already fully documented in the schema, including the CSV-vs-JSON distinction and cursor semantics. The description adds nothing 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.

Purpose3/5

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

It has a discernible verb+resource ("Read ... AI tracking evidence") and a scope ("project-scoped"), but the central noun "evidence" is undefined and the descriptor does not distinguish this from the many AI-tracking siblings such as get_ai_tracking_run, get_ai_tracking_history, or export_rank_history. The tangent about "original provenance, partial states, and cost uncertainty" muddies rather than sharpens what the tool yields.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus the many adjacent AI-tracking readers/exports, and no prerequisites or exclusions are given. Usage is only weakly implied by "project-scoped AI tracking evidence."

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

export_local_monitor_runExport local monitor runA
Read-only
Inspect

Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes.

NameRequiredDescriptionDefault
as_ofNoFrozen UTC selection time with milliseconds.
run_idYesPublic identifier of the original retained Local run.
versionNoLocal point report version 1; returns normalized retained JSON only.
monitor_idYesPublic identifier of the retained Local monitor.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld=false/destructive=false; the description reinforces this by explicitly stating the side effects it never performs, adding real context about scope. It stops short of describing 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.

Conciseness4/5

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

Two tight sentences with the read scope front-loaded and the boundary clause following. No filler, though the second sentence could be slightly more concrete.

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

Completeness3/5

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

For a read-only export tool with no output schema, the description should explain what the returned evidence looks like; it only implies 'normalized retained JSON' and leaves the response shape to inference, which is a noticeable gap.

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

Parameters3/5

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

Schema description coverage is 100% with detailed patterns and formats for all five parameters, so the schema carries the burden. The description adds no parameter-level meaning beyond what the schema already provides.

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

Purpose4/5

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

States a read/export operation over 'retained Local evidence and quality/cost uncertainty' for a local monitor run, which distinguishes it from list_local_monitor_runs and get_local_monitor_run_results. However, phrasing like 'honest quality/cost uncertainty' is jargon-y and it never names the sibling tools directly.

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

Usage Guidelines3/5

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

Provides when-NOT guidance via negation ('never launches provider work, schedules, or accounting writes'), which helps scope it, but gives no explicit when-to-use condition or named alternative among the local-monitor siblings.

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

export_rank_historyExport project rank historyA
Read-only
Inspect

Export project rank history as cursor-paginated JSON. Version 1 preserves legacy rows; version 2 retains raw observations/attempts, frozen scope/time and quality metadata. For full streamed CSV dumps, use the REST endpoint directly.

NameRequiredDescriptionDefault
toNoInclusive version 2 window end, supplied together with from.
fromNoInclusive version 2 window start, supplied together with to.
basisNoTimestamp selecting version 2 records. Attempts require recorded_at.
limitNo
rangeNo
cursorNoOpaque continuation from this export; preserve all selected options.
streamNoVersion 2 normalized observations or logical checks plus retained run/item outcomes; this never launches a check.
versionNo1 retains legacy rows; 2 returns frozen report records and quality metadata.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
aggregationNoVersion 2 exports raw records without aggregation.
granularityNo
keyword_idsNoTracked keyword public IDs to include in the export.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true, destructiveHint=false, openWorldHint=false, so safety is covered. The description adds genuinely useful behavior: cursor-paginated output, version 1 legacy rows vs version 2 raw observations/attempts with frozen scope/time and quality metadata, and that streamed CSV requires a different mechanism.

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

Conciseness5/5

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

Three sentences, no filler, and the core function (cursor-paginated JSON export) is front-loaded before version nuance and the alternative endpoint. Every sentence carries information.

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

Completeness4/5

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

For a read-only export tool whose annotations cover safety and whose schema documents most parameters, the description is nearly complete: it conveys format, pagination, versions and the CSV alternative. The only real gap is the lack of differentiation from get_rank_history.

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

Parameters4/5

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

Schema coverage is 75%, so most parameters are self-documenting. The description adds meaning on top of the schema by explaining version 1 vs 2 semantics and framing the export as cursor-paginated, complementing the cursor and version parameter descriptions.

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

Purpose4/5

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

States a specific verb+resource (export project rank history) and format (cursor-paginated JSON), and the version semantics further sharpen the scope. However, it never names the obvious sibling get_rank_history, so an agent must infer the distinction from naming alone.

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

Usage Guidelines3/5

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

The closing sentence routes agents to the REST endpoint for CSV dumps, which is useful when-not guidance. But it offers no guidance on choosing this tool over the sibling get_rank_history, leaving the primary alternative unaddressed.

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

get_agent_reportGet agent reportA
Read-only
Inspect

Read one saved analysis. A report ID never grants access to another project.

NameRequiredDescriptionDefault
report_idYesThe public report ID, scoped to this project.
project_idYesThe public project ID. Project membership and token scopes are enforced.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that with the authorization constraint that a report ID never grants cross-project access, telling the agent the report_id is meaningless outside its owning project. It does not describe error behavior when the report is missing or not in the project.

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

Conciseness5/5

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

Two short sentences with zero padding, and the core action is front-loaded before the access constraint. Every sentence earns its place.

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

Completeness4/5

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

For a simple, fully annotated, two-parameter read tool with no output schema, the description is essentially complete: what it reads, that it reads exactly one, and the cross-project access limit. Only minor gaps remain, such as what a saved analysis contains or how a not-found/wrong-project report is surfaced.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters carry their own descriptions including the project-scoping of report_id, so the schema does the heavy lifting. The description reinforces the report_id/project_id relationship but adds no syntax, format, or validation 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.

Purpose4/5

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

States a specific verb ('Read') and resource ('one saved analysis') that map cleanly to the tool name get_agent_report and separate it from list_agent_reports and create_agent_report. It stops short of explicitly naming those siblings, so an agent must infer the single-vs-list distinction from the name alone.

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

Usage Guidelines3/5

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

'Read one saved analysis' implies the usage context (retrieve a single already-saved report by ID), but there is no explicit when-to-use, when-not-to-use, or pointer to the alternative list_agent_reports. The second sentence is a security constraint, 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_ai_research_catalogGet AI research catalogB
Read-only
Inspect

Read the free current provider AI model, locale, and cost-policy capabilities. This read never initiates paid work.

NameRequiredDescriptionDefault
project_idYesThe public project ID. Project membership and token scopes are enforced.

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds genuinely new behavioral information beyond that: the read is cost-free and specifically does not trigger paid work, which matters in a catalog with many paid estimate/analysis tools.

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

Conciseness5/5

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

Two short sentences with no filler; the operation and its non-billing constraint are front-loaded. Every sentence carries weight.

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

Completeness4/5

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

For a single-parameter read tool with no output schema and full annotation coverage, the description communicates what is returned (AI model, locale, cost-policy data) and the cost profile, which is sufficient to call it correctly. It stops short of the extreme precision that would warrant a 5.

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

Parameters3/5

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

Only one parameter (project_id) exists and schema description coverage is 100%, with the schema already explaining the pattern, membership, and scope enforcement. The description adds no further parameter detail, so the baseline 3 applies.

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

Purpose3/5

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

The description names a read operation and enumerates catalog contents (provider AI model, locale, cost-policy capabilities), so its purpose is inferable. However, the phrasing is abstract and does not clearly separate it from the sibling get_capabilities, and the resource ('catalog') is never concretely described. It reads as vague rather than a precise verb+resource statement.

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

Usage Guidelines2/5

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

There is no explicit guidance on when to call this versus get_capabilities, get_provider_rates, or the many estimate_* siblings. The 'free' and 'never initiates paid work' remarks hint that it is a zero-cost preview step, but no when/when-not condition or alternative is stated.

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

get_ai_tracking_historyGet ai tracking historyC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
limitNoPage size, at most 100.
cursorNoOpaque cursor from the previous response.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine context beyond that — returned data may contain 'partial states' and 'cost uncertainty', and provenance is preserved — but these traits are asserted without explanation, so the agent knows to expect them yet not what they mean operationally.

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

Conciseness4/5

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

A single front-loaded sentence with no filler; the scoping qualifier leads. It is efficient, though its terseness borders on under-specification rather than economy.

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

Completeness3/5

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

For a cursor-paginated read tool with no output schema, the description is minimally adequate: it signals provenance and uncertainty but omits what entity the history covers and how it relates to the run/sample/trend siblings. The schema handles parameters, but the description leaves too much of the tool's role implicit.

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

Parameters3/5

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

Schema description coverage is 100%, with limit, cursor, and project_id all documented inline, so the baseline is 3. The description adds no parameter-level detail (e.g., cursor semantics or default page size) beyond the schema.

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

Purpose3/5

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

The verb 'Read' and resource 'AI tracking evidence' are stated, and 'project-scoped' gives scope. However, 'history' vs. the sibling 'export_ai_tracking_evidence', 'get_ai_tracking_run', and 'get_ai_tracking_trends' is never disambiguated, and it is unclear whether this returns runs, samples, or aggregated evidence. An agent cannot confidently tell it apart from adjacent siblings.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of alternatives among the many AI-tracking siblings, and no stated prerequisites beyond what the schema implies. The agent is left to infer the right tool purely from the name.

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

get_ai_tracking_runGet ai tracking runB
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
run_idYesPublic tracking run ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already cover safety (readOnly, non-destructive, non-open-world). The description adds data-quality context—partial states and cost uncertainty—which is useful beyond the annotations. However, it omits other behavioral details like return format, pagination, or authentication requirements.

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

Conciseness4/5

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

A single, front-loaded sentence with no wasted words. It efficiently states the core action and key data characteristics, though the list-like quality of the trailing attributes keeps it from being a perfect 5.

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

Completeness4/5

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

With annotations covering safety and schema covering parameters, the description need not explain return values. It provides enough context for a read-only retrieval tool, though it could be slightly more explicit about retrieving a single run by ID.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (run_id, project_id) are documented in the schema. The description adds no additional meaning about parameter formats or constraints 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.

Purpose4/5

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

States a specific verb ('Read') and resource ('AI tracking evidence') with a project scope. The added attributes (original provenance, partial states, cost uncertainty) hint at what distinguishes it, but it does not explicitly differentiate from sibling list or history tools.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool versus alternatives like list_ai_tracking_runs or get_ai_tracking_history. Usage is only implied by the verb and resource, leaving the agent to infer context from the name and parameters.

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

get_capabilitiesGet API capabilitiesA
Read-only
Inspect

List the public bisibility API capabilities exposed for agent workflows. public catalog; for what this session can do call get_session_profile and get_project (readiness)

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered without the description. The description does add the genuinely useful distinction that this is a static public catalog rather than session-scoped state, but it says nothing about result size, caching, or whether the catalog can change over time.

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

Conciseness4/5

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

Two short sentences with no waste and the primary purpose front-loaded before the routing hint. The middle fragment 'public catalog;' is awkwardly punctuated and the typo 'bisibility' is a small blemish, but the size is appropriate for a no-argument read tool.

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

Completeness3/5

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

There is no output schema and no parameters, so the description carries the burden of explaining the return shape. It never clarifies what a capability entry looks like or how many to expect, leaving the agent to discover the payload structure on the first call. Adequate but with a real gap for a discovery tool.

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

Parameters4/5

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

The tool takes zero parameters, so the baseline of 4 applies. There is no input surface the description needs to compensate for.

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

Purpose4/5

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

States a specific verb and resource ('List the public visibility API capabilities') and explicitly frames the scope as the agent-workflow surface. It does not resolve the ambiguity of what a 'capability' entry actually contains, and the misspelled 'bisibility' slightly undercuts polish, but an agent can tell it apart from the many project/keyword siblings.

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

Usage Guidelines4/5

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

It names the alternatives directly: 'for what this session can do call get_session_profile and get_project (readiness)'. That is a clear routing rule telling the agent when NOT to use this tool. It stops short of spelling out the exact conditions under which the public catalog is the right call versus the session-scoped ones.

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

get_cloud_import_compatibilityGet cloud import compatibilityA
Read-only
Inspect

Check whether a cloud export package can be imported: returns the running app version, the latest applied migration, and the cloud-import schema versions the API accepts. Anonymous preflight endpoint; no project scope or credential needed. Use before preparing a migration to confirm the export schema is still supported.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds valuable context about authentication ('Anonymous preflight endpoint; no project scope or credential needed') and specifies the exact information returned. This goes beyond the annotations and helps the agent understand side effects and requirements.

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

Conciseness5/5

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

The description is a concise three-sentence paragraph. The first sentence states the core purpose and return values, the second clarifies access requirements, and the third provides a clear usage recommendation. Every sentence contributes meaningful information without redundancy.

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

Completeness5/5

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

Given the tool's simplicity (no parameters, no output schema), the description is complete. It covers purpose, access prerequisites, and return data, and provides a recommended usage context. There are no gaps that would leave an agent confused about when or how to invoke this tool.

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

Parameters4/5

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

The tool has zero parameters, so the baseline score is 4. The description does not need to elaborate on parameter semantics, and it correctly focuses on behavioral and usage aspects. No parameter documentation is missing.

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

Purpose5/5

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

The description uses a specific verb phrase 'Check whether a cloud export package can be imported' and clearly identifies the resource and the operation's purpose. It also names the exact return values (running app version, latest applied migration, accepted schema versions), distinguishing it from any sibling read-only tools.

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

Usage Guidelines4/5

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

The description includes explicit guidance: 'Use before preparing a migration to confirm the export schema is still supported.' It also notes the endpoint is anonymous and requires no project scope, which clarifies the context of use. However, it does not mention any alternatives or when-not-to-use scenarios, so it stops short of a 5.

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

get_cost_estimateGet cost estimateA
Read-only
Inspect

Estimate rank checks, result pages, and monthly provider cost for a keyword portfolio. Provide keywords, markets (locations), devices (1-2), and depth (10, 20, 50, or 100; default 100). Frequency supports daily, weekly, monthly, manual, paused, and custom_cron with cron_expression. Missing or invalid custom cron leaves monthly quantities and costs unknown. Pick a provider (default dataforseo) and optionally an option or plan key; see get_provider_rates. Anonymous endpoint.

NameRequiredDescriptionDefault
planNoPlan-model provider plan key; unknown values use auto selection.
depthNoOrganic result depth. Defaults to Top 100.
optionNoFlat-rate provider option key, for example "standard", "priority", or "live".
devicesNoDevice count per keyword (1 or 2). Defaults to 1.
keywordsYesKeyword count to estimate for.
providerNoProvider rate card to use. Defaults to "dataforseo".
frequencyNoRank-check frequency used to estimate monthly checks. Defaults to daily.
locationsNoMarket count per keyword; each market combines a location and language. Defaults to 1.
cron_expressionNoCron expression for custom_cron; missing or invalid values leave monthly estimates unknown.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds real context beyond that: it is an 'Anonymous endpoint' (no auth needed) and that a missing/invalid custom cron 'leaves monthly quantities and costs unknown', which tells the agent how failure degrades the response.

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

Conciseness4/5

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

Dense but front-loaded: purpose first, then inputs/defaults, then provider selection, then the anonymity note. It is close to the minimum length for a nine-parameter tool, with only mild redundancy against the schema.

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

Completeness5/5

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

No output schema exists, yet the description names what is estimated (rank checks, result pages, monthly cost), the failure mode that leaves costs unknown, the default provider, and the companion tool for rate lookup. For a read-only anonymous estimator this is enough 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.

Parameters3/5

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

Schema description coverage is 100%, so every parameter is already documented. The description largely restates those facts (depth values, device limits, frequency enum, defaults) rather than adding new semantics, so the baseline 3 is appropriate; the only added nuance is the consequence of an invalid cron_expression, which the schema also states.

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

Purpose4/5

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

Opens with a specific verb+resource+outcome: 'Estimate rank checks, result pages, and monthly provider cost for a keyword portfolio.' That distinguishes it in substance from siblings like estimate_keyword_research_cost or estimate_backlinks_cost, though it never names those siblings explicitly so an agent must infer the boundary from the resource named.

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

Usage Guidelines3/5

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

It gives concrete required inputs and defaults and routes the agent to get_provider_rates for provider option/plan keys, which is genuine usage guidance. However, with four sibling 'estimate_*' tools in the list, it never states when to choose this estimator over the others, which is the main routing decision an agent faces.

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

get_healthGet API healthB
Read-only
Inspect

Check bisibility API health and configured SERP providers.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered by structured data. The description adds that it checks SERP providers in addition to general API health, which is useful context. No contradictions with annotations. It doesn't disclose the return format or what specific health indicators are measured, but given annotation coverage, a 3 is reasonable.

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

Conciseness4/5

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

The description is a single short sentence with no waste. However, there is a minor typo ('bisibility' should be 'visibility'), which slightly detracts from quality. Otherwise, it's appropriately compact and front-loaded.

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

Completeness3/5

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

For a simple parameterless health check tool with readOnlyHint and destructiveHint annotations, the description is mostly sufficient. It could benefit from noting what health information is returned (e.g., API status, per-provider availability) and whether any auth is required, but given the tool's simplicity and strong annotation coverage, it's adequate.

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

Parameters4/5

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

The tool has zero parameters, and schema description coverage is 100% (no parameters to document). With 0 params, baseline is 4. The description reasonably clarifies what the tool checks (API health and SERP providers), which is the only semantic meaning needed for a parameterless tool.

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

Purpose3/5

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

The description uses a specific verb+resource ('Check visibility API health') that states the tool's core function, and mentions it also checks configured SERP providers. However, it's somewhat vague — 'health' is broad, and it doesn't detail what health information is returned (uptime, error rates, provider status?). It distinguishes from siblings reasonably since no other tool is titled for health checks.

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

Usage Guidelines3/5

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

The description implies this is a diagnostic/read tool by its name and title, and the readOnlyHint annotation reinforces safe read usage. However, no explicit guidance is given on when to use it versus alternatives (e.g., get_provider_rates, test_provider_connection, list_providers), nor are exclusions stated. There is no clear context about when a health check is appropriate.

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

get_keywordGet keywordA
Read-only
Inspect

Get a keyword and its latest rank position by keyword id, including location_key, language_code, and language_label for its exact market pair. latest_position can be null after a failed check, with unknown observation coverage, or for absence within the requested depth. Read latest_check.status and observation_completeness. Only complete coverage supports absence within depth; a positive position remains valid with truncated coverage. latest_successful_check is the most recent completed observation and can also have unknown coverage.

NameRequiredDescriptionDefault
keyword_idYesIdentifier of the tracked keyword to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnlyHint, non-destructive), and with no output schema the description carries the full burden of return semantics. It discloses the three distinct reasons latest_position can be null, instructs the agent to read latest_check.status and observation_completeness, and explains that only complete coverage supports absence-within-depth while a positive position stays valid under truncation.

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

Conciseness4/5

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

The purpose is front-loaded in the first clause, and most sentences carry distinct semantic content about nullability and coverage. It is a dense wall of text with some restatement of the coverage concept across last two sentences, so it is efficient but not maximally tight.

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

Completeness4/5

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

For a read-only two-parameter tool with 100% schema coverage and no output schema, the description supplies the return-value semantics an agent needs to interpret results correctly. It does not address the optional project_id's effect or authorization needs, but those are minor given the annotation coverage.

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

Parameters3/5

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

Schema description coverage is 100%, so both keyword_id and the optional project_id are already documented with patterns and guidance. The description adds nothing about parameter usage or the market-pair inputs, so the baseline 3 is correct.

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

Purpose5/5

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

States a specific verb (get) and resource (a keyword by keyword id) and immediately scopes the payload to the latest rank position plus the market pair fields. This clearly separates it from list_keywords and get_keyword_metrics, which an agent can distinguish without opening either schema.

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

Usage Guidelines3/5

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

Usage context is implied by the keyword_id lookup ('by keyword id'), but the description never says when to prefer this over get_keyword_metrics, list_keywords, or get_rank_history, and names no alternative. It offers interpretation guidance for the result rather than tool-selection guidance.

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

get_keyword_metricsGet keyword metricsAInspect

Requires API write scope. Paid metrics lookup uses the project's own DataForSEO account. When cost matters, call with estimate_only first for a free dry run, then use max_cost_cents as a best-effort request guard. Approximate pricing per 100 fetched keywords comes from the current rate card exposed by get_provider_rates. Batches contain up to 700 keywords and cache each keyword for 12 hours, shared with the API and UI. Clickstream-refined volumes double provider cost.

NameRequiredDescriptionDefault
freshNo
keywordsYesKeywords to request metrics for, supplied as search phrases.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
connection_idNoIdentifier of the provider connection to operate on.
estimate_onlyNoReturn a free cost estimate without calling the provider or spending budget.
max_cost_centsNoBest-effort maximum provider cost for this request, in cents.
include_clickstreamNo

TDQS

A3.9/5.0
Behavior5/5

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

With annotations only declaring readOnlyHint=false and openWorldHint=true, the description carries the important behavioral load and does so well: write-scope requirement, budget spent from the project's own DataForSEO account, best-effort cost ceiling, 700-keyword batch limit, 12-hour cache shared with API and UI, and clickstream doubling cost. These are exactly the non-obvious traits an agent needs before spending money.

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

Conciseness4/5

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

Five dense sentences, no filler, and the cost-control workflow is front-loaded after the auth note. It is efficient but skips over the fundamental 'what does this return' sentence, so the structure is optimized for cost rather than selection.

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

Completeness3/5

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

There is no output schema, yet the description never says what metrics come back or in what shape, which is a notable gap for a metrics-lookup tool. Cost, auth, batching, and caching are covered thoroughly, so the agent can invoke it safely but cannot predict the result.

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

Parameters4/5

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

Schema coverage is 71%, so the schema does much of the work, but the description adds real semantics: estimate_only is a free dry run that does not call the provider, max_cost_cents is a best-effort guard, and include_clickstream doubles cost. It leaves 'fresh' and 'connection_id' unaddressed, and the 700-keyword note merely repeats the schema's maxItems.

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

Purpose3/5

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

The description never actually states what the tool does — it never says it fetches search volume/CPC/difficulty metrics for a set of keywords. All content is operational (auth scope, cost model, caching), leaving the agent to infer the verb+resource from the name and title alone. It is contextual but not purpose-defining.

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

Usage Guidelines4/5

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

Clear procedural guidance: call with estimate_only first for a free dry run, then use max_cost_cents as a guard, and consult get_provider_rates for the rate card. It does not, however, contrast this tool against close siblings like research_keywords, estimate_keyword_research_cost, get_keyword, or list_keywords, so the agent still has to guess which is appropriate.

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

get_local_monitor_run_resultsGet local monitor run resultsB
Read-only
Inspect

Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes.

NameRequiredDescriptionDefault
as_ofNoFrozen UTC selection time with milliseconds.
run_idYesPublic identifier of the original retained Local run.
monitor_idYesPublic identifier of the retained Local monitor.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuine domain-relevant context: this call will not launch provider work or incur cost/scheduling side effects, which an agent might otherwise fear from a 'get run' call. It also hints that the payload carries uncertainty metrics, though it does not describe return shape in detail.

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

Conciseness4/5

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

Two short sentences, front-loaded with the operation and immediately followed by the negative-capability boundary. There is little waste, though the phrase 'honest quality/cost uncertainty' is jargon-heavy and does not clearly earn its place.

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

Completeness3/5

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

With no output schema, the description is the only source for what comes back, and 'original retained Local evidence and honest quality/cost uncertainty' is too cryptic to convey the return contents. Safety and non-side-effect behavior are adequately covered, but result content remains underspecified for a four-parameter read tool.

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

Parameters3/5

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

Schema description coverage is 100% and all four parameters (project_id, monitor_id, run_id, as_of) are documented with patterns and formats in the schema. The description adds no parameter-level detail such as how as_of interacts with run selection, so the baseline 3 applies.

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

Purpose3/5

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

The verb 'Read' plus the subject 'Local evidence' signals a retrieval operation, and the name ties it to a run, but the phrasing 'original retained Local evidence and honest quality/cost uncertainty' is vague about what is actually returned. It does not distinguish this tool from near siblings like list_local_monitor_runs or export_local_monitor_run.

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

Usage Guidelines3/5

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

The second sentence gives an implied boundary ('never launches provider work, schedules, or accounting writes'), which tells the agent this is a safe, non-triggering read. However, there is no explicit when-to-use guidance and no comparison to alternatives such as list_local_monitor_runs or export_local_monitor_run.

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

get_meGet authenticated userA
Read-only
Inspect

Get the authenticated user and all project memberships. Requires a personal access token.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read profile is covered structurally. The description adds the auth requirement (personal access token) and the membership scope, which is useful behavioral context. It doesn't describe return format, but with no output schema the burden is somewhat on the description, though for a standard 'get me' endpoint this is acceptable.

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

Conciseness4/5

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

Two sentences, concise and front-loaded with the core purpose. No wasted words. Slightly more could be added about output shape, but for a zero-parameter read endpoint this is appropriately brief.

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

Completeness4/5

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

For a zero-parameter, read-only endpoint with clear annotations, this description is quite complete. It covers what's returned (authenticated user + project memberships) and the auth requirement. The only minor gap is not describing the return structure, but given there's no output schema and this is a well-understood endpoint type, the description handles the essentials well.

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

Parameters4/5

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

There are zero parameters and schema coverage is 100%, so there's nothing for the description to explain about parameters. The baseline for 0 params is 4, and the description doesn't mislead or add confusion, so it holds at 4.

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

Purpose4/5

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

The description clearly states the verb (Get), resource (authenticated user), and adds the scope of 'all project memberships.' This helps differentiate from update_me, which is a sibling. However, it doesn't explicitly contrast with sibling tools like list_projects, though the purpose is fairly distinct.

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

Usage Guidelines3/5

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

The description mentions it requires a personal access token, which is a useful requirement note. However, it doesn't explicitly state when to use this vs alternatives like update_me or list_projects, nor does it mention any when-not-to-use scenarios. The usage context is implied but not explicit.

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

get_notification_preferencesGet notification preferencesA
Read-only
Inspect

Notification channel switches: get which channels (email, Slack, webhook) are turned on for the project. Returns no addresses or URLs; use list_webhooks for where notifications are sent.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful context: which channels it covers (email, Slack, webhook) and explicitly excludes addresses/URLs ('Returns no addresses or URLs'), setting expectations about the response. However, it doesn't state whether all three channels are always present or what happens with disabled channels.

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

Conciseness5/5

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

Two sentences, zero wasted words. The first sentence states purpose and scope; the second sentence preempts a common confusion (addresses/URLs) and directs to the correct sibling tool. Excellent front-loading and economy.

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

Completeness4/5

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

For a simple read tool with one well-documented parameter, strong annotations, and no output schema, the description covers what's needed. It explains return semantics (channel toggles), scoping (per-project), and distinguishes from the likely-confused sibling. The only minor gap is not describing the exact return structure/format of the channel switches, but with no output schema requirement, this is adequate.

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

Parameters3/5

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

Schema description coverage is 100% and the project_id parameter is well documented in the schema ('Identifier of the bisibility project to operate on; list_projects returns valid project ids'). The description adds the project-scoping context but doesn't need to explain the single parameter further since the schema fully covers it. Baseline 3 is appropriate.

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

Purpose5/5

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

Clear verb+resource: 'get which channels (email, Slack, webhook) are turned on for the project.' The description explicitly states what is returned (channel toggles) and distinguishes from the sibling get_notification_preferences vs update_notification_preferences (read vs write) and list_webhooks (addresses/URLs vs toggles). The 'Returns no addresses or URLs' phrasing actively differentiates it from list_webhooks.

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

Usage Guidelines4/5

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

The description provides clear scoping context ('for the project') and explicitly points to list_webhooks as the alternative for destination details ('use list_webhooks for where notifications are sent'). It doesn't explicitly say when-not-to-use, but the sibling differentiation gives practical guidance. Could mention that this is a read complement to update_notification_preferences, but that's implied.

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

get_projectGet projectA
Read-only
Inspect

Get one bisibility project by project id.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read. The description adds no behavioral context beyond 'get' — no mention of what fields are returned, 404 behavior for invalid IDs, rate limits, or performance considerations. With annotations covering the safety profile, a baseline 3 is appropriate; the description doesn't contradict annotations but adds minimal extra transparency.

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

Conciseness4/5

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

A single, direct sentence that states the action and the key discriminator (by project id). No wasted words, no fluff. It uses a clean verb-noun structure. Minor deduction for the typo and for not mentioning the safe-read nature, but the length is appropriate and front-loaded.

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

Completeness4/5

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

For a simple single-resource lookup tool with 1 required parameter, full schema coverage, and clear readOnly annotations, the description covers the essentials. It's not a complex mutation or a multi-parameter tool needing extensive behavioral context. The main gap is not describing the return structure, but no output schema exists, so some return-format detail could help. Overall adequate for its simplicity.

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

Parameters3/5

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

Schema description coverage is 100% — the project_id parameter is fully documented in the schema, including its format pattern and the note that list_projects returns valid IDs. The description itself adds no parameter semantics beyond the schema. Baseline 3 applies when the schema carries the full burden, which it does here.

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

Purpose4/5

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

The description 'Get one bisibility project by project id' clearly states it fetches a single project by ID, using the specific verb 'get' plus the resource. It's distinguishable from list_projects (plural) and create/update/delete_project siblings. Minor demerit for the odd typo 'bisibility' (likely 'visibility'), but the purpose is clear and the subject matter is specific.

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

Usage Guidelines3/5

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

The description implies usage context (fetch a single identified project) but provides no explicit guidance on when to use this versus alternatives. There's no mention of 'use list_projects to enumerate all projects first' or exclusion guidance. The pattern-validated project_id parameter gives some implicit hint, but no alternative tools or exclusions are named.

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

get_project_contextGet project contextA
Read-only
Inspect

Read the saved business, audience, products, goals and agent rules for this project.

NameRequiredDescriptionDefault
project_idYesThe public project ID. Project membership and token scopes are enforced.

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety behavior is covered. The description adds only the categories of data returned; it says nothing about permissions beyond the schema's note, volume, or caching, so it is modestly additive.

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

Conciseness5/5

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

One front-loaded sentence naming the action and the returned content with zero filler. Nothing could be removed without losing meaning.

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

Completeness4/5

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

With one fully documented parameter and no output schema, the enumeration of returned fields (business, audience, products, goals, agent rules) fills the main gap an agent would have about what comes back. Only the when-to-use context and any permission caveats are missing.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, including its format pattern and the membership/token-scope enforcement note. The description adds no parameter-level detail, so the schema carries the full burden and baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Read') plus the resource ('saved business, audience, products, goals and agent rules for this project'), enumerating exactly what data is retrieved. This clearly separates it from the sibling update_project_context, which mutates the same data.

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

Usage Guidelines3/5

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

Usage is only implied by the read verb and the enumerated context fields; there is no explicit statement of when to call this versus alternatives like get_project or update_project_context. Adequate but leaves selection 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_project_defaultsGet project defaultsA
Read-only
Inspect

Get the effective rank-check schedule and SERP market defaults for a project. The response includes serp_depth, serp_stop_on_match, and source: explicit means the market was configured, derived means it was inferred from existing keywords, and fallback means the instance default was used.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is established. The description adds meaningful behavioral insight beyond annotations by explaining the 'source' field's three possible values (explicit, derived, fallback), which clarifies how the data is computed rather than merely stored.

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

Conciseness4/5

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

The description is a single efficient sentence that conveys the resource, verb, scope, response fields, and semantic of the 'source' value. It's appropriately compact with no filler, though the enumeration of source values is slightly dense and could be structured more cleanly.

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

Completeness4/5

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

For a single-parameter read-only tool with 100% schema coverage and clear annotations, the description is largely complete. It explains the response semantics adequately. However, it doesn't note any pagination or mention what an empty/absent defaults response looks like, which is a minor gap for a tool this simple.

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

Parameters4/5

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

Schema coverage is 100%, so the schema documents the sole project_id parameter fully, including its pattern. With only one parameter fully specified, the baseline is 3, but the description adds value by confirming the parameter selects the project whose defaults are being read, reinforcing the project-scoped nature without contradicting the schema.

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

Purpose5/5

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

The description uses specific verbs and resources ('Get the effective rank-check schedule and SERP market defaults for a project') and clearly distinguishes this read tool from the sibling update_project_defaults. It names the specific response elements (serp_depth, serp_stop_on_match, source) which makes the tool's purpose concrete and identifiable.

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

Usage Guidelines3/5

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

The description clearly indicates it reads defaults for a project and explains the 'source' field semantics (explicit/derived/fallback), giving useful context for when to consult this tool. However, it doesn't explicitly contrast against update_project_defaults or get_project, leaving the usage boundaries 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_provider_ratesGet provider ratesA
Read-only
Inspect

List public provider rate cards used for rank-check cost estimates. Each rate card is either flat-priced (per-check options such as standard, priority, live) or plan-priced (monthly plans with included checks). Anonymous endpoint; no project scope needed.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds meaningful context by explaining the two pricing structures (flat-priced per-check options vs plan-priced monthly plans) and the anonymous endpoint nature, which is valuable 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.

Conciseness5/5

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

Two sentences, zero waste. Front-loaded with the purpose, followed by useful explanatory detail about pricing models and the no-scope requirement. Every sentence earns its place.

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

Completeness5/5

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

For a zero-param, read-only list endpoint with no output schema, the description explains what's returned (rate cards), the two pricing models, and the access model (anonymous). This is complete for the tool's simplicity level; no output schema means the return format responsibility is minimal.

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

Parameters4/5

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

With 0 parameters and 100% coverage, the schema is trivially complete. The description establishes no parameters are needed ('Anonymous endpoint; no project scope needed'), which is the entire story for parameter semantics. This fully compensates for the zero-param case, warranting baseline 4 as per the rubric.

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

Purpose5/5

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

The description clearly states 'List public provider rate cards used for rank-check cost estimates' with a specific verb, resource (rate cards), and purpose. It distinguishes between sibling tools by clarifying it's about cost-estimate rate cards and mentions 'Anonymous endpoint; no project scope needed' which differentiates it from get_cost_estimate and provider-related tools.

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

Usage Guidelines4/5

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

The description specifies when this applies (for rank-check cost estimates) and clarifies no project scope is needed, which helps the agent know there's no prerequisite. It implicitly distinguishes from get_cost_estimate by noting this lists rate cards rather than computing an estimate, though it doesn't explicitly name the alternative tool.

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

get_rank_check_resultGet rank check resultA
Read-only
Inspect

Get one rank check result by check id. Read status and observation_completeness before interpreting position null. Only complete coverage supports absence within depth; a positive position remains valid with truncated coverage. Unknown or legacy coverage does not establish absence. error_code is a stable reason (provider_billing, provider_auth, provider_rate_limited, provider_transient); retry only for provider_rate_limited or provider_transient.

NameRequiredDescriptionDefault
check_idYesIdentifier of the rank check to retrieve.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare a safe read, but the description adds substantial behavioral context: the error_code taxonomy with its stable values, which of those errors are retryable, and the null-position semantics tied to coverage level. This is exactly the kind of retry/semantics 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.

Conciseness4/5

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

The retrieval action is front-loaded in the first sentence, followed by tightly packed interpretation rules with no filler. It is dense to the point of being telegraphic in places, but every clause carries an operational rule an agent would otherwise have to guess.

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

Completeness4/5

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

With no output schema, the description takes on the burden of explaining return semantics and does so for status, observation_completeness, position null, and error_code. It is close to complete, though it never sketches the overall response shape or confirms what fields accompany a successful result.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters, so check_id and project_id are already documented in the schema. The description restates check_id lookup but adds no format, scoping, or cross-project meaning beyond it, matching the baseline for schema-complete tools.

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

Purpose4/5

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

States a specific verb and resource ('Get one rank check result by check id'), so the agent knows it retrieves a single result object keyed by check_id. However, it never differentiates itself from the sibling get_rank_check_run / list_rank_check_runs, which is exactly the ambiguity an agent faces when picking among these near-identical names.

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

Usage Guidelines4/5

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

Gives concrete interpretation conditions ('Read status and observation_completeness before interpreting position null') and an explicit action rule ('retry only for provider_rate_limited or provider_transient'), which is real when-to-use guidance. It stops short of naming an alternative tool or stating when this result lookup is preferred over fetching a run.

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

get_rank_check_runGet retained rank-check runA
Read-only
Inspect

Read retained execution states, including cancelled, blocked and deferred outcomes without observations. Does not launch checks, retry provider requests or change schedules.

NameRequiredDescriptionDefault
run_idYesPublic identifier of the retained rank-check run.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already establish readOnlyHint=true and destructiveHint=false. The description adds genuine value beyond them: it discloses that cancelled, blocked and deferred execution states are all returned, and that results come 'without observations' — behavioral detail an agent could not infer from the safety hints alone.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the verb and resource, with the second sentence efficiently enumerating exclusions. No filler or restatement of the tool name.

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

Completeness4/5

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

With only two fully-documented params and no output schema, the description's hint at returned execution states partially stands in for a return-value explanation. It could go further on the shape of the returned run state, but 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.

Parameters3/5

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

Schema description coverage is 100%, so both run_id and project_id are fully documented in the schema. The description adds no syntax, format, or relationship detail beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb ('Read') and resource ('retained execution states' of a rank-check run), with the singular get signal relative to sibling list_rank_check_runs. It doesn't explicitly name get_rank_check_result or explain how the two differ, so sibling differentiation is left to the agent.

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

Usage Guidelines3/5

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

The exclusions ('Does not launch checks, retry provider requests or change schedules') clarify what this is not, which implies usage context. However, there is no explicit statement of when to call this versus list_rank_check_runs or get_rank_check_result, so routing 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_rank_historyGet rank historyA
Read-only
Inspect

List historical rank checks for a keyword with date, status, and pagination filters. Read status and observation_completeness before interpreting position null. Only complete coverage supports absence within depth; a positive position remains valid with truncated coverage. Unknown or legacy coverage does not establish absence. error_code is a stable reason (provider_billing, provider_auth, provider_rate_limited, provider_transient); retry only for provider_rate_limited or provider_transient.

NameRequiredDescriptionDefault
limitNo
sinceNo
untilNo
cursorNo
statusNo
keyword_idYesIdentifier of the tracked keyword to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly/openWorld=false/destructive=false, so the safety profile is covered. The description goes well beyond them by explaining how to interpret a null position under different observation_completeness states and by classifying error_code values with retry policy — real operational context an agent cannot get elsewhere. It stops short of stating pagination ceilings or auth requirements.

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

Conciseness4/5

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

Front-loaded with the action, then dense interpretive rules in three tight sentences. Every clause about coverage/error_code earns its place given there is no output schema, though the opening sentence could have done slightly more work before the interpretive block.

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

Completeness4/5

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

With no output schema, the description must explain return semantics, and it does so well: status, observation_completeness, position nullability, and error_code taxonomy. The remaining gap is input-side — no format guidance for the date, cursor, or limit parameters.

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

Parameters3/5

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

Schema coverage is only 29% (keyword_id and project_id only), so the description must carry the rest. It gestures at 'date, status, and pagination filters' but gives no format for since/until (maxLength 80), no cursor semantics, and no hint about the limit ceiling of 200. It partially compensates but leaves most parameters underspecified.

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

Purpose4/5

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

Opens with a specific verb+resource: 'List historical rank checks for a keyword,' and enumerates the filter axes (date, status, pagination). This is clearly distinct from siblings like list_rank_check_runs or get_rank_check_result, though it never names an alternative to differentiate itself explicitly.

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

Usage Guidelines3/5

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

Usage is implied by the filter axes and the retry rule ('retry only for provider_rate_limited or provider_transient'), which is genuinely actionable. However, it never says when to choose this over export_rank_history or get_rank_check_result, nor any prerequisites such as which project scope is required.

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

get_session_profileGet session profileA
Read-only
Inspect

Report the effective profile of this MCP session: read_only, the active toolsets, tool_count, tool_names, canonical_names, and client_note. Answered locally from this server's registration; no REST call.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so safety is settled. The description adds real value beyond them by disclosing that the answer is computed locally from the server's registration with no REST call — useful latency/cost context an agent would otherwise have to guess.

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

Conciseness5/5

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

One dense sentence, front-loaded with the verb and resource, then the field list, then the local-resolution note. No filler; every clause earns its place.

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

Completeness4/5

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

With no output schema, the description carries the burden of describing return values and does so by naming all six fields, which is enough for an agent to know what it will get. It stops short of explaining field semantics (e.g., what client_note or canonical_names mean), which is a minor gap for a zero-parameter introspection tool.

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

Parameters4/5

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

There are zero parameters, so the baseline is 4. The description lists the fields of the response rather than parameters, which does not map to schema semantics but is not misleading.

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

Purpose5/5

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

States a specific verb ('Report') and resource ('the effective profile of this MCP session'), then enumerates exactly what is returned (read_only, toolsets, tool_count, tool_names, canonical_names, client_note). It is distinguishable from siblings like get_capabilities and get_me because it scopes itself to session-level registration state.

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

Usage Guidelines3/5

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

Usage is implied: call it to learn what this session is allowed to do. However, it never says when to prefer it over neighboring introspection tools such as get_capabilities or get_me, nor does it state prerequisites or exclusions. Adequate but with a clear routing gap.

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

get_site_auditGet site auditB
Read-only
Inspect

Read saved page signals and issues for one project crawl.

NameRequiredDescriptionDefault
report_idYesThe public report ID, scoped to this project.
project_idYesThe public project ID. Project membership and token scopes are enforced.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, and the description's 'Read saved' wording is consistent with that. It adds a little context about what is retrieved (page signals and issues for one crawl), but says nothing about whether this returns the latest crawl, result size, or any pagination/truncation behavior.

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

Conciseness4/5

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

A single front-loaded sentence of ten words with no filler; the verb and scope come first. It is efficient, though it is arguably too spare given the three similarly-named audit tools.

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

Completeness3/5

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

With no output schema, the description is the only place a caller learns what comes back, and it offers just a broad phrase ('page signals and issues') with no indication of structure or volume. For a simple read-only two-parameter retrieval this is minimally adequate, but the sibling ambiguity leaves a gap.

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

Parameters3/5

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

Schema description coverage is 100%, with both report_id and project_id fully documented including their ID patterns and the membership/scope enforcement note, so the schema carries parameter meaning entirely. The description adds no syntactic or semantic detail about either parameter, which is the expected baseline when the schema is this complete.

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

Purpose4/5

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

States a specific verb (Read) and resource (saved page signals and issues) scoped to a single project crawl, which distinguishes it from the sibling trio run_site_audit (triggers a crawl) and list_site_audits (enumerates them). It stops short of explicitly naming those siblings, but the scope is clear enough to select the right tool.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. The word 'saved' weakly implies a crawl must already exist, but the description never tells the agent to prefer this over list_site_audits or run_site_audit, which carry nearly identical names and would be easy to confuse.

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

list_agent_reportsList agent reportsB
Read-only
Inspect

Read saved project analyses. Results are restricted to the project and its members.

NameRequiredDescriptionDefault
kindNoAnalysis category, such as ai_visibility or site_audit.
limitNoPage size, at most 100.
cursorNoOpaque next-page cursor from the previous response.
project_idYesThe public project ID. Project membership and token scopes are enforced.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds one genuine behavioral fact beyond that: results are confined to the project and its members, implying membership/scope enforcement. It says nothing about pagination behavior or result shape, so it is useful but not rich.

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

Conciseness5/5

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

Two short sentences, zero waste, with the core action front-loaded and the scoping caveat immediately after. Nothing redundant.

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

Completeness3/5

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

For a four-parameter, paginated list tool with no output schema, the description covers scoping but omits how to page through results and how it relates to get_agent_report. The schema carries the parameter burden, so nothing critical is missing, but the definition is merely adequate.

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

Parameters3/5

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

Schema description coverage is 100%, so kind, limit, cursor, and project_id are all documented in the schema, including the cursor's 'next-page' role and the 100-item cap. The description adds no parameter-level detail beyond what structured fields already provide, which is the baseline 3 case.

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

Purpose4/5

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

States a clear verb and resource ('Read saved project analyses'), and the title/name tie it to agent reports. It is distinguishable from create_agent_report, but it does not explicitly distinguish itself from the sibling get_agent_report, leaving the list-vs-single-fetch boundary implicit.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus create_agent_report, get_agent_report, or the various list_* siblings. The only guidance is a scoping constraint on results, not a usage condition.

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

list_ai_tracking_promptsList ai tracking promptsC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
limitNoPage size, at most 100.
cursorNoOpaque cursor from the previous response.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description does add real behavioral context beyond annotations by flagging 'original provenance, partial states, and cost uncertainty' in the returned data, which is useful for interpreting results, though it omits pagination behavior and any partial-failure semantics.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is compact and appropriately sized, though the dense abstract noun list ('provenance, partial states, cost uncertainty') sacrifices clarity for brevity.

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

Completeness3/5

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

With no output schema, the description should clarify what is returned; instead it introduces ambiguity between 'prompts' and 'evidence', and no output-shape detail is given. Safety is covered by annotations and params by the schema, so it is functional but not complete for a projection-style list endpoint in a very large sibling group.

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

Parameters3/5

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

Schema description coverage is 100% (limit, cursor, project_id are all documented with constraints and enforcement notes), so the schema carries the parameter burden. The description adds nothing about parameters, so the baseline 3 applies.

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

Purpose2/5

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

The description says the tool 'Read[s] project-scoped AI tracking evidence' but the tool name/title is 'list_ai_tracking_prompts'. The stated resource ('evidence') mismatches the name ('prompts') and collides with siblings like list_ai_tracking_samples and export_ai_tracking_evidence, so an agent cannot confidently tell what entity is returned.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no alternatives named, despite a crowded sibling set (list_ai_tracking_runs, list_ai_tracking_samples, get_ai_tracking_history, list_ai_tracking_topics). The reader is left to infer that this is the prompt-listing endpoint from the name alone.

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

list_ai_tracking_runsList ai tracking runsC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
limitNoPage size, at most 100.
cursorNoOpaque cursor from the previous response.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral color beyond that — results carry 'original provenance, partial states, and cost uncertainty' — but these are vague hints rather than concrete disclosure of pagination behavior, when partial states occur, or how cost uncertainty is represented.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or repetition. It is efficient, though its terseness borders on vagueness rather than being maximally informative.

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

Completeness3/5

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

For a paginated, project-scoped list tool with annotations and full schema coverage, the definition is minimally adequate but omits any mention that results are paginated (cursor) and gives no sense of what a run record contains versus the run list. Functionally callable, but an agent is left guessing about the collection semantics.

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

Parameters3/5

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

Schema description coverage is 100% (limit, cursor, project_id all documented in the schema), so the schema already explains page size, cursor semantics, and project scoping. The description adds nothing about the parameters, which is the expected baseline 3 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.

Purpose3/5

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

States a domain-specific action ('Read project-scoped AI tracking evidence'), which implies a scoped read of AI tracking data, but substitutes the abstract word 'evidence' for the concrete resource (runs) and never distinguishes itself from siblings like get_ai_tracking_run, list_ai_tracking_samples, or get_ai_tracking_history. An agent can guess the domain but not the exact object being listed.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of alternatives (e.g., get_ai_tracking_run for a single run, list_ai_tracking_samples for samples), and no stated preconditions beyond the project scope hinted at. The agent must infer usage from the name alone.

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

list_ai_tracking_samplesList ai tracking samplesA
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
limitNoPage size, at most 100.
cursorNoOpaque cursor from the previous response.
run_idYesPublic tracking run ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description adds genuinely non-obvious data-quality behavior: results carry original provenance, can be in partial states, and cost figures are uncertain. That tells the caller not to treat the data as complete or final, which is not derivable from the schema.

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

Conciseness5/5

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

A single front-loaded sentence with no filler. Every clause ('project-scoped', 'original provenance', 'partial states', 'cost uncertainty') carries distinct meaning.

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

Completeness4/5

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

With no output schema, the description should characterize returns, and it does at a high level (provenance, partial states, cost uncertainty); pagination is left to the well-documented schema. Adequate, though it never says what a 'sample' is or how pagination terminates.

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

Parameters3/5

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

Schema description coverage is 100% and documents limit (page size), cursor (opaque pagination token), run_id, and project_id with patterns and enforcement notes. The description adds only the project-scoping notion, which the schema already states, so baseline 3 applies.

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

Purpose4/5

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

States a specific verb ('Read') plus resource ('project-scoped AI tracking evidence'), and the name/description scope it to a project. It does not differentiate from near-siblings that also surface tracking evidence, notably export_ai_tracking_evidence or get_ai_tracking_history, so an agent cannot route between them from the description alone.

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

Usage Guidelines2/5

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

No when-to-use, when-not-to-use, or alternative is given. The crowded AI-tracking sibling family (list_ai_tracking_runs, get_ai_tracking_run, export_ai_tracking_evidence, get_ai_tracking_history) makes routing guidance especially valuable here, and none is provided.

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

list_ai_tracking_schedulesList ai tracking schedulesC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
limitNoPage size, at most 100.
cursorNoOpaque cursor from the previous response.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

C2.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds only the phrase "partial states, and cost uncertainty," which is vague and, for a schedule-listing tool, arguably off-topic rather than genuinely informative about behavior (pagination, ordering, staleness rules).

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

Conciseness3/5

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

It is a single short sentence with no padding, which is structurally fine, but the brevity is achieved by under-specification rather than by front-loading useful content — the one sentence is spent on wording that does not match the tool.

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

Completeness2/5

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

For a paginated, cursor-based read tool with no output schema, the agent needs at least to know it returns a list of schedules and that cursoring applies. Neither is conveyed, and the description does not compensate for the absent output schema, so it is not complete enough to call confidently.

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

Parameters3/5

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

Schema description coverage is 100% for all three parameters (limit page size, opaque cursor, project_id pattern), so the schema carries the parameter burden. The description adds no parameter meaning whatsoever, which is acceptable but not additive — the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says "Read project-scoped AI tracking evidence," but the tool is list_ai_tracking_schedules — schedules are never mentioned. "Evidence" actually names the resource of a sibling tool (export_ai_tracking_evidence), so the description points the agent at the wrong resource and the wrong verb shape (no sense of listing/collection retrieval).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use, no when-not-to-use, and no named alternative despite a dense sibling cluster (list_ai_tracking_runs, list_ai_tracking_prompts, get_ai_tracking_history, export_ai_tracking_evidence). Only the implicit "project-scoped" qualifier hints at context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ai_tracking_topicsList ai tracking topicsB
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

NameRequiredDescriptionDefault
limitNoPage size, at most 100.
cursorNoOpaque cursor from the previous response.
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely non-obvious data caveats: results may carry original provenance, be in partial states, and have cost uncertainty. That is real behavioral value beyond structured fields, though it says nothing about pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is slightly dense and jargon-heavy ('partial states', 'cost uncertainty'), but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description bears some burden for return semantics; it hints at evidence quality but never states that the response is a paginated list of AI tracking topics or what a topic record contains. It is adequate but leaves a meaningful gap for an agent trying to consume the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so limit, cursor and project_id are already fully documented in the schema, including the enforced membership/token scope. 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.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description conveys a read operation ('Read project-scoped AI tracking evidence') but never states the resource the tool actually lists — topics — and drifts into describing the data's character (provenance, partial states, cost uncertainty) rather than the verb+resource pairing. It also fails to distinguish this from the many adjacent list_ai_tracking_* siblings. The name carries most of the differentiation, not the description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisite context, and no mention of alternatives such as list_ai_tracking_prompts or list_ai_tracking_runs. The agent must infer usage entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_alert_rulesList alert rulesB
Read-only
Inspect

Alert rules: list the per-project conditions that decide when a notification fires.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the semantic nuance that these are per-project 'conditions' rather than fired events, which is useful. However, it doesn't disclose pagination behavior (though cursor/limit params suggest it) or the return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, well-phrased sentence that efficiently conveys scope and purpose with zero waste or redundancy. Appropriate for a straightforward list-style tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with good annotations (read-only, non-destructive), moderate completeness. It communicates the core purpose and project scoping. However, no output schema, no pagination explanation beyond the presence of cursor/limit params, and no guidance on what a 'rule' object looks like or how results are ordered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 33% with the project_id parameter well documented in-schema ('list_projects returns valid project ids'), so the schema partially carries the burden. The description adds the concept of 'per-project conditions' tying rules to a project context. However, limit and cursor lack any description beyond type constraints, and the description doesn't compensate for the 67% coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('list the per-project conditions that decide when a notification fires'), clearly identifying it as the read/listing tool for alert rules. It's distinguishable from siblings like create_alert_rule, update_alert_rule, list_triggered_alerts, and delete_alert_rule, though it doesn't explicitly contrast itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this vs alternatives like list_triggered_alerts (which lists actual fired notifications vs the rule conditions). The description notes 'per-project conditions' implying it needs a project_id, but doesn't clarify special cases like pagination use or how it relates to the triggered-alerts counter tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_api_keysList API keysA
Read-only
Inspect

List API keys for the authenticated project, including revoked keys.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only safety profile is covered. The description adds value by noting that the list includes revoked keys, which is a behavioral trait beyond what annotations convey. This is useful context an agent wouldn't get from the schema or annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with the core verb+resource, and the 'including revoked keys' clause is relevant additional detail. Zero waste or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list operation with no output schema and 3 simple params, the description is reasonably complete. The 33% schema coverage means limit and cursor lack documentation, but these are standard pagination params that agents commonly understand. No output schema means the return format is not described, which is a minor gap for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only project_id has a description). The description doesn't cover limit/cursor semantics, which are common pagination params an agent could infer. The project_id parameter's schema description ('list_projects returns valid project ids') already covers the most nuanced parameter, so the description adds minimal additional value here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('List API keys') and adds a meaningful scope detail ('including revoked keys'), which distinguishes it functionally. It's clear what the tool does. However, it doesn't distinguish itself from the sibling 'list_project_api_keys', which sounds near-identical in purpose — a missed opportunity for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description notes it operates on 'the authenticated project' and includes revoked keys, which gives some context on scope. It doesn't explicitly state when to use this versus list_project_api_keys or list_personal_tokens, despite these being plausible alternatives. The project_id parameter description helps, but no explicit when/when-not guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_competitorsList competitorsC
Read-only
Inspect

List the competitor domains tracked for a project (rival sites, competing domains) with their market data such as share of voice and positions, plus competitor suggestions. Use it for competitor analysis, competing sites, and rival rankings.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description usefully discloses the payload contents (share of voice, positions, suggestions) that no output schema provides, but says nothing about pagination behavior despite limit/cursor parameters.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, which is good. The second sentence, however, is largely redundant keyword restatement ('competitor analysis, competing sites, rival rankings') rather than earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and two of three parameters undocumented, the description should carry more weight. It partially covers return contents but omits pagination semantics and the project-scoping requirement, leaving meaningful gaps 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.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: project_id is documented in the schema, while limit and cursor have no description anywhere. The description never mentions paging, result caps, or how cursor/limit interact, so it fails to compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the competitor domains tracked for a project') and adds the returned data shape (share of voice, positions, suggestions). Sibling mutation tools add_competitor/remove_competitor are obviously different verbs, but the description never names them, so 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it for competitor analysis, competing sites, and rival rankings' is a list of synonyms for the tool name, not actual when-to-use guidance. There is no statement of prerequisites, no when-not, and no pointer to add_competitor/remove_competitor for changing the tracked set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_keywordsList project keywordsA
Read-only
Inspect

List the tracked keywords (search terms) of a project with their current rankings: latest_position, previous_position, ranking_url, target URL, tags, schedule, and market. Supports pagination, search, filters, and sorting. Use it for rank positions, rank tracking, keyword rankings, and SERP position lookups. Each keyword includes location_key, language_code, and language_label for its exact market pair. latest_position can be null after a failed check, with unknown observation coverage, or for absence within the requested depth. Read latest_check.status and observation_completeness. Only complete coverage supports absence within depth; a positive position remains valid with truncated coverage. latest_successful_check is the most recent completed observation and can also have unknown coverage.

NameRequiredDescriptionDefault
tagNo
sortNo
limitNo
topicNo
cursorNo
deviceNoDevice whose search or ranking data is being selected.
intentNo
searchNo
countryNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
position_gtNo
position_ltNo

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/non-destructive annotations, the description discloses substantive behavioral semantics: why latest_position can be null (failed check, unknown coverage, absence beyond requested depth), that latest_check.status and observation_completeness must be consulted, that only complete coverage supports an absence-within-depth claim while a positive position survives truncated coverage, and that latest_successful_check can also carry unknown coverage. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and return fields are front-loaded, followed by filter capabilities and then the null/coverage rules, which is a sensible order. It is a single dense paragraph and the coverage caveats come as a compressed run of near-identical sentences, but each sentence carries distinct semantic content rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does the heavy lifting on the return side: it names the ranking fields, the market-pair fields, and the nullability/coverage rules, which is unusually complete. The gap is on the input side — twelve parameters at 17% schema coverage are left largely unexplained, so an agent still cannot confidently construct filters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 17% across 12 parameters, so the description should be compensating. Instead it offers a generic 'Supports pagination, search, filters, and sorting' and never explains tag, topic, intent, country, device, cursor, limit bounds, or the sort enum semantics. The location_key/language_code/language_label mentions are output fields, not inputs, so they do not help parameter selection.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — 'List the tracked keywords (search terms) of a project' — and enumerates the returned ranking fields (latest_position, previous_position, ranking_url, target_url, tags, schedule, market). It is clearly distinguishable from suggestion/research tools by the word 'tracked', but it never explicitly names the nearest siblings (get_keyword for one keyword, list_saved_keywords for saved lists), so differentiation is inferential rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it for rank positions, rank tracking, keyword rankings, and SERP position lookups' gives clear query-intent triggers for selecting this tool. However, it gives no exclusions or explicit alternatives (e.g. use get_keyword for a single keyword, list_rank_check_runs for check-level data), so the agent must infer boundaries from the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_local_monitor_point_historyList local monitor point historyC
Read-only
Inspect

Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes.

NameRequiredDescriptionDefault
toNoInclusive occurrence-created window end, no later than as_of.
fromNoInclusive occurrence-created window start.
as_ofNoFrozen UTC selection time with milliseconds.
cursorNoOpaque signed history cursor; preserve selection and original point scope.
run_idYesPublic identifier of the original retained Local run.
target_idYesPublic identifier of the original captured Local measurement target.
monitor_idYesPublic identifier of the retained Local monitor.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered structurally. The description adds the useful reassurance that it never triggers provider work, scheduling, or accounting writes, which is genuine extra context, but it says nothing about pagination behavior (the cursor param), retention limits, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Only two sentences, which is appropriately sized, but the leading sentence is vague ('honest quality/cost uncertainty') and the substantive constraint is pushed into the second sentence. Some phrasing does not earn its place relative to the tool's actual behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter read tool with 4 required identifiers, a time window, a cursor, and no output schema, the description omits the essentials: what a 'history point' result contains, pagination via cursor, and how it differs from the listing/export siblings. The annotations cover safety but the description leaves core calling context unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all eight parameters carry descriptive text (window bounds, as_of freezing, signed cursor, id patterns), so the schema fully documents them. The description adds no parameter meaning beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The name/title say 'List local monitor point history' clearly, but the description itself never states that this lists historical observations for a monitor point — it says 'Read original retained Local evidence and honest quality/cost uncertainty,' which is abstract marketing phrasing rather than a concrete verb+resource. It does not distinguish itself from close siblings like list_local_monitor_point_listings or get_local_monitor_run_results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No positive when-to-use guidance and no named alternatives among the four local-monitor siblings (list_local_monitor_runs, get_local_monitor_run_results, list_local_monitor_point_listings, export_local_monitor_run). The only scoping is negative ('never launches provider work, schedules, or accounting writes'), which clarifies what it is not but does not route the agent between options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_local_monitor_point_listingsList local monitor point listingsC
Read-only
Inspect

Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes.

NameRequiredDescriptionDefault
as_ofNoFrozen UTC selection time with milliseconds.
run_idYesPublic identifier of the original retained Local run.
target_idYesPublic identifier of the original captured Local measurement target.
monitor_idYesPublic identifier of the retained Local monitor.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true, destructiveHint=false and a closed-world scope. The description restates the no-side-effect profile in different words (no provider work, schedules, or accounting writes), which is mildly useful confirmation but redundant. It adds nothing about return shape, pagination, or why cost/quality uncertainty is surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no filler, and the constraint sentence is front-loaded right after the purpose. The only cost is the opaque phrase 'honest quality/cost uncertainty,' which consumes space without conveying an actionable idea.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only tool with full schema coverage and no output schema, the safety burden is covered, but the description never explains what a 'listing' contains or how the project/monitor/run/target chain composes, which is the main thing an agent needs to call this correctly versus its many local-monitor siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter including the four required identifier patterns (prj_/lmn_/lmr_/lmt_) is already documented with format and meaning. The description contributes no additional parameter semantics, which is acceptable but not value-adding against the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says it 'reads original retained Local evidence' but never uses the word the tool name promises – listings – nor states that it enumerates measurement point listings for a given monitor run and target. 'Local evidence' and 'quality/cost uncertainty' are jargon that an agent cannot map to a concrete resource, so the verb+resource pairing is only implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a negative constraint ('never launches provider work, schedules, or accounting writes'), which narrows the situation somewhat, but there is no positive when-to-use guidance and no routing against close siblings such as get_local_monitor_run_results or list_local_monitor_point_history. The agent is left to infer when this listing call is preferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_local_monitor_runsList local monitor runsB
Read-only
Inspect

Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes.

NameRequiredDescriptionDefault
toNoInclusive occurrence-created window end, no later than as_of.
fromNoInclusive occurrence-created window start.
as_ofNoFrozen UTC selection time with milliseconds.
cursorNoOpaque signed history cursor; preserve selection and original point scope.
monitor_idYesPublic identifier of the retained Local monitor.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description reinforces this with the explicit 'never launches provider work, schedules, or accounting writes' and hints at returned content ('quality/cost uncertainty'), but adds no detail on pagination, cursor behavior, or result volume beyond what the schema and annotations imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler, and the safety exclusion is front-loaded. The trade-off is that the brevity comes partly at the cost of clarity about what is actually listed, but structurally it is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With six parameters, a cursor, and time-window semantics, plus no output schema, the description should say more about what a 'run' record contains and how results are returned. It gestures at evidence and uncertainty but leaves the return shape and the role of the cursor/window parameters to the schema, which is adequate but thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters (as_of, from/to window, cursor, monitor_id, project_id) are already documented in the schema. The description contributes 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.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb/resource pair is blurred: the description says it reads 'original retained Local evidence' rather than stating plainly that it enumerates local monitor runs for a monitor. It does not distinguish itself from close siblings such as get_local_monitor_run_results, list_local_monitor_point_history, or export_local_monitor_run, so an agent must infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'This never launches provider work, schedules, or accounting writes' gives a when-not boundary that separates it from write/mutation siblings, which is useful. However, it names no alternative and gives no affirmative 'use this when you need X' guidance, leaving selection between the local-monitor tools largely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_migration_tokensList migration tokensB
Read-only
Inspect

List active migration tokens for a project.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, covering the safety profile. The description adds the 'active' filter (only active tokens are returned) which is useful and consistent with annotations. No mention of pagination behavior, which the cursor/limit params imply but is not disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, zero waste. Efficient and to the point. The term 'active' is the only substantive word beyond the basic resource+verb, but it adds meaningful scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with readOnlyHint and non-destructive annotations, this is adequate: reads are low-risk. However, with pagination parameters present (limit, cursor) and no output schema, the description could note that results are paginated/ordered. Given 3 params and simple semantics, this is reasonably complete but leaves pagination behavior implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33% (only project_id has a description). The description mentions 'for a project' which maps to project_id, but adds nothing about limit or cursor (pagination). However, the meaning of list-style limit/cursor params is fairly standard and inferable from their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'List active migration tokens for a project.' It specifies the action (list) and resource (migration tokens), and scopes to 'active' tokens and 'a project'. It distinguishes reasonably from sibling mint_migration_token and revoke_migration_token (those are create/delete verbs), though list_personal_tokens and list_api_keys are similarly-named siblings that lack explicit differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives like list_personal_tokens or list_api_keys. The description merely states the action without context about when a migration token listing is appropriate, prerequisites beyond project_id, or scenarios where this tool is preferred.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_personal_tokensList personal tokensB
Read-only
Inspect

List the user's personal access tokens. Requires an admin PAT.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the agent knows this is a safe read operation. The description adds the admin PAT requirement, which is a meaningful behavioral constraint not captured in annotations. However, it doesn't explain whether the returned tokens include sensitive values, whether tokens are truncated, or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise: two short sentences totaling about 10 words of actual content. Zero waste, front-loaded with the core action before the prerequisite. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only tool with strong annotations, the description is reasonably complete. It conveys the core purpose and the auth requirement. However, given that the tool deals with sensitive credentials (personal tokens), it could note whether token values are fully returned or masked, and whether the caller should expect the current user's tokens only vs. all users' tokens in an admin context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has 0 parameters, so there's no parameter information to convey. Per the rubric, 0 params earns a baseline of 4. The description doesn't need to add parameter semantics since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb+resource: 'List the user's personal access tokens.' It identifies what is being listed (personal access tokens) and distinguishes this from sibling tools like list_api_keys, create_personal_token, and revoke_personal_token. The scope ('the user's') adds clarity about whose tokens are listed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only usage guidance is the requirement for an admin PAT ('Requires an admin PAT'). There is no when-to-use guidance, no exclusions, and no mention of how this differs from list_api_keys or list_migration_tokens. The admin requirement is useful but incomplete as usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_project_api_keysList project API keysB
Read-only
Inspect

List API keys scoped to a specific project, including revoked keys.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds that revoked keys are included, which is useful context. However, it doesn't disclose pagination behavior, ordering, or whether results are complete (given the limit/cursor params suggest pagination but no limit default or behavior is stated).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single-sentence description is efficient and front-loaded with the core purpose. The added detail about revoked keys earning its place. No padding or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple list tool with pagination params and no output schema. The description is adequate for the basic purpose but doesn't explain pagination semantics or how results differ from list_api_keys. Given the sibling-tool landscape with list_api_keys, list_personal_tokens, and list_migration_tokens, a fuller description of the project-scoped distinction would help.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 33% schema description coverage, the description compensates poorly. The project_id, limit, and cursor params follow standard pagination conventions when compared with sibling list tools, but the description doesn't clarify behaviors like default limit values or cursor usage. The schema covers project_id adequately; limit and cursor rely on convention.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (list) and resource (API keys scoped to a project), and adds the detail that revoked keys are included. It's identifiable among siblings like list_api_keys (global) and list_personal_tokens, though it doesn't explicitly distinguish from list_api_keys.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool is for project-scoped keys, which differentiates from the global list_api_keys sibling. However, it gives no explicit when-to-use guidance, no mention of how pagination works, or when to prefer this over list_personal_tokens. The use case is inferable but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsList projectsA
Read-only
Inspect

List projects visible to the configured credential. Project keys return one project; personal access tokens return all project memberships.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read nature is covered. The description adds value by explaining the auth-mode-dependent result scope (key returns one project, PAT returns all memberships), which is meaningful behavioral context beyond annotations. However, it doesn't describe pagination, sorting, or response format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero wasted words. The first sentence states the purpose; the second explains the critical auth-type difference. Efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only listing tool with good annotations, the description is complete. It covers the key behavioral nuance (auth-type-dependent scope). No output schema exists, so the description could benefit from mentioning what fields are returned, but for a simple listing tool this is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters with 100% schema coverage (empty schema is fully covered). With 0 params, the baseline is 4. The description appropriately focuses on behavior rather than params since there are none to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (list) and resource (projects visible to the configured credential). It distinguishes behavior based on auth type (project keys vs personal access tokens return different scope). It doesn't explicitly differentiate from sibling tools like get_project, but the scope statement adds clarity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context about when to use it: to list projects visible to the configured credential. It explains the two authentication modes and their differing behavior (key returns one project, PAT returns all memberships), which helps the agent anticipate results. No explicit exclusion of alternatives, but the 'visible to credential' scoping is useful context given the openWorldHint=false annotation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_providersList providersA
Read-only
Inspect

List the data provider connections of a project: SERP rank-check providers (dataforseo, serpapi) and analytics integrations (gsc, ga4, plausible), with connection status, priority, and enabled state. Use it for integrations, data sources, and provider credentials status. status is the catalog state; connection_status says whether the project can use the provider.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, non-destructive, closed-world), and the description adds genuine semantic content: 'status is the catalog state; connection_status says whether the project can use the provider' disambiguates two similarly named fields that would otherwise be confused. It does not mention pagination behavior despite limit/cursor parameters, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the resource and its contents, then the discovery keywords, then the status/connection_status distinction. The 'Use it for integrations, data sources...' phrasing is slightly keyword-stuffy, but every sentence carries usable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully previews the return shape (connection status, priority, enabled state) and clarifies the catalog-vs-connection state distinction. The remaining gap is pagination semantics for limit/cursor, which an agent would need to page through large provider lists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: project_id is documented, but limit and cursor have no descriptions anywhere. The description does not compensate at all — it never explains result paging or the maximum of 200 per page, so an agent has no guidance on the two undocumented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the data provider connections of a project') and then enumerates the concrete provider families returned (dataforseo, serpapi, gsc, ga4, plausible) plus the fields included (connection status, priority, enabled state). This specificity makes it easy to separate from adjacent siblings such as get_provider_rates, connect_provider, or set_provider_enabled.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Use it for integrations, data sources, and provider credentials status' gives explicit, concrete usage triggers for an agent looking up provider configuration. There is no statement of when-not to use it or which sibling to prefer for related tasks, 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.

list_rank_check_runsList retained rank-check runsB
Read-only
Inspect

Read retained execution states, including cancelled, blocked and deferred outcomes without observations. Does not launch checks, retry provider requests or change schedules.

NameRequiredDescriptionDefault
limitNo
cursorNo
statusNo
segmentNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real value beyond them by disclosing that retained states include cancelled, blocked and deferred outcomes and that these carry no observations — meaningful expectations for the agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler, and the positive capability statement is front-loaded ahead of the exclusions. Slightly terse for the amount of undocumented surface it must cover.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, five parameters with minimal schema coverage, and pagination/filter semantics are entirely unexplained. For a paginated list endpoint with a segment enum, the description leaves an agent guessing about how to narrow or page results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 5 parameters and only 20% schema description coverage, the description carries most of the burden but supplies nothing about limit, cursor pagination, the status filter, or the history/planned segment enum. Only project_id is documented, and that documentation lives in the schema, not the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action and resource ('Read retained execution states' i.e. rank-check runs) and lists the outcome classes covered (cancelled, blocked, deferred without observations). It implicitly separates itself from launch/retry/schedule tools, though it never uses the word 'list' or restates the resource as 'rank-check runs', so the match to the tool name relies on inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives useful negative guidance ('Does not launch checks, retry provider requests or change schedules'), which rules out run_rank_check and schedule-mutation siblings. However it never states the positive case (when to list runs vs. fetch a single run via get_rank_check_run) or any prerequisite such as needing a valid project_id.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ranked_keyword_suggestionsList ranked keyword suggestionsBInspect

Paid provider lookup on the project's own DataForSEO account, about $0.02 per 100-keyword page on a cache miss. Results are cached for 12 hours and shared with the UI and API. already_tracked marks keywords the project tracks. Set max_cost_cents to have the server refuse a cache miss whose estimate is higher.

NameRequiredDescriptionDefault
freshNo
limitNo
offsetNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
connection_idNoIdentifier of the provider connection to operate on.
max_cost_centsNoServer-enforced maximum provider cost for a cache miss, in cents.

TDQS

B3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial context beyond the annotations: ~$0.02 per 100-keyword page on a cache miss, 12-hour caching shared with UI/API, and the server-side refusal behavior of max_cost_cents. This also explains why readOnlyHint is false despite a 'list' name (it spends money and populates cache). Missing only permission/auth details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences with no filler, front-loading the most decision-relevant fact (that this costs money). Nothing is wasted, though the opening sentence could name the resource more directly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and six parameters, the description covers the cost/caching model and one result field (already_tracked) but leaves the return shape, pagination semantics (limit/offset), and fresh behavior unexplained. Complete on the risk dimension, incomplete on the interface dimension.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, and three parameters (fresh, limit, offset) are undocumented in both the schema and the description. The description's max_cost_cents sentence largely restates what the schema already says, so it does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description frames the tool as a 'paid provider lookup on the project's own DataForSEO account' but never states what it actually returns (ranked keyword suggestions) or what the ranking is based on; it leans on the name/title for purpose. It also does not distinguish it from near-siblings like research_keywords or get_keyword_metrics. Adequate but vague on the core resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no mention of alternatives (e.g., research_keywords, estimate_keyword_research_cost, get_cost_estimate), which are highly relevant given the paid nature. The max_cost_cents tip is a behavioral control, not usage routing. The agent must infer when this tool is the right pick.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_saved_keywordsList saved keywordsA
Read-only
Inspect

List keyword ideas saved without rank tracking for a project.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and destructiveHint=false, so the agent already knows this is a safe read operation. The description adds the important scoping detail ('saved without rank tracking'), but doesn't disclose pagination behavior, response format, or sort ordering. Given the readOnly annotation carries much of the safety profile, a mid score is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One clean sentence that states the action and scope. Zero waste, perfectly sized for a simple list operation. It would be hard to make this more concise while retaining meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple filtered-list tool with readOnly and non-destructive annotations and conventional pagination parameters, the description is largely adequate. It explains the key distinguishing feature (saved without rank tracking). It doesn't describe pagination or ordering, but these are typical for list endpoints and inferable from limit/cursor parameters. Could mention that pagination follows the returned cursor, but this is reasonable for the complexity level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at only 33%, the description does not explain any of the 3 parameters. The project_id parameter has its own schema description, but limit and cursor have none. However, limit and cursor are conventional pagination parameters whose semantics are naturally inferred. The description adds no parameter detail, slightly compensating via schema on project_id but leaving the other 67% uncovered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists keyword ideas 'saved without rank tracking for a project.' This distinguishes it from list_keywords, list_ranked_keyword_suggestions, and research_keywords siblings by the 'saved without rank tracking' qualifier. The purpose is specific and unambiguous, though it doesn't explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for viewing saved-but-not-tracked keywords, which implicitly distinguishes it from list_keywords (tracked) and list_ranked_keyword_suggestions. However, it does not explicitly state when NOT to use this tool or name alternative tools like the related list_keywords or create_saved_keywords. Context can be inferred but is not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_saved_viewsList saved viewsB
Read-only
Inspect

List saved keyword views for a project.

NameRequiredDescriptionDefault
limitNo
cursorNo
surfaceNoApplication surface whose saved views should be listed or created.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds minimal behavioral context beyond stating it 'lists' views. It doesn't mention pagination semantics (cursor/limit), even though the schema exposes pagination parameters. With annotations covering read-only safety, a 3 is appropriate—the description adds usable but not rich behavioral detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, zero waste, front-loaded with the verb 'List.' The sentence is efficient and readable. It could arguably be scoring 5, but it omits the pagination/surface nuance that a slightly longer description could have handled without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 parameters including pagination (cursor/limit) and an enum surface field, yet the description is a minimal single clause. With no output schema, the description must convey return shape expectations, which it doesn't. However, for a straightforward list operation backed by readOnlyHint annotations, the current level is minimum viable but leaves the agent unsure about pagination behavior, default surface, and what fields returned views contain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, with project_id documented in the schema ('Identifier of the bisibility project to operate on; list_projects returns valid project ids'). The description adds no parameter-specific semantics beyond what the schema already covers. With 4 parameters and only half documented in the schema, the description doesn't compensate for the surface or limit/cursor semantics gap, landing at baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb+resource: 'List saved keyword views for a project.' It distinguishes from siblings like create_saved_view (create vs list) and delete_saved_view (delete vs list). However, it's not fully specific about scope (whether it lists views across surfaces or defaults to a surface) and doesn't differentiate from the many other list_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used to enumerate saved views for a project but provides no explicit when/when-not guidance or alternatives. It doesn't mention the surface parameter that distinguishes keyword views from competitor views, nor does it point to create_saved_view or delete_saved_view as related lifecycle operations. The required project_id context ('for a project') provides some usage grounding.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_search_performance_query_statsList search-performance query statsB
Read-only
Inspect

Fetch live query statistics from one of the project's own connected search-performance accounts. Provider rate limits and reauthorization rules apply. query is an exact match unless query_match is contains; rows aggregate all countries and devices.

NameRequiredDescriptionDefault
limitNo
queryNo
end_dateYesCalendar date delimiting the requested reporting period.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
start_dateYesCalendar date delimiting the requested reporting period.
connection_idNoIdentifier of the provider connection to operate on.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish a safe read operation (readOnlyHint, destructiveHint=false, openWorldHint=false), and the description adds genuinely new context: provider rate limits, reauthorization requirements, and the fact that rows aggregate across all countries and devices. That is real 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the core purpose and constrained by relevant caveats. No filler, though the dangling query_match reference costs some clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter, no-output-schema read tool, the description covers rate limits and aggregation but omits matching-parameter details and the query_match inconsistency. Adequate but with clear gaps for an agent trying to call it precisely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, so the schema handles most parameter documentation. The description adds useful matching semantics for query (exact match by default), but it references a 'query_match' parameter that does not exist in the schema, and leaves connection_id and limit unexplained. Net value is marginal and partly confusing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) plus resource (live query statistics) scoped to the project's own connected search-performance accounts. It is clear what the tool returns, though there is no close sibling to explicitly differentiate from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use or when-not-to-use guidance and names no alternative tool. It mentions that provider rate limits and reauthorization rules apply, which is a constraint rather than usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_signalsList signalsA
Read-only
Inspect

List signals for a project, newest first. Filter by source (including system sources such as rank_tracker or search_analytics), exact type, and a happened-at date range via from/to ISO-8601 date-times, with cursor pagination.

NameRequiredDescriptionDefault
toNoOnly signals that happened at or before this ISO-8601 date-time.
fromNoOnly signals that happened at or after this ISO-8601 date-time.
typeNoExact signal type filter such as "deploy.completed".
limitNo
cursorNo
sourceNoSystem or workflow that produced the signal.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context: newest-first ordering, cursor pagination behavior, and the fact that system sources are included in filtering. It doesn't describe return shape or rate limits, but with readOnly annotations that burden is lighter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two efficient sentences that pack all the essential info: purpose, ordering, filters, and pagination mechanism. Zero waste or repetition of what the schema already documents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with 71% schema coverage and good annotations, the description covers the important behavioral aspects (ordering, filters, pagination). It doesn't detail the return value format, but there's no output schema and this is a straightforward list operation, so a 4 is appropriate rather than a gap requiring higher effort.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 71%, and most params have useful descriptions. The description adds value by explaining that 'source' includes system sources (giving concrete examples rank_tracker and search_analytics), and clarifies that 'type' is an exact match. This goes beyond what the schema enum/pattern alone conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (list) + resource (signals for a project) + clear scope (newest first). Explicitly names the filter dimensions (source, type, date range) and pagination, distinguishing it from sibling tools like list_traffic_snapshots and list_triggered_alerts which list different signal-adjacent data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states ordering (newest first) and clearly explains the filtering capabilities including source, type, and date range via from/to. It explains that source includes system sources such as rank_tracker or search_analytics, which is helpful. However, it doesn't explicitly name alternatives or state when NOT to use this tool versus list_traffic_snapshots or get_rank_history, though the scope is reasonably implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_site_auditsList site auditsB
Read-only
Inspect

Read the saved bounded crawl history for this project.

NameRequiredDescriptionDefault
project_idYesThe public project ID. Project membership and token scopes are enforced.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds a genuinely useful behavioral detail — that this reads already-saved history rather than triggering a crawl — but says nothing about ordering, pagination, or result size.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no filler, and the scoping information is front-loaded. Nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter list tool with no output schema, the definition is minimally viable: annotations cover safety and the schema covers the only parameter. It is still missing how results are returned (pagination, ordering, count), which an agent needs to consume a list endpoint correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the single project_id parameter (with its pattern and the note that membership and token scopes are enforced) is already fully documented. The description adds no parameter 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Read') and resource ('saved bounded crawl history') scoped to 'this project', so the agent can tell it is a retrieval tool. It does not, however, distinguish itself from the close siblings get_site_audit and run_site_audit, and it never uses the word 'audit' itself, so the link to 'site audits' relies on the title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no precondition, and no mention of alternatives such as get_site_audit (single fetch) or run_site_audit (creates a new crawl). The agent must infer that this lists existing audits rather than running one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sitemap_monitorsList sitemap monitorsA
Read-only
Inspect

List the project sitemap monitor, including its status and latest snapshot summary.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is clear from structured data. The description adds that it returns status and latest snapshot summary, which is useful context beyond the annotations. But it doesn't disclose pagination, limits, or ordering behavior of the returned list. Adequate given annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with no filler. It conveys the verb, resource, and what's returned in one line. Slightly terse but efficient and perfectly scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list-type tool with one well-documented parameter, full schema coverage, and clear read-only annotations, the description adequately covers what an agent needs. Reference to 'latest snapshot summary' gives a hint of return shape despite no output schema. Given low complexity, this is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the project_id parameter fully documented (pattern, format, and hint to list_projects for valid ids). The description itself doesn't elaborate on the parameter, but the schema carries the full burden. Baseline 3 is appropriate since the schema handles it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List the project sitemap monitor') and the resource ('sitemap monitor'), and adds what's included ('status and latest snapshot summary'). While it identifies the resource precisely and distinguishes it from the sitemap enable/disable sibling tools, it doesn't explicitly contrast with these siblings. A solid, specific purpose statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context that listing is querying monitors for a project, with the readOnlyHint annotation also signaling read-only usage. However, it doesn't give explicit guidance on when to use this vs the enable_sitemap_monitor/disable_sitemap_monitor siblings, nor when one would want this information. Usable but not definitive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_team_invitesList team invitesA
Read-only
Inspect

List pending team invites for a project.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is fully stated. The description adds that this lists only 'pending' invites (not all invites), which is useful filtering context beyond the annotation. However, it doesn't disclose pagination behavior or whether the response includes both sent and received invites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, zero wasted words. The description is appropriately minimal for a simple read-only listing tool. Every element (list, pending, team invites, project) carries meaningful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with good annotations, no output schema, and 3 params (1 required), this is reasonably complete. The main gaps are pagination behavior (cursor/limit interplay) and whether results include invite status variants. But given the low complexity and strong annotation coverage, a modest description suffices.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% (only project_id is described in schema). The description uses 'pending' to signal scope but doesn't elaborate on limit/cursor semantics beyond what the schema's min/max reveals. The description adds modest value by clarifying the listing scope but leaves the cursor pagination pattern implied rather than explicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'List pending team invites for a project' uses a specific verb (list) and resource (team invites) with clear scope (pending, for a project). It distinguishes from siblings like list_team_members, create_team_invite, and revoke_team_invite by focusing on pending invites rather than members or invite mutations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates this operates per-project ('for a project'), which is the core usage context. It doesn't explicitly name alternatives or state when not to use it, but the read-only listing purpose is clear from the tool name and siblings. Lacks explicit exclusion of other invite-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_team_membersList team membersC
Read-only
Inspect

List team members for a project.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond a basic listing statement—no mention of pagination behavior (despite a cursor parameter), ordering, or what fields are returned. For a list operation with existing annotations, this is thin but does not contradict 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence—appropriately concise for such a simple tool. However, it leaves out critical usage details that this brevity could have accommodated, making the conciseness feel more like under-specification than earned efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 3 parameters (including pagination cursor/limit), no output schema, and 33% schema coverage, the description is notably incomplete. It doesn't explain pagination semantics, response structure, or membership roles. The project_id param is well documented in the schema, but the cursor/limit pagination mechanism is completely unexplained. For a paginated tool this is a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%; only project_id has a description. The description itself names no parameters. The cursor and limit parameters for pagination receive zero explanation in either the schema or description—the agent must infer how to paginate through results. This in an area where the description should have compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The tool name and title are clear ('list team members'), and the description states the purpose simply. However, it doesn't distinguish from sibling tools like list_team_invites or update_team_member_role, and it doesn't clarify scope (e.g., all members vs. active members). It's minimally adequate but not differentiating among the many team-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like list_team_invites, update_team_member_role, or remove_team_member. No mention of what a 'team member' includes or excludes relative to pending invites. The description provides zero context for selection among the several team-related sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_traffic_snapshotsList traffic snapshotsA
Read-only
Inspect

List stored page traffic snapshots collected from the project's own connected analytics accounts, filtered by date range and optional page paths.

NameRequiredDescriptionDefault
limitNo
pathsNo
offsetNo
end_dateYesCalendar date delimiting the requested reporting period.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
start_dateYesCalendar date delimiting the requested reporting period.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false, destructiveHint=false, so safety profile is clear. The description adds meaningful context that snapshots come specifically from 'the project's own connected analytics accounts' — establishing a data-provenance boundary that's genuinely useful beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single efficient sentence that conveys source, resource type, and filtering options. Compact and front-loaded, though it could add a bit more practical guidance without bloating.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and moderate parameter count (6). The description conveys what the tool does and its source scope but doesn't clarify return format, sorting, pagination behavior, or whether date range is inclusive — gaps for an agent deciding how to paginate a potentially large result set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (end_date, start_date, project_id are described). The 3 undocumented params (limit, offset, paths) are self-evident pagination and filter controls whose meaning is clear from names and schema constraints. Description adds no param-level detail 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb 'list' + resource 'stored page traffic snapshots' + clear scoping ('project's own connected analytics accounts', 'date range', 'optional page paths'). Distinguishes it from sibling tools like list_search_performance_query_stats and sync_project_traffic.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what data it returns (project's own connected analytics accounts) and filtering criteria. It doesn't explicitly contrast with alternative tools like sync_project_traffic or list_search_performance_query_stats, so usage context is implied rather than explicitly compared against siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_triggered_alertsList triggered alertsC
Read-only
Inspect

List triggered alerts for a project.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations (readOnlyHint=true, destructiveHint=false) already declare this is a safe read operation, so the bar is lower. The description adds little behavioral context — it doesn't mention pagination behavior, ordering, whether triggered alerts are time-bounded, or what 'triggered' means in terms of state. Annotations cover the safety profile, so 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence — highly concise with no filler. However, it is arguably under-specified rather than genuinely well-structured, since so little useful guidance is packed into that sentence. Still, for what it attempts, there is zero waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given there is 3 params, low schema coverage (33%), and no output schema, the description is too thin. It doesn't address pagination semantics between the cursor and limit parameters, doesn't describe the returned alert structure, and doesn't clarify filtering or ordering. For a list-type tool, this falls short of providing the agent enough to use it effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% — only project_id has a description, while limit and cursor have no description. The tool description adds zero parameter guidance whatsoever. With low schema coverage and an absent output schema, the description should compensate but does not, providing no meaning for limit (max 200) or cursor pagination.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says 'List triggered alerts for a project,' which states a clear verb+resource (list alerts) and scoping (for a project). However, it does not clarify what 'triggered' means distinct from alert rules or other alert-related tools like list_alert_rules, mute_triggered_alert, or mark_project_alerts_read, so differentiation among siblings is weak.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus list_alert_rules (which likely lists alert rules rather than fired alerts) or when pagination via cursor vs limit should be used. The description does not mention any alternatives, prerequisites, or contextual usage cues, leaving the agent to infer from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_webhooksList webhooksB
Read-only
Inspect

Webhook endpoints: list the per-project HTTP URLs that notifications and events are delivered to.

NameRequiredDescriptionDefault
limitNo
cursorNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are provided: readOnlyHint=true, destructiveHint=false, openWorldHint=false. The description adds the scoping detail that this lists per-project endpoints filtered to events/notifications delivery. However, it doesn't describe return format, ordering, or pagination behavior which would be valuable for a list operation. Since annotations already cover the safety profile, the description adds modest value but is not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, front-loaded with the verb+resource, and wastes no words. It efficiently captures what the tool does without redundancy. It could be slightly more expandable with pagination guidance, but for what it contains, it is clean and appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list endpoint with no output schema and moderate complexity (3 params, pagination), the description is adequate but thin. It identifies the resource and scope, but doesn't explain the limit/cursor pagination mechanism or return shape. With no output schema, some guidance on what is returned would improve completeness. The annotation coverage partially offsets the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33% - only project_id has a description in the schema. The description does not compensate for the undocumented limit and cursor parameters; it doesn't explain that these are pagination controls. The description adds no parameter-level semantics beyond what the schema provides. With partial coverage, more description compensation would be expected.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource: 'list the per-project HTTP URLs that notifications and events are delivered to.' It specifies the resource (webhook endpoints), the scope (per-project), and the content (HTTP URLs for notifications/events). While siblings exist (create_webhook, update_webhook, delete_webhook), the 'list' action is clearly differentiated from those mutation siblings, and the parent 'list_' prefix distinguishes it from the general pool. It's clear but not exhaustive about pagination semantics that siblings might share.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this lists webhook endpoints for a project, and the schema's project_id parameter explicitly references list_projects for obtaining valid IDs, giving some usage context. However, there's no explicit when-to-use guidance, no mention of pagination usage (limit/cursor) which would be core to a list operation, and no alternatives mentioned among the large sibling set. The context of requiring project_id is implied but not stated in the description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_domain_overview_historyLoad domain overview historyAInspect

Requires API write scope and an explicit max_cost_cents because a cache miss can spend provider budget. Use zero for cache-only. Loads the separately priced historical index series for an unexpired Domain Overview snapshot. snapshot_expired means analysis must run again before history can be loaded.

NameRequiredDescriptionDefault
freshNoBypass cached module data and request fresh provider data.
targetYesDomain or subdomain to analyze.
project_idYesProject id whose provider connection, budget, and Domain Overview snapshot are used.
language_codeYesLanguage code used for the provider lookup, for example en.
location_codeYesPositive DataForSEO location code identifying the lookup market.
max_cost_centsYesMaximum provider cost for this request, in cents. Use zero for an explicit cache-only attempt.
scope_overrideNoOverride automatic target scope detection with root-domain or subdomain scope.

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false) by disclosing the auth requirement (write scope), the economic risk (a cache miss spends provider budget), the cost-gating mechanism, and the snapshot_expired failure mode. This is exactly the extra context annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler, and the critical cost/scope constraints are stated up front. Minor deduction because the primary purpose ('loads the historical index series...') is buried after the requirements rather than leading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, 5-required mutation-capable tool with no output schema, the description covers auth scope, cost gating, cache behavior, and the snapshot expiry precondition. It does not explain the return shape, but with no output schema that is a smaller gap; overall adequate and then some.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents every parameter, including max_cost_cents='Use zero for an explicit cache-only attempt.' The description restates that constraint and frames why max_cost_cents exists, but adds no format or syntax 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: loading 'the separately priced historical index series for an unexpired Domain Overview snapshot.' This distinguishes it from siblings like analyze_domain_overview and load_domain_overview_keywords/pages by calling out the historical index series, though it never names an alternative explicitly. Clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions: API write scope, an explicit max_cost_cents, and zero for a cache-only attempt, plus the failure case that snapshot_expired means analysis must run first. It stops short of naming sibling tools to use instead (e.g., analyze_domain_overview to refresh the snapshot), so it is strong 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.

load_domain_overview_keywordsLoad domain overview keywordsAInspect

Requires API write scope and an explicit max_cost_cents because a cache miss can spend provider budget. Use zero for cache-only. Loads one ranked-keyword page for the current Domain Overview target; snapshot_expired means analysis must run again first.

NameRequiredDescriptionDefault
freshNoBypass cached module data and request fresh provider data.
limitYesNumber of ranked keyword rows to load, from 1 through 100.
offsetYesZero-based provider row offset for this page.
targetYesDomain or subdomain to analyze.
project_idYesProject id whose provider connection, budget, and Domain Overview snapshot are used.
language_codeYesLanguage code used for the provider lookup, for example en.
location_codeYesPositive DataForSEO location code identifying the lookup market.
max_cost_centsYesMaximum provider cost for this request, in cents. Use zero for an explicit cache-only attempt.
scope_overrideNoOverride automatic target scope detection with root-domain or subdomain scope.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag readOnlyHint=false and openWorldHint=true; the description explains the non-obvious why — a cache miss spends provider budget — and the auth requirement (write scope) that this creates. It also discloses the snapshot_expired failure state, giving the agent behavioral context the structured metadata alone 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, each carrying useful information (scope requirement, cost semantics, prerequisite state) with zero filler. The action is slightly buried after the precondition sentences rather than front-loaded, which costs a point but not the overall quality.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and a budget-spending, non-read-only operation, the description covers auth scope, cost dialect, and the snapshot_expired return signal. It stops short of describing what a returned keyword row contains or pagination mechanics, but the essential safety and prerequisite context is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds rationale the schema lacks: why max_cost_cents is mandatory and that a zero value is an explicit cache-only attempt (forgoing paid data). This elevates the cost-control parameter beyond its schema description, though other required params like target/location_code get no extra narrative.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: "Loads one ranked-keyword page for the current Domain Overview target," which is meaningfully more specific than the title. It implies the pagination scope (one page of ranked keywords), distinguishing it from the sibling load_domain_overview_pages, though it never names an alternative to make the distinction airtight.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides concrete prerequisites and conditions: it requires API write scope and an explicit max_cost_cents, advises "Use zero for cache-only," and warns that "snapshot_expired means analysis must run again first." What is missing is an explicit pointer to the alternative to run when the snapshot is expired (e.g., analyze_domain_overview).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_domain_overview_pagesLoad domain overview pagesAInspect

Requires API write scope and an explicit max_cost_cents because a cache miss can spend provider budget. Use zero for cache-only. Loads one relevant-page result page for the current Domain Overview target; snapshot_expired means analysis must run again first.

NameRequiredDescriptionDefault
freshNoBypass cached module data and request fresh provider data.
limitYesNumber of relevant-page rows to load, from 1 through 1000.
offsetYesZero-based provider row offset for this page.
targetYesDomain or subdomain to analyze.
project_idYesProject id whose provider connection, budget, and Domain Overview snapshot are used.
language_codeYesLanguage code used for the provider lookup, for example en.
location_codeYesPositive DataForSEO location code identifying the lookup market.
max_cost_centsYesMaximum provider cost for this request, in cents. Use zero for an explicit cache-only attempt.
scope_overrideNoOverride automatic target scope detection with root-domain or subdomain scope.

TDQS

A3.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds context the annotations do not carry: the API write scope requirement, the fact that a cache miss spends provider budget, that max_cost_cents=0 forces a cache-only attempt, and the snapshot_expired failure mode requiring a re-run of analysis. This is exactly the auth/budget/error-state disclosure an agent needs, and it is consistent with readOnlyHint=false and openWorldHint=true.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences with no filler, and the costly constraint (write scope, cost budget, cache-only escape hatch) is front-loaded. Minor deduction because the actual purpose statement trails the prerequisites rather than leading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a paid, seven-required-parameter paged read with no output schema, the description covers the two things that are easy to get wrong: authorization/cost preconditions and the snapshot_expired state. Pagination mechanics live in the schema, so the remaining gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all nine parameters are already documented in the schema, including max_cost_cents's cache-only semantics. The description reinforces the max_cost_cents meaning but adds no new 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb+resource: 'Loads one relevant-page result page for the current Domain Overview target.' That is concrete enough to distinguish it from load_domain_overview_keywords or load_domain_overview_history, but it never names those siblings explicitly, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives real preconditions ('Requires API write scope and an explicit max_cost_cents', 'Use zero for cache-only') and one routing hint ('snapshot_expired means analysis must run again first'), but it never states when to prefer this over analyze_domain_overview or estimate_domain_overview_cost. 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.

mark_project_alerts_readMark project alerts readAInspect

Mark every firing alert in the project as read for the whole project team.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide some safety signal (destructiveHint=false, readOnlyHint=false). The description adds the team-wide scope ('whole project team') and confirms this affects all firing alerts, which is useful behavioral context. However, it doesn't disclose whether this is reversible, whether it requires permissions, or what the confirmation/return looks like for a tool with a team-wide effect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that conveys the action, scope, and team-wide effect with zero waste. Efficient and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a bulk mutation tool with no output schema and no idempotency_key documentation, the description could do more. It explains the team-wide effect which is the key distinguishing trait, but doesn't cover confirmation behavior, reversibility, or the role of idempotency. Adequate for the tool's simplicity but with gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (one of two params documented). project_id is well-documented with format, pattern, and provenance (list_projects). The description doesn't elaborate on idempotency_key, but that param's purpose is somewhat self-evident. The description clarifies 'every firing alert' scope which helps parameter interpretation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (mark alerts as read), the resource (project alerts), and the scope (every firing alert, whole team). It distinguishes reasonably from sibling tools like list_triggered_alerts and mute_triggered_alert, though it doesn't explicitly differentiate them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is a bulk operation affecting the entire team, but doesn't explicitly say when to use it vs mute_triggered_alert (which is per-alert muting) or list_triggered_alerts for review. No explicit when-not or alternatives given, though the team-wide scope hints at usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mint_migration_tokenMint migration tokenBInspect

Mint a migration token for a project.

NameRequiredDescriptionDefault
scopeNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false correctly indicating this is a mutation. The description discloses it creates (mints) a token, which aligns. However, it doesn't reveal what the minted token value looks like, whether idempotency_key makes the operation repeatable, or any rate/usage limits. DestructiveHint=false is consistent. Some value added but not a rich disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence with zero waste. Front-loaded with the action and target. Appropriate length for the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mint/create-style tool, the description lacks detail about what the minted token grants access to, how the scope parameter affects it, and what response format is returned (no output schema). Given sibling tools exist for listing and revoking, the description could clarify token semantics. Fields are mostly self-describing but behavioral outcomes are underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is low (33%: only project_id has a description). The description itself adds no parameter details. However, three parameters are inferable: project_id (target of minting), scope (enum full/keywords for token scope), idempotency_key (clearly self-describing). The description doesn't explicitly explain scope's meaning or the behavior of idempotency_key, leaving some gap but the schema does provide some value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb+resource: 'Mint a migration token for a project.' It clearly identifies what the tool does and for what target. Among siblings, the related list_migration_tokens and revoke_migration_token provide context, and this tool's 'mint' action is distinct from those, giving some differentiation though not explicitly named.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. Siblings list_migration_tokens and revoke_migration_token exist but the description doesn't distinguish when to mint vs list vs revoke, nor any prerequisites (e.g., need a project, need prior token). Context is implied by the action but no explicit when/when-not guidance is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mute_triggered_alertMute triggered alertAInspect

Mute one firing alert for 24 hours. This changes shared alert state for the whole project team.

NameRequiredDescriptionDefault
alert_idYesIdentifier of the triggered alert to operate on.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false (a write operation) and destructiveHint=false. The description adds meaningful context beyond annotations: it discloses the shared-team scope ('changes shared alert state for the whole project team') and the auto-revert duration (24 hours), which is valuable behavioral information an agent wouldn't infer from the schema. The typo 'bisibility' in schema doesn't affect description scoring.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, zero waste. The first sentence states the action and duration; the second flags the shared side effect. Every word earns its place with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-state mutation with no output schema (muting is a simple toggle), the description covers the key points: what it does, how long it lasts, and its team-wide scope. The undocumented idempotency_key parameter is a minor gap, but given the tool's simplicity, the description is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% — alert_id and project_id are documented in the schema, but idempotency_key has no schema-level description. The description adds no parameter-specific detail beyond what the schema provides (it doesn't explain what idempotency_key does or its format). With moderate coverage, the description doesn't need to compensate heavily but could add context on the idempotency parameter's purpose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Mute one firing alert') with a clear duration ('for 24 hours'). It clearly states the scope (one firing alert) and duration, distinguishing it from similar alert operations. However, it doesn't explicitly name sibling alternatives, so it earns a 4 rather than a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the duration implicitly ('for 24 hours') and notes the shared project-level side effect, giving some usage context. However, it does not provide explicit when-to-use vs. alternatives guidance, nor what to do if the alert is already muted or how this differs from other alert-related mutations like mark_project_alerts_read or delete_alert_rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

preview_ai_tracking_runPreview ai tracking runA
Read-only
Inspect

Review capability, credentials, budget and price before paid AI tracking. Preview never submits a provider task.

NameRequiredDescriptionDefault
project_idYesPublic project ID; membership and token scope are enforced.
prompt_idsYesActive public prompt IDs to observe; each run captures immutable revisions.
configurationsYesExact observation configurations to review before paid launch.
credential_connection_idNoProject provider connection; credentials are never accepted here.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is partly covered, but the description adds meaningful behavioral context beyond them: it explicitly guarantees no provider task is submitted despite the 'run' naming. It does not expand on what the preview actually returns or any rate limiting, so it is helpful but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded sentences with zero filler; the core purpose leads and the key non-side-effect guarantee follows immediately. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only, non-mutating preview tool with no output schema required, the description covers what gets reviewed (capability, credentials, budget, price) and the crucial safety guarantee. Combined with the annotations and fully documented schema, an agent has enough to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (project_id, prompt_ids, configurations, credential_connection_id) are already documented in the schema, including the fail-closed capability and price checks. The description adds no parameter-level syntax or format detail beyond that, which is the expected baseline 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (review capability, credentials, budget, price) for a specific resource (an AI tracking run preview), which a verb+resource framing supports. It implicitly distinguishes itself from the paid-launch sibling ('before paid AI tracking') but never names create_ai_tracking_run, so the differentiation is inferred 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'before paid AI tracking' gives a clear trigger context for when to call this, and 'Preview never submits a provider task' implies the preview/side-effect-free use case. It stops short of explicitly naming the alternative tool (create_ai_tracking_run) or stating exclusions, 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.

preview_project_defaultsPreview project defaultsA
Read-only
Inspect

Preview the exact current defaults draft, source revision and impact without saving or provider work. Requires the server's settings permission. Review the returned draft before explicitly confirming it with update_project_defaults; do not fabricate or automatically confirm review fields.

NameRequiredDescriptionDefault
cityNo
deviceNoDevice whose search or ranking data is being selected.
countryNo
timezoneNo
frequencyYesSchedule frequency that determines when rank checks run.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
serp_depthNoDefault number of SERP results to scan per rank check (10, 20, 50, or 100). Omitted keeps the stored depth.
location_keyNoCanonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language.
jitter_minutesNo
cron_expressionNoCron expression used when frequency is custom_cron; otherwise null.
idempotency_keyNo
serp_stop_on_matchNoSet false to fetch the full configured depth for competitor snapshots.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish readOnlyHint=true and destructiveHint=false, so the safety profile is partly covered. The description adds materially useful context: no provider work occurs, the server's settings permission is required, and review fields must not be fabricated. It does not describe what the returned draft contains in detail, but the read-only preview nature is well disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the operation and scope, then permission, then workflow. Every sentence earns its place, though the phrasing is dense with the combined draft/revision/impact triad.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only preview with no output schema, the description names the returned artifacts and the prerequisite permission, and warns about the review-field integrity constraint. It is nearly complete; only the specifics of parameter behavior for the many optional location/schedule fields remain unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 58%, so several of the 12 parameters (city, country, timezone, jitter_minutes, idempotency_key) carry no description. The prose describes what is returned rather than adding meaning to any input parameter, so it does not compensate for the coverage gap. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Preview) and resource (the current defaults draft, source revision and impact) with the explicit scope that nothing is saved. It clearly differentiates itself from the sibling update_project_defaults by naming it as the confirmation step.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: preview first, then review the draft before confirming with update_project_defaults, and warns against fabricating or auto-confirming review fields. The when-to-use and the handoff to the alternative are both stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_competitorRemove competitorC
Destructive
Inspect

Remove a tracked competitor from a project.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
competitor_idYesIdentifier of the competitor to operate on.
idempotency_keyNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description adds nothing beyond the one-line action statement. It doesn't explain irreversibility, whether related data (saved views, alerts, signals) is affected by removal, or whether idempotent re-calls fail. For a destructive tool the description should expand on consequences; it doesn't.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One terse sentence that states purpose without filler. Efficient and front-loaded. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool with no output schema and minimal annotations, this is under-specified. It doesn't clarify what happens to associated tracked data, whether the operation is idempotent, or what error conditions apply (e.g., removing a nonexistent competitor). The incomplete idempotency_key documentation also reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%: project_id and competitor_id have descriptions, but the optional idempotency_key has none. The description adds no semantics beyond the schema. Baseline 3 is reasonable since the two required params are documented; the idempotency_key remains undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Remove') and resource ('a tracked competitor'), with scope ('from a project'). It distinguishes from siblings like add_competitor and list_competitors, though it doesn't explicitly mention those alternatives. It's clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives, no prerequisites mentioned (e.g., competitor must exist, project must exist), and no effects described (e.g., whether this permanently deletes the competitor or just removes tracking). With destructiveHint=true and no explanation, an agent has no context on consequences.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_team_memberRemove team memberA
Destructive
Inspect

Permanently remove a non-owner project member. Confirm the user's intent before calling this tool.

NameRequiredDescriptionDefault
member_idYesIdentifier of the project member to operate on.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true, and the description reinforces this with 'Permanently remove,' adding irreversibility context. It also specifies the tool operates only on non-owner members, an important behavioral constraint. This adds value beyond the annotation by clarifying the scope limitation and permanent nature, though it could mention cascading effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero wasted words. The purpose and the critical usage caution are both delivered efficiently with appropriate front-loading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no output schema or rich annotations, the description plus good schema covers the key aspects: what it does (permanently remove), who it applies to (non-owner), and the safety requirement (confirm intent). For a simple 3-parameter tool with 67% schema coverage, this is adequately complete, though it could mention permission prerequisites.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% (member_id and project_id have descriptions, idempotency_key has none). The description adds the 'non-owner' constraint relevant to member_id, which is useful, and project_id schema reference to list_projects is already present. idempotency_key semantics are not elaborated in the description, so the 33% uncovered remainder isn't compensated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb + resource + scope: 'Permanently remove a non-owner project member.' It distinguishes scope by restricting to non-owner members, which differentiates from sibling update_team_member_role and list_team_members. However, it doesn't explicitly name alternative tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence instructs to 'Confirm the user's intent before calling this tool,' which provides an important usage caution appropriate for a destructive operation. It doesn't explicitly name when-not-to-use or alternative member-management tools (like update_team_member_role), but the confirmation guidance is clear practical context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

research_keywordsResearch keywordsAInspect

Requires API write scope. Paid keyword research uses the project's own DataForSEO account. When cost matters, call with estimate_only first for a free dry run, then use max_cost_cents as a best-effort request guard. Approximate per-source pricing comes from the current rate card exposed by get_provider_rates. Send one seed per call. Results are cached for 12 hours and shared with the API and UI. Clickstream-refined volumes double provider cost. already_tracked marks keywords the project tracks.

NameRequiredDescriptionDefault
modeNo
seedYesKeyword or phrase used as the starting point for research.
freshNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
result_limitNo
connection_idNoIdentifier of the provider connection to operate on.
estimate_onlyNoReturn a free cost estimate without calling the provider or spending budget.
max_cost_centsNoBest-effort maximum provider cost for this request, in cents.
include_clickstreamNo

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations (readOnlyHint=false, openWorldHint=true) by disclosing write-scope requirement, that billing runs through the project's own DataForSEO account, that results are cached 12 hours and shared with API/UI, and that clickstream refinement doubles cost. These are exactly the behavioral facts an agent needs before incurring spend.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A dense six-sentence paragraph that front-loads the critical 'Requires API write scope' constraint and avoids filler. Most sentences earn their place, though the rate-card/get_provider_rates sentence is slightly tangential to the call itself.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a costly write-scope tool with 9 parameters and no output schema, it covers billing, caching, cost guards, and the already_tracked return marker. The main gap is that it never outlines the shape of the returned keyword data, which the absent output schema leaves to the description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Descriptions cover roughly 56% of the 9 parameters, and the prose meaningfully enriches several: estimate_only as a free dry run, max_cost_cents as a best-effort guard, clickstream doubling provider cost, and one-seed-per-call. mode, fresh, and result_limit remain unexplained, so it compensates well but not fully.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The name/title and the line 'Paid keyword research uses the project's own DataForSEO account' make clear this is a paid keyword-research operation against a seed. It references get_provider_rates as an adjacent tool, giving some differentiation, but it never plainly states what the tool produces (e.g., keyword/volume results), so it stops short of a crisp 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Offers concrete guidance: 'When cost matters, call with estimate_only first for a free dry run,' 'Send one seed per call,' and use max_cost_cents as a guard, plus a pointer to get_provider_rates for pricing. It gives clear context but doesn't explicitly contrast against siblings like estimated cost or suggestion-listing tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resend_team_inviteResend team inviteBInspect

Resend a pending team invitation and replace its expiration and token.

NameRequiredDescriptionDefault
invite_idYesIdentifier of the team invitation to operate on.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states it 'replaces its expiration and token' for a pending invite, indicating a mutation that regenerates credentials. Annotations declare readOnlyHint=false and destructiveHint=false, which are consistent. However, it doesn't disclose side effects like whether the previous token becomes invalid immediately, whether this requires specific team-admin permissions, or what happens when a non-pending invite is targeted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence conveys the action clearly. No wasted words, though the sentence packs two ideas (resend + replace expiration/token) efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 2 required params, an idempotency key param, and no output schema, the description is adequate but thin. It doesn't clarify the meaning/usage of idempotency_key (though schema gives max/min length), nor does it explain what 'pending' means or whether this tool applies only to pending invites (a search semantics detail). Sibling revoke_team_invite and create_team_invite provide context, but the description could better distinguish resend semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, so two required params (invite_id, project_id) have descriptions in the schema. The idempotency_key parameter is undocumented in schema and undescribed in the tool description, which is a gap. The description adds the behavioral meaning that the tool regenerates expiration/token, but doesn't clarify which parameters drive that behavior beyond the obvious invite_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'Resend' plus the object 'a pending team invitation' clearly states the action and scope. It distinguishes from siblings like create_team_invite (creation) and revoke_team_invite (cancellation). The extra detail about replacing expiration and token adds precision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for re-sending invites but doesn't explicitly state when to use it vs create_team_invite or revoke_team_invite. It doesn't say whether it's for expired invites specifically or any pending invite. No exclusions or alternative tool references are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

retry_ai_tracking_runRetry ai tracking runCInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
run_idYesPublic tracking run ID scoped to this project.
consentYesExplicit acceptance of paid provider work for this reviewed configuration.
deadlineYesUTC deadline after which work must stop.
planned_atNoUTC scheduled occurrence; supplied together with schedule_id.
project_idYesPublic project ID; membership and token scope are enforced.
prompt_idsYesActive public prompt IDs to observe; each run captures immutable revisions.
schedule_idNoPublic schedule ID scoped to this project.
configurationsYesExact observation configurations to review before paid launch.
budget_revisionYesBudget revision returned by preview.
idempotency_keyYesStable launch retry key sent as REST Idempotency-Key; payload must remain identical.
consent_revisionYesConsent identity returned by preview.
credential_versionYesCredential identity version returned by preview.
credential_connection_idYesProvider connection returned by the reviewed preview.

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write (readOnlyHint=false), openWorld, and non-destructive behavior. The description usefully adds that immutable revisions are preserved, explicit budget consent is required, and no automatic paid baseline is started, which is real context beyond the annotations. It stops short of describing failure modes, idempotency behavior, or what the retry actually re-executes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences with no filler and the constraint ('does not start an automatic paid baseline') placed up front. It is efficiently sized, though the first sentence spends its words on a generic category rather than the operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 13-parameter, 11-required write tool with no output schema needs the description to explain workflow: that this follows preview_ai_tracking_run, that revision/consent/credential fields must match the reviewed preview, and what a retry re-executes. The description supplies none of that, leaving the agent to reverse-engineer the flow from parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and every parameter is well documented inline (idempotency_key, consent, budget_revision, credential_version, etc.). The description's phrases 'stable retry keys' and 'explicit budget consent' gesture at parameters but add no meaning the schema does not already provide, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with the generic 'Manage project-scoped AI tracking,' which never states the actual operation (retrying a tracking run) and would apply equally to a dozen sibling ai_tracking tools. Only the tool name carries the verb; the description itself is closer to a tautology than a specific verb+resource statement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no reference to the obvious siblings (preview_ai_tracking_run, create_ai_tracking_run, cancel_ai_tracking_run). The one negative statement ('does not start an automatic paid baseline') gives a single scoping hint but no condition for choosing this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_api_keyRevoke API keyA
Destructive
Inspect

Revoke an API key by key id. Revocation is immediate and cannot be undone; revoking the key this server is configured with locks the server out. Use only after the user confirms revocation.

NameRequiredDescriptionDefault
key_idYesIdentifier of the API key to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, and the description reinforces this with 'cannot be undone' and 'immediate' effects. It adds meaningful context beyond annotations: the immediate and irreversible nature, plus the server-lockout consequence for the configured key. No contradiction between description and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, and every clause earns its place. The warning about server lockout is critical and concise. No wasted words or redundant restatement of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description covers the critical behavioral aspects: immediacy, irreversibility, and consequences. It doesn't mention return values, but for a revoke operation that's less critical than the warning content it does provide. The mutation-tool burden is well met by the warning guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, which is decent but not complete. The description defines key_id ('by key id') but adds nothing about project_id or idempotency_key beyond what the schema provides. The schema describes all three parameters adequately, and the description focuses on the key_id semantics, so it earns the baseline given moderate coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it revokes an API key by key id, which is a specific verb+resource combination. It doesn't explicitly distinguish itself from sibling revoke tools (revoke_personal_token, revoke_team_invite, revoke_migration_token), but the pairing with list_api_keys and create_api_key makes the targeting reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use — only after user confirms revocation — and gives a strong exclusion/warning: revoking the server's own key locks the server out. This is excellent guidance that prevents harmful misuse. It clearly signals this is a destructive, irreversible action requiring user confirmation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_migration_tokenRevoke migration tokenB
Destructive
Inspect

Revoke a project migration token.

NameRequiredDescriptionDefault
token_idYesIdentifier of the migration token to operate on.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The destructiveHint=true annotation already flags this as a destructive operation, so the description carries a lighter burden. The description is straightforward and consistent with annotations - 'Revoke' clearly implies the token becomes invalid. No additional behavioral detail (e.g., whether revocation is permanent, or affects existing operations) is disclosed, but the annotation covers the core risk profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single precise sentence that fully captures the operation without any waste. Front-loaded with the action verb and target resource. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation on a single resource with no output schema, the description is adequate but thin. The sibling tools 'mint_migration_token' and 'list_migration_tokens' provide context for the token lifecycle, but the description doesn't connect to them or explain the idempotency_key parameter (which lacks schema documentation). Given the write/destructive nature, slightly more context about the effect would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67% - both required parameters (project_id, token_id) have schema descriptions. The description adds no additional semantic meaning beyond what the schema provides. The idempotency_key parameter has no schema description and the tool description doesn't mention it either, leaving a gap, but overall the schema carries most of the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Revoke a project migration token' uses a specific verb ('Revoke') and resource ('migration token'), clearly distinguishing it from related sibling tools like 'mint_migration_token' and 'list_migration_tokens'. It's clear and concise though it doesn't elaborate on the object's nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool vs alternatives like revoke_api_key, revoke_personal_token, or revoke_team_invite, though the token type differs. The destructiveHint annotation signals caution, but no explicit context on when revocation is appropriate or consequences is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_personal_tokenRevoke personal tokenB
Destructive
Inspect

Revoke a personal token by id, or pass "current" to revoke the configured token.

NameRequiredDescriptionDefault
token_idYesIdentifier of the personal access token to operate on.
idempotency_keyNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the mutation is known. The description adds the 'current' option detail which reveals it can revoke the tool's own configured token, a meaningful behavioral consequence (the agent could lose access). It doesn't elaborate on reversal/immediate effect, but annotations carry the destructive burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One clean sentence with zero waste. States the action, the resource, the parameter semantics, and the special 'current' case efficiently. Excellent front-loading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with destructive annotations and no output schema, the core action is clear. However, given the 'current' special value that could revoke the agent's own configured token, more explanation of side effects (e.g., whether revocation is immediate, what errors occur) would help. With two params and one undocumented, it's adequate but not rich.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, and the description only clarifies the token_id parameter (by id or 'current'), which adds value. However, the idempotency_key parameter has no schema description and the tool description doesn't mention it at all, leaving it completely unexplained. The description partially compensates for one param but ignores the other.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (revoke), the resource (personal token), and by what means (by id or 'current'). It distinguishes itself from siblings like revoke_api_key and revoke_migration_token by specifying 'personal token' as the target, though it doesn't explicitly compare. Strong single-sentence purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the 'current' option which is useful usage context, but provides no guidance on when to use this tool vs alternatives (e.g., when to use list_personal_tokens first, or when to use revoke_api_key instead). No mention of consequences like auth impact or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

revoke_team_inviteRevoke team inviteB
Destructive
Inspect

Revoke a pending project team invite.

NameRequiredDescriptionDefault
invite_idYesIdentifier of the team invitation to operate on.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a mutating, destructive operation. The description adds the 'pending' scoping constraint, clarifying only pending invites can be revoked. However, it doesn't disclose whether the action is reversible, whether permissions are required, or what happens to the invitee relationship. Given the annotation coverage, this is adequate but not deeply transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence that states the verb, resource, and state (pending). Zero wasted words, appropriately short for a straightforward revocation tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation tool (destructiveHint=true) with 3 params and no output schema, the description is minimal. The 'pending' qualifier and state constraint are useful, but it doesn't disclose edge cases (e.g., what happens if invite already accepted or expired), permissions needed, or side effects. The annotation flags destructiveness, which helps, but for a tool with potentially irreversible effects, more behavioral context would benefit the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, and the schema already documents invite_id and project_id with their patterns and descriptions. The third parameter, idempotency_key, has no description in the schema and the tool description doesn't explain it either—the agent would have to guess its purpose. The description adds no parameter-level semantics beyond the schema. With partial coverage, the description doesn't compensate for the undocumented idempotency_key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Revoke a pending project team invite' uses a specific verb (revoke) and resource (pending project team invite), clearly distinguishing it from sibling tools like create_team_invite, resend_team_invite, and list_team_invites. It could be more specific about scope, but the verb+resource pairing is clear and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as resend_team_invite, remove_team_member, or how it differs from deleting an active membership. It states it operates on 'pending' invites, which implies the target must be in a pending state, but there are no explicit preconditions, no mention of when not to use it, and no exclusions or alternative tool references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_rank_checkRun rank checkAInspect

Run a provider-backed rank check for one keyword. Requires write access and may incur provider cost. Ask for explicit user approval immediately before calling; this server cannot enforce the client's confirmation UI. The deployment selects inline or queued execution. A queued response contains an rcr_ run ID, not a check_ ID. Follow get_rank_history for that run_id until terminal, then use its check_ ID with get_rank_check_result. The async option only requests an early response. Set max_cost_cents to have the server refuse the check when its preflight estimate is higher.

NameRequiredDescriptionDefault
asyncNo
keyword_idYesIdentifier of the tracked keyword to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
provider_idNoSERP provider id, validated server-side. Known values: dataforseo and serpapi.
max_cost_centsNoServer-enforced maximum for the preflight cost estimate of this check, in cents.
idempotency_keyNo

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag a non-read-only, open-world, non-destructive operation; the description goes well beyond them by disclosing that it incurs provider cost, requires explicit user approval because the server cannot enforce the confirmation UI, that execution mode is deployment-dependent, and that a queued response returns an rcr_ run ID rather than a check_ ID. These are exactly the behavioral traits annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action, then packed with the approval requirement, execution-mode caveat, ID semantics, async caveat, and cost cap. Every sentence carries substantive information and nothing is padding, though the dense run-on paragraph could be broken up for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, cost-incurring tool with no output schema, the description covers what an agent needs: authorization requirements, cost containment via max_cost_cents, the shape of the response identifier, and the full downstream workflow. Nothing material is missing for correct invocation and follow-through.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, so the schema documents several parameters itself, but the description adds real meaning for the two least obvious ones: async 'only requests an early response,' and max_cost_cents causing the server to refuse the check when the preflight estimate exceeds it. The remaining parameters (keyword_id, project_id, provider_id, idempotency_key) get no extra treatment, so this is above the baseline but not exhaustive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a precise verb+resource with scope: 'Run a provider-backed rank check for one keyword.' An agent immediately distinguishes this initiation tool from siblings like get_rank_check_result (retrieval) and list_rank_check_runs (listing), and the description reinforces that distinction by naming those tools in the follow-up workflow.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit about prerequisites (write access, user approval before calling), routing (use get_rank_history for the run_id, then get_rank_check_result with the check_ ID), and the conditional behavior of the async option. It tells the agent both when to call it and how to follow up, with no ambiguity left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_site_auditRun site auditAInspect

Crawl the project domain only, with SSRF protection, at most 15 pages and a 15-second total deadline. Save page signals and URL issues as a report. No paid provider request or Lighthouse.

NameRequiredDescriptionDefault
max_pagesNoMaximum pages in this bounded crawl.
project_idYesThe public project ID. Project membership and token scopes are enforced.
idempotency_keyNoOptional stable retry key, forwarded as the REST Idempotency-Key header.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so the safety profile is partly covered. The description adds real value beyond that: bounded resource use (15 pages, 15s), SSRF protection during the crawl, and the fact that a report artifact is persisted — behavior the agent could not derive from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, both load-bearing: the first carries scope and limits, the second carries the persisted output and the exclusions. Front-loaded with the action and no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must carry the return story, and it only says a report is saved without indicating how the caller retrieves it (get_site_audit/list_site_audits) or whether the call is synchronous or async. For a crawl-and-persist tool with no output schema, that retrieval gap matters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so project_id, max_pages and idempotency_key are already documented in the schema; the baseline is 3. The description restates the 15-page cap but adds no new parameter semantics (no idempotency guidance, no note on the project_id pattern or scope enforcement).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (crawl) plus resource (project domain) plus hard scope (at most 15 pages, 15-second deadline) plus what it produces (a report of page signals and URL issues). The negative scoping ('No paid provider request or Lighthouse') separates it from the cost-incurring analysis tools in the sibling list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'No paid provider request or Lighthouse' clause implicitly tells the agent when not to pick this tool, which is useful. However, there is no explicit when-to-use statement and no routing to the obvious siblings (get_site_audit, list_site_audits) that complement a run/create tool, so the agent must infer the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_locationsSearch locationsA
Read-only
Inspect

Search canonical keyword markets. Use the returned location_key verbatim when creating or updating keywords so an optional @language qualifier preserves the exact location-language pair.

NameRequiredDescriptionDefault
qYesLocation name or search phrase used to find matching markets.
limitNo
countryNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely useful context beyond that: the return carries a location_key that must be preserved verbatim, and that key encodes a location-language pair whose precision is lost if an @language qualifier is altered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, purpose front-loaded and the usage directive immediately behind it. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only three-parameter search with no output schema, an agent still lacks the shape of a result (name/key/language fields), the effect of 'country' vs. the query string, and any pagination behavior. The verbatim-key contract is well covered, but the surrounding result and filter semantics are not.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%: 'q' is documented in the schema, but 'limit' and 'country' have no description in either place. The description mentions location_key and @language, which are not parameters at all, so it does nothing to compensate for the undocumented filtering and pagination parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Search canonical keyword markets'), which is unambiguous and clearly a lookup/indexing tool rather than a keyword-mutating one. It doesn't explicitly name a sibling, but the market-lookup role is distinguishable from list_keywords, research_keywords, and get_keyword by domain.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete when-to-use rule: call this before creating or updating keywords so the returned location_key can be reused verbatim. It does not name an alternative tool or state when not to use it, but the workflow positioning is clear enough to route invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_keyword_target_urlSet keyword target URLBInspect

Set or clear the target URL used when evaluating a keyword ranking.

NameRequiredDescriptionDefault
keyword_idYesIdentifier of the tracked keyword to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
target_urlYesCanonical destination URL or site-relative path to associate with the keyword.
idempotency_keyNo

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description mentions the ability to 'clear' the target URL (implying null support), which adds some value. However, with no annotations describing behavior (readOnlyHint=false, destructiveHint=false are defaults), the description carries the burden of explaining mutation effects, idempotency, permissions, or whether clearing affects future rank checks. None of this is disclosed. It doesn't contradict annotations, but it's thin on 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with zero waste. The 'Set or clear' wording packs semantic content compactly. It could arguably be slightly more informative while staying concise, but it earns a solid score for front-loaded, economical writing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a focused single-purpose mutation tool with a clear schema and no output schema, the description is nearly adequate. However, it doesn't explain what 'evaluating a keyword ranking' means, whether this is a permanent overwrite, whether it triggers re-checks, or the expected behavior when clearing with subsequent rank checks. For a tool with no output schema and no annotations, slightly more context would be valuable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%: the schema documents keyword_id, project_id, and target_url but NOT idempotency_key. The description doesn't add parameter details beyond the schema, but with 75% coverage the baseline is near the high bar. The concept of 'clearing' (null target_url) maps to the 'Set or clear' phrasing, adding slight meaning beyond schema. A minor gap remains for idempotency_key semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb+resource+scope: 'Set or clear the target URL used when evaluating a keyword ranking.' This clearly distinguishes it from sibling tools like update_keyword and add_keywords by specifying its focused purpose on the ranking target URL. It clearly conveys what action is taken and on what resource, though it doesn't explicitly name a differentiating sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like update_keyword or bulk_update_keywords. It implies usage context via the phrase 'when evaluating a keyword ranking' but offers no explicit when/when-not guidance or mention of alternative tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_primary_providerSet primary providerAInspect

Deprecated compatibility tool. true promotes priority 0; false is a legacy no-op. Use set_provider_priority for new calls.

NameRequiredDescriptionDefault
primaryNoDeprecated compatibility alias: true promotes priority 0; false is a no-op.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
provider_idYesProvider id. Known values: dataforseo, serpapi, ga4, gsc, plausible.
idempotency_keyNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the write-not-destructive profile is already covered. The description adds real behavioral context beyond that: deprecation status and the no-op semantics of 'false'. It does not, however, explain the idempotency_key behavior or whether repeated 'true' calls are safe, which would round this out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences with zero filler: deprecation first, semantics second, migration path last. Every sentence earns its place and the most decision-relevant fact (deprecated) leads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a deprecated compatibility tool with no output schema and annotations covering the safety profile, the description covers purpose, migration path, and the no-op case. The only gap is unstated idempotency/repeat-call behavior, which is minor here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75%, so the schema already documents project_id, provider_id, and the 'primary' flag's meaning. The description's note that 'true promotes priority 0' largely restates the 'primary' schema description. It adds nothing about idempotency_key, the one parameter left undocumented in both places.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and outcome ('promotes priority 0') and immediately frames the tool as a deprecated compatibility shim. It distinguishes itself from sibling set_provider_priority by routing new usage there. An agent can identify this tool's job without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: use set_provider_priority for new calls, implying this is only for legacy compatibility. It also clarifies that 'false' is a legacy no-op, telling the caller when calling is effectively pointless. This is exactly the alternative-selection signal agents need.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_provider_enabledSet provider enabledBInspect

Enable or disable a provider for a project.

NameRequiredDescriptionDefault
enabledYesWhether this provider connection should be active for the project.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
provider_idYesProvider id. Known values: dataforseo, serpapi, ga4, gsc, plausible.
idempotency_keyNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, signaling a mutating non-destructive operation. The description adds no further behavioral context—such as whether disabling is reversible, what happens to associated data, or whether testing is needed. Given the annotation coverage is decent, a mid score is appropriate, but there's no value added beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, zero waste, front-loaded with the action. However, given the tool's simplicity, this is appropriately concise without sacrificing needed context. Could add brief usage guidance but maintains efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, no annotations explaining side effects or reversibility, one undocumented parameter (idempotency_key), and no guidance on preconditions. For a state-changing tool in a provider-management cluster with many siblings, the description is too thin to fully guide correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% (3 of 4 params described). The enabled, project_id, and provider_id params have helpful schema descriptions. The idempotency_key has no description in either schema or tool description, leaving one param undocumented. The description adds no meaning beyond the schema, so baseline 3 is fair.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description "Enable or disable a provider for a project" uses a clear verb+resource combination and states the two possible states. It's concise and clear, though it doesn't explicitly distinguish from sibling tools like connect_provider or update_provider_settings, which limits differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like connect_provider, update_provider_settings, or set_provider_priority. The description and schema don't explain when enabling/disabling is appropriate versus connecting a provider, or any prerequisites (e.g., provider must be connected first).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_provider_prioritySet provider priorityBInspect

Set provider priority for a project. Lower numbers are preferred first.

NameRequiredDescriptionDefault
priorityYesOrdering value that determines this provider's preference.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
provider_idYesProvider id. Known values: dataforseo, serpapi, ga4, gsc, plausible.
idempotency_keyNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations include readOnlyHint=false and destructiveHint=false, so the mutation nature is disclosed. The description adds the interpretation detail that 'lower numbers are preferred first,' which is genuinely useful behavioral context. However, it doesn't disclose idempotency behavior, or describe what happens when priority ties or conflicts occur among providers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero waste. Every word adds value. The directionality clue is packed efficiently into a single sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 4-param mutation tool without output schema or enums, the description is nearly sufficient. Gaps remain: no statement about whether this overwrites existing priority or appends to a list, no idempotency semantics, and no note about valid priority ranges beyond what schema constraints already provide.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% (3 of 4 parameters have descriptions). Priority, project_id, and provider_id are all documented in-schema. The description adds the ordinal-interpretation hint for priority ('lower numbers preferred first') which enriches meaning. However, idempotency_key is undocumented and the description doesn't compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb-resource-action: 'Set provider priority for a project' with the important scoping clue 'Lower numbers are preferred first.' The purpose is unambiguous, though it doesn't explicitly differentiate from sibling tools like set_provider_enabled or set_primary_provider, which could be confused with priority setting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use hints, no context on alternatives, and no relationship to sibling tools like set_primary_provider or set_provider_enabled. An agent choosing between these provider-related setters would receive no guidance on which to invoke, aside from the inferred meaning of 'priority.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_ai_tracking_promptsSuggest ai tracking promptsB
Read-only
Inspect

Read the complete project context and authoritative competitors for explicit review. Returned manual templates are heuristics with no measured popularity. This never generates with a model, saves a prompt or starts paid provider work.

NameRequiredDescriptionDefault
project_idYesPublic project ID; membership and token scope are enforced.

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds real value beyond that: no model generation, no prompt persistence, no paid provider calls, and the important caveat that returned templates are unranked heuristics with no measured popularity.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with what it reads before the output caveat and the negative disambiguation. Slightly cryptic phrasing ('for explicit review') costs it the top score, but there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description carries the return-value burden and does characterize the output as manual, heuristic templates without measured popularity. Combined with annotations covering safety and a fully documented single parameter, the definition is close to complete, though the missing link to the sibling suggestion/generate tools leaves a routing gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single project_id parameter is fully documented in the schema, including the ID pattern and the membership/token-scope enforcement note. The description adds no additional meaning 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.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description never plainly states that the tool returns suggested AI-tracking prompts; the purpose is only inferable from the title plus the oblique phrase 'Returned manual templates are heuristics.' It does convey the inputs (project context and authoritative competitors), but an agent has to assemble the verb+resource from the name rather than the text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through contrast ('never generates with a model, saves a prompt or starts paid provider work') and the phrase 'for explicit review,' which hints this is the zero-cost, non-committal option. However, it never names the alternatives it is contrasted against (ai_tracking_suggestions_generate, ai_tracking_suggestions_preview, accept_ai_tracking_suggestions) or states the condition that should select this one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_project_trafficSynchronize project trafficBInspect

Synchronize traffic snapshots from the project's own connected analytics accounts now. Provider rate limits and connection authorization rules apply.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false. The description adds that 'Provider rate limits and connection authorization rules apply,' which supplements the openWorldHint by warning that this non-read operation may hit external rate limits and require authorized connections. However, it doesn't disclose what happens if the connection is unauthorized, whether sync is partial or full, or whether previously synced data gets replaced—costly gaps for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action. The first sentence states what the tool does and for what scope, and the second adds the key constraint (rate limits and authorization). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a mutating sync operation with no output schema, open-world implications, and an undocumented idempotency parameter. Given this complexity, the description is somewhat thin—it should clarify the idempotency_key semantics and what the sync actually returns or how to confirm success. But it does convey the essential scope and main caveats, making it minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50%, meaning only project_id has a description in the schema (the idempotency_key parameter has none). The description itself identifies the project as the scope ('project's own connected analytics accounts') and mentions rate limits, but it does not compensate for idempotency_key's missing documentation—not explaining its idempotency guarantee or how to use it to avoid duplicate syncs. Given the 50% coverage, the description should have explained the undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the verb ('Synchronize') and resource ('traffic snapshots from the project's own connected analytics accounts'), giving a moderately clear purpose. However, the exact mechanics—what 'synchronize' means here (pull fresh data? push data to accounts?) and how it differs from related traffic tools like list_traffic_snapshots or get_rank_check—aren't clarified, so sibling differentiation is weak.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage ('Synchronize traffic snapshots from the project's own connected analytics accounts now') and notes provider rate limits and connection authorization rules apply, giving some context about when this should be invoked. However, it doesn't explicitly state when NOT to use it or name alternatives like list_traffic_snapshots (for reading existing snapshots) or test_provider_connection (for validating connectivity) when the goal is just inspection rather than a sync.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

test_provider_connectionTest provider connectionAInspect

Test provider credentials or the saved provider connection. For Plausible, credentials.login is the site domain configured in Plausible (site_id) and defaults to the project domain when omitted; credentials.api_key is the Stats API token. Self-hosted providers such as Plausible accept an optional credentials.endpoint base URL. A successful test returns message "Connected." or "Connected · ." for analytics providers.

NameRequiredDescriptionDefault
loginNo
secretNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
credentialsNo
provider_idYesProvider id. Known values: dataforseo, serpapi, ga4, gsc, plausible.

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and openWorldHint=true, consistent with a tool that makes outbound calls to provider APIs; no contradiction. The description usefully discloses the success signal ('Connected.' / 'Connected · <detail>.'), but says nothing about failure responses, rate limits, or whether a successful test persists anything.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded purpose sentence followed by provider-specific detail and the success contract. Information-dense with little waste, though the Plausible-specific clause is long for a tool supporting five providers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Five parameters with a nested credentials object and no output schema, so the description must carry the return contract, which it partially does via the success message. Missing: error/failure semantics and the distinction between the top-level and nested credential fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 40% schema description coverage, the description compensates well: it explains that credentials.login is the Plausible site domain (site_id, defaulting to project domain), credentials.api_key is the Stats API token, and credentials.endpoint is the base URL for self-hosted instances. It leaves the top-level login/secret parameters and their relationship to credentials.login/secret unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: test either raw credentials or the saved provider connection. An agent can tell it apart from connect_provider or update_provider_settings, though the description never names 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It distinguishes the two modes (passed-in credentials vs. saved connection), which implies when each is relevant, but there is no explicit when-not-to-use or routing to alternatives like connect_provider or disconnect_provider.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ai_tracking_promptUpdate ai tracking promptCInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
textNoPrompt text; updates create a new immutable revision.
labelNoOptional display label.
pausedNoPause or resume future planning without altering historical samples.
categoryNoPrompt intent captured in its immutable revision.
topic_idNo
prompt_idYesPublic prompt ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.
generation_referenceNoTrusted model generation provenance, verified against the completed project generation.
provider_dataset_referenceNoTrusted provider dataset provenance, validated against the project report.

TDQS

C2.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false. The description adds real behavioral context beyond those: edits create immutable revisions, budget consent is explicit, and retry keys are stable. However, phrases like 'explicit budget consent' and 'stable retry keys' are cryptic and unexplained, so the value added is partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is only three sentences and not bloated, but it is opaque rather than front-loaded: the first sentence should state the action and resource, and instead the most useful constraint (no automatic paid baseline) is buried at the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 9-parameter mutation tool with nested provenance objects warrants clearer scoping, but the description never says what actually changes, which parameters are optional, or how revisions interact with the historical samples. With no output schema, the description leaves meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 89%, so the schema already documents nearly every parameter including the nested generation_reference and provider_dataset_reference objects. The description contributes no additional parameter meaning, which is the expected baseline 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.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Manage project-scoped AI tracking,' which names a domain rather than a specific verb+resource action. It never states that it updates an AI tracking prompt, and with siblings like create_ai_tracking_prompt and archive_ai_tracking_prompt in the same family, an agent gets no help distinguishing it from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no reference to alternatives such as create_ai_tracking_prompt or archive_ai_tracking_prompt. The closing line 'This does not start an automatic paid baseline' is a single negative scoping hint, which is the only usage signal present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ai_tracking_scheduleUpdate ai tracking scheduleCInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
cronNoCron recurrence evaluated in the schedule timezone.
nameNoHuman-readable schedule name.
consentNoExplicit acceptance of paid recurring work; the API requires true when enabling a schedule or changing configuration while enabled.
enabledNoWhether future scheduled occurrences are enabled.
timezoneNoIANA timezone for this schedule.
project_idYesPublic project ID; membership and token scope are enforced.
next_run_atNoNext planned UTC occurrence, when provided.
schedule_idYesPublic schedule ID scoped to this project.
configurationNoReviewed immutable configuration for each scheduled occurrence.

TDQS

C2.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as a non-read-only, non-destructive, non-open-world mutation. The description adds genuinely non-obvious context beyond that: immutable revisions must be preserved, explicit budget consent is required, retry keys stay stable, and — importantly — it explicitly does not launch a paid baseline. That negative side-effect disclosure is exactly the kind of signal 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences keep it tight, but the leading sentence is vague filler that doesn't front-load the actual operation, and the constraint list reads as terse fragments. It is compact without being wasteful, yet the ordering puts the least informative statement first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation with a deeply nested required configuration object and no output schema, the description is thin. It never clarifies update semantics (full replacement vs. partial), how the reviewed configuration/revision fields should be sourced, or what a caller should expect on success. The consent and paid-baseline notes help, but substantial complexity is left to the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all 9 parameters including the nested configuration, consent, and revision fields. The description references consent and revisions obliquely but adds no syntax, format, or usage detail beyond what the schema provides. Baseline 3 is appropriate 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.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The stated purpose is the vague 'Manage project-scoped AI tracking', which restates the general domain rather than specifying that this updates an existing schedule's configuration. It does not distinguish itself from siblings like create_ai_tracking_schedule or archive_ai_tracking_schedule. A rough sense of the resource exists but the specific verb+resource pairing is blurry.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no mention of alternatives (create_ai_tracking_schedule, preview_ai_tracking_run, archive_ai_tracking_schedule all sit nearby). The clause 'does not start an automatic paid baseline' hints at a boundary but frames it as behavior, not as routing advice. An agent gets no help deciding when this tool is the right call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ai_tracking_topicUpdate ai tracking topicCInspect

Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline.

NameRequiredDescriptionDefault
nameNoHuman-readable topic name.
pausedNoPause or resume future planning for this topic without changing historical samples.
topic_idYesPublic topic ID scoped to this project.
project_idYesPublic project ID; membership and token scope are enforced.
descriptionNoOptional topic description.

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations mark this as a non-read-only, non-destructive, closed-world mutation, so the safety profile is already covered. The description adds genuinely useful context beyond that: it will not trigger an automatic paid baseline and it preserves immutable revisions and budget consent. However, "stable retry keys" and "explicit budget consent" are cryptic and never explained, so the added value is real but thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loading the resource scope, which is reasonable. But the middle sentence is a vague list ("immutable revisions, explicit budget consent, and stable retry keys") that consumes attention without resolving what any of it means in this call.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-param mutation with full schema coverage and no output schema, the missing piece is a plain statement of what is being updated and any side effects. The paid-baseline exclusion partially fills that gap, but the description never says which fields are mutable or whether the update is reversible, leaving it minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter (project_id, topic_id, name, paused, description) is already documented with patterns and semantics. The description adds no parameter-level meaning, which is the correct baseline 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.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says only "Manage project-scoped AI tracking," leaning on the title rather than stating the specific action (updating a topic's name, paused state, or description). It never uses an update verb tied to the topic resource, and among ~100 siblings it fails to distinguish itself from create_ai_tracking_topic, archive_ai_tracking_topic, or update_ai_tracking_schedule. An agent must read the name and schema to learn what it actually does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no alternative named. The one exclusion ("This does not start an automatic paid baseline") is a behavioral/cost note rather than routing guidance, and it does not tell the agent when to prefer this over create_ai_tracking_topic or update_ai_tracking_schedule. Usage must be inferred from the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_alert_ruleUpdate alert ruleAInspect

Update an alert rule by rule id. The API replaces the whole rule configuration, so name and condition_type are required even when updating a single field.

NameRequiredDescriptionDefault
nameYesHuman-readable name chosen for the alert rule.
top_nNo
enabledNo
rule_idYesIdentifier of the alert rule to operate on.
channelsNo
severityNoAlert severity. When omitted, the server chooses a condition-specific default.
change_pctNo
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
target_idsNo
target_typeNo
serp_featureNo
recipient_idsNo
condition_typeYesCondition that determines when the alert rule fires.
drop_positionsNo
idempotency_keyNo
competitor_domainNo
threshold_positionNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false and destructiveHint=false, so the mutation trait is disclosed via annotations. The description adds meaningful behavioral detail beyond annotations: the full-replacement semantics and the fact that condition_type and name are required even for single-field updates. This is valuable because update tools often silently partial-patch, and this one does not. 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core verb+resource action and a critical behavioral caveat. Every sentence earns its place and there's no fluff. Slightly thin given the tool's complexity of 17 condition-dependent params, but the structure is clean and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 17 parameters, no output schema, and only 29% schema description coverage. The description captures the most important semantic (full replacement and required fields) but does not address condition-parameter coupling—e.g., which params make sense for 'change_pct' vs 'threshold' vs 'serp_feature' conditions. For a complex tool there is no guidance on selecting target_ids/target_type or recipient_ids/channels relationships. It's adequate for basic use but leaves meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 29%, and the description adds value beyond the schema by explaining the replacement semantics affecting required parameters. However, the 17 parameters are largely undocumented in the description—it doesn't explain the condition-specific parameter combinations (e.g., which params apply to which condition_type values). The description covers the critical name/condition_type/rule_id nuance but leaves condition-parameter relationships unexplored for a complex 17-param tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Update an alert rule by rule id' with a specific verb and resource. It distinguishes the operation from siblings like create_alert_rule and delete_alert_rule by implying a replacement semantics. However, it doesn't explicitly name the sibling alternatives for differentiation, and the 'replaces whole rule configuration' clause overlaps with behavioral transparency.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear guidance that this is a full-replacement operation ('replaces the whole rule configuration'), which is crucial usage context. It implies when not to use it (not for partial updates), though it doesn't explicitly name alternatives like create_alert_rule for new rules. The condition_type and name being required as clues to create-like semantics is helpful.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_keywordUpdate keywordBInspect

Update keyword metadata such as text, country, device, target URL, tags, or schedule. Use search_locations and pass its location_key verbatim; an @language qualifier selects a non-default language for that location.

NameRequiredDescriptionDefault
cityNo
tagsNo
topicNo
deviceNoDevice whose search or ranking data is being selected.
intentNo
countryNo
keywordNo
locationNo
scheduleNo
frequencyNoSchedule frequency that determines when rank checks run.
keyword_idYesIdentifier of the tracked keyword to operate on.
project_idNoIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
target_urlNoCanonical destination URL or site-relative path to associate with the keyword.
location_keyNoCanonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language.
idempotency_keyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered and the bar is lower. The description adds the cross-tool provenance rule for location_key, but is silent on whether this is a partial patch, what passing null does to an existing field, or that idempotency_key exists for retry safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the core purpose front-loaded and the dependency caveat second. No filler, though the @language clause restates what the location_key schema description already says, so that half-sentence does not fully earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation tool with a nested schedule object and no output schema, the description covers the highest-risk parameter (location_key) and its cross-tool source, which is the biggest trap. It is still thin on null-to-clear semantics, on the country/city/location/location_key hierarchy, and on partial-update behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40% across 15 parameters, so the description has to carry weight. It names roughly six fields (keyword, country, device, target_url, tags, schedule) and explains location_key plus the @language qualifier, but leaves city, location, topic, intent, frequency, project_id and idempotency_key unexplained, and never disambiguates the four location-ish fields (country, city, location, location_key).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Update keyword metadata") and enumerates the mutable fields (text, country, device, target URL, tags, schedule), so an agent knows exactly what the tool touches. It does not, however, distinguish itself from siblings like bulk_update_keywords or set_keyword_target_url, which overlap on the same resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The one explicit routing instruction is genuinely useful: "Use search_locations and pass its location_key verbatim" tells the agent where the location value must come from. Beyond that, there is no when-to-use or when-not-to-use guidance, and no signal for choosing this over bulk_update_keywords or set_keyword_target_url.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_meUpdate authenticated userAInspect

Update the authenticated user's display name. Requires a write PAT.

NameRequiredDescriptionDefault
nameYesDisplay name chosen for your bisibility account.
idempotency_keyNo

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false. The description states it requires a write PAT, which adds meaningful behavioral context about authentication requirements. However, it doesn't disclose the full behavior of a write operation on the user (e.g., whether it's reversible, what happens to existing name, whether related sessions are affected). With annotations present, this adds modest value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that packs the essential information: what's updated (display name), who it applies to (authenticated user), and the auth requirement. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-field update operation with no output schema, the description covers the core purpose adequately. However, the idempotency_key parameter is entirely undocumented, and there's no guidance on the write PAT requirement beyond a passing mention. Given the low operation complexity, this is borderline adequate but could clarify the idempotency key's role and behavior on repeated calls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% with 2 parameters. The 'name' parameter has a description in the schema ('Display name chosen for your visibility account'). The description identifies 'display name' as the updated field, which aligns. However, the idempotency_key parameter has no description in either the schema or the tool description, leaving it unexplained. The description adds some alignment but doesn't compensate for the undocumented parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (update) and resource (authenticated user's display name), making the purpose specific and unambiguous. It distinguishes from get_me (read) and other update operations, though it doesn't explicitly comment on alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions requiring a write PAT, which implies the usage context (write operations need elevated token). However, it doesn't explicitly state when to use this vs alternatives, nor when not to use it. The auth requirement is helpful context but there's no exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_notification_preferencesUpdate notification preferencesAInspect

Notification channel switches: turn the project's notification channels (email, Slack, webhook) on or off. Does not create or change webhook endpoints; use create_webhook or update_webhook for those.

NameRequiredDescriptionDefault
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
alert_emailNo
alert_slackNo
check_emailNo
alert_in_appNo
check_in_appNo
import_emailNo
invite_emailNo
alert_webhookNo
import_in_appNo
invite_in_appNo
idempotency_keyNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint=false, openWorldHint=false, destructiveHint=false, which tells the agent this is a write operation but not destructive. The description clarifies it's a toggling operation and doesn't create/modify webhook endpoints, but doesn't disclose behavior details like idempotency semantics, partial vs full replace of unspecified channels, or confirmation behavior. For a write tool with minimal annotations, some additional behavioral context (e.g., what happens to unlisted channels) would help.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero fluff. Each sentence earns its place: the first states the core function, the second clarifies scope boundaries and names alternatives. Highly front-loaded with the essential purpose in the first sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a moderately complex tool (12 boolean parameters across semantic categories) with no output schema and only 8% schema coverage. The description clarifies the webhook boundary well but does not explain the semantic grouping of parameters (alert vs check vs import vs invite), which is the main cognitive burden for the agent. Given the complexity and low coverage, more description would be warranted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 8% (only project_id has a description), with 12 parameters total. The description names the three channels (email, Slack, webhook) but the actual parameter list uses more granular naming (alert_email, check_email, import_email, invite_email, and corresponding _in_app variants). The description does not explain what alert/check/import/invite categories mean or how boolean false interacts with unspecified channels. Given very low coverage, the description should compensate more, so baseline 3 is generous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the tool's purpose: turning notification channels (email, Slack, webhook) on/off. The verb 'update' plus the resource 'notification preferences' and the specific behavior (channel switches) distinguish it from sibling tools like create_webhook/update_webhook.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states what it does NOT do ('does not create or change webhook endpoints') and directs the agent to the alternative tools (create_webhook/update_webhook). This is exemplary when/not/alternatives guidance, especially valuable given the large sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_projectUpdate projectBInspect

Update a project's name or domain. At least one of name or domain is required.

NameRequiredDescriptionDefault
nameNo
domainNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations assert readOnlyHint=false, so the agent knows this is a mutating operation. The description adds that at least one of name/domain must be provided, which is useful. However, it doesn't state whether the operation is destructive to unspecified fields (e.g., does omitting name keep it unchanged?), whether partial updates are supported, or whether idempotency_key governs retry behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, front-loaded with the action and constraint. Efficient and clean.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderately simple mutation tool with no output schema and sparse schema descriptions, the description is adequate but leaves gaps: it doesn't mention what the response returns (updated project vs null), whether domain uniqueness is enforced, or retry/idempotency semantics. Adequate for a simple update but not fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25% (project_id is described), leaving name, domain, and idempotency_key undocumented in the schema. The description compensates somewhat by clarifying name/domain are the updatable fields and that at least one is required, but it doesn't explain idempotency_key semantics or the domain/name format constraints beyond what the schema enum-less maxLength already provides. The description adds marginal value but doesn't fully cover the schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb-resource pair ('Update a project's name or domain') and explicitly scopes what can be updated. It distinguishes from delete_project and get_project among siblings, though it doesn't explicitly name alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (modifying existing project metadata) and states the 'at least one required' constraint, but does not explicitly contrast against create_project or list_projects, nor state when NOT to use it. Usage context is implied but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_contextUpdate project contextAInspect

Replace all five context fields. Requires project write scope and a member role.

NameRequiredDescriptionDefault
goalsYesProject guidance for the agent, up to 4000 characters.
audienceYesProject guidance for the agent, up to 4000 characters.
businessYesProject guidance for the agent, up to 4000 characters.
productsYesProject guidance for the agent, up to 4000 characters.
project_idYesThe public project ID. Project membership and token scopes are enforced.
agent_rulesYesProject guidance for the agent, up to 4000 characters.
idempotency_keyNoOptional stable retry key, forwarded as the REST Idempotency-Key header.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=false). The description adds genuinely useful context beyond them: that this is a wholesale replacement of all five fields rather than a partial patch, plus the auth requirements (write scope, member role). It does not, however, note reversibility or whether omitted external state is affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the replacement semantics followed by the permission constraint. Nothing is padded or redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with no output schema and no contradictions in its annotations, the description covers the essential facts: full-replacement behavior and required authorization. Minor gaps remain (no mention that idempotency_key enables safe retries, no error/permission-failure behavior), but nothing needed 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.

Parameters3/5

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 only one clarification beyond the schema — that all five guidance fields are replaced together — and the schema's own per-field text is generic and identical across business/audience/products/goals/agent_rules, so no field-level meaning is contributed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb and scope ('Replace all five context fields'), which cleanly distinguishes this write tool from the read sibling get_project_context and from update_project_defaults. It is clear but does not explicitly name the sibling it pairs with, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states prerequisites ('requires project write scope and a member role') and implies full-replacement semantics, but never says when to prefer this over alternatives such as update_project_defaults or preview_project_defaults, nor when not to use it. Usage is implied rather than routed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_project_defaultsUpdate project defaultsAInspect

Confirm a preview_project_defaults draft using its exact source hash, revision, token and stable command key in review (confirmed:true). Missing review is refused by current servers; stale/expired review requires a new preview. Never auto-confirm. Update the project default rank-check schedule, SERP depth, and SERP market. The schedule is replaced as a whole: omitted schedule fields (frequency, cron_expression, jitter_minutes, timezone) reset to their defaults (jitter 60, timezone UTC, no cron). serp_depth and serp_stop_on_match are independent of the schedule and keep their stored values when omitted. Provide country and device together, or a location_key, to move the default SERP market. Use search_locations and pass its location_key verbatim to preserve the exact location-language pair.

NameRequiredDescriptionDefault
cityNo
deviceNoDevice whose search or ranking data is being selected.
reviewNo
countryNo
timezoneNo
frequencyYesSchedule frequency that determines when rank checks run.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
serp_depthNoDefault number of SERP results to scan per rank check (10, 20, 50, or 100). Omitted keeps the stored depth.
location_keyNoCanonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language.
jitter_minutesNo
cron_expressionNoCron expression used when frequency is custom_cron; otherwise null.
idempotency_keyNo
serp_stop_on_matchNoSet false to fetch the full configured depth for competitor snapshots.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the mutation/safety profile (readOnly=false, destructive=false, openWorld=false). The description adds substantial behavioral context: never auto-confirm, stale/expired review handling, whole-schedule replacement with field-level reset defaults, and which fields retain stored values when omitted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the review/confirm requirement before the update semantics, which is the right priority. It is dense and long at eight sentences, but nearly every sentence carries distinct, non-redundant operational information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 13-parameter mutation with a nested review object and no output schema, the description covers the confirm workflow, reset behavior, and market selection completely enough for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 54%, so the description must compensate, and it does so for the most consequential semantics: schedule fields reset to defaults (jitter 60, timezone UTC, no cron) while serp_depth/serp_stop_on_match persist, and country+device vs location_key for the market. It leaves city, raw country/timezone syntax, and the top-level idempotency_key less explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (update project default rank-check schedule, SERP depth, SERP market) and ties the operation to the preview/confirm flow. It clearly distinguishes itself from siblings like preview_project_defaults, get_project_defaults, and search_locations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly explains when the review block is required ('Missing review is refused by current servers'), how to recover from a stale preview ('requires a new preview'), and routes to search_locations with the instruction to pass location_key verbatim. It names alternatives and the conditions selecting them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_provider_settingsUpdate provider settingsBInspect

Update provider settings such as enabled state or priority. primary is a deprecated compatibility alias: true promotes priority 0 and false is a no-op.

NameRequiredDescriptionDefault
enabledNo
primaryNoDeprecated compatibility alias: true promotes priority 0; false is a no-op.
priorityNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
provider_idYesProvider id. Known values: dataforseo, serpapi, ga4, gsc, plausible.
idempotency_keyNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the mutation/safety profile is covered. The description adds genuinely useful behavior: that primary is a deprecated alias and that false is a no-op, which prevents a wasted call. It does not say what precedence or ordering changes occur, whether omitted fields are preserved, or whether the operation is idempotent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero filler, front-loading the core action and then the one non-obvious parameter caveat. Nothing needs to be removed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

It covers the trickiest part (the deprecated primary alias and its no-op false behavior) well, and no output schema exists so return values need not be explained. But for a 6-parameter mutation with 50% schema coverage and no guidance on the overlapping single-field siblings, key facts remain missing: idempotency_key behavior and how priority interacts with enabled.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%, with enabled, priority and idempotency_key undocumented in the schema. The description names enabled and priority but adds no semantics (e.g. whether lower priority means higher precedence), and its primary text is a near-verbatim duplicate of the schema's own description for that field. With the description mostly restating rather than compensating, a baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource (updates provider settings) and it names the concrete fields it affects (enabled state, priority). However it never distinguishes itself from the closely overlapping siblings set_provider_enabled, set_provider_priority and set_primary_provider, so an agent cannot tell from the description alone which one to reach for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no comparison to the three sibling tools that appear to do the same single-field edits. The only guidance offered is the semantics of the deprecated alias, which explains a parameter rather than tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_team_member_roleUpdate team member roleAInspect

Change a non-owner project member role to admin, member, or viewer. Ownership transfer remains UI-only.

NameRequiredDescriptionDefault
roleYesProject role to grant to the invited or existing team member.
member_idYesIdentifier of the project member to operate on.
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
idempotency_keyNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and destructiveHint=false, indicating a mutation that isn't destructive. The description adds the constraint about non-owner members and UI-only ownership transfer, which is useful context. It doesn't disclose permission requirements, reversibility of the role change, or idempotency behavior, but the annotations carry the safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste. The first sentence states the action with precise role values and target constraint; the second sentence provides the critical exclusion (UI-only ownership transfer). Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and moderate schema coverage, the description covers the core action and a key constraint. However, it doesn't address the idempotency_key parameter at all, doesn't mention what happens to an owner if somehow targeted, and doesn't describe response behavior for a state-changing operation. Adequate but with gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, with role having an enum and member_id/project_id having patterns and descriptions. The description reinforces the role values (admin, member, viewer) and the non-owner constraint that clarifies member_id scope. It doesn't explain the idempotency_key parameter, which is undocumented in the schema, but the description adds meaningful scoping context beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource+scope: "Change a non-owner project member role to admin, member, or viewer." It specifies the exact roles available and the constraint that the target must be a non-owner. It doesn't explicitly differentiate from siblings like remove_team_member or list_team_members, but the purpose is evident from the name and description.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states what it does (change non-owner roles) and explicitly notes ownership transfer is UI-only, providing a clear exclusion boundary. This tells the agent when NOT to use this tool (for ownership transfer). However, it doesn't name alternative tools or describe when to prefer this over list_team_members/remove_team_member/edit flows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_webhookUpdate webhookBInspect

Update a webhook endpoint or rotate its write-only HMAC secret.

NameRequiredDescriptionDefault
urlNourl HTTP or HTTPS URL supplied by the endpoint owner.
enabledNo
project_idYesIdentifier of the bisibility project to operate on; list_projects returns valid project ids.
webhook_idYesIdentifier of the webhook endpoint to operate on.
descriptionNo
hmac_secretNo
idempotency_keyNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=false (not destructive), readOnlyHint=false (mutating), and openWorldHint=false. The description adds the 'write-only' HMAC secret context, which is a useful behavioral disclosure—meaning the secret can be set but never read back. However, beyond that, the description doesn't elaborate on side effects such as whether updating triggers immediate delivery testing or whether secret rotation invalidates pending signatures.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficient sentence that covers both core operations without waste. It's appropriately sized and front-loaded with the primary verb. It earns its place, though it could afford to add one more clause about when to use it.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, no output schema, and only 43% schema coverage, the description carries a heavy burden it only partially meets. It conveys the two distinct operations (update vs secret rotation) but doesn't clarify the idempotency_key parameter behavior, how enabled interacts with other updates, or what a successful response looks like. Adequate for distinguishing from siblings but incomplete for full operation semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is low at 43%, but the description itself adds no parameter-specific meaning. The 'rotate' language implicitly flags hmac_secret as the rotation target, which adds marginal value. However, params like enabled, description, url, and idempotency_key are left entirely to the schema, which doesn't explain their semantics beyond basic type/format. The description could have compensated for the coverage gap but doesn't.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Update a webhook endpoint or rotate its write-only HMAC secret' uses a specific verb (update/rotate) with a clear resource (webhook endpoint). It also highlights the two distinct operations the tool supports, distinguishing it from list_webhooks, create_webhook, and delete_webhook siblings. However, it doesn't explicitly contrast with 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies this is for modifying an existing webhook, distinct from create/delete/list siblings. However, it doesn't provide explicit when-to-use vs when-not-to guidance, nor does it mention that the 'enabled' field can toggle webhook behavior or that inline signature verification uses the secret. No alternatives are named explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 68 tool updatesv0.17.1
    • Addedaccept_ai_tracking_suggestions
    • Changedadd_keywords3 fields changed
      • changedInput schema / properties / keywords / items / anyOf
        Previous value: -[
        -  {
        -    "maxLength": 180,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "city": {
        -        "anyOf": [
        -          {
        -            "maxLength": 120,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "country": {
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "device": {
        -        "description": "Device whose search or ranking data is being selected.",
        -        "enum": [
        -          "desktop",
        -          "mobile"
        -        ],
        -        "type": "string"
        -      },
        -      "intent": {
        -        "anyOf": [
        -          {
        -            "maxLength": 80,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "keyword": {
        -        "description": "Search phrase to add to the project.",
        -        "maxLength": 180,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "location": {
        -        "maxLength": 120,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "location_key": {
        -        "pattern": "^[A-Z]{2}(\\/[^/]{1,80}){0,2}$",
        -        "type": "string"
        -      },
        -      "schedule": {
        -        "additionalProperties": false,
        -        "properties": {
        -          "cron_expression": {
        -            "anyOf": [
        -              {
        -                "maxLength": 120,
        -                "minLength": 1,
        -                "type": "string"
        -              },
        -              {
        -                "type": "null"
        -              }
        -            ],
        -            "description": "Cron expression for custom_cron schedules; use null for other frequencies."
        -          },
        -          "frequency": {
        -            "description": "Schedule frequency that determines when rank checks run.",
        -            "enum": [
        -              "paused",
        -              "manual",
        -              "daily",
        -              "weekly",
        -              "monthly",
        -              "custom_cron"
        -            ],
        -            "type": "string"
        -          },
        -          "jitter_minutes": {
        -            "maximum": 120,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          "timezone": {
        -            "maxLength": 80,
        -            "minLength": 1,
        -            "type": "string"
        -          }
        -        },
        -        "required": [
        -          "cron_expression",
        -          "frequency"
        -        ],
        -        "type": "object"
        -      },
        -      "tags": {
        -        "items": {
        -          "description": "Tag label assigned to the keyword.",
        -          "maxLength": 48,
        -          "minLength": 1,
        -          "type": "string"
        -        },
        -        "maxItems": 12,
        -        "type": "array"
        -      },
        -      "target_url": {
        -        "anyOf": [
        -          {
        -            "maxLength": 500,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "description": "Canonical destination URL or site-relative path to associate with the keyword."
        -      },
        -      "topic": {
        -        "anyOf": [
        -          {
        -            "maxLength": 80,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      }
        -    },
        -    "required": [
        -      "keyword"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "maxLength": 180,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "city": {
        +        "anyOf": [
        +          {
        +            "maxLength": 120,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "country": {
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "device": {
        +        "description": "Device whose search or ranking data is being selected.",
        +        "enum": [
        +          "desktop",
        +          "mobile"
        +        ],
        +        "type": "string"
        +      },
        +      "intent": {
        +        "anyOf": [
        +          {
        +            "maxLength": 80,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "keyword": {
        +        "description": "Search phrase to add to the project.",
        +        "maxLength": 180,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "location": {
        +        "maxLength": 120,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "location_key": {
        +        "description": "Canonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language.",
        +        "pattern": "^[A-Z]{2}(\\/[^/@]{1,80}){0,2}(@[a-z]{2,3}(-[a-z0-9]{2,8})?)?$",
        +        "type": "string"
        +      },
        +      "schedule": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "cron_expression": {
        +            "anyOf": [
        +              {
        +                "maxLength": 120,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              {
        +                "type": "null"
        +              }
        +            ],
        +            "description": "Cron expression for custom_cron schedules; use null for other frequencies."
        +          },
        +          "frequency": {
        +            "description": "Schedule frequency that determines when rank checks run.",
        +            "enum": [
        +              "paused",
        +              "manual",
        +              "daily",
        +              "weekly",
        +              "monthly",
        +              "custom_cron"
        +            ],
        +            "type": "string"
        +          },
        +          "jitter_minutes": {
        +            "maximum": 120,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          "timezone": {
        +            "maxLength": 80,
        +            "minLength": 1,
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "cron_expression",
        +          "frequency"
        +        ],
        +        "type": "object"
        +      },
        +      "tags": {
        +        "items": {
        +          "description": "Tag label assigned to the keyword.",
        +          "maxLength": 48,
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "maxItems": 12,
        +        "type": "array"
        +      },
        +      "target_url": {
        +        "anyOf": [
        +          {
        +            "maxLength": 500,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Canonical destination URL or site-relative path to associate with the keyword."
        +      },
        +      "topic": {
        +        "anyOf": [
        +          {
        +            "maxLength": 80,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      }
        +    },
        +    "required": [
        +      "keyword"
        +    ],
        +    "type": "object"
        +  }
        +]
      • addedInput schema / properties / location_key / description
        Added value: +"Canonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language."
      • changedInput schema / properties / location_key / pattern
        Previous value: -"^[A-Z]{2}(\\/[^/]{1,80}){0,2}$"New value: +"^[A-Z]{2}(\\/[^/@]{1,80}){0,2}(@[a-z]{2,3}(-[a-z0-9]{2,8})?)?$"
    • Addedai_tracking_suggestions_generate
    • Addedai_tracking_suggestions_preview
    • Addedanalyze_ai_visibility
    • Addedanalyze_domain_overview
    • Addedarchive_ai_tracking_prompt
    • Addedarchive_ai_tracking_schedule
    • Addedarchive_ai_tracking_topic
    • Addedcancel_ai_tracking_run
    • Addedcompare_ai_prompts
    • Changedconnect_provider1 field changed
      • addedInput schema / properties / primary / description
        Added value: +"Deprecated compatibility alias: true promotes priority 0; false is a no-op."
    • Addedcreate_agent_report
    • Addedcreate_ai_tracking_prompt
    • Addedcreate_ai_tracking_run
    • Addedcreate_ai_tracking_schedule
    • Addedcreate_ai_tracking_topic
    • Changedcreate_saved_keywords1 field changed
      • changedInput schema / properties / keywords / items / anyOf
        Previous value: -[
        -  {
        -    "description": "Keyword phrase to save without starting rank tracking.",
        -    "maxLength": 180,
        -    "minLength": 1,
        -    "type": "string"
        -  },
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cpc_cents": {
        -        "anyOf": [
        -          {
        -            "maximum": 9007199254740991,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "difficulty": {
        -        "anyOf": [
        -          {
        -            "maximum": 100,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "intent": {
        -        "anyOf": [
        -          {
        -            "maxLength": 80,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "keyword": {
        -        "description": "Keyword phrase represented by this research snapshot.",
        -        "maxLength": 180,
        -        "minLength": 1,
        -        "type": "string"
        -      },
        -      "location": {
        -        "pattern": "^[A-Z]{2}(\\/[^/]{1,80}){0,2}$",
        -        "type": "string"
        -      },
        -      "search_volume": {
        -        "anyOf": [
        -          {
        -            "maximum": 9007199254740991,
        -            "minimum": 0,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "source_seed": {
        -        "anyOf": [
        -          {
        -            "description": "Keyword phrase to save without starting rank tracking.",
        -            "maxLength": 180,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "variant_count": {
        -        "maximum": 9007199254740991,
        -        "minimum": 0,
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "keyword"
        -    ],
        -    "type": "object"
        -  }
        -]New value: +[
        +  {
        +    "description": "Keyword phrase to save without starting rank tracking.",
        +    "maxLength": 180,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "cpc_cents": {
        +        "anyOf": [
        +          {
        +            "maximum": 9007199254740991,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "difficulty": {
        +        "anyOf": [
        +          {
        +            "maximum": 100,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "intent": {
        +        "anyOf": [
        +          {
        +            "maxLength": 80,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "keyword": {
        +        "description": "Keyword phrase represented by this research snapshot.",
        +        "maxLength": 180,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "location": {
        +        "description": "Canonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language.",
        +        "pattern": "^[A-Z]{2}(\\/[^/@]{1,80}){0,2}(@[a-z]{2,3}(-[a-z0-9]{2,8})?)?$",
        +        "type": "string"
        +      },
        +      "search_volume": {
        +        "anyOf": [
        +          {
        +            "maximum": 9007199254740991,
        +            "minimum": 0,
        +            "type": "integer"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "source_seed": {
        +        "anyOf": [
        +          {
        +            "description": "Keyword phrase to save without starting rank tracking.",
        +            "maxLength": 180,
        +            "minLength": 1,
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ]
        +      },
        +      "variant_count": {
        +        "maximum": 9007199254740991,
        +        "minimum": 0,
        +        "type": "integer"
        +      }
        +    },
        +    "required": [
        +      "keyword"
        +    ],
        +    "type": "object"
        +  }
        +]
    • Changedcreate_team_invite1 field changed
      • changedInput schema / properties / email / pattern
        Previous value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"New value: +"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    • Changeddisable_sitemap_monitor2 fields changed
      • changedInput schema / properties / monitor_id / description
        Previous value: -"Identifier of the bisibility project to operate on; list_projects returns valid project ids."New value: +"Identifier of the sitemap monitor to update, as returned by list_sitemap_monitors. Optional: a project has one monitor whose id equals the project id, so it defaults to project_id."
      • changedInput schema / required
        Previous value: -[
        -  "monitor_id",
        -  "project_id"
        -]New value: +[
        +  "project_id"
        +]
    • Changedenable_sitemap_monitor2 fields changed
      • changedInput schema / properties / monitor_id / description
        Previous value: -"Identifier of the bisibility project to operate on; list_projects returns valid project ids."New value: +"Identifier of the sitemap monitor to update, as returned by list_sitemap_monitors. Optional: a project has one monitor whose id equals the project id, so it defaults to project_id."
      • changedInput schema / required
        Previous value: -[
        -  "monitor_id",
        -  "project_id"
        -]New value: +[
        +  "project_id"
        +]
    • Addedestimate_backlinks_cost
    • Addedestimate_domain_overview_cost
    • Addedestimate_keyword_research_cost
    • Addedexport_ai_tracking_evidence
    • Addedexport_local_monitor_run
    • Changedexport_rank_history9 fields changed
      • addedInput schema / properties / aggregation
        Added value: +{
        +  "const": "none",
        +  "description": "Version 2 exports raw records without aggregation.",
        +  "type": "string"
        +}
      • addedInput schema / properties / basis
        Added value: +{
        +  "description": "Timestamp selecting version 2 records. Attempts require recorded_at.",
        +  "enum": [
        +    "observed_at",
        +    "recorded_at"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / cursor / description
        Added value: +"Opaque continuation from this export; preserve all selected options."
      • changedInput schema / properties / cursor / maxLength
        Previous value: -512New value: +8192
      • addedInput schema / properties / from
        Added value: +{
        +  "description": "Inclusive version 2 window start, supplied together with to.",
        +  "format": "date-time",
        +  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +  "type": "string"
        +}
      • changedInput schema / properties / keyword_ids / description
        Previous value: -"Tracked keyword ids to include in the export."New value: +"Tracked keyword public IDs to include in the export."
      • addedInput schema / properties / stream
        Added value: +{
        +  "description": "Version 2 normalized observations or logical checks plus retained run/item outcomes; this never launches a check.",
        +  "enum": [
        +    "observations",
        +    "attempts"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / to
        Added value: +{
        +  "description": "Inclusive version 2 window end, supplied together with from.",
        +  "format": "date-time",
        +  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$",
        +  "type": "string"
        +}
      • addedInput schema / properties / version
        Added value: +{
        +  "description": "1 retains legacy rows; 2 returns frozen report records and quality metadata.",
        +  "enum": [
        +    "1",
        +    "2"
        +  ],
        +  "type": "string"
        +}
    • Addedget_agent_report
    • Addedget_ai_research_catalog
    • Addedget_ai_tracking_history
    • Addedget_ai_tracking_run
    • Addedget_ai_tracking_trends
    • Changedget_cost_estimate4 fields changed
      • addedInput schema / properties / cron_expression
        Added value: +{
        +  "description": "Cron expression for custom_cron; missing or invalid values leave monthly estimates unknown.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / depth
        Added value: +{
        +  "description": "Organic result depth. Defaults to Top 100.",
        +  "enum": [
        +    10,
        +    20,
        +    50,
        +    100
        +  ],
        +  "type": "integer"
        +}
      • changedInput schema / properties / frequency / enum
        Previous value: -[
        -  "daily",
        -  "weekly",
        -  "monthly"
        -]New value: +[
        +  "daily",
        +  "weekly",
        +  "monthly",
        +  "manual",
        +  "paused",
        +  "custom_cron"
        +]
      • changedInput schema / properties / locations / description
        Previous value: -"Location count per keyword. Defaults to 1."New value: +"Market count per keyword; each market combines a location and language. Defaults to 1."
    • Addedget_local_monitor_run_results
    • Addedget_project_context
    • Addedget_rank_check_run
    • Addedget_session_profile
    • Addedget_site_audit
    • Addedlist_agent_reports
    • Addedlist_ai_tracking_prompts
    • Addedlist_ai_tracking_runs
    • Addedlist_ai_tracking_samples
    • Addedlist_ai_tracking_schedules
    • Addedlist_ai_tracking_topics
    • Addedlist_local_monitor_point_history
    • Addedlist_local_monitor_point_listings
    • Addedlist_local_monitor_runs
    • Addedlist_rank_check_runs
    • Changedlist_ranked_keyword_suggestions1 field changed
      • addedInput schema / properties / max_cost_cents
        Added value: +{
        +  "description": "Server-enforced maximum provider cost for a cache miss, in cents.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Addedlist_site_audits
    • Addedload_domain_overview_history
    • Addedload_domain_overview_keywords
    • Addedload_domain_overview_pages
    • Changedload_more_backlink_rows2 fields changed
      • addedInput schema / properties / snapshot_ref
        Added value: +{
        +  "description": "Exact opaque snapshot_ref from the latest successful analysis or append response. Pass it unchanged; each append returns a replacement reference.",
        +  "maxLength": 32768,
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "project_id",
        -  "target"
        -]New value: +[
        +  "project_id",
        +  "snapshot_ref",
        +  "target"
        +]
    • Addedpreview_ai_tracking_run
    • Addedpreview_project_defaults
    • Addedretry_ai_tracking_run
    • Changedrun_rank_check1 field changed
      • addedInput schema / properties / max_cost_cents
        Added value: +{
        +  "description": "Server-enforced maximum for the preflight cost estimate of this check, in cents.",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
    • Addedrun_site_audit
    • Changedset_primary_provider1 field changed
      • addedInput schema / properties / primary / description
        Added value: +"Deprecated compatibility alias: true promotes priority 0; false is a no-op."
    • Addedsuggest_ai_tracking_prompts
    • Addedupdate_ai_tracking_prompt
    • Addedupdate_ai_tracking_schedule
    • Addedupdate_ai_tracking_topic
    • Changedupdate_keyword2 fields changed
      • addedInput schema / properties / location_key / description
        Added value: +"Canonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language."
      • changedInput schema / properties / location_key / pattern
        Previous value: -"^[A-Z]{2}(\\/[^/]{1,80}){0,2}$"New value: +"^[A-Z]{2}(\\/[^/@]{1,80}){0,2}(@[a-z]{2,3}(-[a-z0-9]{2,8})?)?$"
    • Addedupdate_project_context
    • Changedupdate_project_defaults5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / location_key / description
        Added value: +"Canonical country, region, or city key. Append @language for a non-default language pair; an unqualified key uses the country's default language."
      • changedInput schema / properties / location_key / pattern
        Previous value: -"^[A-Z]{2}(\\/[^/]{1,80}){0,2}$"New value: +"^[A-Z]{2}(\\/[^/@]{1,80}){0,2}(@[a-z]{2,3}(-[a-z0-9]{2,8})?)?$"
      • addedInput schema / properties / review
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "confirmed": {
        +      "const": true,
        +      "description": "True only after the caller explicitly approves the displayed draft and impact.",
        +      "type": "boolean"
        +    },
        +    "expected_revision": {
        +      "description": "Opaque decimal revision string from preview; never convert to a number.",
        +      "pattern": "^(0|[1-9][0-9]*)$",
        +      "type": "string"
        +    },
        +    "expected_source_hash": {
        +      "description": "Exact source hash returned by the reviewed preview.",
        +      "pattern": "^[a-f0-9]{64}$",
        +      "type": "string"
        +    },
        +    "idempotency_key": {
        +      "description": "Stable command key; reuse with the exact body after a lost response.",
        +      "maxLength": 128,
        +      "minLength": 8,
        +      "type": "string"
        +    },
        +    "preview_token": {
        +      "description": "Unmodified issuer-bound preview token.",
        +      "maxLength": 8192,
        +      "minLength": 1,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "expected_source_hash",
        +    "expected_revision",
        +    "preview_token",
        +    "idempotency_key",
        +    "confirmed"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / serp_depth
        Added value: +{
        +  "description": "Default number of SERP results to scan per rank check (10, 20, 50, or 100). Omitted keeps the stored depth.",
        +  "enum": [
        +    10,
        +    20,
        +    50,
        +    100
        +  ],
        +  "type": "integer"
        +}
    • Changedupdate_provider_settings1 field changed
      • addedInput schema / properties / primary / description
        Added value: +"Deprecated compatibility alias: true promotes priority 0; false is a no-op."
  2. 87 tool updatesv0.6.1
    • First observedadd_competitor
    • First observedadd_keywords
    • First observedanalyze_backlinks
    • First observedbulk_update_keywords
    • First observedconnect_provider
    • First observedcreate_alert_rule
    • First observedcreate_api_key
    • First observedcreate_personal_token
    • First observedcreate_project
    • First observedcreate_project_api_key
    • First observedcreate_saved_keywords
    • First observedcreate_saved_view
    • First observedcreate_signal
    • First observedcreate_team_invite
    • First observedcreate_webhook
    • First observeddelete_alert_rule
    • First observeddelete_keyword
    • First observeddelete_project
    • First observeddelete_saved_keyword
    • First observeddelete_saved_view
    • First observeddelete_webhook
    • First observeddisable_sitemap_monitor
    • First observeddisconnect_provider
    • First observedenable_sitemap_monitor
    • First observedexport_rank_history
    • First observedget_capabilities
    • First observedget_cloud_import_compatibility
    • First observedget_cost_estimate
    • First observedget_health
    • First observedget_keyword
    • First observedget_keyword_metrics
    • First observedget_me
    • First observedget_notification_preferences
    • First observedget_project
    • First observedget_project_defaults
    • First observedget_provider_rates
    • First observedget_rank_check_result
    • First observedget_rank_history
    • First observedlist_alert_rules
    • First observedlist_api_keys
    • First observedlist_competitors
    • First observedlist_keywords
    • First observedlist_migration_tokens
    • First observedlist_personal_tokens
    • First observedlist_project_api_keys
    • First observedlist_projects
    • First observedlist_providers
    • First observedlist_ranked_keyword_suggestions
    • First observedlist_saved_keywords
    • First observedlist_saved_views
    • First observedlist_search_performance_query_stats
    • First observedlist_signals
    • First observedlist_sitemap_monitors
    • First observedlist_team_invites
    • First observedlist_team_members
    • First observedlist_traffic_snapshots
    • First observedlist_triggered_alerts
    • First observedlist_webhooks
    • First observedload_more_backlink_rows
    • First observedmark_project_alerts_read
    • First observedmint_migration_token
    • First observedmute_triggered_alert
    • First observedremove_competitor
    • First observedremove_team_member
    • First observedresearch_keywords
    • First observedresend_team_invite
    • First observedrevoke_api_key
    • First observedrevoke_migration_token
    • First observedrevoke_personal_token
    • First observedrevoke_team_invite
    • First observedrun_rank_check
    • First observedsearch_locations
    • First observedset_keyword_target_url
    • First observedset_primary_provider
    • First observedset_provider_enabled
    • First observedset_provider_priority
    • First observedsync_project_traffic
    • First observedtest_provider_connection
    • First observedupdate_alert_rule
    • First observedupdate_keyword
    • First observedupdate_me
    • First observedupdate_notification_preferences
    • First observedupdate_project
    • First observedupdate_project_defaults
    • First observedupdate_provider_settings
    • First observedupdate_team_member_role
    • First observedupdate_webhook

TDQS

C2.9/5.0

Scored across 140 tools

Disambiguation2/5

Many tools, especially the AI tracking block, share identical boilerplate descriptions (e.g., list_ai_tracking_schedules/topics/prompts/runs/samples all say 'Read project-scoped AI tracking evidence...', while create/update/archive variants all say 'Manage project-scoped AI tracking...'), forcing agents to rely on names alone. Overlaps also appear among provider settings (update_provider_settings vs set_provider_enabled/set_provider_priority vs deprecated set_primary_provider) and saved views/keywords.

Naming Consistency4/5

Tool names are predominantly consistent snake_case verb_noun (list_keywords, create_project, update_webhook, delete_saved_view). A few deviations exist, such as ai_tracking_suggestions_preview/generate (noun-first) and mixed singular/plural resource forms (delete_keyword vs add_keywords), but the pattern remains predictable overall.

Tool Count1/5

With 140 tools, the surface far exceeds the typical 3–15 well-scoped range and crosses the 50+ extreme threshold. Even for a broad SEO/AI visibility platform, this volume overwhelms an agent and makes coherent selection difficult.

Completeness4/5

The surface covers a wide lifecycle: projects, keywords, rank checks, backlinks, domain overview, AI tracking, site audits, alerts, webhooks, team, tokens, providers, signals, and traffic. Minor gaps remain (e.g., no update/get for saved views or saved keywords, no get_competitor or get_alert_rule), but agents can work around them via list operations.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    C
    quality
    D
    maintenance
    An MCP server that integrates with the Haloscan SEO API to provide tools for keyword research, SERP analysis, and domain performance tracking. It enables users to perform comprehensive SEO tasks, including competitor analysis and visibility monitoring, within MCP-compatible clients.
    33
    97 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An agent-friendly MCP server for the GeoRanker High-Volume API, enabling SEO rank tracking and keyword management through natural language.
    15 npm
    1
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    MCP server & CLI for keyword research, domain analytics, backlinks, traffic analysis, and competitive intelligence using Semrush API data.
    77
    44 npm
    39
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A standalone MCP server for Ubersuggest that runs entirely locally using SQLite and Playwright, providing tools to query subscription status, projects, domain overview, keyword research, site audit, and more.
    -