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.
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 78.1% over 62 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- Minh42/seomatic-mcp
- GitHub Stars
- 1
- Server Listing
- SEOmatic MCP Server
TDQS
Scored across 53 tools
The set spans many distinct SEO subdomains, but several clusters overlap heavily: AI visibility (ai_citations, run_ai_visibility_scan, visibility_manage, get_ai_funnel, get_ai_crawler_activity), trust facts (add/confirm/get/show), and task/campaign management. Detailed descriptions help, but an agent must carefully read boundaries to avoid misselection.
Names are mostly snake_case and descriptive, but conventions are mixed: some are verb_noun (get_article, set_target_terms), some noun-only (articles, billing), and some noun_manage (task_manage, campaign_manage). Still readable, but no single predictable pattern.
53 tools is excessive for any single MCP server, even a broad SEO platform. Many are multi-action monoliths (task_manage, page_projects, dataset_manage), and the sheer count forces agents to scan a huge surface.
Coverage is broad, but key referenced tools are absent: gsc_performance (live Search Console performance) is cited repeatedly yet not provided, and get_ai_visibility is referenced without a standalone tool. These gaps create dead ends for core search-performance queries.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
19 tool updates
- Added
add_trust_fact - Added
agent_settings - Added
articles - Added
billing - Added
billing_manage - Removed
billing_status - Added
brand_profile - 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 (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)."New value: +"Which operation to run. list (campaigns with status + task counts); manage (approve/pause/resume/abandon/update a campaign); expand (release a bulk sweep's held later waves: estimate only without confirm: true); undo (undo every live change the campaign applied (confirm: true after the user's explicit ask)); 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 / action / enumPrevious value: -[ - "list", - "manage", - "propose_page_scale", - "propose_location_pages", - "propose_content_sweep", - "propose_bulk_edit", - "write_articles" -]New value: +[ + "list", + "manage", + "expand", + "undo", + "propose_page_scale", + "propose_location_pages", + "propose_content_sweep", + "propose_bulk_edit", + "write_articles" +] - changed
Input schema / properties / campaignId / descriptionPrevious value: -"manage only: the campaign to act on."New value: +"manage/expand/undo: the campaign to act on." - 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 (approve, abandon), expand, undo, and save_article with publish: true: must be true, attesting the user explicitly asked for this (approve releases work and spend; abandon is irreversible; publish sends the article to the CMS). Without it expand returns the estimate only." - added
Input schema / properties / confirmDestructiveAdded value: +{ + "description": "save_article with publish: the same attestation as confirm, the spelling the confirm widget sends.", + "type": "boolean" +} - added
Input schema / properties / forceAdded value: +{ + "description": "undo only: also restore pages a person edited since. Set ONLY after the user saw the skipped list and chose to overwrite those edits.", + "type": "boolean" +} - changed
Input schema / properties / publishAsDraft / descriptionPrevious value: -"propose_page_scale only: publish pages as drafts."New value: +"save_article with publish: default true (a draft in the CMS); false = live. In approval mode the article is always a draft. Also propose_page_scale: publish pages as drafts."
- Added
connections - Changed
dataset_library2 fields changed- changed
Input schema / properties / action / descriptionPrevious 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)."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); 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: -[ - "find_page_set_patterns", - "list_datasets", - "list_page_projects", - "dataset_rows", - "list_templates", - "get_template" -]New value: +[ + "find_page_set_patterns", + "list_datasets", + "dataset_rows", + "list_templates", + "get_template" +]
- Added
dataset_manage - Added
page_projects - Changed
rank_tracking10 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"Which operation to run. history (weekly position per query (target terms by default), up to 52 weeks); movers (biggest position gains and losses between two weeks); serp_history (who held the top 10 each week for one of the site's own queries, and competitor title changes)."New value: +"Which operation to run. history (weekly position per query (target terms by default), up to 52 weeks); movers (biggest position gains and losses between two weeks); serp_history (who held the top 10 each week for one of the site's own queries, and competitor title changes); add_keywords (add up to 100 keywords to a blog project (plan-capped per call; a refusal states the cap)); remove_keywords (remove keywords from a blog project by id, or all of them (confirm: true after the user's yes))." - changed
Input schema / properties / action / enumPrevious value: -[ - "history", - "movers", - "serp_history" -]New value: +[ + "history", + "movers", + "serp_history", + "add_keywords", + "remove_keywords" +] - added
Input schema / properties / allAdded value: +{ + "description": "remove_keywords: true removes every keyword of the project.", + "type": "boolean" +} - added
Input schema / properties / confirmAdded value: +{ + "description": "remove_keywords (required true): the user explicitly asked to remove exactly these keywords. Never set it on your own judgment.", + "type": "boolean" +} - added
Input schema / properties / confirmDestructiveAdded value: +{ + "description": "remove_keywords: the same attestation, as the confirm widget and the elicitation retry send it.", + "type": "boolean" +} - added
Input schema / properties / keywordIdsAdded value: +{ + "description": "remove_keywords: the keyword ids to remove (1 to 100). Pass this or all: true.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / keywordsAdded value: +{ + "description": "add_keywords only (required): 1 to 100 keywords; a duplicate refuses the call.", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / languageCodeAdded value: +{ + "description": "add_keywords: two-letter language code (default: the workspace market).", + "type": "string" +} - added
Input schema / properties / locationCodeAdded value: +{ + "description": "add_keywords: locale location code (default: the workspace market).", + "type": "integer" +} - added
Input schema / properties / projectIdAdded value: +{ + "description": "add_keywords/remove_keywords (required): the blog project id (dataset_library list_page_projects lists projects with their type; posts = blog).", + "type": "string" +}
- Added
slack_settings - Changed
strategy_insights5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"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)."New value: +"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); client_report (the monthly client report: summary, search detail or work history); proof_links (the proof certificate links (search or AI); admin or owner)." - changed
Input schema / properties / action / enumPrevious value: -[ - "snapshot", - "strategy", - "signal", - "content_scores" -]New value: +[ + "snapshot", + "strategy", + "signal", + "content_scores", + "client_report", + "proof_links" +] - added
Input schema / properties / kindAdded value: +{ + "description": "proof_links only: which certificate (default search).", + "enum": [ + "search", + "ai" + ], + "type": "string" +} - added
Input schema / properties / monthAdded value: +{ + "description": "client_report only: YYYY-MM (default the latest month).", + "type": "string" +} - added
Input schema / properties / viewAdded value: +{ + "description": "client_report only: summary (default), search detail, or work history.", + "enum": [ + "summary", + "search", + "work" + ], + "type": "string" +}
- Changed
task_manage14 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)); paste_done (the user pasted a handed-over change; SEOmatic looks for it on the live page before measuring)."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); decide_batch (approve or dismiss up to 50 staged tasks in one call, same rails as decide; skipped ids come back with a reason); undo_all (undo EVERYTHING the agent has live, a few per call (confirm: true after the user's explicit ask; admin only)); done (the user made the change themselves; the task moves into measurement); to_campaign (hand a proposed content sweep to the Agent campaigns (the direct task is dismissed)); dismiss_reason (record why the user dismissed a task (closed set)); apply_site_change (apply a staged redirect, robots.txt or prune change the user saw (get's siteChange.shownHash, confirm: true; admin only)); resolve_site_change (resolve an earlier site change whose undo was never confirmed: undo it, or record the admin's 'I resolved it'); protected_pages (the money pages the agent never writes unattended); protect_pages (add, remove or replace the protected pages (admin or owner; removing a URL needs confirm: true))." - changed
Input schema / properties / action / enumPrevious value: -[ - "list", - "get", - "create", - "decide", - "execute", - "rollback", - "paste_done" -]New value: +[ + "list", + "get", + "create", + "decide", + "execute", + "rollback", + "paste_done", + "decide_batch", + "undo_all", + "done", + "to_campaign", + "dismiss_reason", + "apply_site_change", + "resolve_site_change", + "protected_pages", + "protect_pages" +] - added
Input schema / properties / confirmAdded value: +{ + "description": "undo_all and apply_site_change: must be true, attesting the user explicitly asked for this exact action in this conversation. Never set it on your own judgment.", + "type": "boolean" +} - 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/decide_batch/execute: required true for indexation-destructive types (noindex, redirect); on decide_batch one attestation covers the call and the refusal names the ids. Attestation that the human explicitly signed off on those specific tasks after seeing their URLs and consequences - never set it on your own judgment." - changed
Input schema / properties / decision / descriptionPrevious value: -"decide only: approve releases the task to the gated pipeline; dismiss archives it. Approving an indexation-destructive type (noindex, redirect) also requires confirmDestructive: true."New value: +"decide/decide_batch: approve releases the task(s) to the gated pipeline; dismiss archives. Approving an indexation-destructive type (noindex, redirect) also requires confirmDestructive: true." - changed
Input schema / properties / force / descriptionPrevious value: -"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."New value: +"rollback/undo_all: undo even though the live page drifted from what the agent wrote (undo_all lists the skipped pages first). Set ONLY after the user explicitly confirmed overwriting their newer edit." - added
Input schema / properties / modeAdded value: +{ + "description": "resolve_site_change only (required): undo removes the change if still ours; confirm_resolved records the admin's own resolution.", + "enum": [ + "undo", + "confirm_resolved" + ], + "type": "string" +} - added
Input schema / properties / pagesAdded value: +{ + "description": "protect_pages only: full URLs on the site or /path/* prefixes, each with an optional reason (max 200).", + "items": { + "properties": { + "reason": { + "type": "string" + }, + "url": { + "type": "string" + } + }, + "required": [ + "url" + ], + "type": "object" + }, + "type": "array" +} - added
Input schema / properties / pagesModeAdded value: +{ + "description": "protect_pages only: add (default), remove, or replace the whole list.", + "enum": [ + "add", + "remove", + "replace" + ], + "type": "string" +} - added
Input schema / properties / reasonAdded value: +{ + "description": "dismiss_reason only (required): why the user dismissed it.", + "enum": [ + "wrong_page", + "not_priority", + "avoid_topic", + "felt_risky" + ], + "type": "string" +} - added
Input schema / properties / shownHashAdded value: +{ + "description": "apply_site_change only (required): siteChange.shownHash from get, the hash of the change the user saw; a mismatch is refused.", + "type": "string" +} - added
Input schema / properties / suggestionAdded value: +{ + "description": "done only: what the user applied (e.g. the new title), kept for the verification report.", + "type": "string" +} - changed
Input schema / properties / taskId / descriptionPrevious value: -"get/decide/execute/rollback/paste_done: the task to act on."New value: +"Every single-task action: the task to act on." - added
Input schema / properties / taskIdsAdded value: +{ + "description": "decide_batch only (required): up to 50 task ids; more come back skipped over_limit.", + "items": { + "type": "string" + }, + "type": "array" +}
- Added
team - Added
team_manage - Added
workspaces
11 tool updates
- Changed
backlink_profile6 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"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)."New value: +"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); new_lost_links (the individual links gained or lost since a date); link_prospects (link intersect: linking to competitors but not to us)." - changed
Input schema / properties / action / enumPrevious value: -[ - "summary", - "anchors", - "velocity", - "referring_domains", - "link_prospects" -]New value: +[ + "summary", + "anchors", + "velocity", + "referring_domains", + "new_lost_links", + "link_prospects" +] - changed
Input schema / properties / limit / descriptionPrevious value: -"anchors (default 25) and referring_domains (default 50)."New value: +"anchors (default 25), referring_domains (default 50), new_lost_links (1-500, default 100)." - added
Input schema / properties / perDomainAdded value: +{ + "description": "new_lost_links only: true = one link per referring domain.", + "type": "boolean" +} - added
Input schema / properties / sinceAdded value: +{ + "description": "new_lost_links only: YYYY-MM-DD, default 30 days ago.", + "type": "string" +} - added
Input schema / properties / statusAdded value: +{ + "description": "new_lost_links only: new (default) or lost links.", + "enum": [ + "new", + "lost" + ], + "type": "string" +}
- Added
estimate_cost - Added
events - Added
get_store_policies - Changed
import_attachment_as_dataset2 fields changed- added
Input schema / properties / datasetTypeAdded value: +{ + "description": "'search_console_ai_pages' for the Pages export of Search Console's generative AI performance report", + "enum": [ + "search_console_ai_pages" + ], + "type": "string" +} - added
Input schema / properties / dateRangeAdded value: +{ + "additionalProperties": false, + "description": "Required with search_console_ai_pages: the date range the user exported, as shown in Search Console. Never guess it.", + "properties": { + "end": { + "description": "YYYY-MM-DD", + "type": "string" + }, + "start": { + "description": "YYYY-MM-DD", + "type": "string" + } + }, + "required": [ + "start", + "end" + ], + "type": "object" +}
- Added
rank_tracking - Changed
serp_competitors4 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"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)."New value: +"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); top_pages (a domain's top pages by estimated organic traffic)." - changed
Input schema / properties / action / enumPrevious value: -[ - "features", - "domain_rankings", - "domain_overview", - "domain_competitors" -]New value: +[ + "features", + "domain_rankings", + "domain_overview", + "domain_competitors", + "top_pages" +] - changed
Input schema / properties / domain / descriptionPrevious value: -"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."New value: +"domain_rankings/domain_overview/domain_competitors/top_pages: the domain. Omit for the connected workspace's own site (the server fills it in); pass only for a competitor." - changed
Input schema / properties / limit / descriptionPrevious value: -"max results where applicable."New value: +"max results where applicable (top_pages 1-500, default 50)."
- Added
set_store_policies - Added
site_audit_deep - Changed
site_pages5 fields changed- changed
Input schema / properties / action / descriptionPrevious value: -"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)."New value: +"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); pagespeed (Google PageSpeed now: lab metrics (score, LCP, CLS, TBT) and real-user field data (LCP, INP, CLS)); validate_schema (structured data vs Google rich-result rules: parse errors, missing required/recommended, wrong types (URL or pasted JSON-LD))." - changed
Input schema / properties / action / enumPrevious value: -[ - "score_draft", - "analyze", - "crawl", - "inventory" -]New value: +[ + "score_draft", + "analyze", + "crawl", + "inventory", + "pagespeed", + "validate_schema" +] - added
Input schema / properties / jsonldAdded value: +{ + "description": "validate_schema only: raw JSON-LD (a JSON document or <script type=\"application/ld+json\"> blocks) to validate instead of a URL.", + "type": "string" +} - added
Input schema / properties / strategyAdded value: +{ + "description": "pagespeed only: mobile (default) or desktop.", + "enum": [ + "mobile", + "desktop" + ], + "type": "string" +} - changed
Input schema / properties / url / descriptionPrevious value: -"analyze/crawl: the URL to inspect."New value: +"analyze/crawl/pagespeed: the URL to inspect. validate_schema: the page to fetch (or pass jsonld instead)."
- Changed
traffic_analytics1 field changed- changed
Input schema / properties / limit / descriptionPrevious value: -"max rows where applicable."New value: +"max rows where applicable (ga4_report up to 10,000)."
3 tool updates
- Removed
gsc_indexing - Removed
gsc_insights - Removed
gsc_performance
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
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.
SEO, GEO & AI Visibility Intelligence directly inside AI assistants. Chat with SEO in plain language: research keywords, analyze SERPs, track competitors, and monitor AI visibility. SeoPerseo's integrated intelligence reveals site issues and how to fix them, create client reports and generate content for your website. Fully integrated with Google Search Console and Google Analytics.
Real SEO data for AI assistants: page audits, Keyword Planner volumes, Search Console history.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceConnects Google Search Console to AI assistants so users can query and analyse SEO performance data in natural language. Provides search analytics, SEO insights, URL inspection, indexing, sitemaps, hourly reporting, and CSV export.-
- AlicenseAqualityBmaintenanceEnables 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.6MIT
- 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
- AlicenseBqualityCmaintenanceConnects Claude to Google Search Console, GA4, Bing Webmaster Tools, IndexNow, PageSpeed Insights, AdSense and Google Ads Keyword Planner, plus live technical SEO audits of pages and sitemaps. Users ask plain-language questions about traffic drops, index status, canonicals, AI referral traffic and keyword volumes, and answers are pulled live from the APIs in real time.2848 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.