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

  • get_search_performance_totals

  • 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.

Search performance totals

MCP v0.20.0 adds the read-only get_search_performance_totals tool in the analytics toolset. It reads complete web search totals across all queries, pages, countries and devices for inclusive Pacific start_date and end_date values (at most 366 days). It requires project_id and an existing Search Console connection. Set the string compare_previous to "true" to include the preceding equal-length period.

The response preserves clicks, impressions, CTR, impression-weighted position, actual data dates, source and freshness for each period. Complete finalized aggregate coverage serves stored data; otherwise one bounded live date series supplies both periods. Null finalized_through means unknown finality. Empty covered periods return zero metrics and null data dates. Reads never shift the requested dates or start an import. Hosted API support is required.

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. Available modes are returned in settings; all modes, including available_quota, are available on Cloud and self-host.

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.

Inputs: drafts (required), project_id (required).

add_competitorAdd competitorBInspect

Add a tracked competitor domain to a project.

Inputs: domain (required), project_id (required), label, idempotency_key.

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.

Inputs: keywords (required), project_id (required), city, tags, +9 more.

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.

Inputs: consent (required), preview (required), project_id (required), idempotency_key (required).

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.

Inputs: project_id (required), configuration (required), input_snapshot (required), credential_connection_id.

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.

Inputs: brand (required), domain (required), project_id (required), max_cost_cents (required), +8 more.

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.

Inputs: target (required), project_id (required), language_code (required), location_code (required), +6 more.

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.

Inputs: prompt_id (required), project_id (required).

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.

Inputs: project_id (required), schedule_id (required).

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.

Inputs: topic_id (required), project_id (required).

bulk_update_keywordsBulk update keywordsB
Destructive
Inspect

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

Inputs: operation (required), keyword_ids (required), tags, schedule, +4 more.

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.

Inputs: run_id (required), project_id (required).

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.

Inputs: brand (required), domain (required), prompt (required), project_id (required), +13 more.

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.

Inputs: project_id (required), provider_id (required), login, secret, +6 more.

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.

Inputs: body (required), kind (required), title (required), project_id (required), +2 more.

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.

Inputs: text (required), project_id (required), label, paused, +4 more.

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.

Inputs: consent (required), deadline (required), project_id (required), prompt_ids (required), +8 more.

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.

Inputs: cron (required), name (required), timezone (required), project_id (required), +4 more.

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.

Inputs: name (required), project_id (required), paused, description.

create_alert_ruleCreate alert ruleCInspect

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

Inputs: name (required), project_id (required), condition_type (required), top_n, +12 more.

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.

Inputs: name (required), scope, project_id, expires_in_days, +1 more.

create_personal_tokenCreate personal tokenAInspect

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

Inputs: name (required), scope, expires_in_days, idempotency_key.

create_projectCreate projectCInspect

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

Inputs: name (required), domain (required), tracking_scope, idempotency_key.

create_project_api_keyCreate project API keyAInspect

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

Inputs: name (required), project_id (required), idempotency_key.

create_saved_keywordsCreate saved keywordsAInspect

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

Inputs: keywords (required), project_id (required), idempotency_key.

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.

Inputs: name (required), config (required), project_id (required), surface, +1 more.

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.

Inputs: type (required), source (required), url, payload, +5 more.

create_team_inviteCreate team inviteCInspect

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

Inputs: role (required), email (required), project_id (required), idempotency_key.

create_webhookCreate webhookBInspect

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

Inputs: url (required), project_id (required), hmac_secret (required), enabled, +2 more.

delete_alert_ruleDelete alert ruleA
Destructive
Inspect

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

Inputs: rule_id (required), project_id, idempotency_key.

delete_keywordDelete keywordA
Destructive
Inspect

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

Inputs: keyword_id (required), project_id, idempotency_key.

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.

Inputs: project_id (required), idempotency_key.

delete_saved_keywordDelete saved keywordA
Destructive
Inspect

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

Inputs: project_id (required), saved_keyword_id (required), idempotency_key.

delete_saved_viewDelete saved viewA
Destructive
Inspect

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

Inputs: view_id (required), project_id (required), idempotency_key.

delete_webhookDelete webhookB
Destructive
Inspect

Delete a webhook endpoint. Requires admin access.

Inputs: project_id (required), webhook_id (required), idempotency_key.

disable_sitemap_monitorDisable sitemap monitorBInspect

Disable the project sitemap monitor while retaining its existing snapshots.

Inputs: project_id (required), monitor_id, idempotency_key.

disconnect_providerDisconnect providerA
Destructive
Inspect

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

Inputs: project_id (required), provider_id (required), idempotency_key.

enable_sitemap_monitorEnable sitemap monitorAInspect

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

Inputs: project_id (required), monitor_id, idempotency_key.

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.

Inputs: target (required), project_id (required), language_code (required), location_code (required), +4 more.

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.

Inputs: seed (required), project_id (required), mode, result_limit, +2 more.

export_ai_tracking_evidenceExport ai tracking evidenceC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: run_id (required), project_id (required), limit, cursor, +1 more.

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.

Inputs: run_id (required), monitor_id (required), project_id (required), as_of, +1 more.

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.

Inputs: project_id (required), to, from, basis, +8 more.

get_agent_reportGet agent reportA
Read-only
Inspect

Read one saved analysis. A report ID never grants access to another project.

Inputs: report_id (required), project_id (required).

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.

Inputs: project_id (required).

get_ai_tracking_historyGet ai tracking historyC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: project_id (required), limit, cursor.

get_ai_tracking_runGet ai tracking runB
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: run_id (required), project_id (required).

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)

Inputs: no named parameters.

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.

Inputs: no named parameters.

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.

Inputs: keywords (required), plan, depth, option, +5 more.

get_healthGet API healthB
Read-only
Inspect

Check bisibility API health and configured SERP providers.

Inputs: no named parameters.

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.

Inputs: keyword_id (required), project_id.

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.

Inputs: keywords (required), project_id (required), fresh, connection_id, +3 more.

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.

Inputs: run_id (required), monitor_id (required), project_id (required), as_of.

get_meGet authenticated userA
Read-only
Inspect

Get the authenticated user and all project memberships. Requires a personal access token.

Inputs: no named parameters.

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.

Inputs: project_id (required).

get_projectGet projectA
Read-only
Inspect

Get one bisibility project by project id.

Inputs: project_id (required).

get_project_contextGet project contextA
Read-only
Inspect

Read the saved business, audience, products, goals and agent rules for this project.

Inputs: project_id (required).

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.

Inputs: project_id (required).

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.

Inputs: no named parameters.

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.

Inputs: check_id (required), project_id.

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.

Inputs: run_id (required), project_id (required).

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.

Inputs: keyword_id (required), limit, since, until, +3 more.

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.

Inputs: no named parameters.

get_site_auditGet site auditB
Read-only
Inspect

Read saved page signals and issues for one project crawl.

Inputs: report_id (required), project_id (required).

list_agent_reportsList agent reportsB
Read-only
Inspect

Read saved project analyses. Results are restricted to the project and its members.

Inputs: project_id (required), kind, limit, cursor.

list_ai_tracking_promptsList ai tracking promptsC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: project_id (required), limit, cursor.

list_ai_tracking_runsList ai tracking runsC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: project_id (required), limit, cursor.

list_ai_tracking_samplesList ai tracking samplesA
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: run_id (required), project_id (required), limit, cursor.

list_ai_tracking_schedulesList ai tracking schedulesC
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: project_id (required), limit, cursor.

list_ai_tracking_topicsList ai tracking topicsB
Read-only
Inspect

Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.

Inputs: project_id (required), limit, cursor.

list_alert_rulesList alert rulesB
Read-only
Inspect

Alert rules: list the per-project conditions that decide when a notification fires.

Inputs: project_id (required), limit, cursor.

list_api_keysList API keysA
Read-only
Inspect

List API keys for the authenticated project, including revoked keys.

Inputs: limit, cursor, project_id.

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.

Inputs: project_id (required), limit, cursor.

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.

Inputs: project_id (required), tag, sort, limit, +8 more.

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.

Inputs: run_id (required), target_id (required), monitor_id (required), project_id (required), +4 more.

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.

Inputs: run_id (required), target_id (required), monitor_id (required), project_id (required), +1 more.

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.

Inputs: monitor_id (required), project_id (required), to, from, +2 more.

list_migration_tokensList migration tokensB
Read-only
Inspect

List active migration tokens for a project.

Inputs: project_id (required), limit, cursor.

list_personal_tokensList personal tokensB
Read-only
Inspect

List the user's personal access tokens. Requires an admin PAT.

Inputs: no named parameters.

list_project_api_keysList project API keysB
Read-only
Inspect

List API keys scoped to a specific project, including revoked keys.

Inputs: project_id (required), limit, cursor.

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.

Inputs: no named parameters.

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.

Inputs: project_id (required), limit, cursor.

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.

Inputs: project_id (required), limit, cursor, status, +1 more.

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.

Inputs: project_id (required), fresh, limit, offset, +2 more.

list_saved_keywordsList saved keywordsA
Read-only
Inspect

List keyword ideas saved without rank tracking for a project.

Inputs: project_id (required), limit, cursor.

list_saved_viewsList saved viewsB
Read-only
Inspect

List saved keyword views for a project.

Inputs: project_id (required), limit, cursor, surface.

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.

Inputs: end_date (required), project_id (required), start_date (required), limit, +2 more.

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.

Inputs: project_id (required), to, from, type, +3 more.

list_site_auditsList site auditsB
Read-only
Inspect

Read the saved bounded crawl history for this project.

Inputs: project_id (required).

list_sitemap_monitorsList sitemap monitorsA
Read-only
Inspect

List the project sitemap monitor, including its status and latest snapshot summary.

Inputs: project_id (required).

list_team_invitesList team invitesA
Read-only
Inspect

List pending team invites for a project.

Inputs: project_id (required), limit, cursor.

list_team_membersList team membersC
Read-only
Inspect

List team members for a project.

Inputs: project_id (required), limit, cursor.

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.

Inputs: end_date (required), project_id (required), start_date (required), limit, +2 more.

list_triggered_alertsList triggered alertsC
Read-only
Inspect

List triggered alerts for a project.

Inputs: project_id (required), limit, cursor.

list_webhooksList webhooksB
Read-only
Inspect

Webhook endpoints: list the per-project HTTP URLs that notifications and events are delivered to.

Inputs: project_id (required), limit, cursor.

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.

Inputs: target (required), project_id (required), language_code (required), location_code (required), +3 more.

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.

Inputs: limit (required), offset (required), target (required), project_id (required), +5 more.

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.

Inputs: limit (required), offset (required), target (required), project_id (required), +5 more.

mark_project_alerts_readMark project alerts readAInspect

Mark every firing alert in the project as read for the whole project team.

Inputs: project_id (required), idempotency_key.

mint_migration_tokenMint migration tokenBInspect

Mint a migration token for a project.

Inputs: project_id (required), scope, idempotency_key.

mute_triggered_alertMute triggered alertAInspect

Mute one firing alert for 24 hours. This changes shared alert state for the whole project team.

Inputs: alert_id (required), project_id (required), idempotency_key.

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.

Inputs: project_id (required), prompt_ids (required), configurations (required), credential_connection_id.

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.

Inputs: frequency (required), project_id (required), city, device, +8 more.

remove_competitorRemove competitorC
Destructive
Inspect

Remove a tracked competitor from a project.

Inputs: project_id (required), competitor_id (required), idempotency_key.

remove_team_memberRemove team memberA
Destructive
Inspect

Permanently remove a non-owner project member. Confirm the user's intent before calling this tool.

Inputs: member_id (required), project_id (required), idempotency_key.

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.

Inputs: seed (required), project_id (required), mode, fresh, +5 more.

resend_team_inviteResend team inviteBInspect

Resend a pending team invitation and replace its expiration and token.

Inputs: invite_id (required), project_id (required), idempotency_key.

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.

Inputs: run_id (required), consent (required), deadline (required), project_id (required), +9 more.

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.

Inputs: key_id (required), project_id, idempotency_key.

revoke_migration_tokenRevoke migration tokenB
Destructive
Inspect

Revoke a project migration token.

Inputs: token_id (required), project_id (required), idempotency_key.

revoke_personal_tokenRevoke personal tokenB
Destructive
Inspect

Revoke a personal token by id, or pass "current" to revoke the configured token.

Inputs: token_id (required), idempotency_key.

revoke_team_inviteRevoke team inviteB
Destructive
Inspect

Revoke a pending project team invite.

Inputs: invite_id (required), project_id (required), idempotency_key.

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.

Inputs: keyword_id (required), async, project_id, provider_id, +2 more.

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.

Inputs: project_id (required), max_pages, idempotency_key.

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.

Inputs: q (required), limit, country.

set_keyword_target_urlSet keyword target URLBInspect

Set or clear the target URL used when evaluating a keyword ranking.

Inputs: keyword_id (required), target_url (required), project_id, idempotency_key.

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.

Inputs: project_id (required), provider_id (required), primary, idempotency_key.

set_provider_enabledSet provider enabledBInspect

Enable or disable a provider for a project.

Inputs: enabled (required), project_id (required), provider_id (required), idempotency_key.

set_provider_prioritySet provider priorityBInspect

Set provider priority for a project. Lower numbers are preferred first.

Inputs: priority (required), project_id (required), provider_id (required), idempotency_key.

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.

Inputs: project_id (required).

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.

Inputs: project_id (required), idempotency_key.

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.

Inputs: project_id (required), provider_id (required), login, secret, +1 more.

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.

Inputs: prompt_id (required), project_id (required), text, label, +5 more.

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.

Inputs: project_id (required), schedule_id (required), cron, name, +5 more.

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.

Inputs: topic_id (required), project_id (required), name, paused, +1 more.

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.

Inputs: name (required), rule_id (required), condition_type (required), top_n, +13 more.

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.

Inputs: keyword_id (required), city, tags, topic, +11 more.

update_meUpdate authenticated userAInspect

Update the authenticated user's display name. Requires a write PAT.

Inputs: name (required), idempotency_key.

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.

Inputs: project_id (required), alert_email, alert_slack, check_email, +8 more.

update_projectUpdate projectBInspect

Update a project's name or domain. At least one of name or domain is required.

Inputs: project_id (required), name, domain, idempotency_key.

update_project_contextUpdate project contextAInspect

Replace all five context fields. Requires project write scope and a member role.

Inputs: goals (required), audience (required), business (required), products (required), +3 more.

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.

Inputs: frequency (required), project_id (required), city, device, +9 more.

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.

Inputs: project_id (required), provider_id (required), enabled, primary, +2 more.

update_team_member_roleUpdate team member roleAInspect

Change a non-owner project member role to admin, member, or viewer. Ownership transfer remains UI-only.

Inputs: role (required), member_id (required), project_id (required), idempotency_key.

update_webhookUpdate webhookBInspect

Update a webhook endpoint or rotate its write-only HMAC secret.

Inputs: project_id (required), webhook_id (required), url, enabled, +3 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    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 recent community 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
      113 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.
      35 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
      73 npm
      40
      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.
      -