Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

OnPage.dev

REMOTE · ONPAGE.DEV

Free SEO MCP that closes the loop: find, fix, ship as a PR or to a CMS, prove. 37 tools, no key.

Available components

+6 this week 73 Trust /100

Last scanned (13 hours ago)

Scores higher than 64% of remote servers

Reachable. Last reached 17 Oct 2026.

Category Marketing and SEO

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security80
Transport & Reachability100
Schema Quality & AI Usability71
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Context-footprint check failed: tool/resource definitions use about 9349 tokens (~233/item across 40 items; 37 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
  • Stability check failed: schema churn in the 11 days we've observed: 18 tool removals, 0 breaking changes, 0 auth/transport breaks, 35 additions. See how to fix → Fail
Tool Coverage98
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 94% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 39 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
  • Supports UI / widget rendering.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 15 Oct 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “content” rewrote its description, which is the text the model reads security
    • Tool “get_fix_pack” rewrote its description, which is the text the model reads security
    • New prompt “content_autopilot” functional
    • “content” added an optional parameter “html” cosmetic
    • “content” added an optional parameter “ideas” cosmetic
    • “content” added an optional parameter “per_week” cosmetic
    • “content” added an optional parameter “start” cosmetic
    • “content” added an optional parameter “urls” cosmetic
    • “content” added an optional parameter “webhook_url” cosmetic
    • “content” added an optional parameter “weeks” cosmetic
  • 13 Oct 26 +1

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

    • Tool “find_duplicate_content” was removed ▼ security
    • Tool “analyze_logs” was removed ▼ security
    • Tool “check_hreflang” was removed ▼ security
    • Tool “extract_from_pages” was removed ▼ security
    • Tool “check_local_seo” was removed ▼ security
    • Tool “check_product_page” was removed ▼ security
    • Tool “check_url_parameters” was removed ▼ security
    • Tool “create_content_brief” was removed ▼ security
    • Tool “map_topics” was removed ▼ security
    • Tool “match_intent” was removed ▼ security
    • Tool “plan_redirects” was removed ▼ security
    • Tool “plan_split_test” was removed ▼ security
    • Tool “plan_sprint” was removed ▼ security
    • Tool “render_page” was removed ▼ security
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “find_opportunities” rewrote its description, which is the text the model reads security
    • Tool “accessibility” rewrote its description, which is the text the model reads security
    • Tool “ai_visibility” rewrote its description, which is the text the model reads security
    • Tool “answer_readiness” rewrote its description, which is the text the model reads security
    • Tool “backlinks” rewrote its description, which is the text the model reads security
    • Tool “check_keyword” rewrote its description, which is the text the model reads security
    • Tool “check_links” rewrote its description, which is the text the model reads security
    • Tool “compare” rewrote its description, which is the text the model reads security
    • Tool “dashboard” rewrote its description, which is the text the model reads security
    • Tool “edge_worker” rewrote its description, which is the text the model reads security
    • Tool “entity” rewrote its description, which is the text the model reads security
    • Tool “explain_google” rewrote its description, which is the text the model reads security
    • Tool “fix_log” rewrote its description, which is the text the model reads security
    • Tool “get_fix_pack” rewrote its description, which is the text the model reads security
    • Tool “internal_links” rewrote its description, which is the text the model reads security
    • Tool “layout” rewrote its description, which is the text the model reads security
    • Tool “llms_txt” rewrote its description, which is the text the model reads security
    • Tool “measure” rewrote its description, which is the text the model reads security
    • Tool “request_recrawl” rewrote its description, which is the text the model reads security
    • Tool “robots_txt” rewrote its description, which is the text the model reads security
    • Tool “scan_page” rewrote its description, which is the text the model reads security
    • Tool “schema” rewrote its description, which is the text the model reads security
    • Schema quality: 156 → 227 ▼ functional
    • Schema quality: 156 → 231 ▼ functional
    • MCP protocol: fail → pass ▲ functional
    • New prompt “ai_search_review” functional
    • New prompt “executive_summary” functional
    • New prompt “investigate_drop” functional
    • New prompt “client_report” functional
    • New prompt “fix_and_prove” functional
    • New prompt “migration” functional
    • New prompt “pick_up” functional
    • New prompt “weekly_routine” functional
    • MCP protocol version: 2025-06-18 → 2026-07-28 functional
    • Server version: 2.8.0 → 2.11.0 functional
    • Server version: 1.4.0 → 2.8.0 functional
    • “compare” added an optional parameter “bypass_token” cosmetic
    • “compare” added an optional parameter “paths” cosmetic
    • “compare” added an optional parameter “preview_url” cosmetic
    • “compare” added an optional parameter “production_url” cosmetic
    • “find_opportunities” added an optional parameter “drop_date” cosmetic
    • “get_fix_pack” added an optional parameter “change_id” cosmetic
    • “get_fix_pack” added an optional parameter “changes” cosmetic
    • “get_fix_pack” added an optional parameter “note” cosmetic
    • “get_fix_pack” added an optional parameter “site_key” cosmetic
    • “measure” added an optional parameter “detail” cosmetic
    • “sitemap” added an optional parameter “detail” cosmetic
    • “accessibility” added an optional parameter “detail” cosmetic
    • “accessibility” added an optional parameter “memory_key” cosmetic
    • “ai_visibility” added an optional parameter “detail” cosmetic
    • “ai_visibility” added an optional parameter “memory_key” cosmetic
    • “answer_readiness” added an optional parameter “detail” cosmetic
    • “answer_readiness” added an optional parameter “memory_key” cosmetic
    • “backlinks” added an optional parameter “detail” cosmetic
    • “backlinks” added an optional parameter “memory_key” cosmetic
    • “check_keyword” added an optional parameter “detail” cosmetic
    • “check_keyword” added an optional parameter “memory_key” cosmetic
    • “check_links” added an optional parameter “detail” cosmetic
    • “check_links” added an optional parameter “memory_key” cosmetic
    • “compare” added an optional parameter “detail” cosmetic
    • “compare” added an optional parameter “memory_key” cosmetic
    • “dashboard” added an optional parameter “detail” cosmetic
    • “dashboard” added an optional parameter “memory_key” cosmetic
    • “edge_worker” added an optional parameter “detail” cosmetic
    • “edge_worker” added an optional parameter “memory_key” cosmetic
    • “entity” added an optional parameter “detail” cosmetic
    • “entity” added an optional parameter “memory_key” cosmetic
    • “explain_google” added an optional parameter “bing_queries” cosmetic
    • “explain_google” added an optional parameter “detail” cosmetic
    • “explain_google” added an optional parameter “google_queries” cosmetic
    • “explain_google” added an optional parameter “issues” cosmetic
    • “explain_google” added an optional parameter “memory_key” cosmetic
    • “find_opportunities” added an optional parameter “ads” cosmetic
    • “find_opportunities” added an optional parameter “brand_terms” cosmetic
    • “find_opportunities” added an optional parameter “detail” cosmetic
    • “find_opportunities” added an optional parameter “gsc” cosmetic
    • “find_opportunities” added an optional parameter “memory_key” cosmetic
    • “fix_log” added an optional parameter “detail” cosmetic
    • “fix_log” added an optional parameter “memory_key” cosmetic
    • “get_fix_pack” added an optional parameter “detail” cosmetic
    • “get_fix_pack” added an optional parameter “memory_key” cosmetic
    • “internal_links” added an optional parameter “detail” cosmetic
    • “internal_links” added an optional parameter “memory_key” cosmetic
    • “layout” added an optional parameter “detail” cosmetic
    • “layout” added an optional parameter “memory_key” cosmetic
    • “llms_txt” added an optional parameter “detail” cosmetic
    • “llms_txt” added an optional parameter “memory_key” cosmetic
    • “measure” added an optional parameter “memory_key” cosmetic
    • “prioritize_fixes” added an optional parameter “detail” cosmetic
    • “prioritize_fixes” added an optional parameter “memory_key” cosmetic
    • “request_recrawl” added an optional parameter “detail” cosmetic
    • “request_recrawl” added an optional parameter “memory_key” cosmetic
    • “robots_txt” added an optional parameter “detail” cosmetic
    • “robots_txt” added an optional parameter “memory_key” cosmetic
    • “scan_page” added an optional parameter “detail” cosmetic
    • “scan_page” added an optional parameter “memory_key” cosmetic
    • “schema” added an optional parameter “detail” cosmetic
    • “accessibility” reworded the description of “detail” cosmetic
    • “accessibility” reworded the description of “memory_key” cosmetic
    • “ai_visibility” reworded the description of “detail” cosmetic
    • “ai_visibility” reworded the description of “memory_key” cosmetic
    • “answer_readiness” reworded the description of “detail” cosmetic
    • “answer_readiness” reworded the description of “memory_key” cosmetic
    • “backlinks” reworded the description of “detail” cosmetic
    • “backlinks” reworded the description of “memory_key” cosmetic
    • “check_keyword” reworded the description of “detail” cosmetic
    • “check_keyword” reworded the description of “memory_key” cosmetic
    • “check_links” reworded the description of “detail” cosmetic
    • “check_links” reworded the description of “memory_key” cosmetic
    • “compare” reworded the description of “detail” cosmetic
    • “compare” reworded the description of “memory_key” cosmetic
    • “content” reworded the description of “detail” cosmetic
    • “content” reworded the description of “memory_key” cosmetic
    • “dashboard” reworded the description of “detail” cosmetic
    • “dashboard” reworded the description of “memory_key” cosmetic
    • “edge_worker” reworded the description of “detail” cosmetic
    • “edge_worker” reworded the description of “memory_key” cosmetic
    • “entity” reworded the description of “detail” cosmetic
    • “entity” reworded the description of “memory_key” cosmetic
    • “explain_google” reworded the description of “detail” cosmetic
    • “explain_google” reworded the description of “memory_key” cosmetic
    • “find_opportunities” reworded the description of “detail” cosmetic
    • “find_opportunities” reworded the description of “memory_key” cosmetic
    • “fix_log” reworded the description of “detail” cosmetic
    • “fix_log” reworded the description of “memory_key” cosmetic
    • “get_fix_pack” reworded the description of “detail” cosmetic
    • “get_fix_pack” reworded the description of “memory_key” cosmetic
    • “internal_links” reworded the description of “detail” cosmetic
    • “internal_links” reworded the description of “memory_key” cosmetic
    • “layout” reworded the description of “detail” cosmetic
    • “layout” reworded the description of “memory_key” cosmetic
    • “llms_txt” reworded the description of “detail” cosmetic
    • “llms_txt” reworded the description of “memory_key” cosmetic
    • “local” reworded the description of “detail” cosmetic
    • “local” reworded the description of “memory_key” cosmetic
    • “measure” reworded the description of “detail” cosmetic
    • “measure” reworded the description of “memory_key” cosmetic
    • “plan” reworded the description of “detail” cosmetic
    • “plan” reworded the description of “memory_key” cosmetic
    • “prioritize_fixes” reworded the description of “detail” cosmetic
    • “prioritize_fixes” reworded the description of “memory_key” cosmetic
    • “request_recrawl” reworded the description of “detail” cosmetic
    • “request_recrawl” reworded the description of “memory_key” cosmetic
    • “robots_txt” reworded the description of “detail” cosmetic
    • “robots_txt” reworded the description of “memory_key” cosmetic
    • “scan_page” reworded the description of “detail” cosmetic
    • “scan_page” reworded the description of “memory_key” cosmetic
    • “schema” reworded the description of “detail” cosmetic
    • “schema” reworded the description of “memory_key” cosmetic
    • “share” reworded the description of “detail” cosmetic
    • “share” reworded the description of “memory_key” cosmetic
    • “site_audit” reworded the description of “detail” cosmetic
    • “site_audit” reworded the description of “memory_key” cosmetic
    • “site_memory” reworded the description of “detail” cosmetic
    • “sitemap” reworded the description of “detail” cosmetic
    • “sitemap” reworded the description of “memory_key” cosmetic
    • “snippet” reworded the description of “detail” cosmetic
    • “snippet” reworded the description of “memory_key” cosmetic
    • “technical” reworded the description of “detail” cosmetic
    • “technical” reworded the description of “memory_key” cosmetic
    • “text_quality” reworded the description of “detail” cosmetic
    • “text_quality” reworded the description of “memory_key” cosmetic
    • “track_rankings” reworded the description of “detail” cosmetic
    • “track_rankings” reworded the description of “memory_key” cosmetic
    • “tracking” reworded the description of “detail” cosmetic
    • “tracking” reworded the description of “memory_key” cosmetic
    • “watch” reworded the description of “detail” cosmetic
    • “watch” reworded the description of “memory_key” cosmetic
    • “web_vitals” reworded the description of “detail” cosmetic
    • “web_vitals” reworded the description of “memory_key” cosmetic
    • “layout” reworded the description of “mode” cosmetic
    • Tool “explain_google” changed its title: Explain Google → Explain Google and Bing cosmetic
    • Tool “layout” changed its title: Layout → Layout and first screen cosmetic
  • 12 Oct 26 +5

    We did not load change detail this far back for this component, so this day may have recorded more than is shown.

  • 10 Oct 26 67

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 17 Oct 2026 · Probed https://onpage.dev/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=onpage.dev CN=WE1,O=Google Trust Services,C=US 1 Oct 2026 30 Dec 2026 ECDSA 256 ECDSA-SHA256 11e624bc5fbb450e0e698503305d01dd
SANs: onpage.dev, www.onpage.dev, *.www.onpage.dev
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of onpage.dev. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
dev. present 60074 8 Verified
onpage.dev. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000; includeSubDomains
content-security-policy default-src 'none'
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin
permissions-policy geolocation=(), microphone=(), camera=(), payment=(), usb=(), interest-cohort=()

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://onpage.dev/mcp Verified 200
http (plaintext) http://onpage.dev/mcp HTTPS enforced 301 https://onpage.dev/mcp
MCP tools · 37 exposed · ~8,775 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
accessibility ~140

Accessibility 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.

NameTypeReqDescription
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default wcag.
treeobject–Optional: an accessibility snapshot from your own browser (role, name, level, children), for example Puppeteer page.accessibility.snapshot().
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

ai_visibility ~282

Whether 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 similar. Needs site, brand, responses[{question, response, links, search_queries, engine, volume}]. citations = What pages cited by AI do differently, from citation counts. Needs pages[{url, chatgpt, perplexity, gemini, google_ai_overviews, google_ai_mode}].

NameTypeReqDescription
brandstring–Your brand name as people write it.
competitorsarray––
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default check.
pagesarray––
responsesarray––
sitestring–Your site, for example example.com.
sourcestring–Where the citation counts come from.
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

answer_readiness ~210

Whether 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.

NameTypeReqDescription
competitorsarray–Optional: up to 2 pages that rank for the topic.
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default questions.
questionstring–The question people ask, for example 'how long does shipping take to Germany'.
questionsarray–The sub-questions an AI search engine would ask for the topic.
topicstring–The topic or main query, for example 'passport renewal'.
urlstring–Full address of the page.

Structured output declared, but exposes no named fields.

No examples provided.

backlinks ~390

Turn 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 for the user's mail after approval. Needs your_site, prospects[{page, type, your_url, dead_url, anchor, contact}]. disavow = A conservative disavow.txt, only after a manual action or clear negative SEO. Needs rows[{url_from, domain, is_spam, domain_rating, anchor, traffic}], reason.

NameTypeReqDescription
audit_idstring–Optional: a finished site audit, to match on page titles too.
brandstring–Brand name to look for in mention pages.
competitorsarray–Each competitor with its referring domains.
detailstring–brief = short summary.
formatstring–Rule format, default redirects (Cloudflare Pages and Netlify _redirects).
live_urlsarray–Optional: your live pages, instead of reading the sitemap.
memory_keystring–site_memory key, records this call.
mentionsarray–Pages that mention the brand.
modestring–Default broken.
prospectsarray––
reasonstring–Why a disavow is considered.
rowsarray–Broken backlink rows, one per linking page.
sender_namestring–Name to sign with.
sitestring–Optional: your site's address.
your_sitestring–Your site or brand name, e.g.
yoursarray–Your own referring domains.

Structured output declared, but exposes no named fields.

No examples provided.

check_keyword ~197

How 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.

NameTypeReqDescription
competing_urlsarray–Other pages of the same site that compete for the keyword.
detailstring–brief = short summary.
keywordstring–The search term the page should rank for, for example 'running shoes'.
memory_keystring–site_memory key, records this call.
modestring–Default focus.
rowsarray–Optional Search Console rows for the keyword, to find the competing pages and their positions.
target_urlstring–The page that should rank for it.
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

check_links ~130

Status 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.

NameTypeReqDescription
detailstring–brief = short summary.
expectedarray–Optional expected final address for each URL, in the same order.
memory_keystring–site_memory key, records this call.
modestring–Default urls.
urlstring–The page to check.
urlsarray–Addresses to check.

Structured output declared, but exposes no named fields.

No examples provided.

compare ~213

Compare 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.

NameTypeReqDescription
afterstring–HTML after the change.
beforestring–HTML before the change.
bypass_tokenstring–Vercel protection bypass secret.
competitorsarray–Competitor page addresses.
detailstring–brief = short summary.
keywordstring–Optional search term to compare keyword use.
memory_keystring–site_memory key, records this call.
modestring–Default pages.
pathsarray–Paths like /pricing, default /.
preview_urlstring–The deploy preview URL.
production_urlstring–The live site.
urlstring–Full address, for example https://example.com.

Structured output declared, but exposes no named fields.

No examples provided.

content ~442

What 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 the pages that rank. voice = Learn how the site writes from its best articles. Needs urls. calendar = A dated calendar of refreshes and new pages, steered by what worked here. draft = A draft against the site's voice, sources and SEO, before approval. Needs html.

NameTypeReqDescription
audit_idstring–Optional: a finished site audit, for internal link suggestions.
competitor_rowsarray–Optional keyword gap: competitors' organic keywords (Ahrefs organic-keywords or Semrush domain_organic for each competitor, or Semrush keyword gap rows).
competitorsarray–Pages that rank for the term.
detailstring–brief = short summary.
htmlstring–The draft as HTML, title in <title> or <h1>.
ideasarray–Topics without a page yet.
keywordstring–The search term the page should rank for.
memory_keystring–site_memory key, records this call.
modestring–Default brief.
per_weeknumber–Items per week, default 2.
queriesarray–Search Console rows by query and page, for the site-wide check.
rowsarray–Search Console rows by query and page.
startstring–First day, YYYY-MM-DD, default today.
urlstring–Optional: your existing page for this term.
urlsarray–The site's own best articles, ones that rank and that the owner likes.
webhook_urlstring–Optional https Slack or Discord webhook for a Monday reminder; off stops it.
weeksnumber–Weeks to plan, default 8.

Structured output declared, but exposes no named fields.

No examples provided.

dashboard ~302

A 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.

NameTypeReqDescription
bigqueryobject–Optional, for ready SQL.
datasetstring––
detailstring–brief = short summary.
feed_idstring–Feed from create_dashboard_feed.
fix_log_idstring–Optional fix log from log_fix, to include shipped fixes.
formatstring–blueprint (default) for Claude Dashboards, or html for a complete, designed dashboard page filled with the feed's data, ready to show as an artifact.
fromstring–Start date, YYYY-MM-DD.
memory_keystring–site_memory key, records this call.
modestring–Default feed.
namestring–Optional name, for example the client's name.
pagesarray–Optional key pages to track, up to 10.
replaceboolean–Replace this connection's existing feed.
sourcesarray–What the user has connected in Claude.
tostring–End date, YYYY-MM-DD.
urlstring–Home page of the site.

Structured output declared, but exposes no named fields.

No examples provided.

edge_worker ~167

Fixes 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.

NameTypeReqDescription
audit_idstring–Id of a completed site audit (start_site_audit, then get_site_audit until complete).
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default rules.
site_namestring–Brand name for title endings, for example 'Acme Shoes'.
urlstring–A page of the app, for example https://app.example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

entity ~104

How 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.

NameTypeReqDescription
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default graph.
urlstring–Full address, for example https://example.com/blog/post.

Structured output declared, but exposes no named fields.

No examples provided.

explain_google ~208

Explain 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 against Google per query.

NameTypeReqDescription
actionstring–The manual action as Search Console shows it.
bing_queriesarray––
detailstring–brief = short summary.
google_queriesarray––
issuesarray–Bing crawl or index issues.
memory_keystring–site_memory key, records this call.
modestring–Default index_status.
rowsarray––
sample_urlsarray–Example URLs Google listed.
sitestring–The site or Search Console property.

Structured output declared, but exposes no named fields.

No examples provided.

find_opportunities ~504

Turn 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 positions 8 to 20 worth a push. Needs rows[{position, page, query, clicks, impressions, ctr}]. content_decay = Pages slowly losing clicks over months: a refresh queue. Needs rows[{url, month, clicks}]. traffic_drop = Explain a drop page by page, by device and country. Needs rows[{url, before, after, query, device, country}]. prune = Keep, refresh, merge (301), noindex or remove (410) per page. Needs rows[{url, clicks, impressions, conversions, referring_domains, inlinks}]. discover = Readiness for Google Discover and News, with Discover or News rows. paid_organic = Google Ads terms against Search Console: ad spend you can test cutting, content to write. Needs ads[{term, cost, clicks, conversions}], gsc[{query, position, clicks, page}]. anomalies = Spike and drop days in daily rows, with Google updates near them. Needs rows[{date, clicks, impressions, page}]. ai_queries = Question and prompt-style queries per page, for AI answers. Needs rows[{query, page, clicks, impressions, position}].

NameTypeReqDescription
adsarray–Google Ads search terms.
brand_termsarray–Optional brand names, handled apart.
detailstring–brief = short summary.
drop_datestring–Optional first day of the drop, YYYY-MM-DD, to check Google updates around it.
fix_log_idstring–Optional fix log from log_fix, to spot undone fixes on losing pages.
gscarray–Search Console queries.
memory_keystring–site_memory key, records this call.
modestring–Default ctr_gaps.
rowsarray–Search Console rows for one period (28 days works well).
search_typestring–Search Console search type of the rows, default web.
urlsarray–Article pages to check.

Structured output declared, but exposes no named fields.

No examples provided.

fix_log ~263

Record 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.

NameTypeReqDescription
brandstring–For the report: your agency name for the header.
detailstring–brief = short summary.
fix_log_idstring–Add to an existing log.
fixesarray––
formatstring–status (default), a client report, or GA4 annotations (one per ship date) for the Admin API.
memory_keystring–site_memory key, records this call.
modestring–Default log.
monthstring–For the report: YYYY-MM.
shipped_atstring–Date the fixes went live, YYYY-MM-DD.
verifyboolean–Check the live pages now (4 pages per call).
webhookstring–Optional https URL (Slack, Discord, Zapier, n8n, a GitHub Action) that gets the restore code when a fix is undone.

Structured output declared, but exposes no named fields.

No examples provided.

get_fix_pack ~363

Fixes 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, WordPress steps or a Worker. Needs url. wordpress = Send fixes, new drafts and post updates to the OnPage.dev WordPress plugin for one-click approval and undo. Needs site_key.

NameTypeReqDescription
altsarray–Step 2: the alt text per image src.
change_idstring–Status of an earlier send.
changesarray–Optional field and new value pairs.
detailstring–brief = short summary.
failingarray–Metrics that fail for real users, if known.
frameworkstring–With platform git: the site's framework.
memory_keystring–site_memory key, records this call.
modestring–Default fixes.
notestring–Optional reason shown to the site owner.
platformstring–html (default) for code to paste; wordpress, webflow, wix, shopify, storyblok, sanity, contentful, strapi, ghost or magento for a plan with the exact fields and
site_keystring–The site key from the plugin, wpk_...
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

internal_links ~221

Internal 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.

NameTypeReqDescription
audit_idstring–Id of a completed site audit.
detailstring–brief = short summary.
important_urlsarray–Optional. Pages that matter most, for example top pages by clicks or revenue.
memory_keystring–site_memory key, records this call.
modestring–Default suggest.
phrasesarray–Optional: phrases to turn into the link, besides the anchor text, for example natural variants.
platformstring–Optional: also return the links ready to apply: a Cloudflare Worker that links the first mention on each page, a WordPress edit plan, or the edits for the code.
target_urlstring–Page that should receive links.
topicstring–Topic or main keyword of the target page.

Structured output declared, but exposes no named fields.

No examples provided.

layout ~181

What 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.

NameTypeReqDescription
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default render.
no_jsobject–Optional: the probe result with JavaScript turned off, for an exact comparison.
resultsarray–One probe result per viewport, each with device set to phone, tablet or desktop.
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

llms_txt ~122

The 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.

NameTypeReqDescription
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default generate.
textstring–Optional llms.txt content to validate instead of the live file.
urlstring–Home page of the site, for example https://example.com.

Structured output declared, but exposes no named fields.

No examples provided.

local ~279

Local 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 into new service and location pages.

NameTypeReqDescription
businessstring–Business name to sign with.
citystring–Main city, left out when matching terms to pages.
contactstring–Where unhappy customers can reach you, e.g.
detailstring–brief = short summary.
gbp_profileobject–Optional: the Google Business Profile of this location, from the user's GBP connector or typed by the user, to compare with the site.
gridarray–Optional geo-grid rankings.
memory_keystring–site_memory key, records this call.
modestring–Default check.
pagesarray–The site's page URLs, e.g.
reviewsarray––
termsarray–Search terms from the Business Profile performance report.
urlstring–The home page, a location page or the locations overview page.

Structured output declared, but exposes no named fields.

No examples provided.

measure ~419

Prove 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 engine. Needs pages[{url, before, after, changed}]. ai_referrals = Visits from ChatGPT, Perplexity, Gemini and other assistants, from GA4. Needs rows[{source, sessions, landing_page, period, conversions, revenue}]. brand_split = Brand versus non-brand clicks and how each moved. Needs brand_terms, rows[{query, keyword, clicks, traffic, impressions, position}]. share_of_voice = Share of the clicks against competitors from rank rows. Needs your_domain, rows[{keyword, position, volume, domain, url, group}].

NameTypeReqDescription
brand_termsarray–Brand and product names, and misspellings.
daysinteger–Length of each period in days.
detailstring–brief = short summary.
fix_datestring–Date the fixes went live, YYYY-MM-DD.
fix_log_idstring–Optional fix log from log_fix: takes the fix date from it and saves the result per fix, with a rollback plan for fixes that did worse.
memory_keystring–site_memory key, records this call.
modestring–Default impact.
pagesarray––
rowsarray––
rows_beforearray–Optional same rows from an earlier period.
sourcestring–Where the counts come from, for example Ahrefs Brand Radar.
watch_idsarray–Optional watch ids, to list what changed on each page and when.
your_domainstring–Your domain, e.g. example.com.

Structured output declared, but exposes no named fields.

No examples provided.

plan ~301

Plans 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}].

NameTypeReqDescription
clicksarray–Optional clicks per page for a balanced split.
detailstring–brief = short summary.
fieldstring–What to change.
fixesarray––
formatstring–Output format, default redirects (Cloudflare Pages and Netlify).
hoursobject–Hours per week per role, default 8 each.
memory_keystring–site_memory key, records this call.
modestring–Default redirects.
new_sitestring–New site address, to read its sitemap instead of new_urls.
new_urlsarray––
old_sitestring–Old site address, to read its sitemap instead of old_urls.
old_urlsarray––
patternstring–The new value with {title} or {description} as placeholders.
start_datestring–Optional planned start, YYYY-MM-DD.
urlsarray–Pages of one template.
weeksnumber–Weeks to plan, default 4.

Structured output declared, but exposes no named fields.

No examples provided.

prioritize_fixes ~184

Use 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 bring instead of clicks.

NameTypeReqDescription
audit_idstring–Optional id of a finished site audit, so pages are not scanned again.
currencystring–Currency of revenue, for example EUR or USD.
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
pagesarrayyes–
sourcestring–Where the numbers come from.
NameTypeReqDescription
actionsarray––
modestring––
statusstringyes–

No examples provided.

request_recrawl ~157

Get 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.

NameTypeReqDescription
detailstring–brief = short summary.
indexnow_keystring–Optional IndexNow key that is live at /<key>.txt.
keystring–The site's IndexNow key (8 to 128 letters, digits or dashes).
memory_keystring–site_memory key, records this call.
modestring–Default recrawl.
urlsarray–Changed pages on one site.

Structured output declared, but exposes no named fields.

No examples provided.

robots_txt ~175

robots.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.

NameTypeReqDescription
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default test.
policystring–Which AI crawlers to allow.
robots_txtstring–Optional robots.txt content to test instead of the live file.
urlstring–Full address of the page, for example https://example.com/pricing.
user_agentsarray–Crawler names, for example Googlebot, GPTBot, ClaudeBot, PerplexityBot.

Structured output declared, but exposes no named fields.

No examples provided.

scan_page ~189

Scan 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.

NameTypeReqDescription
detailstring–brief = short summary.
htmlstring–The complete HTML document, up to 900 KB.
memory_keystring–site_memory key, records this call.
modestring–Default page.
sectionsarray–Sections to include. Default: all.
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

schema ~202

JSON-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 fields). To write Product JSON-LD use generate with type Product. Needs url.

NameTypeReqDescription
detailstring–brief = short summary.
jsonldstring–The JSON-LD as text, with or without the <script> tag.
memory_keystring–site_memory key, records this call.
modestring–Default generate.
typestring–Schema type, default auto.
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

share ~148

Send 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.

NameTypeReqDescription
audit_idstring–A finished site audit from start_site_audit, to export the whole site.
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default link.
slack_webhook_urlstring–Optional https incoming webhook (Slack, Discord, Teams) to post the summary to.
urlstring–Full address, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

site_audit ~384

Audit 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, meta_description, h1}]. compare = What changed since the last audit, or against a competitor audit. Needs audit_id. report = A client-ready report page with a link. Needs audit_id.

NameTypeReqDescription
audit_idstring–The id returned by start_site_audit.
brandstring–Optional agency or team name to show instead of OnPage.dev.
competitor_audit_idstring–Optional: a finished audit of a competitor's site, to compare the two sites side by side instead of over time.
detailstring–brief = short summary.
linksarray–Optional internal links, for link equity, orphans and internal link suggestions.
max_pagesinteger–How many pages to audit, default 10, at most 25.
memory_keystring–site_memory key, records this call.
modestring–Default start.
notestring–Optional short note for the reader, shown at the top.
pagesarray–One row per crawled page.
previous_audit_idstring–Optional: the audit to compare with.
sourcestring–Where the rows come from, for example Screaming Frog or Ahrefs Site Audit.
urlstring–Full address, for example https://example.com.

Structured output declared, but exposes no named fields.

No examples provided.

site_memory ~220

A 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. forget = Delete the memory (ask the user first). Needs memory_key.

NameTypeReqDescription
detailstring–brief = short summary.
kindstring––
limitnumber––
memory_keystring–The memory_key you got when the memory was created.
modestring–Default open.
notestring––
share_learningboolean–Opt in (true) or out (false) of sharing anonymous results: only the fix type and the rounded lift, never the site, URLs or numbers.
urlstring–The site's home page.

Structured output declared, but exposes no named fields.

No examples provided.

sitemap ~110

The 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.

NameTypeReqDescription
audit_idstring–A finished site audit.
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default check.
urlstring–The site's home page, or the sitemap URL itself.

Structured output declared, but exposes no named fields.

No examples provided.

snippet ~157

How 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.

NameTypeReqDescription
descriptionstring–Proposed meta description.
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default search.
titlestring–Proposed title tag text.
urlstring–Page to read the current title and description from, when no title is given.

Structured output declared, but exposes no named fields.

No examples provided.

technical ~325

Technical 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 verification. Needs log.

NameTypeReqDescription
attributestring–With selector: read this attribute instead of the text, for example href or content.
audit_idstring–Id of a completed site audit.
detailstring–brief = short summary.
jsonldstring–A JSON-LD path: the @type, then the properties, for example Product.offers.price or Article.author.name.
logstring–Raw access log lines, one request per line.
memory_keystring–site_memory key, records this call.
modestring–Default hreflang.
regexstring–A regular expression; the first group is returned if there is one, otherwise the whole match.
selectorstring–CSS selector, for example .price, h1 or link[rel=canonical].
sitemap_urlsarray–Optional: the URLs from the site's sitemap, to find pages bots never crawl.
urlstring–Full address of one language version of the page.
urlsarray–Optional extra URLs, for example from server logs or Search Console.

Structured output declared, but exposes no named fields.

No examples provided.

text_quality ~125

Readability 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.

NameTypeReqDescription
competitorsarray–Optional: top organic results for the keyword.
detailstring–brief = short summary.
keywordstring–Optional: the search term, for context.
memory_keystring–site_memory key, records this call.
modestring–Default readability.
urlstring–Your page.

Structured output declared, but exposes no named fields.

No examples provided.

track_rankings ~280

Use 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).

NameTypeReqDescription
actionstring–run (default), status or stop.
conversionsarray–Optional GA4 key events or revenue per landing page.
detailstring–brief = short summary.
fix_log_idstring–Optional fix log (log_fix) whose pages count as work done.
gsc_rowsarray–Search Console rows by query and page for the period.
memory_keystring–site_memory key, records this call.
money_keywordsarray–Optional keywords you always want followed.
sitestring–Your site. Needed on the first run.
tracker_idstring–From the first run. Leave out to create a tracker.
tracker_rowsarray–Ahrefs Rank Tracker or Semrush Position Tracking rows.
webhook_urlstring–Optional https webhook for the changes (Slack and Discord work).
NameTypeReqDescription
eventsarray––
groupsobject––
runsnumber––
trackerIdstringyes–

No examples provided.

tracking ~178

Whether 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}].

NameTypeReqDescription
detailstring–brief = short summary.
ga4array–GA4 sessions per landing page, organic Google only.
gscarray–Search Console clicks per page.
memory_keystring–site_memory key, records this call.
modestring–Default ga4.
urlstring–Full address of the page, for example https://example.com/.

Structured output declared, but exposes no named fields.

No examples provided.

watch ~376

Monitoring 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 or 30 days and alert on regressions. guard = Every 6 hours: robots.txt, sitemap, https, noindex and canonical on key pages, for deploy accidents. competitors = Weekly new, updated and removed pages from competitors' sitemaps, flagged by your topics.

NameTypeReqDescription
actionstring–create (default), status or stop.
competitor_ofstring–Optional: your own page.
competitorsarray–Competitor home pages.
detailstring–brief = short summary.
every_daysnumber–How often, default 7.
guard_idstring–For status and stop.
max_pagesnumber–Pages per audit, default 25.
memory_keystring–site_memory key, records this call.
modestring–Default page.
pagesarray–Key pages to guard besides the home page (money pages first).
schedule_idstring–For status and stop.
topicsarray–Your topics or keywords, to flag overlapping pages.
urlstring–Full address, for example https://example.com/pricing.
watch_idstring–For status and stop.
webhook_urlstring–Optional https URL that receives a JSON POST when something changes, for example a Slack or Discord incoming webhook.

Structured output declared, but exposes no named fields.

No examples provided.

web_vitals ~127

Core 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.

NameTypeReqDescription
change_datestring–Optional date a speed fix went live, YYYY-MM-DD.
detailstring–brief = short summary.
memory_keystring–site_memory key, records this call.
modestring–Default now.
urlstring–Full address of the page, for example https://example.com/pricing.

Structured output declared, but exposes no named fields.

No examples provided.

Install

How do I install the OnPage.dev MCP server?

OnPage.dev is a hosted endpoint at https://onpage.dev/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · onpage.dev

# add to Claude Code
claude mcp add --transport http dev-onpage-onpage 'https://onpage.dev/mcp'
Common questions

What is the OnPage.dev MCP server?

OnPage.dev is an MCP server listed in the public MCP registry as dev.onpage/onpage. Free SEO MCP that closes the loop: find, fix, ship as a PR or to a CMS, prove. 37 tools, no key. This page covers its hosted endpoint (https://onpage.dev/mcp).

Is the OnPage.dev MCP server safe to use?

OnPage.dev scores 73 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the OnPage.dev MCP server expose?

OnPage.dev exposes 37 tools: site_memory, scan_page, site_audit, watch, dashboard, and 32 more. Their descriptions and schemas cost roughly 8,775 tokens of context every time the server is loaded.

Does the OnPage.dev MCP server require authentication?

No. We connected to OnPage.dev without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the OnPage.dev MCP server still maintained?

OnPage.dev is still listed as active in the MCP registry. We last reached this channel on 17 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.