{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_n8fhdvfud38k","handle":"misarseo-mcp-server","url":"https://wellknown.network/agents/misarseo-mcp-server","links":{"self":"https://wellknown.network/agents/misarseo-mcp-server/record.json","html":"https://wellknown.network/agents/misarseo-mcp-server","markdown":"https://wellknown.network/agents/misarseo-mcp-server/record.md","api":"https://wellknown.network/api/v1/agents/misarseo-mcp-server","status":"https://wellknown.network/api/v1/agents/misarseo-mcp-server/status","claim":"https://wellknown.network/agents/misarseo-mcp-server/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/misarseo-mcp-server/claim.json","badge":"https://wellknown.network/agents/misarseo-mcp-server/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/misarseo-mcp-server/history","tools":"https://wellknown.network/api/v1/agents/misarseo-mcp-server/tools"},"ard":{"identifier":"urn:air:api.misar.io:server:misarseo-mcp-server","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"MisarSEO MCP Server","summary":"Research keywords, track rankings, audit sites, monitor backlinks and AI-search visibility — from…","description":"Research keywords, track rankings, audit sites, monitor backlinks and AI-search visibility — from…","publisher":{"name":"Misar-AI","url":null},"homepage":"https://www.misarseo.com","repository":"https://github.com/Misar-AI/misarseo-mcp","version":"1.0.0","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://api.misar.io/seo/mcp","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@misarseo/mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-17T08:16:13.111431Z","publishedAt":"2026-10-17T08:16:13.111431Z","registryName":"io.github.Misar-AI/misarseo-mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"content.seo","name":"SEO","confidence":1,"provenance":"derived"},{"slug":"data.web-search","name":"Web Search","confidence":1,"provenance":"derived"},{"slug":"data.database","name":"Databases","confidence":1,"provenance":"derived"},{"slug":"dev.ci-cd","name":"CI/CD & Deploy","confidence":1,"provenance":"derived"},{"slug":"analytics.reporting","name":"Reporting & Dashboards","confidence":1,"provenance":"derived"},{"slug":"geo.maps","name":"Maps & Places","confidence":1,"provenance":"derived"},{"slug":"data.web-scraping","name":"Web Scraping","confidence":0.992,"provenance":"derived"},{"slug":"data.news","name":"News & Feeds","confidence":0.933,"provenance":"derived"}],"categories":["analytics","content","data","dev","geo"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-20T22:23:22.374Z","lastProbedAt":"2026-10-20T22:23:22.374Z","statusComputedAt":"2026-10-20T22:26:07.881Z","reliability30d":{"probes":8,"successRate":1,"p50Ms":895,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":8,"ok":8,"authBoundaryOk":0,"serviceOk":8,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-20T22:23:22.374Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":854,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T16:24:59.433Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":889,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T09:27:51.910Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":901,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-20T03:28:58.267Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":600,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-19T20:31:34.046Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":911,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-19T13:28:15.290Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":915,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-19T06:27:24.887Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":920,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-19T00:35:21.847Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":937,"error":null,"detail":{"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"toolCount":180,"toolsHash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","serverName":"misarseo","capabilities":["tools","prompts","resources"],"serverVersion":"1.0.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_projects","description":"Lists the active projects in the user's organization. FREE — database only, charges no credits. Use this whenever you need a `projectId` for another MisarSEO to"},{"name":"get_dashboard","description":"One card per active project in the caller's organization: latest audit health, rank-tracker status, and trailing-7-day web-analytics sessions. FREE: database on"},{"name":"research_keywords","description":"Research keyword data (search volume, difficulty, CPC, related ideas) for 1-5 seed keywords in one call — one research run per seed. Returns `results`, one entr"},{"name":"save_keywords","description":"Save keywords to a project's saved-keywords list. FREE — database only, charges no credits. Idempotent: re-saving an existing keyword is a no-op. If tags are pr"},{"name":"list_saved_keywords","description":"Lists keywords saved to a project, with whatever metrics have been cached for them (search volume, difficulty, CPC) and their tags. FREE — reads MisarSEO's own "},{"name":"classify_keyword_intent","description":"Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic k"},{"name":"get_keyword_potential","description":"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 "},{"name":"get_keyword_serp_overview","description":"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 track"},{"name":"get_keyword_strategy","description":"Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keywo"},{"name":"get_topic_research","description":"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 r"},{"name":"get_keyword_list_share_of_voice","description":"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"},{"name":"get_domain_overview","description":"Returns a high-level view of a domain's organic footprint: estimated organic traffic, organic keyword count, and a 0-100 domain authority score. Use this first "},{"name":"get_domain_batch","description":"Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. `organicTraffic`, `organicKeyw"},{"name":"get_domain_authority_history","description":"Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already c"},{"name":"capture_domain_authority_snapshot","description":"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_hist"},{"name":"find_serp_competitors","description":"Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inve"},{"name":"get_keyword_gap","description":"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 / un"},{"name":"list_competitor_monitors","description":"Competitor page change detection: the specific competitor URLs monitored for a project, with `lastCheckedAt` (null until the first scheduled check reaches it). "},{"name":"add_competitor_monitor","description":"Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarit"},{"name":"remove_competitor_monitor","description":"Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competi"},{"name":"get_competitor_monitor_changes","description":"Timeline of DETECTED changes for one monitored competitor URL, newest first — a check that found nothing does not appear here. Each entry's summary is a real di"},{"name":"get_rank_tracker","description":"Read-only access to rank tracker configs and their latest results. With `trackerId`, returns the config plus the latest snapshot per keyword. Without it, lists "},{"name":"add_rank_tracking_keywords","description":"Adds keywords to an existing rank tracker config. Returns `{ added, addedIds }` — `added` counts only genuinely new keywords; anything already tracked for this "},{"name":"get_rank_config_trend","description":"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 "},{"name":"get_rank_movers","description":"Newcomers and fast climbers for a tracker's OWN domain, over a window. `newlyRanking` is keywords that started ranking during the window (no earlier position, o"},{"name":"get_rank_keyword_history","description":"Per-keyword position series over time, oldest first — the same series the app's SERP-history chart draws for one tracked keyword. FREE: database only. No SEO da"},{"name":"get_rank_volatility_index","description":"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"},{"name":"get_rank_ai_overview_trend","description":"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, an"},{"name":"list_rank_annotations","description":"Chart notes on a rank tracker's own timeline — 'deployed new title tags', 'algorithm update' — oldest first. FREE: database only, no SEO data provider is called"},{"name":"add_rank_annotation","description":"Adds a chart note to a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Config-level, not per-keyword "},{"name":"remove_rank_annotation","description":"Removes a chart note from a rank tracker's own timeline. FREE: database only, no SEO data provider is called and no credits are spent. Succeeds whether or not `"},{"name":"list_rank_cannibalisation","description":"Tracked keywords whose latest ranking URL is not the target URL you declared for them (see set_rank_keyword_target_url). FREE: database only, no SEO data provid"},{"name":"set_rank_keyword_target_url","description":"Sets or clears the URL you intend to rank for a tracked keyword. Feeds list_rank_cannibalisation — set this for the keywords you care about, then check for a mi"},{"name":"list_rank_keyword_tags","description":"Lists the tags in use on one rank tracker, plus the project's whole tag vocabulary. Use it to find tag IDs before calling update_rank_keyword_tag, and to see ho"},{"name":"update_rank_keyword_tag","description":"Attaches or detaches ONE tag across a selection of tracked keywords (up to 500 keyword IDs per call). One tag per call — applying three tags takes three calls. "},{"name":"get_brave_search_rank_check","description":"Checks where a project's domain (or an explicit targetDomain) ranks in REAL Brave Search results for one keyword. Brave has run its own independent crawler and "},{"name":"create_rank_tracker","description":"Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords."},{"name":"list_rank_tracking_keywords","description":"Lists the keywords tracked by ONE rank tracker: `{ keywords, totalCount, page, pageSize }`, each row `{ id, configId, keyword, searchVolume, keywordDifficulty, "},{"name":"remove_rank_tracking_keywords","description":"Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snap"},{"name":"start_site_audit","description":"Starts a MisarSEO site crawl/audit from startUrl. Returns `{ jobId, auditId }` (the same id twice) with HTTP 202; the crawl then runs in the background — poll i"},{"name":"get_site_audit_status","description":"Progress of a site audit started by start_site_audit: `{ status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase,"},{"name":"get_audit_comparison","description":"Compare a site audit against an earlier one: which issues are new, which were fixed, how many persist, and the health-score delta. Only pages BOTH crawls visite"},{"name":"get_audit_core_web_vitals","description":"Core Web Vitals report: LCP/INP/CLS per page/strategy this audit already ran Lighthouse against, classified against Google's own published thresholds. No new fe"},{"name":"get_audit_https_report","description":"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 p"},{"name":"get_audit_internal_links","description":"Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed cra"},{"name":"get_audit_structured_data","description":"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 co"},{"name":"get_search_console_performance","description":"Query the connected Search Console property's Search Analytics: clicks, impressions, CTR, and average position by query/page/country/device/date. First-party da"},{"name":"inspect_urls","description":"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 canoni"},{"name":"get_search_console_coverage","description":"MisarSEO's own index-coverage report for the connected property: which URLs are indexed, excluded, or errored, and why. FREE (no credits) and makes NO call to G"},{"name":"get_search_console_hourly_performance","description":"MisarSEO's own retained HOURLY Search Console totals for the connected property — the hourly counterpart to get_search_console_performance's daily archive. FREE"},{"name":"get_search_console_sitemaps","description":"Search Console sitemaps.list/sitemaps.get: every sitemap submitted for the connected property and its processing status (pending, last downloaded, warning/error"},{"name":"get_gsc_ctr_by_position","description":"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 exi"},{"name":"get_gsc_anonymous_queries","description":"Anonymized-query estimate: Search Console omits some rare queries entirely from a query-dimensioned response to protect searcher privacy (Google's own documente"},{"name":"get_cannibalisation_report","description":"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 quer"},{"name":"get_content_decay_report","description":"Finds pages whose clicks declined by a meaningful amount between two adjacent windows, read entirely from MisarSEO's own archived Search Console history (the to"},{"name":"get_backlinks_overview","description":"Returns a backlinks profile summary (total backlinks, referring domains, referring pages, rank) plus the top referring domains by backlink count. CHARGES CREDIT"},{"name":"get_link_intersect","description":"Finds the domains that link to 2–4 of the project's competitors but NOT to the project itself. Every row is a site that has already demonstrated it will link to"},{"name":"list_disavow_entries","description":"Disavow file management: every disavow entry for a project, oldest first. FREE (no credits). Use export_disavow_file to get the actual Google-format .txt conten"},{"name":"add_disavow_entry","description":"Disavow file management: mark one URL or domain for disavowal. FREE (no credits), but this is a MUTATION. entryType 'url' disavows exactly that page (value must"},{"name":"remove_disavow_entry","description":"Disavow file management: remove one disavow entry by id (from list_disavow_entries). FREE (no credits), but this is a MUTATION. Succeeds whether or not entryId "},{"name":"export_disavow_file","description":"Disavow file management: export a project's disavow entries as the exact .txt content Google's disavow tool accepts (support.google.com/webmasters/answer/264848"},{"name":"get_backlink_anchors","description":"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"},{"name":"get_content_optimizer_report","description":"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-ga"},{"name":"get_content_page_metrics","description":"Lightweight on-page metrics for one arbitrary URL — the content optimizer's keyword-free, AI-free sibling. Built for ambient per-page checks (e.g. the browser e"},{"name":"run_brand_radar_scan","description":"Scans real AI-answer engines and search citations for brand mentions, Share of Voice against named competitors, and cited sources. REQUIRES A PAID PLAN — a free"},{"name":"get_brand_radar_scan_status","description":"Status of a Brand Radar scan started by run_brand_radar_scan, by its `jobId`. `status` is queued/running/complete/errored; a complete scan carries the shaped `r"},{"name":"explore_ai_prompt","description":"Runs one prompt through up to 4 model personas and returns each answer verbatim, with real citations when webSearch is on. The four persona labels (chat_gpt/cla"},{"name":"research_ai_prompts","description":"Turns a seed topic into candidate prompts worth tracking (real Google/Bing autocomplete completions reframed as questions) plus observed mention-rate signals fr"},{"name":"compare_ai_competitor_positioning","description":"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 ci"},{"name":"get_direct_vendor_answers","description":"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"},{"name":"get_brand_scan_trend","description":"The recorded AI-visibility history for one brand or domain: mentions, cited sources and competitors seen at each past Brand Radar scan, oldest first. Answers wh"},{"name":"list_brand_monitors","description":"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. FREE: database only, no"},{"name":"upsert_brand_monitor","description":"Creates or replaces a brand monitor — the whole schedule and competitor list, not single fields. Requires the admin role in the calling organization, because it"},{"name":"delete_brand_monitor","description":"Deletes a brand monitor, stopping its scheduled scans. Requires the admin role in the calling organization. Get the monitorId from list_brand_monitors."},{"name":"list_tracked_prompts","description":"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 ment"},{"name":"upsert_tracked_prompt","description":"Creates or replaces a tracked prompt — the whole model list and schedule, not single fields. On every scheduled check the SAME prompt is re-run (grounded, for r"},{"name":"delete_tracked_prompt","description":"Deletes a tracked prompt, stopping its scheduled checks. Requires the admin role in the calling organization. Get the trackedPromptId from list_tracked_prompts."},{"name":"get_tracked_prompt_trend","description":"Observed history for one tracked prompt — one point per real scheduled check (`mentionedByCount`/`citedByCount` out of `successfulModelCount`), oldest first. Em"},{"name":"get_unlinked_mentions_report","description":"Unlinked brand mentions: searches the free SERP backend for `brand` as a QUERY, then checks whether each result page already links to `trackedDomain`. Free: one"},{"name":"get_media_monitoring_report","description":"Media Monitoring: get_unlinked_mentions_report's candidates filtered to known social/forum/news platform domains, optionally merged with the citation-platform b"},{"name":"search_local_businesses","description":"Searches local business listings near a coordinate. Use this to find local business candidates or nearby competitors; it does not run Maps rank checks or Q&A. C"},{"name":"get_google_business_questions","description":"Fetches question-and-answer rows for one business keyword. Run this only when Q&A evidence is needed. THE TWO PROVIDERS RETURN DIFFERENT THINGS AND YOU MUST SAY"},{"name":"run_local_nap_audit","description":"Compare a claimed business Name/Address/Phone against listings the free OpenStreetMap business search finds near the claimed location. PARTIAL scope: checks ONE"},{"name":"get_local_pack_rank","description":"Read-only access to local pack rank check configs and their latest check. With `configId`, returns that config's latest check: `status` is \"found\" (a real 1-bas"},{"name":"get_local_rank_grid","description":"Read-only access to geo-grid rank-tracking configs and their latest run. With `configId`, returns that config's latest run plus per-point results (position, url"},{"name":"get_gbp_profile","description":"Read-only Google Business Profile listing profile for the project's linked location: title, categories, phone, website, description, hours-period count, and whi"},{"name":"get_gbp_performance","description":"Read-only Business Profile Performance API metrics for the project's linked location over an inclusive date range. `metrics` must be real DailyMetric values: BU"},{"name":"get_gbp_reviews","description":"Read-only reviews for the project's linked Google Business Profile location, one Google-paginated page at a time."},{"name":"reply_to_gbp_review","description":"Reply to (or overwrite the reply on) one review, by reviewId from get_gbp_reviews. Google's endpoint has no separate create/update — this always overwrites. Pub"},{"name":"get_gbp_optimization","description":"Completeness/quality score and AI-grounded optimization recommendations for the project's linked Google Business Profile location. The `score` (0-100) is a DETE"},{"name":"list_gbp_locations","description":"Every Google Business Profile account and location this deployment's operator credential can manage — the picker data for set_gbp_connection. Not project-scoped"},{"name":"get_gbp_connection","description":"The project's currently linked Google Business Profile location, or `{ connection: null }` when none is linked yet. FREE: database only."},{"name":"set_gbp_connection","description":"Links (or repoints) a project to a Google Business Profile location. Take googleAccountId and googleLocationId verbatim from list_gbp_locations — both are Googl"},{"name":"disconnect_gbp","description":"Removes the project's link to its Google Business Profile location. Only MisarSEO's own record of the link is removed — the location on Google is untouched — bu"},{"name":"list_gbp_posts","description":"Posts published on the project's linked Google Business Profile location. A 404 means no location is linked — use set_gbp_connection first."},{"name":"create_gbp_post","description":"Publishes a new \"What's New\" post on the linked Google Business Profile location. It goes LIVE and PUBLIC immediately — there is no draft state and no undo here"},{"name":"delete_gbp_review_reply","description":"Removes the owner's published reply from one Google review (reviewId from get_gbp_reviews). The removal is public and immediate. Confirm with the user before ca"},{"name":"create_local_pack_rank_config","description":"Creates a local pack rank check config: where businessName sits in Google's local pack for one keyword at one location. The location is composed into the query "},{"name":"delete_local_pack_rank_config","description":"Deletes a local pack rank check config, INCLUDING its whole check history. Confirm with the user before calling."},{"name":"run_local_pack_rank_check","description":"Runs a local pack rank check now — one live scrape of Google's public local search results (not the paid Places API). Returns \"found\" with a real 1-based positi"}],"package":null,"toolSurface":{"id":"ts_bxjmb3s7w4yr","endpointId":"ep_yuexcd8jaxpg","hash":"fdc1d20538fdf27552b257234ab7c3008365b90b440f1c8e45bd562c6e6a28cb","toolCount":180,"serverName":"misarseo","serverVersion":"1.0.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-19T00:35:21.853Z","lastSeenAt":"2026-10-20T22:23:22.373Z","observations":8,"toolNames":["list_projects","get_dashboard","research_keywords","save_keywords","list_saved_keywords","classify_keyword_intent","get_keyword_potential","get_keyword_serp_overview","get_keyword_strategy","get_topic_research","get_keyword_list_share_of_voice","get_domain_overview","get_domain_batch","get_domain_authority_history","capture_domain_authority_snapshot","find_serp_competitors","get_keyword_gap","list_competitor_monitors","add_competitor_monitor","remove_competitor_monitor","get_competitor_monitor_changes","get_rank_tracker","add_rank_tracking_keywords","get_rank_config_trend","get_rank_movers","get_rank_keyword_history","get_rank_volatility_index","get_rank_ai_overview_trend","list_rank_annotations","add_rank_annotation","remove_rank_annotation","list_rank_cannibalisation","set_rank_keyword_target_url","list_rank_keyword_tags","update_rank_keyword_tag","get_brave_search_rank_check","create_rank_tracker","list_rank_tracking_keywords","remove_rank_tracking_keywords","start_site_audit","get_site_audit_status","get_audit_comparison","get_audit_core_web_vitals","get_audit_https_report","get_audit_internal_links","get_audit_structured_data","get_search_console_performance","inspect_urls","get_search_console_coverage","get_search_console_hourly_performance","get_search_console_sitemaps","get_gsc_ctr_by_position","get_gsc_anonymous_queries","get_cannibalisation_report","get_content_decay_report","get_backlinks_overview","get_link_intersect","list_disavow_entries","add_disavow_entry","remove_disavow_entry","export_disavow_file","get_backlink_anchors","get_content_optimizer_report","get_content_page_metrics","run_brand_radar_scan","get_brand_radar_scan_status","explore_ai_prompt","research_ai_prompts","compare_ai_competitor_positioning","get_direct_vendor_answers","get_brand_scan_trend","list_brand_monitors","upsert_brand_monitor","delete_brand_monitor","list_tracked_prompts","upsert_tracked_prompt","delete_tracked_prompt","get_tracked_prompt_trend","get_unlinked_mentions_report","get_media_monitoring_report","search_local_businesses","get_google_business_questions","run_local_nap_audit","get_local_pack_rank","get_local_rank_grid","get_gbp_profile","get_gbp_performance","get_gbp_reviews","reply_to_gbp_review","get_gbp_optimization","list_gbp_locations","get_gbp_connection","set_gbp_connection","disconnect_gbp","list_gbp_posts","create_gbp_post","delete_gbp_review_reply","create_local_pack_rank_config","delete_local_pack_rank_config","run_local_pack_rank_check","create_local_rank_grid_config","delete_local_rank_grid_config","run_local_rank_grid","get_web_analytics_summary","get_web_analytics_top_pages","get_web_analytics_sources","get_web_analytics_devices","list_ga4_properties","set_ga4_property","disconnect_ga4","get_ga4_performance_summary","get_ga4_channel_breakdown","get_ga4_landing_pages","log_analyzer_list_uploads","log_analyzer_upload","log_analyzer_daily_summary","log_analyzer_top_paths","list_link_prospects","add_link_prospect","update_link_prospect","update_link_prospect_status","remove_link_prospect","list_link_prospect_activity","add_link_prospect_note","import_link_prospects_csv","export_link_prospects_csv","get_bing_site_overview","get_bing_backlinks","get_bing_url_links","get_bing_url_info","get_bing_keyword_research","get_bing_detail_stats","get_bing_feed_details","submit_bing_content","submit_bing_feed","save_bing_crawl_settings","update_bing_blocked_url","update_bing_query_parameter","list_bing_sites","set_bing_site","disconnect_bing","submit_indexnow","get_yandex_site_overview","reindex_yandex_url","list_yandex_hosts","set_yandex_host","disconnect_yandex","get_baidu_connection","set_baidu_connection","disconnect_baidu","submit_baidu_urls","list_ahrefs_projects","set_ahrefs_project","disconnect_ahrefs","list_patches","draft_patch","batch_draft_patches","publish_patch","revert_patch","list_patch_auto_publish_rules","enable_patch_auto_publish","disable_patch_auto_publish","list_report_definitions","create_report_definition","get_report_definition","rename_report_definition","delete_report_definition","set_report_widgets","render_report_definition","get_report_schedule","upsert_report_schedule","delete_report_schedule","list_portfolios","create_portfolio","get_portfolio","rename_portfolio","delete_portfolio","add_portfolio_projects","remove_portfolio_projects","get_usage"],"distinctSurfaces":1},"endpointFacts":[{"id":"ep_yuexcd8jaxpg","url":"https://api.misar.io/seo/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-20T16:24:59.460Z","auth":{"observedAt":"2026-10-20T16:24:59.915Z","authRequired":false,"scheme":null,"resourceMetadata":null,"authorizationServer":null,"conformance":{"dpop":false,"rfc8414":false,"rfc9728":false,"pkceS256":false,"clientIdMetadataDocument":false,"dynamicClientRegistration":false}},"tls":{"observedAt":"2026-10-20T16:24:59.936Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"misar.io","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-28T11:20:31.000Z","validTo":"2026-12-27T12:20:24.000Z","daysToExpiry":67,"sanCount":2,"fingerprint256":"1B:7B:7E:2B:3D:52:6F:F6:28:A6:B2:6B:BD:88:C1:A2:D1:9E:FA:EF:71:8F:A1:E0:54:CF:96:18:A0:FE:C9:B8"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.Misar-AI/misarseo-mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.Misar-AI%2Fmisarseo-mcp","firstSeenAt":"2026-10-19T00:22:47.539Z","fetchedAt":"2026-10-19T00:22:47.539Z","normalizedAt":"2026-10-19T00:22:47.539Z"}]},"firstSeenAt":"2026-10-19T00:22:47.539Z","updatedAt":"2026-10-20T22:27:57.170Z"}