Bisibility
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| BISIBILITY_API_KEY | Yes | A Bisibility API key. Accepts a project key (bsb_key_live_...) or personal access token (bsb_pat_live_...). Required. | |
| BISIBILITY_BASE_URL | No | Optional. The API v1 base URL. Defaults to https://eu.bisibility.com/api/v1. For self-hosted installs, set to your API v1 root. | https://eu.bisibility.com/api/v1 |
| BISIBILITY_PROJECT_ID | No | Optional. Default project ID for project-implicit PAT tools. Must be public ID v3 format (e.g., prj_a1b2c3d4e5f6g7h8j9k0m2n3). | |
| BISIBILITY_MCP_TOOLSETS | No | Optional. Comma-separated allowlist of toolsets. Valid values: account, alerts, analytics, backlinks, checks, competitors, keywords, notifications, projects, providers, rank-history, saved-views, signals, sitemaps, system, team, tokens, webhooks. Unknown value prevents server start. When unset, all toolsets are registered. | |
| BISIBILITY_MCP_READ_ONLY | No | Optional. Set to '1', 'true', 'yes', or 'on' (case-insensitive) to disable write tools. When unset, write tools are registered. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_session_profileA | 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. |
| get_healthB | Check bisibility API health and configured SERP providers. |
| get_capabilitiesA | 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) |
| get_cloud_import_compatibilityA | 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. |
| get_provider_ratesA | 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. |
| get_cost_estimateA | 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. |
| get_meA | Get the authenticated user and all project memberships. Requires a personal access token. |
| update_meA | Update the authenticated user's display name. Requires a write PAT. |
| list_projectsA | List projects visible to the configured credential. Project keys return one project; personal access tokens return all project memberships. |
| create_projectC | Create a project. Requires a personal access token with write scope. |
| get_projectA | Get one bisibility project by project id. |
| search_locationsA | 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. |
| update_projectB | Update a project's name or domain. At least one of name or domain is required. |
| delete_projectA | Permanently delete a project and all of its keywords, rank history, and settings. This cannot be undone. Use only after the user confirms deletion. |
| get_project_defaultsA | 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. |
| preview_project_defaultsA | 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. |
| update_project_defaultsA | 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. |
| list_keywordsA | 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. |
| list_ranked_keyword_suggestionsB | 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. |
| research_keywordsA | 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. |
| estimate_keyword_research_costA | Free. Returns the cost and eligibility of keyword research without calling a provider; the paid operation is research_keywords. |
| analyze_backlinksA | 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. |
| estimate_backlinks_costA | Free. Returns the cost and eligibility of a backlinks analysis without calling a provider; the paid operation is analyze_backlinks. |
| load_more_backlink_rowsA | 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. |
| analyze_domain_overviewA | 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. |
| estimate_domain_overview_costA | Free. Returns the cost and eligibility of a Domain Overview analysis without calling a provider; the paid operation is analyze_domain_overview. |
| load_domain_overview_historyA | 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. |
| load_domain_overview_keywordsA | 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. |
| load_domain_overview_pagesA | 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. |
| get_keyword_metricsA | 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. |
| add_keywordsA | 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. |
| get_keywordA | 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. |
| update_keywordB | 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. |
| set_keyword_target_urlB | Set or clear the target URL used when evaluating a keyword ranking. |
| delete_keywordA | Delete one keyword by keyword id. Use only after the user confirms deletion. |
| bulk_update_keywordsB | Bulk mutate keywords by adding tags, removing tags, setting frequency, setting target URL, or deleting. |
| run_rank_checkA | 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. |
| get_rank_historyA | 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. |
| export_rank_historyA | 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. |
| list_local_monitor_runsB | Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes. |
| get_local_monitor_run_resultsB | Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes. |
| list_local_monitor_point_listingsC | Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes. |
| list_local_monitor_point_historyC | Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes. |
| export_local_monitor_runA | Read original retained Local evidence and honest quality/cost uncertainty. This never launches provider work, schedules, or accounting writes. |
| list_rank_check_runsB | Read retained execution states, including cancelled, blocked and deferred outcomes without observations. Does not launch checks, retry provider requests or change schedules. |
| get_rank_check_runA | Read retained execution states, including cancelled, blocked and deferred outcomes without observations. Does not launch checks, retry provider requests or change schedules. |
| list_sitemap_monitorsA | List the project sitemap monitor, including its status and latest snapshot summary. |
| enable_sitemap_monitorA | Enable the project sitemap monitor. The next scheduled worker sync fetches the sitemap; enabling does not fetch immediately. |
| disable_sitemap_monitorB | Disable the project sitemap monitor while retaining its existing snapshots. |
| get_rank_check_resultA | 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. |
| create_signalA | 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. |
| list_signalsA | 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. |
| list_traffic_snapshotsA | List stored page traffic snapshots collected from the project's own connected analytics accounts, filtered by date range and optional page paths. |
| list_search_performance_query_statsB | 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. |
| sync_project_trafficB | Synchronize traffic snapshots from the project's own connected analytics accounts now. Provider rate limits and connection authorization rules apply. |
| list_api_keysA | List API keys for the authenticated project, including revoked keys. |
| create_api_keyA | 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. |
| revoke_api_keyA | 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. |
| list_project_api_keysB | List API keys scoped to a specific project, including revoked keys. |
| create_project_api_keyA | Create a project-scoped API key for CI or automation. The raw key is returned once. |
| list_personal_tokensB | List the user's personal access tokens. Requires an admin PAT. |
| create_personal_tokenA | Create a personal access token. The raw account-wide token is returned once. Requires an admin PAT. |
| revoke_personal_tokenB | Revoke a personal token by id, or pass "current" to revoke the configured token. |
| list_webhooksB | Webhook endpoints: list the per-project HTTP URLs that notifications and events are delivered to. |
| create_webhookB | Create a webhook endpoint. The HMAC secret is write-only. |
| update_webhookB | Update a webhook endpoint or rotate its write-only HMAC secret. |
| delete_webhookB | Delete a webhook endpoint. Requires admin access. |
| list_alert_rulesB | Alert rules: list the per-project conditions that decide when a notification fires. |
| create_alert_ruleC | Create an alert rule for project rank changes, thresholds, SERP features, or competitors. |
| update_alert_ruleA | 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. |
| delete_alert_ruleA | Delete an alert rule by rule id. Use only after the user confirms deletion. |
| list_triggered_alertsC | List triggered alerts for a project. |
| mute_triggered_alertA | Mute one firing alert for 24 hours. This changes shared alert state for the whole project team. |
| mark_project_alerts_readA | Mark every firing alert in the project as read for the whole project team. |
| list_team_membersC | List team members for a project. |
| list_team_invitesA | List pending team invites for a project. |
| create_team_inviteC | Invite a user to a project team with an admin, member, or viewer role. |
| revoke_team_inviteB | Revoke a pending project team invite. |
| resend_team_inviteB | Resend a pending team invitation and replace its expiration and token. |
| update_team_member_roleA | Change a non-owner project member role to admin, member, or viewer. Ownership transfer remains UI-only. |
| remove_team_memberA | Permanently remove a non-owner project member. Confirm the user's intent before calling this tool. |
| list_providersA | 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. |
| connect_providerA | 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. |
| test_provider_connectionA | 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. |
| update_provider_settingsB | 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. |
| set_provider_enabledB | Enable or disable a provider for a project. |
| set_provider_priorityB | Set provider priority for a project. Lower numbers are preferred first. |
| set_primary_providerA | Deprecated compatibility tool. true promotes priority 0; false is a legacy no-op. Use set_provider_priority for new calls. |
| disconnect_providerA | Disconnect a provider from a project. Use only after the user confirms deletion. |
| list_saved_keywordsA | List keyword ideas saved without rank tracking for a project. |
| create_saved_keywordsA | Save keyword ideas without starting paid rank tracking. Keywords already tracked or saved are skipped. |
| delete_saved_keywordA | Delete one saved keyword. Use only after the user confirms deletion. |
| list_saved_viewsB | List saved keyword views for a project. |
| create_saved_viewA | 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. |
| delete_saved_viewA | Delete a project saved view. Use only after the user confirms deletion. |
| list_competitorsC | 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. |
| add_competitorB | Add a tracked competitor domain to a project. |
| remove_competitorC | Remove a tracked competitor from a project. |
| get_notification_preferencesA | 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. |
| update_notification_preferencesA | 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. |
| list_migration_tokensB | List active migration tokens for a project. |
| mint_migration_tokenB | Mint a migration token for a project. |
| revoke_migration_tokenB | Revoke a project migration token. |
| get_project_contextA | Read the saved business, audience, products, goals and agent rules for this project. |
| update_project_contextA | Replace all five context fields. Requires project write scope and a member role. |
| list_agent_reportsB | Read saved project analyses. Results are restricted to the project and its members. |
| create_agent_reportA | 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. |
| get_agent_reportA | Read one saved analysis. A report ID never grants access to another project. |
| analyze_ai_visibilityA | 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. |
| get_ai_research_catalogB | Read the free current provider AI model, locale, and cost-policy capabilities. This read never initiates paid work. |
| compare_ai_promptsA | 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. |
| run_site_auditA | 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. |
| list_site_auditsB | Read the saved bounded crawl history for this project. |
| get_site_auditB | Read saved page signals and issues for one project crawl. |
| list_ai_tracking_topicsB | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| create_ai_tracking_topicC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| update_ai_tracking_topicC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| archive_ai_tracking_topicC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| list_ai_tracking_promptsC | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| create_ai_tracking_promptB | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| update_ai_tracking_promptC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| archive_ai_tracking_promptC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| list_ai_tracking_schedulesC | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| create_ai_tracking_scheduleC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| update_ai_tracking_scheduleC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| archive_ai_tracking_scheduleC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| preview_ai_tracking_runA | Review capability, credentials, budget and price before paid AI tracking. Preview never submits a provider task. |
| create_ai_tracking_runB | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| list_ai_tracking_runsC | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| get_ai_tracking_runB | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| list_ai_tracking_samplesA | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| cancel_ai_tracking_runC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| retry_ai_tracking_runC | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| get_ai_tracking_historyC | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| get_ai_tracking_trendsC | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| export_ai_tracking_evidenceC | Read project-scoped AI tracking evidence with original provenance, partial states, and cost uncertainty. |
| suggest_ai_tracking_promptsB | 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. |
| accept_ai_tracking_suggestionsB | Manage project-scoped AI tracking. Preserve immutable revisions, explicit budget consent, and stable retry keys. This does not start an automatic paid baseline. |
| ai_tracking_suggestions_previewA | 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. |
| ai_tracking_suggestions_generateA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
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.