Bisibility
One-line summary: This server exposes the bisibility SEO platform to AI agents over stdio, covering project/keyword management, rank tracking, research, analytics, alerts, team, and admin operations.
Discovery (no credential needed): API health, capabilities, cloud-import compatibility, provider rate cards, and monthly rank-check cost estimates.
Projects: list, create, get, update, and destructively delete projects; read and update project rank-check/schedule defaults and SERP market.
Keywords: list with filters/pagination, get, add, update, set target URL, delete, and bulk operations (tags, frequency, target URL, delete).
Location & research: search canonical locations (
location_key); paid provider lookups for ranked keyword suggestions, keyword research, and keyword metrics — with freeestimate_onlydry runs andmax_cost_centsguards.Backlinks: analyze a domain/page, estimate cost first, and extend snapshots with
load_more_backlink_rows.Rank tracking: run a provider-backed rank check (sync or async), fetch single check results, list rank history, and export project history (JSON, cursor-paginated); toggle sitemap monitors.
Analytics: list traffic snapshots, fetch live search-performance query stats, and sync project traffic from connected providers (GA4, GSC, Plausible).
Signals: ingest external events (deploy/CMS/API) to explain ranking movements, and list them with source/type/date filters.
Alerts & notifications: manage alert rules, list/mute triggered alerts, mark project alerts read, and read or update notification channel preferences.
Team: list members and invites, invite users, resend/revoke invites, change roles, and remove members.
Administration: manage providers (connect, test, enable, prioritize, disconnect), API keys and project API keys, personal tokens, webhooks, and migration tokens.
Ongoing-call keys: idempotency keys forwarded on mutating tools; API content is untrusted input reaching the model.
Note: the readme documents a larger surface (e.g. AI-visibility, AI-tracking, Domain Overview, site audits, agent reports, project context, local-monitor reads) that is not present in this schema snapshot.
Provides tools for connecting to and querying Google Analytics 4 and Google Search Console, including traffic snapshots, search query statistics, and synchronization of analytics data through the bisibility platform.
This server has a remotely hosted endpoint. Open its connector listing for connection details, authentication requirements, and setup instructions:
@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
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/mcpFor local development, install and build from this package directory:
From this package directory:
npm install
npm run buildThe 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:mcpbThe 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.jsWhen installed as a package, the bin is:
bisibility-mcpConnect
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.jsThe 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_profileget_healthget_capabilitiesget_cloud_import_compatibilityget_provider_ratesget_cost_estimateget_meupdate_melist_projectscreate_projectget_projectsearch_locationsupdate_projectdelete_projectget_project_defaultspreview_project_defaultsupdate_project_defaultslist_keywordslist_ranked_keyword_suggestionsresearch_keywordsestimate_keyword_research_costanalyze_backlinksestimate_backlinks_costload_more_backlink_rowsanalyze_domain_overviewestimate_domain_overview_costload_domain_overview_historyload_domain_overview_keywordsload_domain_overview_pagesget_keyword_metricsadd_keywordsget_keywordupdate_keywordset_keyword_target_urldelete_keywordbulk_update_keywordsrun_rank_checkget_rank_historyexport_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_runsget_local_monitor_run_resultslist_local_monitor_point_listingslist_local_monitor_point_historyexport_local_monitor_runget_page_indexing_reportlist_page_indexing_urlsget_page_indexing_settingsupdate_page_indexing_settingslist_search_index_sitemapsget_search_index_sitemapinspect_search_index_urlslist_sitemap_monitorsenable_sitemap_monitordisable_sitemap_monitorget_rank_check_resultcreate_signallist_signalslist_traffic_snapshotslist_search_performance_query_statsget_search_performance_totalssync_project_trafficlist_api_keyscreate_api_keyrevoke_api_keylist_project_api_keyscreate_project_api_keylist_personal_tokenscreate_personal_tokenrevoke_personal_tokenlist_webhookscreate_webhookupdate_webhookdelete_webhooklist_alert_rulescreate_alert_ruleupdate_alert_ruledelete_alert_rulelist_triggered_alertsmute_triggered_alertmark_project_alerts_readlist_team_memberslist_team_invitescreate_team_inviterevoke_team_inviteresend_team_inviteupdate_team_member_roleremove_team_memberlist_providersconnect_provider(primary: trueis a legacy alias for priority0)test_provider_connectionupdate_provider_settingsset_provider_enabledset_provider_priorityset_primary_provider(legacy: true promotes priority0; false is a no-op)disconnect_providerlist_saved_keywordscreate_saved_keywordsdelete_saved_keywordlist_saved_viewscreate_saved_viewdelete_saved_viewlist_competitorsadd_competitorremove_competitorget_notification_preferencesupdate_notification_preferenceslist_migration_tokensmint_migration_tokenrevoke_migration_tokenget_project_contextupdate_project_contextlist_agent_reportscreate_agent_reportget_agent_reportanalyze_brand_visibilityget_ai_research_catalogcompare_ai_promptsrun_site_auditlist_site_auditsget_site_auditlist_prompt_tracker_topicscreate_prompt_tracker_topicupdate_prompt_tracker_topicarchive_prompt_tracker_topiclist_prompt_tracker_promptscreate_prompt_tracker_promptupdate_prompt_tracker_promptarchive_prompt_tracker_promptlist_prompt_tracker_schedulescreate_prompt_tracker_scheduleupdate_prompt_tracker_schedulearchive_prompt_tracker_schedulepreview_prompt_tracker_runcreate_prompt_tracker_runlist_prompt_tracker_runsget_prompt_tracker_runlist_prompt_tracker_samplescancel_prompt_tracker_runretry_prompt_tracker_runget_prompt_tracker_historyget_prompt_tracker_trendsexport_prompt_tracker_evidencesuggest_prompt_research_promptsaccept_prompt_research_suggestionsprompt_research_suggestions_previewprompt_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 buildLicense
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 toolsaccept_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 generationARead-onlyInspect
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_backlinksAnalyze backlinksAInspect
Requires API write scope because cache misses spend the project's own DataForSEO budget. Successful snapshots contain summary metrics and per-link rows with new or lost status. Optional 12-month history may be unavailable: history_unavailable marks a history failure with confirmed cost while summary and links remain available. With unknown accounting, the response remains failed (isError) and may retain a completed summary as current-response evidence, with cost_cents null and rows_status not_requested. This evidence is not a cached snapshot or a settled total and does not survive reload. Successful snapshots are cached for 24 hours. Call with estimate_only first for a free dry run, then use max_cost_cents as a best-effort request guard. Compute aggregate views from rows and treat them as "within fetched rows" only.
Inputs: target (required), project_id (required), mode, fresh, +5 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 promptCDestructiveInspect
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 scheduleCDestructiveInspect
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 topicCDestructiveInspect
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 keywordsBDestructiveInspect
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 ruleADestructiveInspect
Delete an alert rule by rule id. Use only after the user confirms deletion.
Inputs: rule_id (required), project_id, idempotency_key.
delete_keywordDelete keywordADestructiveInspect
Delete one keyword by keyword id. Use only after the user confirms deletion.
Inputs: keyword_id (required), project_id, idempotency_key.
delete_projectDelete projectADestructiveInspect
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 keywordADestructiveInspect
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 viewADestructiveInspect
Delete a project saved view. Use only after the user confirms deletion.
Inputs: view_id (required), project_id (required), idempotency_key.
delete_webhookDelete webhookBDestructiveInspect
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 providerADestructiveInspect
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_backlinks_costEstimate backlinks costARead-onlyInspect
Free. Returns the cost and eligibility of a backlinks analysis without calling a provider; the paid operation is analyze_backlinks.
Inputs: target (required), project_id (required), mode, result_limit, +3 more.
estimate_domain_overview_costEstimate domain overview costARead-onlyInspect
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 costARead-onlyInspect
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 evidenceCRead-onlyInspect
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 runARead-onlyInspect
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 historyARead-onlyInspect
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 reportARead-onlyInspect
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 catalogBRead-onlyInspect
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 historyCRead-onlyInspect
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 runBRead-onlyInspect
Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.
Inputs: run_id (required), project_id (required).
get_ai_tracking_trendsGet ai tracking trendsCRead-onlyInspect
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.
get_capabilitiesGet API capabilitiesARead-onlyInspect
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 compatibilityARead-onlyInspect
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 estimateARead-onlyInspect
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 healthBRead-onlyInspect
Check bisibility API health and configured SERP providers.
Inputs: no named parameters.
get_keywordGet keywordARead-onlyInspect
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 resultsBRead-onlyInspect
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 userARead-onlyInspect
Get the authenticated user and all project memberships. Requires a personal access token.
Inputs: no named parameters.
get_notification_preferencesGet notification preferencesARead-onlyInspect
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 projectARead-onlyInspect
Get one bisibility project by project id.
Inputs: project_id (required).
get_project_contextGet project contextARead-onlyInspect
Read the saved business, audience, products, goals and agent rules for this project.
Inputs: project_id (required).
get_project_defaultsGet project defaultsARead-onlyInspect
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 ratesARead-onlyInspect
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 resultARead-onlyInspect
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 runARead-onlyInspect
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 historyARead-onlyInspect
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 profileARead-onlyInspect
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 auditBRead-onlyInspect
Read saved page signals and issues for one project crawl.
Inputs: report_id (required), project_id (required).
list_agent_reportsList agent reportsBRead-onlyInspect
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 promptsCRead-onlyInspect
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 runsCRead-onlyInspect
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 samplesARead-onlyInspect
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 schedulesCRead-onlyInspect
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 topicsBRead-onlyInspect
Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty.
Inputs: project_id (required), limit, cursor.
list_alert_rulesList alert rulesBRead-onlyInspect
Alert rules: list the per-project conditions that decide when a notification fires.
Inputs: project_id (required), limit, cursor.
list_api_keysList API keysARead-onlyInspect
List API keys for the authenticated project, including revoked keys.
Inputs: limit, cursor, project_id.
list_competitorsList competitorsCRead-onlyInspect
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 keywordsARead-onlyInspect
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 historyCRead-onlyInspect
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 listingsCRead-onlyInspect
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 runsBRead-onlyInspect
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 tokensBRead-onlyInspect
List active migration tokens for a project.
Inputs: project_id (required), limit, cursor.
list_personal_tokensList personal tokensBRead-onlyInspect
List the user's personal access tokens. Requires an admin PAT.
Inputs: no named parameters.
list_project_api_keysList project API keysBRead-onlyInspect
List API keys scoped to a specific project, including revoked keys.
Inputs: project_id (required), limit, cursor.
list_projectsList projectsARead-onlyInspect
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 providersARead-onlyInspect
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 runsBRead-onlyInspect
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 keywordsARead-onlyInspect
List keyword ideas saved without rank tracking for a project.
Inputs: project_id (required), limit, cursor.
list_saved_viewsList saved viewsBRead-onlyInspect
List saved keyword views for a project.
Inputs: project_id (required), limit, cursor, surface.
list_search_performance_query_statsList search-performance query statsBRead-onlyInspect
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 signalsARead-onlyInspect
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 auditsBRead-onlyInspect
Read the saved bounded crawl history for this project.
Inputs: project_id (required).
list_sitemap_monitorsList sitemap monitorsARead-onlyInspect
List the project sitemap monitor, including its status and latest snapshot summary.
Inputs: project_id (required).
list_team_invitesList team invitesARead-onlyInspect
List pending team invites for a project.
Inputs: project_id (required), limit, cursor.
list_team_membersList team membersCRead-onlyInspect
List team members for a project.
Inputs: project_id (required), limit, cursor.
list_traffic_snapshotsList traffic snapshotsARead-onlyInspect
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 alertsCRead-onlyInspect
List triggered alerts for a project.
Inputs: project_id (required), limit, cursor.
list_webhooksList webhooksBRead-onlyInspect
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.
load_more_backlink_rowsLoad more backlink rowsAInspect
Requires API write scope. Extends the current unexpired backlinks snapshot at the per-100-row provider rate. Requires the exact snapshot_ref from the latest successful analysis or append response; use the replacement reference returned by each append. Returns 409 snapshot_expired when no current snapshot exists. Stale, mismatched or expired references return 409 before provider work; read or analyze the current snapshot before retrying. This tool cannot extend failed current-response summary evidence.
Inputs: target (required), project_id (required), snapshot_ref (required), limit, +2 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 runARead-onlyInspect
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 defaultsARead-onlyInspect
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 competitorCDestructiveInspect
Remove a tracked competitor from a project.
Inputs: project_id (required), competitor_id (required), idempotency_key.
remove_team_memberRemove team memberADestructiveInspect
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 keyADestructiveInspect
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 tokenBDestructiveInspect
Revoke a project migration token.
Inputs: token_id (required), project_id (required), idempotency_key.
revoke_personal_tokenRevoke personal tokenBDestructiveInspect
Revoke a personal token by id, or pass "current" to revoke the configured token.
Inputs: token_id (required), idempotency_key.
revoke_team_inviteRevoke team inviteBDestructiveInspect
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 locationsARead-onlyInspect
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 promptsBRead-onlyInspect
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
Scored across 140 tools
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.
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.
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.
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
Related MCP Connectors
SEO MCP server for keyword research, live SERPs, backlinks, site audits and AI visibility.
Unified 15-tool SEO, SERP, clean Markdown & GEO (LLM citation Share-of-Voice) MCP server.
SEO MCP server for keyword research, SERP analysis, audits, and Search Console workflows.
Open-source AI SEO over MCP: audits, ranks, keywords, backlinks + AI visibility (GEO).
Related MCP Servers
- AlicenseCqualityDmaintenanceAn 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.33113 npm1MIT
- AlicenseNot gradedqualityDmaintenanceAn agent-friendly MCP server for the GeoRanker High-Volume API, enabling SEO rank tracking and keyword management through natural language.35 npm1MIT
- AlicenseBqualityCmaintenanceMCP server & CLI for keyword research, domain analytics, backlinks, traffic analysis, and competitive intelligence using Semrush API data.7773 npm40MIT
- FlicenseNot gradedqualityDmaintenanceA 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.-