OnPage.dev
Free SEO MCP that closes the loop: find, fix, ship as a PR or to a CMS, prove. 37 tools, no key.
Connect it
Settings → Connectors → Add custom connector
URL: https://onpage.dev/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://onpage.dev/mcp{
"mcpServers": {
"onpage": {
"url": "https://onpage.dev/mcp"
}
}
}claude mcp add --transport http onpage https://onpage.dev/mcp{
"servers": {
"onpage": {
"type": "http",
"url": "https://onpage.dev/mcp"
}
}
}37 tools, verified live
site_memoryA memory per site that every OnPage.dev tool writes to, across chats and clients. Open it first when working on a site over time. Pick with mode: open = Open or create the memory, bind it to this chat, get the brief and next steps (default). Needs url. next = The best next steps from everything recorded. timeline = What happened, newest first. note = Record a decision or context. Needs note. forge
scan_pageread-onlyScan a page for Google and AI search: 0-100 score, issues to fix first with why and how, AI readiness and key facts. Pick with mode: page = A live page by url (default). Needs url. html = Unpublished HTML before deploy, to gate a release. Needs html. deep = Everything measured on one page, by section. Needs url. rescan = Scan again after fixes and compare with the last scan. Needs url.
site_auditAudit a whole site, step by step, and work with the result. Pick with mode: start = Start an audit of up to 25 pages; returns audit_id. Needs url. continue = Scan the next pages; call until complete. Issues by code, sections, average score. Needs audit_id. import = Turn a crawl from Screaming Frog, Ahrefs or Semrush (up to 500 pages) into an audit_id. Needs pages[{url, status, redirect_to, title,
watchMonitoring that runs on its own and posts changes to a webhook. Each kind takes action create (default), status or stop where it applies. Pick with mode: page = Watch one page (or a competitor page with competitor_of) for SEO changes. Needs url. page_status = Latest result of a page watch. Needs watch_id. page_stop = Stop a page watch. Needs watch_id. site_audit = Audit the whole site every 1, 7 o
dashboardA daily SEO data feed for key pages and a live dashboard in the chat. Pick with mode: feed = Start a daily feed of key pages; returns feed_id. Needs url. data = The feed as clean tables over time. Needs feed_id, dataset. build = Blueprint for a live SEO command center with realtime GA4 visitors. Needs feed_id.
measureProve and measure with numbers from the user's Search Console, GA4, Ahrefs or Semrush, including numbers the user pastes. Use it instead of calculating by hand: it handles spelling variants, control groups and trends. Pick with mode: impact = Before and after fixes, against pages you did not touch. Needs pages[{url, before, after, changed, fix}]. ai_citations = AI citations before and after, per e
find_opportunitiesread-onlyTurn Search Console, GA4 or Ahrefs rows (also rows the user pastes) into the fastest wins, instead of judging them by hand; content_decay and traffic_drop take search_type for Discover, News, Image or Video rows. Pick with mode: ctr_gaps = Page 1 results with a click-through rate far below normal. Needs rows[{position, page, query, clicks, impressions, ctr}]. striking_distance = Queries at positio
backlinksread-onlyTurn backlink data from Ahrefs, Semrush or similar into links won back, won or cleaned up. Pick with mode: broken = Broken and lost backlinks and 404 visits into 301s and outreach. Needs rows[{target_url, source_url, anchor, domain_rating, dofollow, http_code}]. opportunities = Sites linking to competitors, and unlinked brand mentions. Needs site. outreach = One outreach email per site, as drafts
ai_visibilityread-onlyWhether AI assistants can read, quote and recommend a site. Pick with mode: check = AI crawler access, llms.txt, 15 citability checks and the page as a model reads it. Needs url. bots = Fetch the page as Googlebot, GPTBot, ClaudeBot, PerplexityBot and more against a browser: firewall blocks, challenges, cloaking. Needs url. gaps = Where AI answers name competitors, not you, from Brand Radar or sim
answer_readinessread-onlyWhether a page answers the questions people ask AI and Google. Pick with mode: questions = Sub-questions AI Mode fans out to, and which the page answers. Needs url, topic, questions. passages = The passages that answer given questions, or the gaps. Needs url, question. format = Answer format against the pages that rank. Needs url, question, competitors.
get_fix_packFixes ready to ship: as code, for a CMS through its MCP, as a pull request or at the edge. Pick with mode: fixes = Title, description, canonical, social tags, JSON-LD; platform html, wordpress, shopify, webflow, wix, storyblok, sanity, contentful, strapi, ghost, magento, git or cloudflare. Needs url. alt_texts = Write and ship missing alt texts. Needs url. web_vitals = Speed fixes as tags, WordPre
edge_workerread-onlyFixes applied at the edge on the user's own Cloudflare, on any CMS. Pick with mode: rules = One Worker that fixes a whole section by rules. Needs audit_id. prerender = Serve rendered HTML to AI crawlers for JavaScript apps. Needs url.
fix_logRecord shipped fixes, keep them live and report on them. Pick with mode: log = Record a shipped fix; checked every 6 hours, restore code on regression. Needs fixes[{url, field, new, old, via, ref}]. report = Every fix with status and results: a monthly client report. Needs fix_log_id.
request_recrawlGet changed pages recrawled. Pick with mode: recrawl = Check pages are indexable, sitemap lastmod entries, IndexNow and Search Console steps (default). Needs urls. indexnow = Submit URLs to IndexNow, or set up the key. Needs urls.
explain_googleread-onlyExplain what Google Search Console and Bing Webmaster Tools report, and what to do. Pick with mode: index_status = Index coverage and rich result statuses, with the fix. Needs rows[{url, coverageState, verdict, indexingState, robotsTxtState, pageFetchState}]. manual_action = A manual action, with the cleanup plan and reconsideration draft. Needs action. bing = Bing Webmaster crawl issues, and Bing
check_keywordread-onlyHow pages target a keyword. Pick with mode: focus = One page against one keyword: 8 checks. Needs url, keyword. cannibalization = Your pages competing for one keyword, side by side on every signal, with the plan. Needs keyword, target_url.
accessibilityread-onlyAccessibility for people and the European Accessibility Act. Pick with mode: wcag = WCAG 2.1 AA checks. Needs url. screen_reader = The page as a screen reader reads it. Needs url.
localread-onlyLocal search: the site, the Business Profile and the map. Pick with mode: check = LocalBusiness markup, NAP, locations and the Business Profile (default). Needs url. reviews = Reply drafts for Google reviews, unhappy ones first, for the user's GBP connector after approval. Needs reviews[{rating, author, text, date, replied, review_id}]. demand = Business Profile search terms and geo-grid ranks int
trackingread-onlyWhether analytics and consent are set up right, and whether the numbers add up. Pick with mode: ga4 = GA4 tags, events and duplicates. Needs url. consent = Cookie banner and Consent Mode v2. Needs url. gsc_vs_ga4 = Search Console clicks against GA4 sessions per page: broken or filtered tracking. Needs gsc[{page, clicks}], ga4[{landing_page, sessions}].
check_linksread-onlyStatus of URLs and links. Pick with mode: urls = Status, redirect chain and canonical of a list of URLs. Needs urls. outbound = Dead or moved links from a page to other sites, with archived copies. Needs url.
web_vitalsread-onlyCore Web Vitals from real Chrome users. Pick with mode: now = The latest field data for a page or site. Needs url. trend = Weekly history, before and after a change date. Needs url.
shareSend results where the team works. Pick with mode: link = A link to the visual report. Needs url. export = A Google Sheet, CSV, Slack message or one task per issue.
planread-onlyPlans for migrations, experiments and the team. Pick with mode: redirects = Redirect map for a migration or URL change. split_test = SEO split test on a page template, with the Worker. Needs urls, field, pattern. sprint = Fixes into a week plan of tickets per role. Needs fixes[{title, url, detail, severity, impact, effort}].
contentread-onlyWhat to write and how, in the site's own voice, from the pages that rank and the user's search data. Pick with mode: brief = A content brief from the pages that rank. Needs keyword, competitors. topics = Search Console queries into topics, with the page that owns each, and keyword gaps. Needs rows[{query, page, clicks, impressions, position, url}]. intent = Your page against the search intent of t
technicalread-onlyTechnical checks across pages and logs. Pick with mode: hreflang = Hreflang across language versions, with the corrected tag set. Needs url. parameters = URL parameters and filters that waste crawl budget. duplicates = Duplicate and near-duplicate pages. Needs audit_id. extract = One value pulled from many pages. Needs urls. logs = Access logs: what Googlebot and AI crawlers really crawl, with IP
llms_txtread-onlyThe llms.txt file for AI assistants. Pick with mode: generate = Write one from the sitemap and home page. Needs url. validate = Check an existing one and its links. Needs url.
schemaread-onlyJSON-LD structured data for rich results. Pick with mode: generate = Write JSON-LD for a page: type Article, Product, FAQPage, Organization, BreadcrumbList, VideoObject, Event, Recipe, JobPosting, SoftwareApplication, ProfilePage or Course. Needs url. validate = Validate JSON-LD for rich results. Needs jsonld. product_page = Check an existing ecommerce product page (price, stock, merchant listing
robots_txtread-onlyrobots.txt for search and AI crawlers. Pick with mode: test = Which crawlers may fetch a URL, and the rule that decides. Needs url. ai_policy = Rules per AI crawler: allow AI search, block training. Needs url, policy.
sitemapread-onlyThe XML sitemap. Pick with mode: check = Check the sitemap and a sample of its URLs. Needs url. generate = Write a sitemap from a page list or audit. Needs audit_id.
layoutread-onlyWhat visitors and crawlers see on every screen size. Pick with mode: render = First screen on phone, tablet and desktop in a real browser, and what crawlers without JavaScript get (default). Needs url. probe = A measurement script to run in the user's own browser tool. analyze = Analyse the results of that script. Needs url, results.
internal_linksread-onlyInternal links and link equity. Pick with mode: suggest = Links to add, with anchors, applied by Worker or CMS. Needs audit_id. equity = Internal PageRank and click depth from a site audit. Needs audit_id.
compareread-onlyCompare pages side by side. Pick with mode: pages = Your page against up to 3 competitors. Needs url, competitors. html = Two versions of HTML before and after. Needs before, after. preview = Deploy preview against production before merging. Needs preview_url, production_url.
snippetread-onlyHow a page looks in Google and when shared, measured in pixels the way Google truncates. Use it instead of estimating title or description length. Pick with mode: search = Title and description as Google shows them; give title (and description) or a url to read them. social = Open Graph and X cards, and the share image. Needs url.
entityread-onlyHow Google understands who is behind a site. Pick with mode: graph = Organization, sameAs, logo and founder in structured data. Needs url. trust = Author, about, contact and policy signals. Needs url.
text_qualityread-onlyReadability and correct language. Pick with mode: readability = Readability that fits the page and the pages that rank. Needs url. spelling = Spelling and grammar errors in about 30 languages. Needs url.
track_rankingsUse for ongoing rank tracking without picking keywords by hand. Each run, fetch Search Console rows by query and page (last 7 or 28 days) and, if connected, the rows of Ahrefs Rank Tracker (rank-tracker-overview) or Semrush Position Tracking, plus GA4 conversions or revenue per landing page if available, and pass them with the tracker_id (leave it out on the first run to create a tracker).
prioritize_fixesread-onlyUse when Search Console, GA4, Ahrefs or Semrush data is available, also to explain a traffic drop (pass clicks_previous): ranks the fixes by the traffic or revenue they can win. Rank SEO fixes by how much traffic they can win, using data from the user's other connected tools. With GA4, also pass each page's organic conversions (key events) or revenue, and fixes are ranked by the money they can bri
Alternatives in Marketing & SEO
Compare →HIHasData InstagramB
Public Instagram profiles and post feeds by handle, with hashtags and mentions parsed.
VHVerified HandlesB
Look up people, organisations and things, and their official social media accounts and identifiers.
Taggun MCP by usefulapiB
Scan receipts with Taggun OCR from a URL or file and read receipt-validation campaigns.
WhatConverts MCP by usefulapiB
Read WhatConverts leads, calls, forms, accounts and profiles; add leads and update lead value.
OLOxford LedgeB
Ask your assistant; it reads the public record: SEC filings, 13F, insider trades, BDC loans.
Workiz MCP by usefulapiB
Manage Workiz jobs and leads: create, update, assign team members and convert leads to jobs.