SEO Audit in Pi
SEO and local AI readiness. The MCP server is https://seoaudit.openkrill.app/mcp. No key. The steps below are only for Pi. A call to audit_page was checked against that server on 2026-10-01.
What this server answers
Audit a website for technical and on-page SEO problems. Ask "audit example.com", "what SEO problems does https://example.com/docs have?" or "which pages on my site have missing titles or duplicate descriptions?".
audit_site reads the homepage, the sitemap and the pages they link to (up to 25 pages), respecting robots.txt, and returns the rules that failed grouped by priority, each with the affected pages, the fix and the link to the documentation the rule comes from. It covers robots.txt and sitemap problems, broken links and redirect chains, noindex, nofollow and canonical issues, crawlable links and URL tidiness, titles, descriptions, headings, thin and duplicate content, image alt text, structured data and review markup, share tags, language and hreflang, mixed content and page weight. For sites with many similar pages (a page per city or product) it compares the pages it read: groups of near-identical pages, pages with little text of their own once the shared template wording is removed, hreflang links the other page does not return or sets without x-default, and sitemap pages that no page links to. For local businesses it checks LocalBusiness markup (name, address, telephone, opening hours, map or coordinates), whether those details match what the page shows, and whether each location has its own page. audit_page applies the page rules to one address.
local_ai_readiness checks whether that same site is ready to be named in AI search. It reads only the business's own public pages and returns pass, warn or fail for a page per service, location or service-area pages, visible prices, an FAQ, LocalBusiness schema (name, address, phone, hours, geo, sameAs), consistent name address and phone, on-site proof, a clear one-line description and recent dated content. Each check names the page it was seen on and a concrete fix. It adds what Gemini (first-party site, 41.9%), OpenAI (directories, 40.9%) and Anthropic (reviews, 20.5%) leaned on in a Yext study of 492,000 local queries, as of 2026-10-01, plus advice about claimed profiles, cover photos and attributes. It does not query those engines and does not fetch directories or review sites. It is limited per day and per network.
check_ai_instructions reports whether a public site publishes /llms.txt and /llms-full.txt, an AI page, home-page links, and whether the file matches the site's own name, products and facts. generate_ai_instructions drafts an llms.txt from those pages for the owner to review and does not publish it. Both cite https://x.com/chris_nectiv/status/2105655128162468334 (2026-10-01) as the reason they exist. They do not query AI engines and do not promise an effect on AI Overviews.
The rules follow Google Search Central documentation; the catalog is adapted from the MIT-licensed jev-seo project, and rules that are conventions rather than requirements are marked as heuristics. Optionally, a judgement step (off unless requested) reads the pages' text with a language model service to say what each page is for, how specific it is, and which pages compete for the same searches. It is limited per day and per network, and when it is unavailable the rule results are returned with a note. local_ai_readiness does not use that step.
Only the site you name is crawled: public websites on the standard ports, robots.txt respected, a small number of requests at a time, with a User-Agent that names Agent Tools. Private, local and internal addresses and redirects into them are refused. It does not run JavaScript, does not measure rankings, traffic or backlinks, and does not test whether a firewall blocks crawlers.
It stores nothing about you or the site: pages are read, turned into findings and dropped. Answers are cached for ten minutes. The only lasting records are a daily count of calls, daily totals for the optional judgement step, and daily totals for local AI-readiness checks (a day count, plus a count per coarse daily hash of the network, deleted after a few days).
What it can do
- Audits up to 25 pages of a site from its homepage and sitemap, with robots.txt respected
- Returns failed rules grouped by priority with the affected pages, the fix and the documentation link
- Checks titles, descriptions, headings, canonicals, noindex, structured data, share tags and image alt text
- Finds broken links, redirect chains, sitemap problems, thin and duplicate content
- Checks local business markup: name, address, phone, hours, map, and that the details match the page
- Compares pages: near-identical templated pages, little own text, hreflang returns, sitemap pages nothing links to
- Audits one page with the full page rule set
- Optional judgement of page purpose and competing pages, limited per day
- Checks local AI-search readiness: services, locations, prices, FAQ, schema, NAP, proof
- Checks llms.txt, llms-full.txt, an AI page, home links, and name, product and fact consistency
- Drafts an llms.txt from the site's own public pages for the owner to review
Tools
audit_site, Audit a site for SEO problems. Use this to audit a whole site or several pages for SEO; it finds the pages itself. It fits requests such as "audit example.com", "what SEO problems does my site have?", "which pages are worst?", "take a quick look at a few pages of this site" or "my site has a page per city, are they too similar?", so never guess page addresses for those. Pass the domain and optionally max_pages (1 to 25, default 10). Reads the homepage, the sitemap and linked pages of that site only, respecting robots.txt, and returns the rules that failed grouped by priority (high, medium, low), each with the affected pages, the fix and the documentation link. It also compares the pages it read: near-identical templated pages, pages with little text of their own, hreflang links that are not returned or lack x-default, and sitemap pages nothing links to. Leave judge off unless the user asks what pages are for or which compete. It reads a sample of pages, does not run JavaScript, and does not measure rankings, traffic or backlinks. Do not use it for private or local addresses or to collect a site's content.audit_page, Audit one page for SEO problems. Use this only for a single page address the user gave. It fits requests such as "what SEO problems does https://example.com/docs have?" or "is the title and description of this page OK?". Pass the page address. For several pages or a whole site call audit_site once instead of this tool many times. Returns the page rules that failed grouped by priority, each with the fix and the documentation link, plus the title, description, headings and other facts that were read. robots.txt is respected. Rules that compare pages or read the sitemap need audit_site. Do not use it for private or local addresses, for rankings or traffic, or to read a page's text.local_ai_readiness, Local AI-search readiness. Local-business readiness for AI search answers. Use this when the user asks if a local business site is ready to be named by AI search, ChatGPT, Gemini or similar, or what to fix so assistants can cite it. Pass the business's own site. Crawls only that site's public pages (robots.txt respected, up to 25, default 15) and returns pass, warn or fail for a page per service, location or service-area pages, visible prices, FAQ, LocalBusiness schema (name, address, phone, hours, geo, sameAs), NAP consistency, on-site proof, a one-line description and recent dated content. Each check has the evidence URL and a fix. Also returns what Gemini, OpenAI and Anthropic leaned on in a Yext study (as of 2026-10-01) and advice about claimed profiles and cover photos, which are not fetched. It does not query AI engines, directories or review sites, and it does not measure rankings. Do not use it for private addresses or to collect contact details.check_ai_instructions, Check AI instructions. Checks the site's AI instructions files and page. Use this when the user asks whether a site publishes llms.txt, llms-full.txt or an AI instructions page, whether the home page links to them, and whether the file matches the site's own name, products and facts. Pass the domain. Returns pass, warn or fail for each part, with the evidence URL and a fix, plus the date the pages were read. A public post is cited as the reason the check exists. It does not promise an effect on AI Overviews and does not query AI engines. Public pages only. Do not use it for private addresses or to collect contact details.generate_ai_instructions, Draft an llms.txt. Drafts an llms.txt from the site's own public pages. Use this when the owner wants a draft AI instructions file to review. Pass the domain. Returns markdown for the owner to edit and publish themselves. Nothing is written to the site. A public post is cited as the reason the draft exists. It does not promise an effect on AI Overviews and does not query AI engines. Do not use it for private addresses or to collect contact details.
Add SEO Audit in Pi
Pi does not speak MCP on its own. The pi-mcp-adapter extension (these steps match version 2.34.0) loads remote servers and keeps their schemas out of the prompt until you ask. Install it once, then restart Pi:
pi install npm:pi-mcp-adapter
Add the server to a shared MCP file. Use .mcp.json in the project if only that project needs SEO Audit, or ~/.config/mcp/mcp.json if you want it in every project. Pi also reads ~/.agents/mcp.json. A Pi-only override lives in ~/.pi/agent/mcp.json or .pi/mcp.json and wins over the shared file.
{
"mcpServers": {
"seo-audit": {
"url": "https://seoaudit.openkrill.app/mcp"
}
}
}
The url is enough. Do not set command: that field is for a local process. No API key header. After restart, run /mcp and confirm the server is listed. The first call connects lazily. Ask: Audit example.com for SEO problems The adapter should offer audit_site, audit_page, local_ai_readiness, check_ai_instructions, generate_ai_instructions.
Leave directTools off unless you want those schemas in every turn. With a handful of tools the cost is small. The default proxy is the better fit: search for the tool, then call it. /mcp disable seo-audit writes a project override in .pi/mcp.json without editing the shared file. Run /reload after that change.
Pi will not find this server by scanning Cursor or Claude config unless you run /mcp setup and import it. Putting the url in .mcp.json is the direct path and the one this page tests against. The server is the same public endpoint the other clients use, with the same limits and the same privacy rules.
A call checked on 2026-10-01
example.com is one public page. Judgement stays off, so no page text is sent to a language model. The request below was posted to https://seoaudit.openkrill.app/mcp as tools/call. HTTP 200. Source: the SEO Audit server, read 2026-10-01.
{
"method": "tools/call",
"params": {
"name": "audit_page",
"arguments": {
"url": "https://example.com",
"judge": false
}
}
}
- status. 200
- notice. This is what the site served to a request from Agent Tools servers right now, read with robots.txt respected and without running JavaScript. The rules follow Google Search Central documentation and common conventions; ru
- url. https://example.com/
- finalUrl. https://example.com/
Repeat the call yourself if you need a newer reading. Cached answers expire. A rate limit is not a result: wait and try again. Nothing in the call is a ranking, a filing, or advice.