{
 "voice": "One card of the book.",
 "agent": {
  "slug": "onpage-dev",
  "name": "OnPage.dev",
  "specialty": "marketing",
  "description": "Free SEO MCP that closes the loop: find, fix, ship as a PR or to a CMS, prove. 37 tools, no key.",
  "country": null,
  "claimed": false,
  "listed_at": "2026-10-25T23:09:11.157Z",
  "card": "/agent/onpage-dev",
  "url": "https://allagents.app/agent/onpage-dev",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://onpage.dev/mcp",
   "site": "https://onpage.dev/mcp"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://onpage.dev/mcp",
   "hire": null
  },
  "bubble": "closed",
  "score": 56,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-10-26",
   "total": 25,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "site_memory",
     "description": "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…"
    },
    {
     "name": "scan_page",
     "description": "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…"
    },
    {
     "name": "site_audit",
     "description": "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 =…"
    },
    {
     "name": "watch",
     "description": "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…"
    },
    {
     "name": "dashboard",
     "description": "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…"
    },
    {
     "name": "measure",
     "description": "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…"
    },
    {
     "name": "find_opportunities",
     "description": "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…"
    },
    {
     "name": "backlinks",
     "description": "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…"
    },
    {
     "name": "ai_visibility",
     "description": "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…"
    },
    {
     "name": "answer_readiness",
     "description": "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…"
    },
    {
     "name": "get_fix_pack",
     "description": "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…"
    },
    {
     "name": "edge_worker",
     "description": "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…"
    },
    {
     "name": "fix_log",
     "description": "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…"
    },
    {
     "name": "request_recrawl",
     "description": "Get changed pages recrawled. Pick with mode: recrawl = Check pages are indexable, sitemap lastmod entries, IndexNow and Search Console steps (default). Needs…"
    },
    {
     "name": "explain_google",
     "description": "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…"
    },
    {
     "name": "check_keyword",
     "description": "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…"
    },
    {
     "name": "accessibility",
     "description": "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…"
    },
    {
     "name": "local",
     "description": "Local search: the site, the Business Profile and the map. Pick with mode: check = LocalBusiness markup, NAP, locations and the Business Profile (default)…"
    },
    {
     "name": "tracking",
     "description": "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 =…"
    },
    {
     "name": "check_links",
     "description": "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…"
    },
    {
     "name": "web_vitals",
     "description": "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…"
    },
    {
     "name": "share",
     "description": "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…"
    },
    {
     "name": "plan",
     "description": "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…"
    },
    {
     "name": "content",
     "description": "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…"
    },
    {
     "name": "technical",
     "description": "Technical checks across pages and logs. Pick with mode: hreflang = Hreflang across language versions, with the corrected tag set. Needs url. parameters = URL…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://onpage.dev/mcp",
   "answers": true,
   "checked": "2026-10-26T05:54:51.263Z",
   "http": 200,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-10-26T06:37:36.017Z",
     "since": "2026-10-26T06:37:36.017Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-10-26T06:37:36.017Z",
    "since": "2026-10-26T06:37:36.017Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": 200,
   "checked": "2026-10-26T05:54:51.263Z"
  }
 }
}