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
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
- 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
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 inventoryWhat 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.
“Lists the active projects in the user's organization.”
Publisher declares: read-only yes · destructive no · idempotent yes · open-world no
Takes no inputs.
“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.”
“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.”
“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.”limitintegeroffsetinteger
- 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).”
“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.”
“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.”webSearchCountryCodestringanalyzeSentimentboolean“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}).”
“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.”latitudenumberrequiredlongitudenumberrequiredradiusKmnumberrequired“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.”reviewIdstringrequiredcommentstringrequired
- 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
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 #6The 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 says | We found | Result | Source · date |
|---|---|---|---|
| Published package can be started | Started and answered | matches | our test · 2026-10-23 |
| Version 1.0.0 on npm | Exists and can be installed | matches | npm · 2026-10-23 |
| Repository github.com/Misar-AI/misarseo-mcp | Opens publicly | matches | api.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 rating7 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 aboveIs 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-inA 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
- com.mcparmory/klaviyoalso has tools that calculates or converts, creates or changes data, deletes, reads or searchescompare with this one
- com.mcparmory/shopify-adminalso has tools that calculates or converts, creates or changes data, deletes, reads or searchescompare with this one
- io.github.adwarp-dev/adwarpAdwarpalso has tools that calculates or converts, creates or changes data, deletes, reads or searchescompare with this one
- app.himalayas/mcpHimalayas Remote Jobsalso has tools that calculates or converts, creates or changes data, deletes, reads or searchescompare with this one
- com.productclank/productclankProductClankalso has tools that calculates or converts, creates or changes data, deletes, reads or searchescompare with this one
- io.github.warpfreight/warp-agent-mcpalso has tools that calculates or converts, creates or changes data, deletes, reads or searchescompare with this one
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.
- Inventory: exercised
- Hidden instructions: exercised
- Real execution: not run · our policy
- Secret leak: not run · nothing to check it against
- Internal addresses: not run · our policy
- Unconfirmed changes: not run · our policy
- Bad input: not run · our policy
- Model requests: not run · nothing to check it against
- Sensitive questions: not run · nothing to check it against
- Folder boundary: not run · our policy
- Log leaks: not run · nothing to check it against
- Hidden content: exercised
- Fake assistant turns: exercised
- Token passthrough: not applicable
- Token audience: not applicable
- Sign-in redirect: not applicable
- Consent handling: not applicable
- 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.
- 1Inventory
tool-listReads the declared tools, resources and prompts.exercised - 2Hidden instructions
description-poisoningLooks for hidden instructions in tool descriptions.exercised - 12Hidden content
audience-hidingChecks resources that hide content from the user.exercised - 13Fake assistant turns
fake-assistant-turnChecks prompts that pose as the assistant's own words.exercised
- 3Real execution
real-executionCalls 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-leakPlants 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
ssrfChecks 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-confirmationChecks 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-handlingSends 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
samplingChecks 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-dataChecks 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-boundaryChecks 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-channelChecks 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
- 14Token passthrough
token-passthroughChecks 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-validationChecks 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-redirectChecks 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-deputyChecks 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-schemeChecks 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.
- 0 msStarted the published package in an isolated sandbox (read-only mode)
- 2,994 msConnected after 0 redirects.
- Read the inventory: 180 tools, 3 resources, 6 prompts.
- 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.
“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
[](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