SEOmatic
Server Details
Ask your AI assistant about your own website's SEO and get answers from your real data, not generic advice.
One connector, all your channels: Google Search Console (rankings, clicks, indexing), Google Analytics (traffic and sources), Google Ads (campaigns and search terms), Google Business Profile (local visibility and reviews), Google Trends, keyword research, backlinks and link prospects, competitor rankings, site crawls, and AI visibility (does ChatGPT mention your site?).
Ask things like: which keywords am I one push away from page 1 for? Why did traffic drop last month? Which competitor is outranking me, and where? Are my ads and SEO fighting over the same keywords?
Then let it act. On a paid plan, your assistant can prepare SEO fixes, content campaigns, and article drafts. Nothing touches your site until you approve it in SEOmatic, and every change shows before-and-after results.
Connect via OAuth: log in, pick your site, done. No API key needed.
- Status
- Healthy
- Uptime
- 99.6% over 41 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- Minh42/seomatic-mcp
- GitHub Stars
- 0
- Server Listing
- SEOmatic MCP Server
TDQS
Scored across 38 tools
The tool set covers many adjacent SEO/AI-visibility domains (scans, citations, crawler activity, GA4 traffic, GSC, SERP, keywords, tasks, campaigns, trust facts), and several tools overlap conceptually. Descriptions do a good job of explicitly distinguishing them, but an agent can still confuse which AI-visibility or task/approval tool to call first. Boundaries are mostly documented rather than inherently crisp.
All names use snake_case, which is readable, but the verb pattern is mixed: some start with get_, run_, set_, show_, confirm_, generate_, import_, upload_, or resume_, while many are noun phrases like ai_citations, billing_status, clause_manage, keyword_clusters, and traffic_analytics. There is no single predictable verb_noun convention.
With 38 tools, the surface is heavy for an MCP server and sits well above the typical 3–15 well-scoped range. The platform is broad, so some expansion is justified, but the count makes selection and maintenance clearly more difficult than necessary.
The server covers a wide range of SEO, AI-visibility, analytics, and agent-task operations, but it references a get_ai_visibility tool for polling scan results that is absent from the provided list. That creates a dead end for fresh AI-visibility scans and can force the agent to waste credits or fail to retrieve results cleanly. Other lifecycle gaps exist around datasets and some content operations.
Available Tools
38 toolsai_citationsObserved AI citations & brand factsRead-onlyIdempotentInspect
This site's OWN first-party AI-citation data, the part no scan can see. observed_citations: citations recorded in REAL logged-in AI answers (ChatGPT, Perplexity, Gemini, Copilot, Claude, AI Overviews) by the user's browser extension, with per-engine counts and best rank - engines personalize and gate their APIs, so a server-side scan sees a de-personalized view while this sees what a real human was shown. brand_facts: the canonical business facts this site publishes for AI engines, plus internal-link health; use them to spot an AI answer contradicting the owner's own declaration. Counts only, never prompt or answer text. scan_results reads the latest server-side SCAN instead: per-engine brand visibility, the prompts where the brand was MISSED and who won them, competitors, and the sources engines cite. Observed vs scanned is the key distinction - observed is what a real logged-in human saw, scanned is a clean de-personalized baseline comparable over time. For AI traffic per page use traffic_analytics. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | look-back window in days (1-90, default 28). | |
| action | Yes | Which operation to run. observed_citations (real logged-in AI answers that cited this site); brand_facts (declared canonical facts + internal-link health); scan_results (latest scan: per-engine visibility, missed prompts, competitors, cited sources). | |
| scanId | No | scan_results only: a specific scan id from recentScans. Omit for the latest completed scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
backlink_profileBacklink ProfileRead-onlyIdempotentInspect
Read the backlink profile of your own site or any competitor: referring domains, anchor-text distribution, link velocity, and link-prospect intersects. Read from the link index at call time; a domain with no indexed links returns an empty profile, not an error. Use for authority and link questions; for rankings use serp_competitors. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: bills AI credits per call (live vendor data at actual cost); reads of your own stored data elsewhere are free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | anchors (default 25) and referring_domains (default 50). | |
| action | Yes | Which operation to run. summary (totals, referring domains, rank/spam); anchors (anchor-text distribution); velocity (monthly new vs lost referring domains); referring_domains (top linking domains); link_prospects (link intersect: linking to competitors but not to us). | |
| domain | No | The domain to analyze, e.g. "example.com". Omit it to analyze the connected workspace's own site (the server fills it in); pass it only to analyze a competitor. | |
| months | No | velocity only: months back (default 6). | |
| competitors | No | link_prospects only: 1-3 competitor domains to intersect against. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
billing_statusBilling StatusRead-onlyIdempotentInspect
The workspace's plan, status (active, trial, paused, cancelling), next renewal or end date, workspaces in use and whether an extra workspace can be added without a plan change, free questions left on the free plan, and the billing page link for invoices, payment method, pausing or cancelling. Workspace owner only; a member is told to ask the owner. Cost: FREE - reads stored/own data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
campaign_manageSEO Campaigns & ContentDestructiveInspect
Read campaigns and stage page-scale, content-sweep, or bulk-edit campaigns and blog articles. All staging is proposal-based and approval-gated; nothing publishes without the user. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: list/get reads are FREE. Creating/approving a campaign bills AI credits per page only as the staged work actually executes; nothing is spent at staging time.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | propose_page_scale only (required): page kind, e.g. "location pages". | |
| rows | No | propose_page_scale, rowSourceKind=user: one object per page. propose_location_pages (required): one object per location (name + the facts the user gave; enrich: pageUrl). | |
| urls | No | propose_bulk_edit, selectorKind=urls: the pages. | |
| brief | No | manage+update_brief: replacement brief. Also propose_page_scale (template brief) and propose_content_sweep (shared direction). | |
| title | No | propose_page_scale (required), propose_content_sweep (required), propose_bulk_edit and propose_location_pages (optional). | |
| action | Yes | Which operation to run. list (campaigns with status + task counts); manage (approve/pause/resume/abandon/update a campaign); propose_page_scale (a set of pages on the site own page or own template); propose_location_pages (location pages on the site own layout (drafts), or existing ones improved); propose_content_sweep (N distinct blog articles as a campaign); propose_bulk_edit (one instruction across many pages); write_articles (direct N-article staging). | |
| status | No | list only: filter campaigns by status. | |
| topics | No | propose_content_sweep (required, up to 50) and write_articles (required, 2-50). One distinct article per topic. | |
| confirm | No | manage only, approve + abandon: must be true - attests the user explicitly asked for this (approve releases work + spend; abandon is irreversible). | |
| maxPages | No | propose_bulk_edit only: cap the sweep size. | |
| segments | No | propose_bulk_edit: advanced mixed-template selectors (overrides selectorKind/instruction). | |
| taskType | No | propose_bulk_edit only (required): the sweep type, e.g. ctr_fix, schema, content_refresh. | |
| projectId | No | propose_page_scale: the customer's own project whose fields hold their {{Column}} template. Needs projectId or exemplarUrl. | |
| rowTarget | No | propose_page_scale only: target number of rows/pages. | |
| campaignId | No | manage only: the campaign to act on. | |
| pathPrefix | No | propose_bulk_edit, selectorKind=path_prefix: the prefix. | |
| autoPublish | No | write_articles only: default true (articles that pass our checks publish on their own, with undo); false keeps them as drafts. | |
| exemplarUrl | No | propose_location_pages (create) and propose_page_scale: the customer's own page the new pages copy (layout, embeds, page type). propose_page_scale needs exemplarUrl or projectId. | |
| instruction | No | propose_bulk_edit only: shared per-page brief. | |
| allowGenText | No | propose_page_scale only: allow per-row AI text (costs credits). | |
| locationMode | No | propose_location_pages only (required): create = new draft pages modelled on exemplarUrl; enrich = rewrite existing location pages (rows carry pageUrl). | |
| manageAction | No | manage only: what to do to the campaign. approve releases the campaign to execution (the USER must have explicitly said yes first). | |
| selectorKind | No | propose_bulk_edit only: how to select pages. | |
| exemplarPlace | No | propose_location_pages, create: the place the model page is about, when its title does not say. | |
| rowSourceKind | No | propose_page_scale only: where page rows come from (required with exemplarUrl; with projectId defaults to the project dataset). No AI source: an invented row list is refused. | |
| publishAsDraft | No | propose_page_scale only: publish pages as drafts. | |
| libraryDatasetId | No | propose_page_scale, rowSourceKind=library: dataset id to attach. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
confirm_trust_factConfirm Trust FactInspect
Record the USER'S confirmation of one harvested trust fact (by id from show_trust_facts_card), allowing the agent's writers to claim it. THE CLICK IS THE CONSENT: call this ONLY when the user explicitly confirmed that exact fact - the Trust Profile widget's Confirm button is the intended caller, or the user saying in their own words 'yes, use that one'. NEVER confirm on your own judgment, never confirm in bulk, never treat silence as consent (same doctrine as task_manage decide). Confirming is reversible in Settings → AI Agents. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| factId | Yes | The fact id from show_trust_facts_card |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
contact_supportContact SupportRead-onlyIdempotentInspect
Reach the SEOmatic team: returns the support email and, when message is given, passes the message to the team (they reply by email). Use when the user asks for a person, reports a bug, or has a billing or account problem the tools cannot solve. Not for cancelling: the owner cancels in one click on the billing page (billing_status gives the link). Cost: FREE.
| Name | Required | Description | Default |
|---|---|---|---|
| No | A reply address, only if the user gave one different from their account email. | ||
| message | No | The user's problem or question in their words. Omit to just get the address. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
dataset_libraryDatasets & TemplatesRead-onlyIdempotentInspect
The dataset library and page templates that power programmatic pages: list datasets, sample rows, list templates, and read one template. Reads stored data as-is: sample rows are capped, and an empty library returns empty lists, not an error. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | find_page_set_patterns: a head term to research with the keyword provider ('signage'); omit for Search Console only. | |
| limit | No | dataset_rows only: how many rows to sample. | |
| action | Yes | Which operation to run. find_page_set_patterns (keyword research for a page set: the repeated query templates with a varying slot, entities ranked by demand (a seed term adds the keyword provider and costs credits)); list_datasets (available datasets); list_page_projects (the site own page projects (own {{Column}} templates)); dataset_rows (sample rows from one dataset); list_templates (built-in page templates); get_template (one template in full). | |
| datasetId | No | dataset_rows only: the dataset to sample. | |
| templateId | No | get_template only: the template to read. | |
| minEntities | No | find_page_set_patterns: smallest set worth showing (default 5). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
generate_articleGenerate ArticleInspect
Write one in-depth SEO article on a topic ($9, consumes 1 prepaid pay-as-you-go unit; no subscription required). Research-grounded against live rankings, quality-gated, delivered as markdown + HTML. Generation is async (a few minutes): this returns an article_id to poll with get_article. With no prepaid units left the result is a payment_required payload with the price and a buy link (not a failure). Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | The keyword/topic to write about, e.g. "how to choose trail running shoes". |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_ai_crawler_activityAI Crawler ActivityRead-onlyIdempotentInspect
Which AI bots (GPTBot, ChatGPT-User, PerplexityBot, ClaudeBot…) visited the user's site, classified by purpose (answer-time retrieval / AI-search indexing / model training), with per-bot trends, top crawled pages and the crawl→citation funnel. Needs a one-time setup (WordPress plugin or Cloudflare Worker sends bot visits to SEOmatic). When it is not set up the result says so (connected=false, needs_setup=true): visits are UNMEASURED, never zero - relay the setup link it carries, and use its robotsAccess check (read live from robots.txt) to say whether AI bots are allowed in at all. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| windowDays | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_ai_funnelAI Referral FunnelRead-onlyIdempotentInspect
The full AI-search funnel per page of the user's site, joined across three measurements nobody else holds together: CITED (engines named the page as a source in tracked answers), CRAWLED (answer-time/indexing AI bots actually fetched it), REFERRED (GA4-measured assistant-referred visitors landing on it), plus the market's captured fan-out query count as stage 0. HONESTY: check measured first - a false flag means that whole column is UNMEASURED (crawler ingest not connected / GA4 not connected / pre-capture scans), never zero. A page cited but never crawled suggests engines answer from cache; crawled but never cited is content that gets read and passed over; cited+crawled+referred is the full loop working. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_articleArticle StatusRead-onlyIdempotentInspect
Fetch a pay-as-you-go article by id (poll after generate_article), or omit article_id to list the most recent articles and the prepaid balance. A ready article carries BOTH formats: markdown (source of truth) and html. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| article_id | No | The id returned by generate_article. Omit to list. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_credit_usageCredit UsageRead-onlyIdempotentInspect
Where this workspace's AI credits went in the current billing period: customer-language groups (items) AND the raw per-feature ledger with event counts (features) - the per-agent/per-action granularity an integration needs. Total reconciles with the plan meter. Free operations are listed explicitly. Refunds show as negative credits. Cost: FREE - reads stored/own data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_referral_linkReferral LinkRead-onlyIdempotentInspect
The user's personal SEOmatic Refer and earn link and earnings. Returns: shareUrl (their /r/ link), totalReferred, converted (became paying), and earnings per currency (pending, ready, paid, in minor units). The offer: the referrer earns 25% of what each customer they bring pays, for 12 months, up to $500 per referral, paid to PayPal 30 days after each payment; the new customer gets 25% off their first 3 months. Nothing is earned at signup. Cost: FREE - reads/mints own data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_startedGet Started: Site Verdict and Top 3 ActionsRead-onlyIdempotentInspect
Gives an overview of the user's OWN site in one answer; useful at the start of a session or when the user asks how their site is doing, what to fix, where to start, or what SEOmatic can do. The answer covers: whether Google can index the site (status, redirects, noindex, canonical, robots.txt, JavaScript-only pages, a sample of up to 10 sitemap pages), Search Console clicks and the near-page-one queries worth pushing (when connected), market data in the site's own country, a verdict, the top 3 actions ranked by impact with the numbers behind them, what could not be checked, and one next step. Present the verdict and the 3 actions; do not dump the evidence. With no site on record and none given, pass topic (what the business does) for a market starter instead of asking twice. For a competitor's site use the competitor tools instead. Cost: FREE for reads; the one market-data lookup uses the free allowance or credits like any keyword question.
| Name | Required | Description | Default |
|---|---|---|---|
| site | No | The user's OWN website, only if the workspace has none on record yet (the answer says so). Never a competitor. | |
| topic | No | What the business sells or does, in the words a customer would search (e.g. "wedding photographer lyon"). Use when no site is on record and the user has not given one: the answer sizes that market instead. | |
| confirmed_own | No | Set true only after the user confirmed that `site` is their own website; the workspace then remembers it. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_target_termsTarget TermsRead-onlyIdempotentInspect
The searches this business says bring it customers, each with the page that should show for it and a priority (high, medium, low). The agents plan around them: when Google shows a different page for a term, the chosen page gets the fix. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_task_rollbackTask Rollback DetailRead-onlyIdempotentInspect
What the pipeline can RESTORE for an executed task: every live edit stores the page's full pre-edit state (rollback_data) before writing. Call this FIRST whenever the user reports an agent edit removed, broke, or damaged something on a page - NEVER tell the user original content is lost without checking here. Returns which fields are recoverable, the original embed code (maps/videos/booking widgets) verbatim, and how the user triggers the one-click restore. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | The executed task id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_trust_entitiesTrust EntitiesRead-onlyIdempotentInspect
The trust entities AI engines consult when answering questions about the user's market, mined from the ACTUAL fan-out queries our scans capture (site:-scoped searches + review platforms / analysts like G2, Gartner, Reddit). Every entity carries the honest cross: queried AND cited, or queried-but-never-cited (a retrieval door the brand hasn't earned - the outreach list), plus cited-without-querying hosts that pure fan-out mining is blind to. ownSite entries are hygiene, not outreach. findingsWithFanouts is the denominator - engines only started exposing fan-outs in our scans from 2026-09-15, so a low number means run a fresh scan, not 'no trust entities exist'. progress.opened lists doors that OPENED since the previous scan (queried-but-never-cited then, cited now) - when non-empty, lead with it: it is the receipt that the user's corroboration homework landed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_trust_factsTrust Profile FactsRead-onlyIdempotentInspect
The workspace's TRUST PROFILE: the provenance-tracked, verifiable business facts (credentials, years of experience, awards, review counts, guarantees) the agent's writers are allowed to claim in E-E-A-T work. Each fact carries its source URL and whether the customer confirmed it. When this list is empty, the agent deliberately writes AROUND trust claims rather than inventing them - if the user wants stronger E-E-A-T content, point them to Settings → Agent → Trust Profile to scan their site for facts or add their own (adding/confirming happens there, never through chat). Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gsc_indexingURL Indexing InspectionRead-onlyIdempotentInspect
Check Google index status and coverage diagnostics for one URL or a batch of URLs (coverage state, crawl status, robots/canonical issues). Batch inspection caps at 50 URLs per call (Google allows ~2,000/day per property) and reports each URL independently - one failed URL never fails the batch. When Google answers slowly, the result is partial: it carries the finished URLs plus notChecked, the URLs to send in the next call. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | inspect only: the fully-qualified URL to inspect. | |
| urls | No | batch_inspect only: the URLs to inspect. | |
| action | Yes | Which operation to run. inspect (one URL, full diagnostics); batch_inspect (many URLs, summary each). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gsc_insightsSearch Console InsightsRead-onlyIdempotentInspect
Derived analyses over your Search Console data: keyword cannibalization, brand vs non-brand split, CTR outliers (pages under-earning their position), rich-result appearance performance, 16-month seasonality verdicts, and sitemap health. Analyses read your captured Search Console history (finalized weekly), so verdicts lag live Google by a few days. Use gsc_performance for raw metrics; use this for the diagnosis layer. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (7-90, default 28). | |
| action | Yes | Which operation to run. cannibalization (queries split across competing pages); brand_split (brand vs non-brand performance); ctr_outliers (pages under-earning their position (title/meta candidates)); search_appearance (rich results / enhanced appearance breakdown); seasonality (16-month YoY verdict: real change vs seasonal dip); sitemaps (sitemap errors, warnings, pending, staleness). | |
| brandTerms | No | brand_split only: brand words/variants, lowercase. Defaults to the domain name. | |
| minImpressions | No | cannibalization/ctr_outliers: minimum impression volume to judge (defaults 100/200). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
gsc_performanceSearch Console PerformanceRead-onlyIdempotentInspect
Read Google Search Console performance (clicks, impressions, CTR, position) by query, page, dimension, or period comparison. Your own connected property; data is Google-finalized with a ~2-3 day lag. days/dates bound every action, and compare_periods contrasts the window with the one immediately before it. Queries for ONE page: dimension_breakdown with dimension=query and filterPage (that page's own numbers per query). Pages for ONE query: dimension_breakdown with dimension=page and filterQuery, or query_pages. The whole site's query-to-page map: query_page_matrix. For diagnosis (cannibalization, CTR outliers) use gsc_insights rather than recomputing here. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Look-back window in days (defaults ~28). 1-90 for most actions; 7-90 for trend. | |
| page | No | query_pages only: a full page URL to check - returns its own row for each query, or null when it does not rank. | |
| depth | No | folder_rollup only: path depth to group by (1-3, default 1). | |
| limit | No | Row cap. top_queries/top_pages/dimension_breakdown default 50; compare_periods rows per period default 500. Ignored by query_page_matrix (use maxRows) and trend. | |
| action | Yes | Which operation to run. top_queries (top search queries); top_pages (top pages); dimension_breakdown (by device/country/date, or one page's queries (query + filterPage) / one query's pages (page + filterQuery)); query_page_matrix (cannibalization / query-to-page map); query_pages (which pages rank for given queries, with each page's own numbers); compare_periods (decay/growth vs the prior period); trend (daily clicks/impressions over time); discover_news (Discover / News / Image / Video surfaces); folder_rollup (performance by URL folder / site section); fresh (provisional today/yesterday numbers (hours-old data)). | |
| maxRows | No | query_page_matrix only: max query-page pairs (100-1000, default 200). | |
| queries | No | REQUIRED for query_pages: 1-5 exact search queries. Page rows are that page's own numbers; queryTotal is site-wide and never a page's number. | |
| surface | No | discover_news only: which surface (default discover). | |
| dimension | No | REQUIRED for dimension_breakdown: device|country|date|query|page (query + filterPage = the queries one page ranks for, with that page's own numbers; page + filterQuery = the pages ranking for one query). For compare_periods: query|page (default page). Ignored otherwise. | |
| filterPage | No | dimension_breakdown only: restrict to one exact page URL, as Search Console records it (pair with dimension=query to see the queries that page ranks for). | |
| filterQuery | No | dimension_breakdown only: restrict to one exact query (pair with dimension=page to see which pages rank for it). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
import_attachment_as_datasetImport Dataset from AttachmentInspect
Promote a spreadsheet the user uploaded IN THIS CONVERSATION (CSV/Excel - its preview carries an attachmentId) into a private dataset in their library. Call it when the user wants the file used as campaign data (pages-at-scale rows, bulk targets) or asks to save it as a dataset - the returned id then goes to propose_page_scale_campaign as libraryDatasetId with rowSourceKind 'library'. Only works on files uploaded here (stash lives ~2h); nothing else is creatable this way. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Dataset name (defaults to the file name) | |
| attachmentId | Yes | The attachmentId shown in the uploaded file preview |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
keyword_clustersKeyword Cluster MapRead-onlyIdempotentInspect
The agent's cached keyword-cluster map built from the workspace's GSC query universe (pillar, cannibalization, gap, and covered clusters). A stored lookup, not a recomputation: it reflects the last refresh and is empty until GSC history exists. For live demand numbers use keyword_research. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Which operation to run. list. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
keyword_researchKeyword ResearchRead-onlyIdempotentInspect
Research keyword demand: search volume, difficulty, CPC, and intent, plus keyword ideas, Google Trends interest and related queries, and Google Ads keyword performance. Volume and difficulty come from a live keyword vendor: a workspace without vendor credits gets an explanatory error with the path forward, never fabricated numbers. Use for what to target and how much demand exists; for who ranks today use serp_competitors. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: metrics and suggestions bill AI credits (live vendor data at actual cost); trends, related_queries, compare and performance are FREE (Google Trends / your connected Google Ads).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | suggestions/ads_performance: max results. | |
| action | Yes | Which operation to run. metrics (volume/difficulty/CPC/intent); suggestions (keyword ideas from seeds); compare_trends (Trends interest, keywords side by side); trend (Trends interest over time for one keyword); related (Trends related queries). | |
| keyword | No | trend/related: the single keyword to analyze. | |
| keywords | No | metrics/suggestions/compare_trends: the seed or target keywords. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
local_presenceLocal Business PresenceRead-onlyIdempotentInspect
Read the local search presence of the connected business: Business Profile locations, local ranking for money keywords, and review ratings. Available actions depend on what is connected for this workspace. Use for local and map-pack questions; for national rankings use serp_competitors. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: list_locations and reviews read your connected Business Profile and are FREE; visibility bills AI credits (live local SERP data at actual cost).
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Which operation to run. visibility (local organic position for keywords). | |
| keywords | No | visibility only: the money keywords to measure. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
resume_page_publishingResume Page PublishingDestructiveInspect
Resume a page campaign whose publishing was PAUSED BY THE SCALE GOVERNOR (list_seo_campaigns shows publishingHold on the campaign: the first published pages earned essentially no Google search appearances, so the drip stopped itself before publishing more of the same template). Resuming is an explicit, informed decision: pass the resumeToken from that hold - the token is derived from the hold itself, so having it proves the evidence was read. STRONGLY consider fixing the template/content first (the hold says why the pages aren't being found); resuming publishes more of what is currently not working. Cost: resuming is free, but the released pages bill AI credits as each one generates/publishes (same as campaign execution).
| Name | Required | Description | Default |
|---|---|---|---|
| campaignId | Yes | The held campaign id | |
| resumeToken | Yes | The hold's resumeToken from list_seo_campaigns.publishingHold |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
run_ai_visibility_scanRun AI Visibility ScanInspect
Start a FRESH AI-search visibility scan: queries the live AI engines (ChatGPT, Claude and Google AI Overviews by default, plus any the monitor switched on, such as Perplexity) with buyer-intent prompts and measures whether the brand appears. Scans YOUR OWN site by default; pass domain to scan a COMPETITOR instead (same engines, their brand). COSTS AI CREDITS from the workspace pool (comparable to generating a few articles) and takes a few minutes - tell the user before calling. Returns a scanId immediately; poll results with get_ai_visibility. Check get_ai_visibility FIRST: reading an existing recent scan is free. Limited to one assistant-triggered scan per hour.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | No | Competitor domain to scan instead of your own site, e.g. "competitor.com". Omit for your own site. | |
| is_my_site | No | Only when the workspace has no site on record yet: true if the domain is the user's own site, false if it is a competitor. Ask the user; never guess. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
serp_competitorsSERP & CompetitorsRead-onlyIdempotentInspect
Inspect the live search landscape: which SERP features (AI Overview, snippet, PAA, local pack, video) appear for a keyword, plus domain-level top rankings, visibility distribution, and competitor domains. Results are fetched from the live SERP at call time, capped by limit per action. Use for who ranks and why; for keyword demand use keyword_research. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: bills AI credits per call (live vendor data at actual cost); reads of your own stored data elsewhere are free.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max results where applicable. | |
| action | Yes | Which operation to run. features (which SERP features appear for a keyword); domain_rankings (top keywords a domain ranks for); domain_overview (organic visibility distribution); domain_competitors (domains ranking for similar keywords). | |
| domain | No | domain_rankings/domain_overview/domain_competitors: the domain. Omit for the connected workspace's own site (the server fills it in); pass only for a competitor. | |
| keywords | No | features only: the keyword(s) to inspect. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
set_target_termsSave Target TermsDestructiveInspect
Save the searches the USER says bring them business: add or update terms (each with the full URL of the page on their own site that should show for it, and a priority), or remove terms. Call only with terms the user named or confirmed, never ones you guessed. Pages on another site are refused. Up to 50 terms per site; the agents plan around them from the next run. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | Terms to add or update (same term = update) | |
| remove | No | Terms to stop tracking |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
show_approval_cardsShow Approval CardsInspect
Render inline Approve/Dismiss cards for EXISTING proposed tasks and campaigns (get ids from list_seo_tasks / list_seo_campaigns first). Call this whenever the user wants to see, review, or act on proposals that already exist - the cards appear directly in your reply. NEVER send the user to the dashboard to approve something; this brings the approval to the conversation. Cost: FREE - reads stored/own data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| taskIds | No | ||
| campaignIds | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
show_trust_facts_cardTrust Profile CardRead-onlyIdempotentInspect
Render the Trust Profile card inline: harvested-but-unconfirmed business facts with one-tap Confirm buttons, or a 'Scan my site' button when the profile is empty. Use when the conversation touches E-E-A-T/credibility/trust, or when explaining that the agent omitted trust claims because no confirmed facts exist. The user's tap does the confirming - never claim a fact is confirmed until they act. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
site_auditSite-Wide Technical AuditRead-onlyIdempotentInspect
Site-WIDE technical SEO audit: crawls up to 30 of the workspace's pages (from the synced page inventory, or pass specific urls) and aggregates cross-page issues a single-page check cannot see - duplicate titles and meta descriptions, missing metas, near-empty pages, noindex leaks (meta tag or X-Robots-Tag header), canonicals pointing elsewhere, slow pages, dead pages, and broken internal links (link targets are HEAD-checked). FREE: fetches with SEOmatic's own crawler, no vendor spend. Bounded by a time budget; a partial crawl says so explicitly. Cost: FREE - crawls with SEOmatic's own crawler at call time, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | No | Specific pages to audit (max 30). Omit to audit the newest pages from the synced inventory. | |
| limit | No | How many inventory pages to crawl when urls is omitted (default 20). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
site_pagesSite & Page AnalysisRead-onlyIdempotentInspect
Analyze pages: on-page SEO score and critical issues for a URL, raw crawl metadata (title, meta, headings, links), and the page inventory of the site. analyze and crawl fetch the LIVE page at call time (an unreachable URL returns the fetch error); inventory reads the stored index, synced daily, so brand-new pages can lag a day. Use for page-level diagnosis; for search performance of those pages use gsc_performance. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | analyze/crawl: the URL to inspect. | |
| limit | No | inventory only: max pages to return. | |
| action | Yes | Which operation to run. score_draft (score a pasted DRAFT pre-publish (deterministic, free)); analyze (SEO score + critical issues); crawl (title/meta/headings/links); inventory (the user's real synced pages). | |
| content | No | score_draft: the draft HTML or plain text/markdown. | |
| contentType | No | score_draft: guide|tutorial|listicle|review|roundup|comparison|case_study|research|opinion (default guide). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
strategy_insightsSEO Strategy & DiagnosisRead-onlyIdempotentInspect
The agent's cached diagnosis for this workspace: a compact snapshot, the current strategy, one raw signal in full, and AI-search content scores. Signals refresh nightly; the strategy itself updates on the agent's weekly cycle. A workspace the agent has never diagnosed says so rather than inventing one. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Which operation to run. snapshot (compact brief of cached signals); strategy (themes + ranked big plays); signal (one cached signal in full); content_scores (AI-search scores for generated articles). | |
| signal | No | signal only: which cached signal to read (e.g. index_coverage, backlink_profile). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
task_manageSEO TasksDestructiveInspect
The agent's full task lifecycle: read the plan board, stage proposals (create accepts up to 5 per call), approve/dismiss (decide), run approved tasks (execute), undo applied changes (rollback), and confirm a hand-pasted change (paste_done: SEOmatic looks for it on the live page before measuring). Staging never runs anything; every mutation is human-approval-gated - decide records the human's decision (auto-executable standalone tasks then dispatch within seconds; the response says whether they did), execute force-runs a task the instant path declined or releases held work with a staged-content reviewToken, rollback is drift-guarded. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: list/get/create/decide are FREE (create only STAGES proposals, nothing runs). rollback is FREE but UNDOES a live change - it is an action, not a read. paste_done is FREE. execute runs the agent and bills AI credits when the work runs (a title/meta/H1 fix is typically a few hundred credits); approving auto-dispatches that run. Inspecting tasks, evidence and statuses never triggers re-analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | list only: filter by task type. | |
| force | No | rollback only: undo even though the live page drifted from what the agent wrote. Set ONLY after the user explicitly confirmed overwriting their newer edit. | |
| tasks | No | create only: up to 5 task objects to stage as proposals (see the SEOmatic docs for the task shape). | |
| action | Yes | Which operation to run. list (the plan board (filterable)); get (one task in full detail); create (stage up to 5 task proposals); decide (approve or dismiss a staged proposal (the approval loop)); execute (run an approved task now; a reviewToken releases staged holds; refresh_pull_request updates an open GitHub pull request, or opens a new one if someone else changed its branch); rollback (undo an executed task's live change (drift-guarded)); paste_done (the user pasted a handed-over change; SEOmatic looks for it on the live page before measuring). | |
| status | No | list only: filter by task status (proposed, approved, ...). | |
| taskId | No | get/decide/execute/rollback/paste_done: the task to act on. | |
| decision | No | decide only: approve releases the task to the gated pipeline; dismiss archives it. Approving an indexation-destructive type (noindex, redirect) also requires confirmDestructive: true. | |
| reviewToken | No | execute only: from get's stagedReview block. Releases a staged hold (first rewrite / money page); pass it ONLY after the human explicitly approved the staged content itself. | |
| confirmDestructive | No | decide/execute: required true for indexation-destructive types (noindex, redirect). Attestation that the human explicitly signed off on this specific task after seeing its URL and consequence - never set it on your own judgment. | |
| refresh_pull_request | No | execute only, GitHub: rewrite the task's OPEN pull request against the site's latest version (the dashboard's Refresh): updates the pull request, or opens a new one if someone else changed its branch. Runs the task again, so it uses AI credits like the first run - set it ONLY when the user asked for the refresh. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
traffic_analyticsTraffic & Ads AnalyticsRead-onlyIdempotentInspect
Google Analytics (GA4) traffic and Google Ads account, campaign, and search-term performance. overview/sources/landing_pages/top_pages read GA4; the ads_* actions read Google Ads - each names its missing connection instead of returning empty data. GA4 sessions and Search Console clicks measure different things: for search clicks use gsc_performance. ai_pages is first-party AI engagement (answer-crawler fetches and AI-referred visits per page) that GA4 cannot attribute - it files that traffic as "Direct". Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | look-back window in days. | |
| limit | No | max rows where applicable. | |
| action | Yes | Which operation to run. ai_pages (first-party AI engagement per page: crawler fetches + AI-referred visits). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
upload_csvUpload a CSVInspect
Stage CSV TEXT so it can be imported as a dataset. This exists for MCP Apps hosts: MCP has no file transport, so a widget reads the user's file in the browser and passes its text here, receiving the same attachmentId a chat upload would mint. Pass that id straight to import_attachment_as_dataset. In chat you never need this - the upload preview already carries an attachmentId. Do NOT invent CSV content to call this with; it is a transport for a file the USER chose. Cost: FREE - reads your connected/stored data, no AI credits.
| Name | Required | Description | Default |
|---|---|---|---|
| fileName | Yes | The file's name, e.g. cities.csv | |
| csvContent | Yes | The raw CSV text, header row first |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
visibility_manageAI Visibility MonitorDestructiveInspect
Manage the workspace's AI-visibility monitor: list the tracked prompts scans ask every engine, add/edit/remove prompts, set the scan cadence, and choose which AI engines are tracked. Reads of scan RESULTS live in ai_citations action scan_results. Running a FRESH scan is not available over MCP; point the user at the dashboard. Config changes apply directly (no staging) but are plan-capped, and cadence and engines are spend levers - 'daily' multiplies recurring scan cost ~7x, each added engine adds its per-question cost; both need the user's explicit ask. Already scoped to the connected workspace and its site; no domain or site parameter is needed. Cost: all actions are FREE config changes; each ACTIVE prompt raises the recurring scan cost when scans run, cadence 'daily' is ~7x weekly spend, and each tracked engine adds its per-question cost - disclose before setting.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | update: new prompt wording. | |
| reset | No | set_engines: true tracks the default engines. | |
| action | Yes | Which operation to run. list (tracked prompts + plan allowance + cadence); add (track a new buyer question (plan-capped)); update (rename / pin / (de)activate a prompt); remove (delete a prompt permanently (confirm with the user)); set_cadence (weekly / daily / manual - daily is ~7x spend, explicit user ask only); set_engines (choose tracked AI engines (full list) or reset to defaults - each engine adds scan cost, quote it first). | |
| active | No | update: false pauses scanning (keeps history), true re-activates (re-checks the plan cap). | |
| pinned | No | update: pin the prompt. | |
| prompt | No | add: the buyer question to track, in the customer voice. | |
| cadence | No | set_cadence: how often scans run. 'daily' ~7x weekly spend. | |
| engines | No | set_engines: the FULL list of engine ids to track (see list for ids and per-engine cost). | |
| promptId | No | update/remove: the prompt id from list. | |
| languageCode | No | Locale language code, e.g. "en". | |
| locationCode | No | Locale location code (default: primary monitor). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
38 tool updates
- Changed
ai_citations1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
backlink_profile1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
billing_status1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
campaign_manage1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
confirm_trust_fact1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
contact_support1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
dataset_library1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
generate_article1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "One sentence on the user's goal for this article (optional).", - "maxLength": 300, - "type": "string" -}
- Changed
get_ai_crawler_activity1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_ai_funnel1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_article1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_credit_usage1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_referral_link1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_started1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_target_terms1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_task_rollback1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_trust_entities1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
get_trust_facts1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
gsc_indexing1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
gsc_insights1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
gsc_performance2 fields changed- changed
Input schema / properties / maxRows / descriptionPrevious value: -"query_page_matrix only: max query-page pairs (default 2000)."New value: +"query_page_matrix only: max query-page pairs (100-1000, default 200)." - removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
import_attachment_as_dataset1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
keyword_clusters1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
keyword_research1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
local_presence1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
resume_page_publishing1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
run_ai_visibility_scan1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
serp_competitors1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
set_target_terms1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
show_approval_cards1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
show_trust_facts_card1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
site_audit1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
site_pages1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
strategy_insights1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
task_manage1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
traffic_analytics1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
upload_csv1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
- Changed
visibility_manage1 field changed- removed
Input schema / properties / user_intentRemoved value: -{ - "description": "Optional: one short sentence describing what the user is ultimately trying to achieve with this request. Used by SEOmatic to tailor answers and improve the product; never required.", - "maxLength": 300, - "type": "string" -}
1 tool update
- Changed
dataset_library4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. list_datasets (available datasets); list_page_projects (the site own page projects (own {{Column}} templates)); dataset_rows (sample rows from one dataset); list_templates (built-in page templates); get_template (one template in full)."New value: +"Which operation to run. find_page_set_patterns (keyword research for a page set: the repeated query templates with a varying slot, entities ranked by demand (a seed term adds the keyword provider and costs credits)); list_datasets (available datasets); list_page_projects (the site own page projects (own {{Column}} templates)); dataset_rows (sample rows from one dataset); list_templates (built-in page templates); get_template (one template in full)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list_datasets", - "list_page_projects", - "dataset_rows", - "list_templates", - "get_template" -]New value: +[ + "find_page_set_patterns", + "list_datasets", + "list_page_projects", + "dataset_rows", + "list_templates", + "get_template" +] - added
Input schema / properties / minEntitiesAdded value: +{ + "description": "find_page_set_patterns: smallest set worth showing (default 5).", + "type": "integer" +} - added
Input schema / properties / seedAdded value: +{ + "description": "find_page_set_patterns: a head term to research with the keyword provider ('signage'); omit for Search Console only.", + "type": "string" +}
1 tool update
- Changed
campaign_manage1 field changed- changed
Input schema / properties / autoPublish / descriptionPrevious value: -"write_articles only: default false (stage as drafts)."New value: +"write_articles only: default true (articles that pass our checks publish on their own, with undo); false keeps them as drafts."
2 tool updates
- Changed
campaign_manage7 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. list (campaigns with status + task counts); manage (approve/pause/resume/abandon/update a campaign); propose_page_scale (programmatic landing pages at scale); propose_location_pages (location pages on the site own layout (drafts), or existing ones improved); propose_content_sweep (N distinct blog articles as a campaign); propose_bulk_edit (one instruction across many pages); write_articles (direct N-article staging)."New value: +"Which operation to run. list (campaigns with status + task counts); manage (approve/pause/resume/abandon/update a campaign); propose_page_scale (a set of pages on the site own page or own template); propose_location_pages (location pages on the site own layout (drafts), or existing ones improved); propose_content_sweep (N distinct blog articles as a campaign); propose_bulk_edit (one instruction across many pages); write_articles (direct N-article staging)." - changed
Input schema / properties / exemplarUrl / descriptionPrevious value: -"propose_location_pages, create: the customer's page the new pages copy (layout, embeds, page type)."New value: +"propose_location_pages (create) and propose_page_scale: the customer's own page the new pages copy (layout, embeds, page type). propose_page_scale needs exemplarUrl or projectId." - removed
Input schema / properties / pageTemplateRemoved value: -{ - "description": "propose_page_scale only: built-in template id.", - "type": "string" -} - added
Input schema / properties / projectIdAdded value: +{ + "description": "propose_page_scale: the customer's own project whose fields hold their {{Column}} template. Needs projectId or exemplarUrl.", + "type": "string" +} - removed
Input schema / properties / rowPromptRemoved value: -{ - "description": "propose_page_scale, rowSourceKind=ai: dataset to generate.", - "type": "string" -} - changed
Input schema / properties / rowSourceKind / descriptionPrevious value: -"propose_page_scale only (required): where page rows come from."New value: +"propose_page_scale only: where page rows come from (required with exemplarUrl; with projectId defaults to the project dataset). No AI source: an invented row list is refused." - changed
Input schema / properties / rowSourceKind / enumPrevious value: -[ - "ai", - "user", - "library", - "gbp_locations" -]New value: +[ + "user", + "library", + "gbp_locations" +]
- Changed
dataset_library2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. list_datasets (available datasets); dataset_rows (sample rows from one dataset); list_templates (built-in page templates); get_template (one template in full)."New value: +"Which operation to run. list_datasets (available datasets); list_page_projects (the site own page projects (own {{Column}} templates)); dataset_rows (sample rows from one dataset); list_templates (built-in page templates); get_template (one template in full)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list_datasets", - "dataset_rows", - "list_templates", - "get_template" -]New value: +[ + "list_datasets", + "list_page_projects", + "dataset_rows", + "list_templates", + "get_template" +]
3 tool updates
- Changed
campaign_manage7 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. list (campaigns with status + task counts); manage (approve/pause/resume/abandon/update a campaign); propose_page_scale (programmatic landing pages at scale); propose_content_sweep (N distinct blog articles as a campaign); propose_bulk_edit (one instruction across many pages); write_articles (direct N-article staging)."New value: +"Which operation to run. list (campaigns with status + task counts); manage (approve/pause/resume/abandon/update a campaign); propose_page_scale (programmatic landing pages at scale); propose_location_pages (location pages on the site own layout (drafts), or existing ones improved); propose_content_sweep (N distinct blog articles as a campaign); propose_bulk_edit (one instruction across many pages); write_articles (direct N-article staging)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "manage", - "propose_page_scale", - "propose_content_sweep", - "propose_bulk_edit", - "write_articles" -]New value: +[ + "list", + "manage", + "propose_page_scale", + "propose_location_pages", + "propose_content_sweep", + "propose_bulk_edit", + "write_articles" +] - added
Input schema / properties / exemplarPlaceAdded value: +{ + "description": "propose_location_pages, create: the place the model page is about, when its title does not say.", + "type": "string" +} - added
Input schema / properties / exemplarUrlAdded value: +{ + "description": "propose_location_pages, create: the customer's page the new pages copy (layout, embeds, page type).", + "type": "string" +} - added
Input schema / properties / locationModeAdded value: +{ + "description": "propose_location_pages only (required): create = new draft pages modelled on exemplarUrl; enrich = rewrite existing location pages (rows carry pageUrl).", + "enum": [ + "create", + "enrich" + ], + "type": "string" +} - changed
Input schema / properties / rows / descriptionPrevious value: -"propose_page_scale, rowSourceKind=user: one object per page."New value: +"propose_page_scale, rowSourceKind=user: one object per page. propose_location_pages (required): one object per location (name + the facts the user gave; enrich: pageUrl)." - changed
Input schema / properties / title / descriptionPrevious value: -"propose_page_scale (required), propose_content_sweep (required), propose_bulk_edit (optional)."New value: +"propose_page_scale (required), propose_content_sweep (required), propose_bulk_edit and propose_location_pages (optional)."
- Added
get_target_terms - Added
set_target_terms
1 tool update
- Changed
task_manage3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. list (the plan board (filterable)); get (one task in full detail); create (stage up to 5 task proposals); decide (approve or dismiss a staged proposal (the approval loop)); execute (run an approved task now; a reviewToken releases staged holds; refresh_pull_request updates an open GitHub pull request, or opens a new one if someone else changed its branch); rollback (undo an executed task's live change (drift-guarded))."New value: +"Which operation to run. list (the plan board (filterable)); get (one task in full detail); create (stage up to 5 task proposals); decide (approve or dismiss a staged proposal (the approval loop)); execute (run an approved task now; a reviewToken releases staged holds; refresh_pull_request updates an open GitHub pull request, or opens a new one if someone else changed its branch); rollback (undo an executed task's live change (drift-guarded)); paste_done (the user pasted a handed-over change; SEOmatic looks for it on the live page before measuring)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "get", - "create", - "decide", - "execute", - "rollback" -]New value: +[ + "list", + "get", + "create", + "decide", + "execute", + "rollback", + "paste_done" +] - changed
Input schema / properties / taskId / descriptionPrevious value: -"get/decide/execute/rollback: the task to act on."New value: +"get/decide/execute/rollback/paste_done: the task to act on."
1 tool update
- Changed
gsc_performance4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. top_queries (top search queries); top_pages (top pages); dimension_breakdown (by device/country/date); query_page_matrix (cannibalization / query-to-page map); query_pages (which pages rank for given queries, with each page's own numbers); compare_periods (decay/growth vs the prior period); trend (daily clicks/impressions over time); discover_news (Discover / News / Image / Video surfaces); folder_rollup (performance by URL folder / site section); fresh (provisional today/yesterday numbers (hours-old data))."New value: +"Which operation to run. top_queries (top search queries); top_pages (top pages); dimension_breakdown (by device/country/date, or one page's queries (query + filterPage) / one query's pages (page + filterQuery)); query_page_matrix (cannibalization / query-to-page map); query_pages (which pages rank for given queries, with each page's own numbers); compare_periods (decay/growth vs the prior period); trend (daily clicks/impressions over time); discover_news (Discover / News / Image / Video surfaces); folder_rollup (performance by URL folder / site section); fresh (provisional today/yesterday numbers (hours-old data))." - changed
Input schema / properties / dimension / descriptionPrevious value: -"REQUIRED for dimension_breakdown (device|country|date). For compare_periods: query|page (default page). Ignored otherwise."New value: +"REQUIRED for dimension_breakdown: device|country|date|query|page (query + filterPage = the queries one page ranks for, with that page's own numbers; page + filterQuery = the pages ranking for one query). For compare_periods: query|page (default page). Ignored otherwise." - changed
Input schema / properties / filterPage / descriptionPrevious value: -"dimension_breakdown only: restrict to one exact page URL."New value: +"dimension_breakdown only: restrict to one exact page URL, as Search Console records it (pair with dimension=query to see the queries that page ranks for)." - changed
Input schema / properties / filterQuery / descriptionPrevious value: -"dimension_breakdown only: restrict to one exact query."New value: +"dimension_breakdown only: restrict to one exact query (pair with dimension=page to see which pages rank for it)."
5 tool updates
- Added
billing_status - Added
contact_support - Changed
get_started2 fields changed- added
Input schema / properties / confirmed_ownAdded value: +{ + "description": "Set true only after the user confirmed that `site` is their own website; the workspace then remembers it.", + "type": "boolean" +} - added
Input schema / properties / topicAdded value: +{ + "description": "What the business sells or does, in the words a customer would search (e.g. \"wedding photographer lyon\"). Use when no site is on record and the user has not given one: the answer sizes that market instead.", + "maxLength": 80, + "type": "string" +}
- Changed
gsc_performance4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. top_queries (top search queries); top_pages (top pages); dimension_breakdown (by device/country/date); query_page_matrix (cannibalization / query-to-page map); compare_periods (decay/growth vs the prior period); trend (daily clicks/impressions over time); discover_news (Discover / News / Image / Video surfaces); folder_rollup (performance by URL folder / site section); fresh (provisional today/yesterday numbers (hours-old data))."New value: +"Which operation to run. top_queries (top search queries); top_pages (top pages); dimension_breakdown (by device/country/date); query_page_matrix (cannibalization / query-to-page map); query_pages (which pages rank for given queries, with each page's own numbers); compare_periods (decay/growth vs the prior period); trend (daily clicks/impressions over time); discover_news (Discover / News / Image / Video surfaces); folder_rollup (performance by URL folder / site section); fresh (provisional today/yesterday numbers (hours-old data))." - changed
Input schema / properties / action / enumPrevious value: -[ - "top_queries", - "top_pages", - "dimension_breakdown", - "query_page_matrix", - "compare_periods", - "trend", - "discover_news", - "folder_rollup", - "fresh" -]New value: +[ + "top_queries", + "top_pages", + "dimension_breakdown", + "query_page_matrix", + "query_pages", + "compare_periods", + "trend", + "discover_news", + "folder_rollup", + "fresh" +] - added
Input schema / properties / pageAdded value: +{ + "description": "query_pages only: a full page URL to check - returns its own row for each query, or null when it does not rank.", + "type": "string" +} - added
Input schema / properties / queriesAdded value: +{ + "description": "REQUIRED for query_pages: 1-5 exact search queries. Page rows are that page's own numbers; queryTotal is site-wide and never a page's number.", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
task_manage2 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. list (the plan board (filterable)); get (one task in full detail); create (stage up to 5 task proposals); decide (approve or dismiss a staged proposal (the approval loop)); execute (run an approved task now; a reviewToken releases staged holds); rollback (undo an executed task's live change (drift-guarded))."New value: +"Which operation to run. list (the plan board (filterable)); get (one task in full detail); create (stage up to 5 task proposals); decide (approve or dismiss a staged proposal (the approval loop)); execute (run an approved task now; a reviewToken releases staged holds; refresh_pull_request updates an open GitHub pull request, or opens a new one if someone else changed its branch); rollback (undo an executed task's live change (drift-guarded))." - added
Input schema / properties / refresh_pull_requestAdded value: +{ + "description": "execute only, GitHub: rewrite the task's OPEN pull request against the site's latest version (the dashboard's Refresh): updates the pull request, or opens a new one if someone else changed its branch. Runs the task again, so it uses AI credits like the first run - set it ONLY when the user asked for the refresh.", + "type": "boolean" +}
3 tool updates
- Added
get_started - Removed
pay_for_articles - Changed
run_ai_visibility_scan1 field changed- added
Input schema / properties / is_my_siteAdded value: +{ + "description": "Only when the workspace has no site on record yet: true if the domain is the user's own site, false if it is a competitor. Ask the user; never guess.", + "type": "boolean" +}
1 tool update
- Changed
visibility_manage4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. list (tracked prompts + plan allowance + cadence); add (track a new buyer question (plan-capped)); update (rename / pin / (de)activate a prompt); remove (delete a prompt permanently (confirm with the user)); set_cadence (weekly / daily / manual - daily is ~7x spend, explicit user ask only)."New value: +"Which operation to run. list (tracked prompts + plan allowance + cadence); add (track a new buyer question (plan-capped)); update (rename / pin / (de)activate a prompt); remove (delete a prompt permanently (confirm with the user)); set_cadence (weekly / daily / manual - daily is ~7x spend, explicit user ask only); set_engines (choose tracked AI engines (full list) or reset to defaults - each engine adds scan cost, quote it first)." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "add", - "update", - "remove", - "set_cadence" -]New value: +[ + "list", + "add", + "update", + "remove", + "set_cadence", + "set_engines" +] - added
Input schema / properties / enginesAdded value: +{ + "description": "set_engines: the FULL list of engine ids to track (see list for ids and per-engine cost).", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / resetAdded value: +{ + "description": "set_engines: true tracks the default engines.", + "type": "boolean" +}
1 tool update
- Added
get_referral_link
5 tool updates
- Added
confirm_trust_fact - Added
get_trust_facts - Added
pay_for_articles - Changed
run_ai_visibility_scan1 field changed- added
Input schema / properties / domainAdded value: +{ + "description": "Competitor domain to scan instead of your own site, e.g. \"competitor.com\". Omit for your own site.", + "maxLength": 253, + "type": "string" +}
- Added
show_trust_facts_card
1 tool update
- Added
upload_csv
2 tool updates
- Changed
ai_citations3 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. observed_citations (real logged-in AI answers that cited this site); brand_facts (declared canonical facts + internal-link health)."New value: +"Which operation to run. observed_citations (real logged-in AI answers that cited this site); brand_facts (declared canonical facts + internal-link health); scan_results (latest scan: per-engine visibility, missed prompts, competitors, cited sources)." - changed
Input schema / properties / action / enumPrevious value: -[ - "observed_citations", - "brand_facts" -]New value: +[ + "observed_citations", + "brand_facts", + "scan_results" +] - added
Input schema / properties / scanIdAdded value: +{ + "description": "scan_results only: a specific scan id from recentScans. Omit for the latest completed scan.", + "type": "string" +}
- Removed
get_ai_visibility
2 tool updates
- Changed
campaign_manage1 field changed- changed
Input schema / properties / confirm / descriptionPrevious value: -"manage only, approve + abandon: must be true — attests the user explicitly asked for this (approve releases work + spend; abandon is irreversible)."New value: +"manage only, approve + abandon: must be true - attests the user explicitly asked for this (approve releases work + spend; abandon is irreversible)."
- Changed
task_manage1 field changed- changed
Input schema / properties / confirmDestructive / descriptionPrevious value: -"decide/execute: required true for indexation-destructive types (noindex, redirect). Attestation that the human explicitly signed off on this specific task after seeing its URL and consequence — never set it on your own judgment."New value: +"decide/execute: required true for indexation-destructive types (noindex, redirect). Attestation that the human explicitly signed off on this specific task after seeing its URL and consequence - never set it on your own judgment."
Related MCP Connectors
- VouchedOAuthcom.vouchedhq
SEO data your AI can cite: Search Console, GA4, keywords, backlinks, SERPs and AI visibility.
Query your SEO data in plain language: rankings, audits, backlinks, competitors and AI visibility.
Real SEO data for AI assistants: page audits, Keyword Planner volumes, Search Console history.
All-in-one Shopify SEO. Rank on Google and in AI search. Find what's broken and fix it in chat.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables an AI assistant to query live data from Google Search Console, GA4, AdSense, Keyword Planner, and two Reddit signals (rising posts and demand) in a single conversation, all read-only with your own credentials.MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI assistants to answer SEO questions by pulling verified data from Google Search Console, GA4, keyword research, backlinks, live SERPs, and AI visibility, with each fact including its source, timestamp, and confidence.MIT
- AlicenseAqualityDmaintenanceConnects Google Search Console to AI assistants, enabling natural language queries for SEO data, indexing audits, sitemap management, and full site audits.20MIT

marketscore-seo-mcpofficial
AlicenseNot gradedqualityCmaintenanceConnects AI assistants to SEO data from Yandex Webmaster, Google Search Console, Yandex Metrica, and Topvisor, enabling natural language analysis of search performance, indexation, positions, and audits.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.