Google Search Console integration for Model Context Protocol (MCP)
MisarSEO is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Research keywords, track rankings, audit sites, monitor backlinks and AI-search visibility — from…
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user misarseo-mcp '--' npx -y @misarseo/mcp
# 2 — ask your agent for something these tools do
# get_domain_overview, get_domain_batch, get_domain_authority_history and 50 more
Remote: no sign-in · Package: API key.
MisarSEO costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one can run either way — at an address its publisher runs, or as a process under your own user, with your files and your network — and this marketplace is in the path of neither.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user misarseo-mcp '--' npx -y @misarseo/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
Its publisher also runs it at https://api.misar.io/seo/mcp: nothing to start on your machine, and this marketplace is not in the path.
claude mcp add --scope user --transport http misarseo-mcp https://api.misar.io/seo/mcpNothing is required, but it can take MISARSEO_API_KEY (Your MisarSEO API key (mseo_…). Create one at https://seo.misar.io/ai.), MISARSEO_BASE_URL (Override the API base URL. Only needed for self-hosted instances.) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
53 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
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 for domain research. backlinks and referringDomains are ALWAYS null on this tool — no data provider feeds them here, so a null is the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| domain | string | yes | Domain to analyze (e.g. 'example.com'). |
| includeSubdomains | boolean | no | Include subdomains in the domain's metrics. Defaults to false. |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
Domain batch analysis: one authority row per domain, up to 100 at once. FREE — no paid provider call, unlike get_domain_overview. organicTraffic, organicKeywords, backlinks and referringDomains are ALWAYS null on every row — batch mode never attempts the per-domain paid rank-overview call…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| domains | array | yes | 1-100 domains or URLs, any mix. Malformed entries are dropped, not rejected — see skippedInvalid in the result. |
| includeSubdomains | boolean | no | Count subdomains as part of each domain. Defaults to false, unlike get_domain_overview's default true. |
Domain-authority history: the stored trend of dated authority snapshots for one project+domain, oldest first. FREE (no credits) — reads back snapshots already captured, no provider call. Empty until at least one snapshot exists: get_domain_overview auto-captures one whenever domain is the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| domain | string | yes | Domain to read history for (e.g. 'example.com'). |
Capture a domain-authority snapshot now: calls the same free resolver get_domain_overview already uses and records today's reading, so get_domain_authority_history has a trend to read back. FREE (no credits), but this is a MUTATION — idempotent per UTC day, so calling it twice in one day does not…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| domain | string | yes | Domain to capture a snapshot for (e.g. 'example.com'). |
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 tool. Returns {id, name, domain, url} per project; pass the id value as projectId. domain is null for a project that has never had…
No parameter schema on file.
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 only. No SEO data provider is called and no credits are spent — GSC and backlinks are deliberately excluded from this view rather than…
No parameter schema on file.
Lists the caller organization's portfolios, each carrying projectCount. FREE: database only, no SEO data provider is called and no credits are spent.
No parameter schema on file.
Creates a portfolio. Returns { id }. Starts with no member projects — use add_portfolio_projects next. FREE: database only, no SEO data provider is called and no credits are spent.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Portfolio name, 1-100 characters. |
One card per member project (same shape get_dashboard returns — no GSC, no backlinks, see its own description for why) plus aggregate totals. totals.averageHealthScore is averaged over member projects that HAVE been audited, not over every member. FREE: database only, no SEO data provider is…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | string | yes | Portfolio ID. Use list_portfolios to find it. |
Renames a portfolio. FREE: database only, no SEO data provider is called and no credits are spent.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | string | yes | Portfolio ID. Use list_portfolios to find it. |
| name | string | yes | Portfolio name, 1-100 characters. |
Deletes a portfolio. Member projects themselves are untouched — only the grouping is removed. FREE: database only, no SEO data provider is called and no credits are spent.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | string | yes | Portfolio ID. Use list_portfolios to find it. |
Adds projects to a portfolio. Returns { added } — only ids that resolve to a project of the CALLER'S organization are added; any other id is silently dropped rather than erroring the whole call. FREE: database only, no SEO data provider is called and no credits are spent.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | string | yes | Portfolio ID. Use list_portfolios to find it. |
| projectIds | array | yes | MisarSEO project IDs. Use list_projects to find them. |
Removes projects from a portfolio. Succeeds whether or not an id was actually a member. FREE: database only, no SEO data provider is called and no credits are spent.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| portfolioId | string | yes | Portfolio ID. Use list_portfolios to find it. |
| projectIds | array | yes | MisarSEO project IDs. Use list_projects to find them. |
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 entry per seed with ok — a single bad seed won't fail the batch. CHARGES CREDITS ON THE PAID DATA PROVIDER: per seed, ~30-100 credits each…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| seeds | array | yes | 1-5 seed keywords. Each seed is researched independently and returns related keywords with volume/difficulty/CPC. Bulk-friendly — prefer this over multiple single-seed calls. |
| resultLimit | no | Cap on the data provider's own rows per seed. Defaults to 150. It is NOT a cap on rowCount: free Google Suggest ideas are appended after the cap is applied, so a seed can legitimately report more ro | |
| includeClickstreamData | boolean | no | Refine search volumes with clickstream data, which disaggregates Google Ads' grouped close-variant volumes (plurals/misspellings). On the paid DataForSEO provider this DOUBLES the credit cost of each |
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 provided, missing tags may be created. Tags are appended to whatever tags a keyword already carries. Ask the user for confirmation before…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keywords | array | yes | Keywords to save (1-100). |
| tags | array | no | Optional tags to attach to every saved keyword. Ask the user for explicit confirmation before using this, especially when saving many keywords or creating new tag names. |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
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 database, runs no provider lookup and charges no credits. Filter by keyword text with search; page through with page and limit (50,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| search | string | no | Optional keyword text filter. |
| limit | no | Maximum rows to return. Defaults to 100. | |
| page | integer | no | 1-based page number (default 1). |
| sort | string | no | Sort column (default createdAt). |
| order | string | no | Sort direction (default desc). |
Classify 1-200 keywords' search intent from their wording: informational, navigational, commercial, transactional, or unknown. Uses the SAME wording heuristic keyword research already applies as its free-tier fallback, made directly callable for a keyword list with no research/volume data yet.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keywords | array | yes | 1-200 keywords to classify. |
Parent Topic and Traffic Potential for one keyword, built from real SERP overlap across a BOUNDED set (up to 5) of related keywords — not a full keyword-to-URL reverse index, which this codebase's free stack does not have. Parent Topic is the related keyword whose SERP shares the most top-10…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keyword | string | yes | The keyword to analyze. |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
Per-keyword SERP overview: a fresh live SERP snapshot for the keyword, PLUS — when this exact keyword happens to already be tracked in this project's rank tracking — its historical position trend and SERP volatility, read straight from the SAME rank-tracking services…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keyword | string | yes | The keyword to look up. |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
| sinceDays | integer | no | How many days of tracked history to return, 1-730 (default 365). Only meaningful when the keyword is tracked. |
Keyword Strategy Builder: a volume -> cluster -> page -> brief pipeline over 1-500 pasted keywords, composed entirely from existing pieces — the same bulk keyword lookup, the same shared-phrase clustering engine the saved-keyword Topic Clusters feature and get_topic_research both already use, a…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keywords | array | yes | 1-500 keywords to analyze (e.g. from a bulk research run or an export). |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
Content ideas for a seed keyword, composed from three sources this codebase already fetches for other features: the SERP for the seed (titles of pages already ranking for it), PAA-style questions (real autocomplete completions reframed as questions), and autocomplete keyword suggestions. Grouped…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keyword | string | yes | The seed keyword to research. |
| locationCode | integer | no | Numeric location code. Defaults to the project's stored market, else 2840 (United States). |
| languageCode | string | no | Language code. Defaults to the project's stored market, else 'en'. |
Share of Voice across a saved keyword list: the project's own domain plus up to 3 competitor domains, scored over a saved-keyword tag ("a saved keyword list" in this codebase IS a saved-keyword tag — omit tagId/tagName to mean every saved keyword in the project). Reuses the EXACT Share of Voice…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| tagId | string | no | The saved-keyword tag ID to treat as 'the list'. Omit with tagName to mean every saved keyword in the project. |
| tagName | string | no | Alternative to tagId — the tag's name. |
| competitorDomains | array | no | 0-3 competitor domains (bare domain or full URL). |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
Compares domains competing in search results for a supplied keyword set. Useful for market and search-intelligence reports; not radius-based local SEO. The inverse of get_keyword_gap, which asks what one competitor ranks for that we do not. CHARGES CREDITS ON THE PAID DATA PROVIDER, which is also…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keywords | array | yes | Keywords whose SERPs are compared (1-100). |
| resultTypes | array | no | SERP result types to include. Defaults to organic and local_pack. |
| excludeDomains | array | no | Domains to exclude from results (e.g. the user's own site). |
| includeSubdomains | boolean | no | Count subdomains as part of the same competitor domain. |
| sortBy | string | no | Sort order for returned competitors. Defaults to visibility. Only keyword_count and avg_position are measured on every provider — visibility and traffic_estimate are unmeasured on the free pro |
| limit | integer | no | Maximum competitors to return (1-100). Defaults to 50. |
| offset | integer | no | Rows to skip for pagination. |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
Compares the project's own domain against up to 3 competitor domains and classifies every keyword a competitor ranks for as missing / behind / tied / ahead / unknown. The inverse of find_serp_competitors, which asks who competes for a keyword set. CHARGES CREDITS: one ranked-keywords lookup per…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| competitorDomains | array | yes | 1–3 competitor domains (bare domain or full URL). Each one is a separate billable ranked-keywords lookup, so pick the rivals actually being chased. The project's own domain is added automatically and |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market, which falls back to 2840 (United States) for a project that has not set one. See dataforseo.com/help-center/locations. Some count |
| languageCode | string | no | Language code (e.g. 'en', 'es', 'fr'). Omit it to use the project's default market language, which falls back to 'en'. |
| includeSubdomains | boolean | no | Count subdomains as part of a domain. Defaults to true, and applies to every compared domain including ours. |
| sortField | string | no | Sort column: 'volume' (default), 'theirPosition' or 'ourPosition'. All three are measured values — there is deliberately no composite opportunity score. Nulls sort last in both directions. |
| sortOrder | string | no | Sort direction. Defaults to 'desc'. |
| classifications | array | no | Restrict rows to these classifications. Omit for all five — omitting never hides unknown. The filter is applied before the row cap, and totalRows reports the pre-cap match count. |
Competitor page change detection: the specific competitor URLs monitored for a project, with lastCheckedAt (null until the first scheduled check reaches it). FREE — database only, no credits spent. Use get_competitor_monitor_changes for the actual detected-change timeline of one URL.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
Start monitoring one competitor page for changes: title/meta, a real line-level content diff (added/removed/unchanged line counts — never a fabricated similarity score), outbound links, and structured-data types. Checked once a day; the first snapshot is captured on the NEXT scheduled pass, not…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| url | string | yes | The specific competitor page URL to monitor — not a domain to crawl. Normalised and SSRF-validated server-side; a URL resolving to a private/loopback/metadata address is rejected. |
| label | string | no | Optional human-readable label, e.g. 'Acme pricing page'. |
Stops monitoring one competitor URL. Its historical snapshots and detected changes are deleted along with it (cascading delete) — unlike rank tracking's competitor removal, there is no separate archive kept.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| targetId | string | yes | Monitored URL's target ID, from list_competitor_monitors or add_competitor_monitor. |
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 diff: line-level content added/removed/unchanged counts with a short sample (never a fabricated similarity score), plus…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| targetId | string | yes | Monitored URL's target ID, from list_competitor_monitors or add_competitor_monitor. |
| limit | integer | no | Max entries to return. Defaults to 50, capped at 200. |
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 all trackers in the project. FREE — reads stored MisarSEO state only, runs no SERP query and charges no credits. To trigger a new check,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| trackerId | string | no | Rank tracker config ID. If omitted, lists all rank trackers in the project. |
Adds keywords to an existing rank tracker config. Returns { added, addedIds } — added counts only genuinely new keywords; anything already tracked for this config is silently skipped, so added can legitimately be lower than the number of keywords sent. FREE: database only, no SEO data…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. |
| keywords | array | yes | 1-100 keywords to add. Duplicates of already-tracked keywords are silently skipped. |
Per-run keyword-position-distribution buckets for a tracker, oldest first — how many tracked keywords sit in the top 3, 4-10, 11-20, or outside the top 20, per check run. Use it to answer 'is this domain's visibility trending up or down' without re-checking anything. FREE: database only. No SEO…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| device | string | no | Which device's positions to bucket. On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed. Defaults to |
| sinceDays | integer | no | How many days back to look, 1–730. Defaults to 365. |
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, or an earlier position of null). fastClimbers is keywords that ranked at both ends of the window and gained at least minGain positions.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| sinceDays | integer | no | How many days back to look, 1–730. Defaults to 365. |
| minGain | integer | no | Positions a keyword must have gained to count as a fast climber, 1–100. Defaults to 5. Does not affect newlyRanking, which has no earlier position to measure a gain from. |
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 data provider is called and no credits are spent. A position of null means checked but not found within that check's searchedDepth — a…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| trackingKeywordId | string | yes | The tracked keyword's own row ID (from get_rank_tracker's results), not the keyword text. |
| sinceDays | integer | no | How many days back to look, 1–730. Defaults to 365. |
SERP volatility index across recent runs — how much this tracker's own positions churned run over run, derived entirely from already-stored history (no new SERP calls). FREE: database only, no SEO data provider is called and no credits are spent. Modeled on the one step AccuRanker publicly…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| device | string | no | On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed. Defaults to desktop. |
| runLimit | integer | no | How many recent completed runs to compare consecutively, 2-26. Defaults to 12. |
AI Overview presence trend across a tracker's keywords, oldest first — what share of tracked keywords showed Google's AI Overview in the SERP, per check run, and how that has moved over time. FREE: database only, no SEO data provider is called and no credits are spent. Reuses…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| device | string | no | On every free SERP source today this narrows nothing — there is no device dimension, so every reading folds to one series regardless of what is passed. Defaults to desktop. |
| sinceDays | integer | no | How many days back to look, 1–730. Defaults to 365. |
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 and no credits are spent. Config-level, not per-keyword or per-device: a deploy or algorithm change is a fact about the date, not about…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
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 or per-device. A config can hold at most 100 notes.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| date | string | yes | UTC day the note applies to, YYYY-MM-DD. |
| label | string | yes | What happened, 1-200 characters. |
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 id matched an existing note.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| id | string | yes | Note ID, from list_rank_annotations. |
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 provider is called and no credits are spent. NOT the same detector as get_cannibalisation_report (Search Console-based), which finds two-or-more…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
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 mismatch after the next run. FREE: database only, no SEO data provider is called and no credits are spent.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| trackingKeywordId | string | yes | The tracked keyword's own row ID (from the rank tracker's keyword rows), not the keyword text. |
| targetUrl | yes | Absolute http(s) URL you intend to rank for this keyword, or null to clear a previously-set one. |
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 how a tracker with hundreds of keywords is already organised. FREE: database only. No SEO data provider is called and no credits are spent,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
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. FREE: database only. No SEO data provider is called and no credits are spent. The tag is the project's EXISTING saved-keyword vocabulary,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. Call get_rank_tracker without a trackerId to list the project's trackers and their IDs. |
| action | string | yes | 'add' attaches the tag, creating it from tagName when it does not exist yet; 'remove' detaches it. |
| tagId | string | no | Existing tag ID from list_rank_keyword_tags. Pass this OR tagName, never both. |
| tagName | string | no | Tag name, matched on its normalised form — 'Branded', 'branded' and ' branded ' are one tag. Created on 'add' when it does not exist; NOT_FOUND on 'remove'. Pass this OR tagId, never both. |
| trackingKeywordIds | array | yes | Tracking-keyword IDs to tag or untag (1–500 per call). These are the rank tracker's own keyword-row IDs — not saved-keyword IDs, and not keyword text. Duplicates are collapsed, and IDs belonging to an |
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 index since 2023 — a genuinely separate, separately-licensed data source, distinct from this server's free SearXNG/openserp-backed rank…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| keyword | string | yes | Keyword to check. |
| targetDomain | string | no | Domain or URL to check. Defaults to the project's own domain when omitted. |
| country | string | no | 2-letter country code Brave uses to target results, e.g. 'US'. |
| searchLang | string | no | ISO 639-1 language code Brave uses to filter results, e.g. 'en'. |
| depth | integer | no | Results to fetch, 1-20 (Brave's own per-request ceiling). Default 20. |
| competitorDomains | array | no | Competitor domains to also resolve positions for, free within the same fetched result set. |
Creates a rank tracker config (domain + market + devices + schedule) for a project and returns its configId. Next, add keywords with add_rank_tracking_keywords. Positions are collected by the SCHEDULED check ('daily' or 'weekly'; 'manual' means never on a schedule) and read with get_rank_tracker —…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| domain | string | yes | Domain whose positions are tracked, e.g. example.com. |
| serpDepth | integer | yes | How deep to search, 10-100 in steps of 10. |
| locationCode | integer | no | DataForSEO location code. Omit it to use the project's default market. |
| languageCode | string | no | Language code (e.g. 'en'). Omit it to use the project's default market language. |
| locationHint | string/null | no | Free-text city/region hint, honoured only where the SERP provider supports it. |
| devices | string | no | Devices to track. |
| scheduleInterval | string | no | How often the scheduled check runs. |
| rankDropAlertThreshold | integer/null | no | Notify when a keyword falls by at least this many positions. null turns it off. |
| newKeywordAlertEnabled | boolean | no | Notify when the domain starts ranking for a keyword it did not rank for before. |
| competitorMoveAlertThreshold | integer/null | no | Notify when a tracked competitor gains at least this many positions. null turns it off. |
Lists the keywords tracked by ONE rank tracker: { keywords, totalCount, page, pageSize }, each row { id, configId, keyword, searchVolume, keywordDifficulty, cpc, metricsFetchedAt, createdAt }. It returns NO positions and runs no check — read positions with get_rank_tracker. The row id is the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. |
| page | integer | no | 1-based page number. Defaults to 1. |
| pageSize | integer | no | Rows per page. Defaults to 50. |
Removes keywords from a rank tracker by their tracking-keyword IDs (from list_rank_tracking_keywords). The keywords stop being checked; their past position snapshots are deliberately kept, so history survives. FREE: database only.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| configId | string | yes | Rank tracker config ID. |
| keywordIds | array | yes | Tracking-keyword IDs to remove. |
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 it with get_site_audit_status. FREE of SEO credits, but it CONSUMES ONE of the organization's monthly audits from its plan quota (a spent…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| startUrl | string | yes | http(s) URL the crawl starts from, usually the site's home page. |
| maxPages | integer | no | Most pages to crawl (at most 5000). Omit for the service default of 50. |
| strategy | string | no | Which pages get a Lighthouse run. Defaults to auto. |
| renderJs | boolean | no | Run each page's JavaScript before analysing it — needed for client-rendered sites. Defaults to false. |
Progress of a site audit started by start_site_audit: { status, pagesCrawled, pagesTotal, lighthouseTotal, lighthouseCompleted, lighthouseFailed, currentPhase, startedAt, completedAt }. status is 'running', 'completed' or 'failed' — poll until it is 'completed' or 'failed'; there is no…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| auditId | string | yes | The auditId (or jobId — the same value) returned by start_site_audit. |
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 visited are compared, so a shorter crawl never reports the pages it missed as fixed — those are reported separately as notComparableCount.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| auditId | string | yes | Audit ID to compare, from crawl_site or get_crawl_results. |
| baselineAuditId | string | no | Audit ID to compare against. OMIT IT unless you have a reason: omitting picks the COMPLETED run immediately before auditId, while a baseline named here is used as given with no completed-status check |
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 fetch — reads audit_lighthouse_results, the same table the results UI already renders as raw numbers. LAB DATA ONLY, never Search Console's…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| auditId | string | yes | Audit ID, from crawl_site or get_crawl_results. |
HTTPS Report: percentage of pages secure, mixed-content and insecure-link counts, homepage HTTPS-path status, and HTTP URLs in an HTTPS site's sitemap — for a project's latest completed crawl (or a named earlier one). Derives entirely from already-computed crawl data — no new work at read time.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| auditId | string | no | Audit ID, from crawl_site or get_crawl_results. Omitted means the latest completed audit for this project. |
Internal Link Report: outbound/inbound internal link counts per page, orphan pages, dead ends, and click-depth distribution for a project's latest completed crawl (or a named earlier one). No new computation — reads the same audit_pages/audit_issues columns already powering the in-app…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| auditId | string | no | Audit ID, from crawl_site or get_crawl_results. Omitted means the latest completed audit for this project. |
Structured Data Report: pages grouped by schema.org @type, which pages have none, and which pages carry an unparseable JSON-LD block — for a project's latest completed crawl (or a named earlier one). Derives entirely from structured data already extracted at crawl time — no new crawl-time work.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | Required. The MisarSEO project ID to scope this call to. Get one from list_projects. |
| auditId | string | no | Audit ID, from crawl_site or get_crawl_results. Omitted means the latest completed audit for this project. |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install MisarSEO or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 1.0.1. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish MisarSEO can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.