Skip to content

MCP servers › io.github.Misar-AI › misarseo-mcp

MCP server · registry snapshot 2026-10-23 · last tested 2026-10-23

io.github.Misar-AI/misarseo-mcp

Research keywords, track rankings, audit sites, monitor backlinks and AI-search visibility — from… — the publisher's description

7 of 9 record checks metRead-only · tools listed 2026-10-23Topic: commerce-and-marketing · AI-classifiedversion 1.0.0TypeScriptMITstandard input/output, streamable HTTP180 tools

Summary

io.github.Misar-AI/misarseo-mcp is a remote and local MCP server listed in the official MCP registry at version 1.0.0. On 2026-10-23 ProtocolProbe started its published package in an isolated sandbox in read-only mode and read its inventory: 180 tools, 3 resources and 6 prompts.

Record checks

7 of 9 record checks met

  • met: Registry entry is active and says how to run it
  • met: Source repository link opens
  • met: Repository is not archived
  • met: Code pushed to the repository in the 90 days before our check
  • not met: Repository publishes a security policy (SECURITY.md)
  • met: Package names its licence with a standard (SPDX) identifier
  • met: The version the registry lists can be installed and is not withdrawn
  • not met: npm package carries build provenance (attestation)
  • met: No known critical or high advisory in the package or its dependencies
  • #8,710 of 15,115 packages by monthly downloads, tied with 24 others
  • Not ranked by stars: 0 stars (ranked from 10)

From public records, not a safety rating. Each check with its reason · Is it safe to install?

Key facts

Runs
remote and local package
Transport
standard input/output, streamable HTTP
Package
npm · listed version behind the latest release
License
MIT
Dependencies
no known high or critical advisories
Repository
public
Tools
180
Described as changing data
57 of 180 toolsAI-classified
Mainly works on
accounts and data in outside web servicesAI-classified
Topic
commerce-and-marketingAI-classified
Last tested
2026-10-23

Add to your client

Worth knowing before you connect it

  • 57 tools are described as changing something (save_keywords, capture_domain_authority_snapshot, add_competitor_monitor, …): our AI model's reading of the descriptions, not something we tested. We did not call them.
  • The registry lists 1.0.0; 1.0.1 is newer (1 release).

Each line comes from a section below, with its source and date.

How fresh this is

Live-tested
yes, a real session (not a text-only review)
Last tested
2026-10-23
Mode
read-only (no tool calls)
Latest version
1.0.0, published 2026-10-17 (registry, as of the 2026-10-23 snapshot)
First listed version
2026-10-17 (earliest version still in the registry; older removed versions would be earlier)
Registry data
snapshot 2026-10-23
Package and repository
checked 2026-10-23
Engine
mcp-runtime-engine@0.1.0 · sdk@1.32.0

Changes since the last refresh

New in the registry: not in the list of 2026-10-04, listed on 2026-10-23 with version 1.0.0 (published 2026-10-17).

Source: the official MCP Registry list on 2026-10-04 and on 2026-10-23.

What it is

What does this server offer?

Observed inventory
180tools
3resources
6prompts

What it mainly works on, as our AI model read its tool descriptions: accounts and data in outside web services.

57 of 180 tools are described as changing something (creating, editing, deleting, sending or running). For 27 the reading was uncertain, so no mark is shown.

  • list_projectson 157 other serversreads or searches

    “Lists the active projects in the user's organization.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    Takes no inputs.

  • get_dashboardon 14 other serversreads or searches

    “One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    Takes no inputs.

  • research_keywordsreads or searches

    “Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • seedsarrayrequired“1-5 seed keywords.”
    • resultLimitnumber“Cap on the data provider's own rows per seed.”
    • includeClickstreamDataboolean“Refine search volumes with clickstream data, which disaggregates Google Ads' grouped close-variant volumes (plurals/misspellings).”
  • save_keywordscreates or changes datadescribed as changing data

    “Save keywords to a project's saved-keywords list.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    5 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordsarrayrequired“Keywords to save (1-100).”
    • tagsarray“Optional tags to attach to every saved keyword.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
  • list_saved_keywordsreads or searches

    “Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    6 inputs, 1 required
    • projectIdstringrequired“Required.”
    • searchstring“Optional keyword text filter.”
    • limitnumber“Maximum rows to return.”
    • pageinteger“1-based page number (default 1).”
    • sortstring“Sort column (default createdAt).”
    • orderstring“Sort direction (default desc).”
  • classify_keyword_intentcalculates or converts

    “Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordsarrayrequired“1-200 keywords to classify.”
  • get_keyword_potentialreads or searches

    “Parent Topic and Traffic Potential for one keyword, built from real SERP overlap across a BOUNDED set (up to 5) of related keywords — not a full keyword-to-URL reverse index, which this codebase's fr…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordstringrequired“The keyword to analyze.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
  • get_keyword_serp_overviewreads or searches

    “Per-keyword SERP overview: a fresh live SERP snapshot for the keyword, PLUS — when this exact keyword happens to already be tracked in this project's rank tracking — its historical position trend and…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    5 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordstringrequired“The keyword to look up.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
    • sinceDaysinteger“How many days of tracked history to return, 1-730 (default 365).”
  • get_keyword_strategycalculates or converts

    “Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keyword lookup, the same shared-phrase clust…”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordsarrayrequired“1-500 keywords to analyze (e.g.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
  • get_topic_researchreads or searches

    “Content ideas for a seed keyword, composed from three sources this codebase already fetches for other features: the SERP for the seed (titles of pages already ranking for it), PAA-style questions (re…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordstringrequired“The seed keyword to research.”
    • locationCodeinteger“Numeric location code.”
    • languageCodestring“Language code.”
  • get_keyword_list_share_of_voicereads or searches

    “Share of Voice across a saved keyword list: the project's own domain plus up to 3 competitor domains, scored over a saved-keyword tag ("a saved keyword list" in this codebase IS a saved-keyword tag —…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    6 inputs, 1 required
    • projectIdstringrequired“Required.”
    • tagIdstring“The saved-keyword tag ID to treat as 'the list'.”
    • tagNamestring“Alternative to tagId — the tag's name.”
    • competitorDomainsarray“0-3 competitor domains (bare domain or full URL).”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
  • get_domain_overviewreads or searches

    “Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    5 inputs, 2 required
    • projectIdstringrequired“Required.”
    • domainstringrequired“Domain to analyze (e.g.”
    • includeSubdomainsboolean“Include subdomains in the domain's metrics.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
Show 88 more tools
  • get_domain_batchreads or searches

    “Domain batch analysis: one authority row per domain, up to 100 at once.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • domainsarrayrequired“1-100 domains or URLs, any mix.”
    • includeSubdomainsboolean“Count subdomains as part of each domain.”
  • get_domain_authority_historyreads or searches

    “Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • domainstringrequired“Domain to read history for (e.g.”
  • capture_domain_authority_snapshotcreates or changes datadescribed as changing data

    “Capture a domain-authority snapshot now: calls the same free resolver get_domain_overview already uses and records today's reading, so get_domain_authority_history has a trend to read back.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • domainstringrequired“Domain to capture a snapshot for (e.g.”
  • find_serp_competitorsreads or searches

    “Compares domains competing in search results for a supplied keyword set.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    10 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordsarrayrequired“Keywords whose SERPs are compared (1-100).”
    • resultTypesarray“SERP result types to include.”
    • excludeDomainsarray“Domains to exclude from results (e.g.”
    • includeSubdomainsboolean“Count subdomains as part of the same competitor domain.”
    • sortBystring“Sort order for returned competitors.”
    • limitinteger“Maximum competitors to return (1-100).”
    • offsetinteger“Rows to skip for pagination.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
  • get_keyword_gapon 1 other serverreads or searches

    “Compares the project's own domain against up to 3 competitor domains and classifies every keyword a competitor ranks for as missing / behind / tied / ahead / unknown.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    8 inputs, 2 required
    • projectIdstringrequired“Required.”
    • competitorDomainsarrayrequired“1–3 competitor domains (bare domain or full URL).”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
    • includeSubdomainsboolean“Count subdomains as part of a domain.”
    • sortFieldstring“Sort column: 'volume' (default), 'theirPosition' or 'ourPosition'.”
    • sortOrderstring“Sort direction.”
    • classificationsarray“Restrict rows to these classifications.”
  • list_competitor_monitorsreads or searches

    “Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • add_competitor_monitorcreates or changes datadescribed as changing data

    “Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarity score), outbound links, and structure…”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • urlstringrequired“The specific competitor page URL to monitor — not a domain to crawl.”
    • labelstring“Optional human-readable label, e.g.”
  • remove_competitor_monitordeletesdescribed as changing data

    “Stops monitoring one competitor URL.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • targetIdstringrequired“Monitored URL's target ID, from list_competitor_monitors or add_competitor_monitor.”
  • get_competitor_monitor_changesreads or searches

    “Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • targetIdstringrequired“Monitored URL's target ID, from list_competitor_monitors or add_competitor_monitor.”
    • limitinteger“Max entries to return.”
  • get_rank_trackerreads or searches

    “Read-only access to rank tracker configs and their latest results.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • trackerIdstring“Rank tracker config ID.”
  • add_rank_tracking_keywordscreates or changes datadescribed as changing data

    “Adds keywords to an existing rank tracker config.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    3 inputs, 3 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • keywordsarrayrequired“1-100 keywords to add.”
  • get_rank_config_trendreads or searches

    “Per-run keyword-position-distribution buckets for a tracker, oldest first — how many tracked keywords sit in the top 3, 4-10, 11-20, or outside the top 20, per check run.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • devicestring“Which device's positions to bucket.”
    • sinceDaysinteger“How many days back to look, 1–730.”
  • get_rank_moversreads or searches

    “Newcomers and fast climbers for a tracker's OWN domain, over a window.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • sinceDaysinteger“How many days back to look, 1–730.”
    • minGaininteger“Positions a keyword must have gained to count as a fast climber, 1–100.”
  • get_rank_keyword_historyreads or searches

    “Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 3 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • trackingKeywordIdstringrequired“The tracked keyword's own row ID (from get_rank_tracker's results), not the keyword text.”
    • sinceDaysinteger“How many days back to look, 1–730.”
  • get_rank_volatility_indexreads or searches

    “SERP volatility index across recent runs — how much this tracker's own positions churned run over run, derived entirely from already-stored history (no new SERP calls).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • devicestring“On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed.”
    • runLimitinteger“How many recent completed runs to compare consecutively, 2-26.”
  • get_rank_ai_overview_trendreads or searches

    “AI Overview presence trend across a tracker's keywords, oldest first — what share of tracked keywords showed Google's AI Overview in the SERP, per check run, and how that has moved over time.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • devicestring“On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed.”
    • sinceDaysinteger“How many days back to look, 1–730.”
  • list_rank_annotationsreads or searches

    “Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
  • add_rank_annotationcreates or changes datadescribed as changing data

    “Adds a chart note to a rank tracker's own timeline.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    4 inputs, 4 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • datestringrequired“UTC day the note applies to, YYYY-MM-DD.”
    • labelstringrequired“What happened, 1-200 characters.”
  • remove_rank_annotationdeletesdescribed as changing data

    “Removes a chart note from a rank tracker's own timeline.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    3 inputs, 3 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • idstringrequired“Note ID, from list_rank_annotations.”
  • list_rank_cannibalisationreads or searches

    “Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
  • set_rank_keyword_target_urlcreates or changes datadescribed as changing data

    “Sets or clears the URL you intend to rank for a tracked keyword.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    4 inputs, 4 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • trackingKeywordIdstringrequired“The tracked keyword's own row ID (from the rank tracker's keyword rows), not the keyword text.”
    • targetUrlstring or nullrequired“Absolute http(s) URL you intend to rank for this keyword, or null to clear a previously-set one.”
  • list_rank_keyword_tagsreads or searches

    “Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
  • update_rank_keyword_tagcreates or changes datadescribed as changing data

    “Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call).”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    6 inputs, 4 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • actionstringrequired“'add' attaches the tag, creating it from `tagName` when it does not exist yet; 'remove' detaches it.”
    • tagIdstring“Existing tag ID from list_rank_keyword_tags.”
    • tagNamestring“Tag name, matched on its normalised form — 'Branded', 'branded' and ' branded ' are one tag.”
    • trackingKeywordIdsarrayrequired“Tracking-keyword IDs to tag or untag (1–500 per call).”
  • get_brave_search_rank_checkreads or searches

    “Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    7 inputs, 2 required
    • projectIdstringrequired“Required.”
    • keywordstringrequired“Keyword to check.”
    • targetDomainstring“Domain or URL to check.”
    • countrystring“2-letter country code Brave uses to target results, e.g.”
    • searchLangstring“ISO 639-1 language code Brave uses to filter results, e.g.”
    • depthinteger“Results to fetch, 1-20 (Brave's own per-request ceiling).”
    • competitorDomainsarray“Competitor domains to also resolve positions for, free within the same fetched result set.”
  • create_rank_trackercreates or changes datadescribed as changing data

    “Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    11 inputs, 3 required
    • projectIdstringrequired“Required.”
    • domainstringrequired“Domain whose positions are tracked, e.g.”
    • serpDepthintegerrequired“How deep to search, 10-100 in steps of 10.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
    • locationHintstring or null“Free-text city/region hint, honoured only where the SERP provider supports it.”
    • devicesstring“Devices to track.”
    • scheduleIntervalstring“How often the scheduled check runs.”
    • rankDropAlertThresholdinteger or null“Notify when a keyword falls by at least this many positions.”
    • newKeywordAlertEnabledboolean“Notify when the domain starts ranking for a keyword it did not rank for before.”
    • competitorMoveAlertThresholdinteger or null“Notify when a tracked competitor gains at least this many positions.”
  • list_rank_tracking_keywordsreads or searches

    “Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, cpc, metricsFetchedAt, createdAt }`.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • pageinteger“1-based page number.”
    • pageSizeinteger“Rows per page.”
  • remove_rank_tracking_keywordsdeletesdescribed as changing data

    “Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords).”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    3 inputs, 3 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Rank tracker config ID.”
    • keywordIdsarrayrequired“Tracking-keyword IDs to remove.”
  • start_site_auditdescribed as changing data

    “Starts a MisarSEO site crawl/audit from startUrl.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    5 inputs, 2 required
    • projectIdstringrequired“Required.”
    • startUrlstringrequired“http(s) URL the crawl starts from, usually the site's home page.”
    • maxPagesinteger“Most pages to crawl (at most 5000).”
    • strategystring“Which pages get a Lighthouse run.”
    • renderJsboolean“Run each page's JavaScript before analysing it — needed for client-rendered sites.”
  • get_site_audit_statusreads or searches

    “Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase, startedAt, completedAt }`.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • auditIdstringrequired“The auditId (or jobId — the same value) returned by start_site_audit.”
  • get_audit_comparisonreads or searches

    “Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • auditIdstringrequired“Audit ID to compare, from crawl_site or get_crawl_results.”
    • baselineAuditIdstring“Audit ID to compare against.”
  • get_audit_core_web_vitalsreads or searches

    “Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • auditIdstringrequired“Audit ID, from crawl_site or get_crawl_results.”
  • get_audit_https_reportreads or searches

    “HTTPS Report: percentage of pages secure, mixed-content and insecure-link counts, homepage HTTPS-path status, and HTTP URLs in an HTTPS site's sitemap — for a project's latest completed crawl (or a n…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • auditIdstring“Audit ID, from crawl_site or get_crawl_results.”
  • get_audit_internal_linksreads or searches

    “Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed crawl (or a named earlier one).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • auditIdstring“Audit ID, from crawl_site or get_crawl_results.”
  • get_audit_structured_datareads or searches

    “Structured Data Report: pages grouped by schema.org @type, which pages have none, and which pages carry an unparseable JSON-LD block — for a project's latest completed crawl (or a named earlier one).”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • auditIdstring“Audit ID, from crawl_site or get_crawl_results.”
  • get_search_console_performancereads or searches

    “Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    10 inputs, 1 required
    • projectIdstringrequired“Required.”
    • dimensionsarray“Group rows by these dimensions.”
    • dateRangestring“Convenience window (default last_28_days).”
    • startDatestring“Explicit start (YYYY-MM-DD, Pacific Time).”
    • endDatestring“Explicit end (YYYY-MM-DD, Pacific Time).”
    • filtersarray“AND-combined filters.”
    • rowLimitinteger“Rows per call (default 1000, max 1000).”
    • startRowinteger“Pagination offset.”
    • typestring“Search type (default web).”
    • dataStatestring“'all' (default) includes fresh/incomplete recent data.”
  • inspect_urlson 3 other serversreads or searches

    “Run Google Search Console's URL Inspection on up to 10 URLs of the connected property: index/coverage state, last crawl time, Google-selected vs declared canonical, and mobile/rich-results verdicts.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • urlsarrayrequired“1–10 absolute URLs to inspect.”
    • languageCodestring“BCP-47 language for the inspection result (e.g.”
  • get_search_console_coveragereads or searches

    “MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 1 required
    • projectIdstringrequired“Required.”
    • coverageStatestring“Filter to one state, e.g.”
    • limitinteger
    • offsetinteger
  • get_search_console_hourly_performancereads or searches

    “MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs, 3 required
    • projectIdstringrequired“Required.”
    • startDatestringrequired“YYYY-MM-DD, required.”
    • endDatestringrequired“YYYY-MM-DD, required, not before startDate.”
  • get_search_console_sitemapsreads or searches

    “Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error counts, per-content-type submitted cou…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • feedpathstring“A specific sitemap's own URL (e.g.”
  • get_gsc_ctr_by_positionreads or searches

    “CTR by ranking position: the site's own historical Search Console clicks/impressions bucketed by position (1-3, 4-10, 11-20, 21+ — mirroring this codebase's existing rank-tracking position-distributi…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    5 inputs, 1 required
    • projectIdstringrequired“Required.”
    • dimensionstring“Bucket by query or page position (default 'query').”
    • dateRangestring“Convenience window over MisarSEO's own archive (default 'last_28_days').”
    • startDatestring“Explicit start date (YYYY-MM-DD).”
    • endDatestring“Explicit end date (YYYY-MM-DD).”
  • get_gsc_anonymous_queriesreads or searches

    “Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documented behaviour, not this codebase's assump…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    4 inputs, 1 required
    • projectIdstringrequired“Required.”
    • dateRangestring“Convenience window (default 'last_28_days').”
    • startDatestring“Explicit start date (YYYY-MM-DD).”
    • endDatestring“Explicit end date (YYYY-MM-DD).”
  • get_cannibalisation_reportreads or searches

    “Finds the queries where the project's connected Search Console property competes with itself: two or more of its own pages drawing impressions for the same query, splitting that query's clicks, click…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    3 inputs, 1 required
    • projectIdstringrequired“Required.”
    • windowstring“Analysis window (default last_28_days).”
    • sortstring“Finding order (default impressions).”
  • get_content_decay_reportreads or searches

    “Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the top-200-per-day per-page archive the nigh…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    4 inputs, 1 required
    • projectIdstringrequired“Required.”
    • windowstring“The RECENT period length (default last_28_days).”
    • minEarlierClicksinteger“A page must have had at least this many clicks in the earlier window to be considered at all (default 10) — a noise floor, not part of the decay definition.”
    • declineThresholdPctinteger“How big a decline (percent) is required to be reported (default 20).”
  • get_backlinks_overviewon 1 other serverreads or searches

    “Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • targetstringrequired“Domain or URL to analyze (e.g.”
    • scopestring“'domain' analyzes the whole domain; 'page' analyzes a specific URL.”
  • get_link_intersecton 1 other serverreads or searches

    “Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world yes

    6 inputs, 2 required
    • projectIdstringrequired“Required.”
    • competitorDomainsarrayrequired“2–4 competitor domains (bare domain or full URL).”
    • minCompetitorsinteger“Keep only domains linking to at least this many of the compared competitors.”
    • includeUnprovenboolean“Include rows whose absence from our own profile could not be proven.”
    • sortFieldstring“Sort column: 'competitors' (default), 'authority' or 'linkingPages'.”
    • sortOrderstring“Sort direction.”
  • list_disavow_entriesreads or searches

    “Disavow file management: every disavow entry for a project, oldest first.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • add_disavow_entrycreates or changes datadescribed as changing data

    “Disavow file management: mark one URL or domain for disavowal.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    5 inputs, 3 required
    • projectIdstringrequired“Required.”
    • entryTypestringrequired“'url' disavows one page; 'domain' disavows the whole domain and its subdomains.”
    • valuestringrequired“A full absolute URL for entryType 'url'; a bare domain (no scheme) for entryType 'domain'.”
    • notestring“Optional reason, written as a comment above the entry in the exported file.”
    • sourcestring“Where this entry came from.”
  • remove_disavow_entrydeletesdescribed as changing data

    “Disavow file management: remove one disavow entry by id (from list_disavow_entries).”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • entryIdstringrequired“Entry id, from list_disavow_entries.”
  • export_disavow_filereads or searches

    “Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/2648487) — one bare URL per line to disavow t…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • get_backlink_anchorsreads or searches

    “Anchor-text distribution for a domain or URL, one page at a time: which anchor texts link to it, with backlinks, referring domains, referring pages and dofollow links per anchor.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    7 inputs, 2 required
    • projectIdstringrequired“Required.”
    • targetstringrequired“Domain or URL whose inbound anchor texts to list.”
    • scopestring“Whether target is a whole domain or one page.”
    • pageinteger“1-based page number.”
    • pageSizeinteger“Rows per page.”
    • sortFieldstring“Sort column.”
    • sortOrderstring“Sort direction.”
  • get_content_optimizer_reportreads or searches

    “On-page recommendations and an AI content grade for one page, benchmarked against the pages currently ranking for its target keyword, built together — one AI-gateway call produces both the grade and …”

    Publisher declares: read-only yes · destructive no · idempotent no · open-world yes

    5 inputs, 3 required
    • projectIdstringrequired“Required.”
    • urlstringrequired“The page to grade (any http(s) URL).”
    • keywordstringrequired“The keyword this page is meant to rank for.”
    • locationCodeinteger“Numeric location code.”
    • languageCodestring“Language code.”
  • get_content_page_metricsreads or searches

    “Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • urlstringrequired“The page to analyze (any http(s) URL).”
  • run_brand_radar_scandescribed as changing data

    “Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    5 inputs, 2 required
    • projectIdstringrequired“Required.”
    • brandstringrequired“Brand, domain, or product name to scan.”
    • competitorsarray“Up to 5 competitor brands/domains to compare Share of Voice against.”
    • locationCodeinteger“DataForSEO location code.”
    • languageCodestring“Language code (e.g.”
  • get_brand_radar_scan_statusreads or searches

    “Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • jobIdstringrequired“The `jobId` returned by run_brand_radar_scan.”
  • explore_ai_prompt

    “Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    7 inputs, 3 required
    • projectIdstringrequired“Required.”
    • promptstringrequired“The prompt to send to each requested model.”
    • modelsarrayrequired“1-4 model personas to answer the prompt (chat_gpt, claude, gemini, perplexity).”
    • highlightBrandstring“A brand/entity name to highlight mentions of in each answer.”
    • webSearchboolean“Ground the answer in a real retrieval pass with cited sources, shared across every requested persona.”
    • webSearchCountryCodestring
    • analyzeSentimentboolean“Classify sentiment toward highlightBrand in each answer.”
  • research_ai_prompts

    “Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals from this project's own already-tracked p…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • seedTopicstringrequired“Topic to derive trackable prompt candidates from.”
    • languageCodestring“Language code (e.g.”
  • compare_ai_competitor_positioning

    “Runs ONE prompt through the explore_ai_prompt pipeline and checks a brand plus its named competitors against the SAME real per-model answers for mentions and citations.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    7 inputs, 5 required
    • projectIdstringrequired“Required.”
    • promptstringrequired“The one prompt every requested model answers.”
    • brandstringrequired“The target brand, domain or product checked in each answer.”
    • competitorsarrayrequired“1-5 competitor brands/domains checked against the same answers.”
    • modelsarrayrequired“1-4 model personas, as for explore_ai_prompt (persona labels, not vendor-verified models).”
    • webSearchboolean“Ground the answers in a real retrieval pass with cited sources.”
    • webSearchCountryCodestring“Two-letter country the retrieval pass searches from.”
  • get_direct_vendor_answers

    “Runs a prompt against up to 5 REAL, directly-verified vendor models — you_com (You.com Answer API), deepseek, grok (xAI), meta_ai (Meta's Model API) and minimax — each called through that vendor's ow…”

    Publisher declares: read-only yes · destructive no · idempotent no · open-world yes

    5 inputs, 3 required
    • projectIdstringrequired“Required.”
    • promptstringrequired“The prompt to send to each requested vendor model.”
    • modelsarrayrequired“1-5 vendor models to ask.”
    • highlightBrandstring“A brand/entity name to highlight mentions of in each answer.”
    • webSearchboolean“Ask for grounded answers where the vendor supports it (see the tool description).”
  • get_brand_scan_trendreads or searches

    “The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • targetstringrequired“Brand or domain, matched case-insensitively against past scans.”
    • sincestring“Inclusive lower bound, YYYY-MM-DD.”
  • list_brand_monitorsreads or searches

    “Lists a project's brand monitors — targets re-scanned by Brand Radar on a schedule rather than only when run_brand_radar_scan is called.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • upsert_brand_monitorcreates or changes datadescribed as changing data

    “Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    4 inputs, 4 required
    • projectIdstringrequired“Required.”
    • brandTargetstringrequired“Brand, domain or product name to monitor.”
    • scheduleIntervalstringrequired“How often the monitor re-scans.”
    • competitorsarrayrequired“Up to 5 competitor brands/domains to compare against.”
  • delete_brand_monitordeletesdescribed as changing data

    “Deletes a brand monitor, stopping its scheduled scans.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • monitorIdstringrequired“Brand monitor ID, from list_brand_monitors.”
  • list_tracked_promptsreads or searches

    “Lists a project's tracked prompts — prompts re-run through explore_ai_prompt's real answer pipeline on a schedule and diffed against the previous check for mention/citation drops.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • upsert_tracked_promptcreates or changes datadescribed as changing data

    “Creates or replaces a tracked prompt — the whole model list and schedule, not single fields.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    5 inputs, 5 required
    • projectIdstringrequired“Required.”
    • promptstringrequired“The prompt to re-run on every check.”
    • brandTargetstringrequired“The brand whose mentions and citations are tracked.”
    • modelsarrayrequired“1-4 model personas, as for explore_ai_prompt.”
    • scheduleIntervalstringrequired“How often the prompt is re-checked.”
  • delete_tracked_promptdeletesdescribed as changing data

    “Deletes a tracked prompt, stopping its scheduled checks.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • trackedPromptIdstringrequired“Tracked prompt ID, from list_tracked_prompts.”
  • get_tracked_prompt_trendreads or searches

    “Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • trackedPromptIdstringrequired“Tracked prompt ID, from list_tracked_prompts.”
  • get_unlinked_mentions_reportreads or searches

    “Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    5 inputs, 3 required
    • projectIdstringrequired“Required.”
    • brandstringrequired“Brand name or bare domain to search for as a SERP QUERY (not a URL to fetch).”
    • trackedDomainstringrequired“Bare domain each result page is checked for a link to, e.g.”
    • locationCodeinteger“Numeric location code.”
    • languageCodestring“Language code.”
  • get_media_monitoring_reportreads or searches

    “Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform breakdown from a Prompt Explorer scan yo…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    6 inputs, 3 required
    • projectIdstringrequired“Required.”
    • brandstringrequired“Brand name or bare domain to search for as a SERP QUERY (not a URL to fetch).”
    • trackedDomainstringrequired“Bare domain each result page is checked for a link to, e.g.”
    • locationCodeinteger“Numeric location code.”
    • languageCodestring“Language code.”
    • citationsarray“Citations from an ALREADY-RUN Prompt Explorer scan for this brand (map its `citations` to {url, domain}).”
  • search_local_businesseson 1 other serverreads or searches

    “Searches local business listings near a coordinate.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    5 inputs, 2 required
    • projectIdstringrequired“Required.”
    • querystring“Business name or title text to match.”
    • nearobjectrequired“Coordinate and radius to search around.”
    • categoriesarray“Business categories to filter by (e.g.”
    • limitinteger“Maximum businesses to return (1-50).”
  • get_google_business_questionsreads or searches

    “Fetches question-and-answer rows for one business keyword.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    5 inputs, 3 required
    • projectIdstringrequired“Required.”
    • keywordstringrequired“Business name or search phrase identifying the Google Business Profile.”
    • nearobjectrequired“Coordinate and radius to search around.”
    • depthinteger“Maximum Q&A rows to fetch (1-100).”
    • languageCodestring“Language code (e.g.”
  • run_local_nap_auditreads or searches

    “Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    7 inputs, 7 required
    • projectIdstringrequired“Required.”
    • namestringrequired“Claimed business name.”
    • addressstringrequired“Claimed address, any format.”
    • phonestringrequired“Claimed phone number, any format.”
    • latitudenumberrequired
    • longitudenumberrequired
    • radiusKmnumberrequired“Search radius around the claimed location, in km.”
  • get_local_pack_rankreads or searches

    “Read-only access to local pack rank check configs and their latest check.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • configIdstring“Local pack rank config ID.”
  • get_local_rank_gridreads or searches

    “Read-only access to geo-grid rank-tracking configs and their latest run.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • configIdstring“Grid config ID.”
  • get_gbp_profilereads or searches

    “Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and which of Google's attribute taxonomy entri…”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • get_gbp_performancereads or searches

    “Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    4 inputs, 4 required
    • projectIdstringrequired“Required.”
    • metricsarrayrequired“Which daily metrics to fetch.”
    • startDatestringrequired“Inclusive start date, YYYY-MM-DD.”
    • endDatestringrequired“Inclusive end date, YYYY-MM-DD.”
  • get_gbp_reviewsreads or searches

    “Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    2 inputs, 1 required
    • projectIdstringrequired“Required.”
    • pageTokenstring
  • reply_to_gbp_reviewcreates or changes datadescribed as changing data

    “Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world yes

    3 inputs, 3 required
    • projectIdstringrequired“Required.”
    • reviewIdstringrequired
    • commentstringrequired
  • get_gbp_optimizationreads or searches

    “Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • list_gbp_locationsreads or searches

    “Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • get_gbp_connectionreads or searches

    “The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world no

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • set_gbp_connectioncreates or changes datadescribed as changing data

    “Links (or repoints) a project to a Google Business Profile location.”

    Publisher declares: read-only no · destructive no · idempotent yes · open-world no

    3 inputs, 3 required
    • projectIdstringrequired“Required.”
    • googleAccountIdstringrequired“Google account resource name, e.g.”
    • googleLocationIdstringrequired“Google location resource name, e.g.”
  • disconnect_gbpdeletesdescribed as changing data

    “Removes the project's link to its Google Business Profile location.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • list_gbp_postsreads or searches

    “Posts published on the project's linked Google Business Profile location.”

    Publisher declares: read-only yes · destructive no · idempotent yes · open-world yes

    1 input, 1 required
    • projectIdstringrequired“Required.”
  • create_gbp_postcreates or changes datadescribed as changing data

    “Publishes a new "What's New" post on the linked Google Business Profile location.”

    Publisher declares: read-only no · destructive yes · idempotent no · open-world yes

    3 inputs, 2 required
    • projectIdstringrequired“Required.”
    • summarystringrequired“The post text.”
    • languageCodestring“Language of the post.”
  • delete_gbp_review_replydeletesdescribed as changing data

    “Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews).”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world yes

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • reviewIdstringrequired“Review ID, from get_gbp_reviews.”
  • create_local_pack_rank_configcreates or changes datadescribed as changing data

    “Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location.”

    Publisher declares: read-only no · destructive no · idempotent no · open-world no

    5 inputs, 4 required
    • projectIdstringrequired“Required.”
    • businessNamestringrequired“The business name as it appears on Google.”
    • keywordstringrequired“The search keyword, e.g.”
    • locationLabelstringrequired“Place appended to the query, e.g.”
    • languageCodestring“Search language code.”
  • delete_local_pack_rank_configdeletesdescribed as changing data

    “Deletes a local pack rank check config, INCLUDING its whole check history.”

    Publisher declares: read-only no · destructive yes · idempotent yes · open-world no

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Config ID, from the matching get_* tool called without configId.”
  • run_local_pack_rank_check

    “Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API).”

    Publisher declares: read-only no · destructive no · idempotent no · open-world yes

    2 inputs, 2 required
    • projectIdstringrequired“Required.”
    • configIdstringrequired“Config ID, from the matching get_* tool called without configId.”

Each quoted sentence is the first sentence of the publisher’s own description. The kind of tool and the “changes data” mark are our AI model’s reading of that description, not something we tested: two differently worded runs had to agree, otherwise no label is shown, and nobody has checked them by hand. A tool without the “changes data” mark is described as only reading, searching or calculating, or the two runs did not agree. No tool was called. Read the publisher’s full description before relying on it. “Publisher declares” lists the hints the server itself sends with the tool (MCP annotations: read-only, destructive, idempotent, open-world); they are the publisher's claims, not checked by us. Inputs are the parameters in the tool's own input schema: name, declared type, whether it is required, and the first sentence of its description. The first 100 of 180 tools are listed. Read 2026-10-23.

How well are its tools described?

Features #4 and #5

How clearly this server's own tool descriptions say what a tool does, and how consistent its tool list is. The first part is an AI model's yes/no reading of each description; the second part is counted. We do not turn it into a grade.

Descriptions

AI reading of each description

Says what the tool does
100% of 160 tools
Says what it returns
96% of 160 tools
States limits, defaults or errors
84% of 121 tools
Says when to use it
76% of 157 tools
Items covered per tool
3.6 of 4 on average

Counted from the listing

Parameters with a description
96% of 549
Tools with a description
100% of 180
Typical description length
509 characters

The tool set

Counted from the listing

Tools
180
Size of the list
about 57,462 tokens for an agent to load (characters ÷ 4)
Naming
180 of 180 names use snake_case

AI reading: easy to mix up

No pair found.

The AI items cover 160 of 180 tools: for a tool where two differently worded runs disagreed, that item is left out. They were not checked by hand, and no tool was called. “Easy to mix up” means two tools whose names or descriptions overlap without saying how they differ; the AI found none, comparing tools within groups of 40. We do not rate whether the tool set is complete or whether side effects are spelled out, because our AI reading of those was not reliable enough.

How do I add it to my client?

Config from the registry entry

From the npm package @misarseo/mcp

Our sandbox started this package on 2026-10-23 (a read-only session: no tool was called).

Add to CursorAn install link in the format Cursor documents, holding the Cursor config below. The command runs the publisher’s code on your machine.

Claude Desktop · claude_desktop_config.json (Settings → Developer → Edit Config)
{
  "mcpServers": {
    "misarseo-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@misarseo/mcp@1.0.0"
      ]
    }
  }
}
Cursor · .cursor/mcp.json in a project, or ~/.cursor/mcp.json
{
  "mcpServers": {
    "misarseo-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@misarseo/mcp@1.0.0"
      ]
    }
  }
}
VS Code · .vscode/mcp.json
{
  "servers": {
    "misarseo-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@misarseo/mcp@1.0.0"
      ]
    }
  }
}
VS Code (command line) · Bash or zsh terminal (macOS, Linux)
code --add-mcp '{"name":"misarseo-mcp","type":"stdio","command":"npx","args":["-y","@misarseo/mcp@1.0.0"]}'
Claude Code
claude mcp add --transport stdio misarseo-mcp -- npx -y @misarseo/mcp@1.0.0
Try it in the MCP Inspector · runs on your machine, opens in your browser · Node 22.19+
npx @modelcontextprotocol/inspector@2.11.0 -- npx -y @misarseo/mcp@1.0.0
  • Optional settings the entry also lists (left out above): MISARSEO_API_KEY, MISARSEO_BASE_URL.
  • This runs the publisher's code on your machine (npx). Read its README first.
  • The MCP Inspector lists the server's tools, resources and prompts; a tool you call there runs for real.

From the remote endpoint (Streamable HTTP)

This entry needs values of your own (marked < > or { } in the config below), so there is no one-click link: paste the config and fill them in.

Claude Desktop or claude.ai
Settings → Connectors → Add custom connector, then paste:
https://api.misar.io/seo/mcp

The entry also requires the header Authorization.
Cursor · .cursor/mcp.json in a project, or ~/.cursor/mcp.json
{
  "mcpServers": {
    "misarseo-mcp": {
      "url": "https://api.misar.io/seo/mcp",
      "headers": {
        "Authorization": "<Authorization>"
      }
    }
  }
}
VS Code · .vscode/mcp.json
{
  "servers": {
    "misarseo-mcp": {
      "type": "http",
      "url": "https://api.misar.io/seo/mcp",
      "headers": {
        "Authorization": "${input:authorization}"
      }
    }
  },
  "inputs": [
    {
      "type": "promptString",
      "id": "authorization",
      "description": "Authorization",
      "password": true
    }
  ]
}
Claude Code
claude mcp add --transport http misarseo-mcp https://api.misar.io/seo/mcp --header "Authorization: <Authorization>"
Try it in the MCP Inspector · runs on your machine, opens in your browser · Node 22.19+
npx @modelcontextprotocol/inspector@2.11.0 --server-url https://api.misar.io/seo/mcp --transport http
  • Replace <Authorization> with your own header values; the entry marks Authorization as secret, so keep the file out of version control.
  • The server runs on the operator's infrastructure; it may ask you to sign in when you first connect.
  • The MCP Inspector lists the server's tools, resources and prompts; a tool you call there runs for real. The command above does not send the required header (Authorization).

Built from the server's registry entry with each client's documented format (checked 2026-10-14; the Cursor link and the VS Code command 2026-10-19; the MCP Inspector command 2026-10-21). Values in < > are yours to fill in; this page never contains a key. Where the server needs a setting the entry does not declare, it can still fail to start.

Can it be installed, and is it up to date?

Version pin · advisories

Listed version

Registry lists
1.0.0
Latest stable
1.0.1
Status
behind the latest release (1 releases, 3 days)
Withdrawn
no

Source: registry.npmjs.org · 2026-10-23. About the version the registry lists; a manual install may resolve to a different one.

Dependency advisories

critical0high0moderate0low0

Counted in the full dependency tree as resolved on 2026-10-24 (npm audit; each bar counts packages with an advisory, not advisories). Bars share one scale. The package itself has no known vulnerability (OSV.dev).

Integrity, provenance, license

Integrity
sha512-M/pAP7ONZNWmFnj5c…
Signature
signed
License
MIT

Source: the package registry · 2026-10-23.

Usage

Downloads
210 in the last month

Source: api.npmjs.org · 2026-10-23.

Does the registry listing match what we found?

Feature #6

The registry verifies a package once, when it is published, and does not re-check it. A difference below is about the listing, not a judgement of the publisher.

Registry saysWe foundResultSource · date
Published package can be startedStarted and answeredmatchesour test · 2026-10-23
Version 1.0.0 on npmExists and can be installedmatchesnpm · 2026-10-23
Repository github.com/Misar-AI/misarseo-mcpOpens publiclymatchesapi.github.com · 2026-10-23

Who made it?

Feature #7 · lineage

Facts about the publisher. We do not turn them into a trust score.

Namespace
io.github.Misar-AI · 6 servers
GitHub owner
an organization (Misar-AI)
Build record
signed
Repository
github.com/Misar-AI/misarseo-mcp
Stars
0
Repository age
0–30 days
Last push
0–30 days ago
Archived
no
Security policy
none found (we looked for SECURITY.md in the repository and in its owner’s .github repository)

Source: the registry entry and api.github.com · 2026-10-23; security policy read from GitHub · 2026-10-23.

Publish this server? Run these checks against it yourself before release, from your own machine: a server the command starts, or your own server at its URL after a one-time proof that you control it: npx protocolprobe-selftest.

Choosing

Record checks

Public records · not a safety rating

7 of 9 record checks met

  • #8,710 of 15,115 packages by monthly downloads, tied with 24 others
  • Not ranked by stars: 0 stars (ranked from 10)
  • MetRegistry entry is active and says how to run itActive, with a package or a remote address.
  • MetSource repository link opensThe linked GitHub repository is public.
  • MetRepository is not archivedNot archived.
  • MetCode pushed to the repository in the 90 days before our checkLast push 0-30 days before our check.
  • Not metRepository publishes a security policy (SECURITY.md)No SECURITY.md in the places GitHub reads it from.
  • MetPackage names its licence with a standard (SPDX) identifierMIT
  • MetThe version the registry lists can be installed and is not withdrawnThe listed version exists; a newer one is out.
  • Not metnpm package carries build provenance (attestation)Signed by npm, but no build attestation.
  • MetNo known critical or high advisory in the package or its dependenciesNone known in the package or its dependency tree.

Read from public records only: the registry entry, npm/PyPI, GitHub and advisory databases, checked 2026-10-23. No tool was called. Only “met” and “not met” are counted, so the total differs between servers; a check that does not apply or that we could not run is listed, never counted against it. It is not a safety rating. How each check works · Leaderboards

Common questions about io.github.Misar-AI/misarseo-mcp

Answered from the data above

Is io.github.Misar-AI/misarseo-mcp safe to install?

We do not rate servers as safe or unsafe. 7 of its 9 applicable record checks are met (facts from public records, each listed on this page). What the records show: Its source repository opens publicly. Its repository had a push in the last 90 days. A newer stable release exists than the one listed. The package itself has no known vulnerability (OSV.dev). Its full dependency tree has no known advisory. 57 of its tools describe changing data (our AI model's reading of the descriptions). These are facts with their sources on this page, not a safety guarantee, and we did not run its tools.

Has io.github.Misar-AI/misarseo-mcp been security tested?

Partly. 4 of the 13 checks that apply to it were exercised. We started the package in an isolated sandbox and read what it declares, but this test round was read-only, so its tools were not called. No security verdict is published before verification.

What can io.github.Misar-AI/misarseo-mcp do?

It lists 180 tools. In our AI model's reading of their descriptions (two runs had to agree, nobody checked it by hand), they include tools that read or search, create or change data, delete and calculate or convert. We did not call any tool, so this describes the text, not the behaviour.

Can io.github.Misar-AI/misarseo-mcp change or delete data?

57 of its tools say in their description that they create, edit, delete, send or run something (our AI model's reading). We did not call any tool, so we cannot say what actually happens.

Does io.github.Misar-AI/misarseo-mcp publish a security policy?

We found no SECURITY.md in its repository (root, .github/ or docs/) or in its owner's .github repository.

Is the listed version current?

No. The registry lists 1.0.0; the latest stable release on npm is 1.0.1.

Where is the source code of io.github.Misar-AI/misarseo-mcp?

In github.com/Misar-AI/misarseo-mcp, which opens publicly.

Found this page useful?

Anonymous · no sign-in

A quick, anonymous reaction — no account, no email. One per kind from your browser. The tally updates when the page is next refreshed, and it is only a rough count, never a safety rating or a measured number of people.

Similar servers

Same topic · AI-read

Active servers whose topic is also “commerce-and-marketing” and that have at least one tool of the same kind; most kinds in common first, then most GitHub stars. The topic and the tool kinds are an AI model's reading of the publishers' descriptions, not checked by hand. Similar is not a recommendation.

Compare with another server

Side by side: registry entry, our read-only session, the tools and the 18 classification fields. Same values as each page; no score.

Security testing

What did we test, and what did we leave out?

18 checks · features #1, #2

Not probed (read-only run)

We started the package in an isolated sandbox and read what it declares, but this test round was read-only, so its tools were not called. No security score is given; a check we did not run is never counted as passed.

The 18 checks at a glanceour test · 2026-10-23
  1. Inventory: exercised
  2. Hidden instructions: exercised
  3. Real execution: not run · our policy
  4. Secret leak: not run · nothing to check it against
  5. Internal addresses: not run · our policy
  6. Unconfirmed changes: not run · our policy
  7. Bad input: not run · our policy
  8. Model requests: not run · nothing to check it against
  9. Sensitive questions: not run · nothing to check it against
  10. Folder boundary: not run · our policy
  11. Log leaks: not run · nothing to check it against
  12. Hidden content: exercised
  13. Fake assistant turns: exercised
  14. Token passthrough: not applicable
  15. Token audience: not applicable
  16. Sign-in redirect: not applicable
  17. Consent handling: not applicable
  18. Sign-in metadata: not applicable

4 exercised9 not run (reason given)5 not applicable

Each check ends in exactly one state: exercised, not run (with the reason), or not applicable (with the reason). 4 of the 13 checks that apply to it were exercised. We do not publish security-check outcomes for named servers.

Exercised · 4
  • 1Inventory
    tool-list
    Reads the declared tools, resources and prompts.exercised
  • 2Hidden instructions
    description-poisoning
    Looks for hidden instructions in tool descriptions.exercised
  • 12Hidden content
    audience-hiding
    Checks resources that hide content from the user.exercised
  • 13Fake assistant turns
    fake-assistant-turn
    Checks prompts that pose as the assistant's own words.exercised
Not run, with the reason · 9
  • 3Real execution
    real-execution
    Calls a tool and checks what really happens.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy
  • 4Secret leak
    canary-leak
    Plants a fake secret and checks whether it leaks.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 5Internal addresses
    ssrf
    Checks whether a tool can be steered to internal addresses.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy
  • 6Unconfirmed changes
    write-without-confirmation
    Checks whether tools that change data act without asking.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy
  • 7Bad input
    error-handling
    Sends bad input and watches how the server answers.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy
  • 8Model requests
    sampling
    Checks whether the server asks the client's model to act for it.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 9Sensitive questions
    elicitation-sensitive-data
    Checks whether the server asks users for sensitive data.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
  • 10Folder boundary
    root-boundary
    Checks whether the server reaches outside the folders it was given.This check calls the package's tools. This test round was read-only, so no tool was called; tools can act on outside services with the publisher's or a user's account.not run · our policy
  • 11Log leaks
    logging-side-channel
    Checks whether log messages carry data they should not.This check needs at least one successful tool call to have something to check, and no tool was called.not run · nothing to check it against
Does not apply to this server · 5
  • 14Token passthrough
    token-passthrough
    Checks whether the server forwards a user's token to other services.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable
  • 15Token audience
    token-audience-validation
    Checks whether tokens meant for another service are accepted.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable
  • 16Sign-in redirect
    open-redirect
    Checks the sign-in redirect for abuse.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable
  • 17Consent handling
    confused-deputy
    Checks consent handling when one service acts for another.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable
  • 18Sign-in metadata
    oauth-url-scheme
    Checks the published sign-in metadata for unsafe URLs.The server runs locally over standard input/output, so there is no sign-in flow to check.not applicable

Source: our own test in an isolated sandbox, 2026-10-23, mcp-runtime-engine@0.1.0. Which checks count and why follows our published scoring model.

What happened during the test?

Feature #8

The steps in order, as the test record holds them.

  1. 0 msStarted the published package in an isolated sandbox (read-only mode)
  2. 2,994 msConnected after 0 redirects.
  3. Read the inventory: 180 tools, 3 resources, 6 prompts.
  4. 4,558 msFinished: 4 checks exercised.

Reference

How is it classified?

18 fields

One value per field, each with its source. Fields written by AI models are marked. A field with no value says why.

TopicAI-classified
AI-classified · 2026-10-23
Pricing modelAI-classified
no value
No value: the AI answer was held back because the quoted text did not clearly support it.
Programming language
api.github.com · 2026-10-23
Hosting type
registry · 2026-10-23
MCP capability
prompts, resources, tools
our test · 2026-10-23
Transport
standard input/output, streamable HTTP
registry · 2026-10-23
Required credentials
requires a secret
registry · no declaration is not a guarantee
Package registry
registry · 2026-10-23
Freshness
0–30 days
registry updatedAt · 2026-10-23
Lifecycle status
registry · 2026-10-23
License class
package registry · 2026-10-23
Integrity hash
declared (sri)
package registry · 2026-10-23
Signature / provenance
signed
package registry · 2026-10-23
Dependency advisories
none known
npm audit · 2026-10-24
Popularity
210 downloads a month
package registry · 2026-10-23
Publisher signals
owner: an organization · repository age: 0–30 days · stars: 0–9 · build record: signed
api.github.com · 2026-10-23
Maintenance
api.github.com · 2026-10-23
Environment
either (remote or your machine)
where it runs, from the hosting type

“Not stated” means the source did not state it; “does not apply” means it does not apply to this kind of server; “our limit” means our own lookup failed. A linked value opens the directory filtered to the same value.

Cite or correct this page

Sources and corrections

Suggested citation

ProtocolProbe. “io.github.Misar-AI/misarseo-mcp: MCP server record.” Data checked 2026-10-23. https://protocolprobe.com/mcp/servers/io.github.Misar-AI/misarseo-mcp

Figures are valid for the date shown. Our facts on this page are CC BY 4.0: reuse them with a link and the check date. Quoted text (the publisher’s descriptions, website quotes, tool names) is not ours to license.

As JSON: this record in the API · API documentation.

Badge for your README

ProtocolProbe: 7 of 9 record checks met

[![ProtocolProbe](https://protocolprobe.com/api/v1/badge/io.github.Misar-AI/misarseo-mcp)](https://protocolprobe.com/mcp/servers/io.github.Misar-AI/misarseo-mcp)

It shows this server's record-check count: facts from public records, no tool called. It is not a security rating or a pass. It links here and updates after each data reload.

Something wrong, or is this yours?

If a fact here is wrong, tell us and we will re-check it. If you operate this server, you can run our checks on it yourself with the free self-test command; we call no server’s tools ourselves for anything shown here.

Write to hello@protocolprobe.com · corrections log · methodology