Give an agent attributable SEO source material
Search published guidance, fetch an article by slug, and preserve the canonical Patrick Stox URL returned with the source.
Free, no signup. A small, read-only Model Context Protocol server for agents working on SEO. Search published guidance, reproduce selected tool checks, and keep the canonical source URL attached to the result.
This is a teaser tier, not a general public API: it has no key, no write actions, and intentionally modest fair-use limits. For a normal browser workflow, use the free tools directly.
claude mcp add --transport http patrickstox https://patrickstox.com/api/mcp {
"mcpServers": {
"patrickstox": {
"url": "https://patrickstox.com/api/mcp"
}
}
} {
"mcp": {
"servers": {
"patrickstox": { "url": "https://patrickstox.com/api/mcp" }
}
}
} Any Streamable HTTP MCP client can use the same endpoint: https://patrickstox.com/api/mcp. The server supports the stateless 2026-07-28 protocol and retains the 2025 initialization flow for older clients.
Requests are processed by our server and are not stored after processing. Anonymous run-level outcome counters may be used for aggregate research; URLs, domains, IPs, and identifiers are never included, and no statistic is released below 100 runs.
search_site for the complete public corpus or search_content for articles only, then fetch an article by its returned slug when full text is needed.| Tool | What it does | Arguments |
|---|---|---|
search_content | Search Patrick Stox's published SEO articles and guides. Supports in:, type:, quoted-phrase, and exclusion syntax; returns title, description, canonical URL, and a markdown URL for each match. | query — Article search terms using optional shared syntax (for example: in:technical-seo "javascript seo") |
search_site | Search Patrick Stox's complete public retrieval corpus, including articles, services, tools, newsletters, talks, and site reference pages. Supports the same in:, type:, quoted-phrase, and exclusion syntax as site search. | query — Search terms, optionally scoped (for example: in:tools canonical) |
get_article | Fetch one article as clean markdown by its slug (from search_content results) — includes title, description, canonical URL, and the full text. | slug — Article slug, e.g. "javascript-seo" |
list_pillars | List the site's content pillars and clusters (taxonomy) with URLs and internal-PageRank share, from the build-time content graph. | None |
verify_bot | Verify whether a public IP claiming to be a known crawler matches published ranges and forward-confirmed reverse DNS. Returns the range snapshot date as evidence. | ip — One public IPv4 or IPv6 addressclaim — Optional crawler id, e.g. "googlebot" |
validate_schema | Validate pasted JSON-LD or HTML containing JSON-LD with the same pure schema.org, Google rich-result, and @id graph checks used by the Schema Markup Validator. | input — JSON-LD or HTML, up to 100,000 charactersmode — "jsonld" (default) or "html" |
trace_redirect_chain | Trace one public URL through bounded HTTP, Refresh-header, and short meta-refresh hops. Returns redirect-relevant evidence only, never a raw header dump. | url — Public http(s) URL to traceua — Optional user-agent profile: default, browser, googlebot, bingbot, gptbot, claudebot, or perplexitybot |
inspect_og | Inspect bounded raw HTML from one public URL for normalized Open Graph and Twitter metadata, resolved image URLs, platform fallback provenance, and share-readiness findings. Never returns the HTML or an arbitrary header dump. | url — Public http(s) URL to inspectua — Optional allowlisted user-agent profile: default, browser, facebookexternalhit (default), or googlebot |
search_content exampleArguments
{
"query": "in:technical-seo \"javascript seo\""
} Trimmed response
[
{
"slug": "javascript-seo",
"title": "JavaScript SEO",
"url": "https://patrickstox.com/technical-seo/javascript-seo/"
}
] search_site exampleArguments
{
"query": "in:tools canonical"
} Trimmed response
[
{
"title": "Canonical Tag Checker",
"kind": "tool",
"url": "https://patrickstox.com/tools/canonical-checker/"
}
] get_article exampleArguments
{
"slug": "javascript-seo"
} Trimmed response
{
"content": [
{
"type": "text",
"text": "# JavaScript SEO\n…"
}
]
} list_pillars exampleArguments
{} Trimmed response
[
{
"kind": "pillar",
"label": "Technical SEO",
"url": "https://patrickstox.com/technical-seo/",
"pagerankShare": "8.42%"
}
] verify_bot exampleArguments
{
"ip": "203.0.113.9",
"claim": "googlebot"
} Trimmed response
{
"verdict": "spoofed",
"bot": {
"id": "googlebot",
"displayName": "Googlebot"
},
"findings": [
{
"findingId": "verify-bot.range-mismatch",
"severity": "fail",
"label": "Crawler IP is outside the published range"
}
],
"evidence": {
"matchedRanges": [],
"listsFetchedAt": "2026-07-05T16:45:33.112Z"
}
} validate_schema exampleArguments
{
"input": "{\"@context\":\"https://schema.org\",\"@type\":\"Product\",\"name\":\"Example\"}"
} Trimmed response
{
"entities": [
{
"type": "Product",
"googleEligible": "does-not-meet"
}
],
"issues": [
{
"code": "google.product.offers-review-rating.missing",
"tier": "blocks"
}
]
} trace_redirect_chain exampleArguments
{
"url": "http://example.com/old"
} Trimmed response
{
"hops": 2,
"finalUrl": "https://example.com/new",
"finalStatus": 200,
"findings": [
{
"findingId": "trace-redirect.extra-hop",
"severity": "warning",
"label": "Redirect trace contains an unnecessary hop"
}
],
"chain": [
{
"status": 301,
"kind": "http"
},
{
"status": 302,
"kind": "http"
},
{
"status": 200,
"kind": "http"
}
]
} inspect_og exampleArguments
{
"url": "https://example.com/article",
"ua": "facebookexternalhit"
} Trimmed response
{
"finalUrl": "https://example.com/article",
"httpStatus": 200,
"userAgent": {
"profile": "facebookexternalhit"
},
"acquisition": {
"maxBytes": 262144,
"capturedBytes": 18420,
"truncated": false,
"complete": true
},
"metadata": {
"openGraph": {
"og:title": "Example article",
"og:image": "https://example.com/card.jpg"
},
"twitter": {}
},
"platforms": [
{
"id": "facebook",
"title": {
"value": "Example article",
"source": "og:title"
},
"image": {
"value": "https://example.com/card.jpg",
"source": "og:image"
}
}
],
"score": 97
} The search tools use the same retrieval syntax as the site. Use in: for a section or taxonomy, type: for a result class, quotation marks for an exact phrase, and a leading minus sign to exclude a term. Multiple in: scopes are combined as alternatives. Available results still depend on each tool’s documented corpus.
in:ai-search citations — search the AI Search pillar.type:guide "title tag" -generator — require the phrase in guides and exclude generators.in:tools canonical — search the Tools section with the full-site search tool.The search_content example above scopes an exact javascript seo phrase to Technical SEO and returns a result shaped like this:
Title: JavaScript SEO
Slug: javascript-seo
Canonical URL: https://patrickstox.com/technical-seo/javascript-seo/
This is a deliberately trimmed documentation fixture from the shared tool roster, not a live request made when the page renders.
Content tools return source records intended to retain their canonical URLs. verify_bot returns identity evidence and a crawler-range snapshot date. validate_schema returns parsed entities and issue tiers. trace_redirect_chain returns a bounded chain and final state. inspect_og returns normalized Open Graph and Twitter fields, resolved image URLs, selected-UA evidence, and per-platform source provenance. Every verification result also carries a versioned capture-provenance object and finding packet so an agent can preserve the observed mode, JavaScript state, coverage, evidence, fix, and verification instruction. Neither URL tool exposes full HTML or arbitrary response headers. Treat an error, truncated capture, or unavailable check as not evaluated, never as a negative verdict.
The page and Worker share the same MCP registry and free-tier availability rule, so names, argument schemas, rate tiers, and documentation examples stay aligned with the tools an unauthenticated client can list. Modern clients use stateless per-request metadata and server/discover; legacy clients can still negotiate through initialize. Streamable HTTP requests are routed to read-only handlers. Content calls use the build-time published corpus; tool calls reuse bounded validators and safe public-network checks.
2026-07-28 plus the legacy 2025 initialization flow over Streamable HTTP, without a key.Limits protect the free service. A paid API tier is not available yet.
Common request error: Provide a public http(s) URL. Correct the request arguments or wait for the stated rate-limit window before retrying. Call the same read-only tool again and confirm it returns a result object instead of an MCP error.
For an unexpected connection or service error, check the current service status before retrying or reporting it.
inspect_og capture may report observed tags, but missing fields, completeness, and score remain explicitly not evaluated.When you use material returned by get_article, cite its canonical Patrick Stox URL. The server flags AI-assisted drafts pending human review; treat that status as part of the source context.
No. This is a small, read-only MCP teaserMCP is an open protocol, created and open-sourced by Anthropic in November 2024, that standardizes how AI applications connect to external tools and data at runtime. It runs on a host–client–server architecture and lets agents call functions, read data, and take actions — the opposite of a static file like llms.txt. for agents. The site’s ordinary tool endpoints remain same-origin only, and the MCP tool calls have a deliberately small fair-use limit.
It can search and fetch published content, inspect the content taxonomy, verify one public crawler IPA crawler — also called a spider or bot — is an automated program that fetches web pages, extracts their links, and queues new URLs to visit. Search engines use crawlers to discover and download content for their index., validate pasted JSON-LDJSON-LD (JavaScript Object Notation for Linked Data) is a script-based structured data format, typically paired with the schema.org vocabulary to describe page content for search engines and AI systems. Google recommends it over Microdata and RDFa because it's the easiest format to implement and maintain at scale — but all three work, and structured data isn't a ranking signal. or HTML, trace one public redirect chainA → B → C instead of A → C. Each hop loses link equity and adds latency., and inspect Open Graph or Twitter metadata from one public URL. It cannot change site data or access private content.
Use the canonical article URL returned by the server whenever you rely on material from a fetched article.
No. The teaser endpoint is unauthenticated, read-only, and protected by per-IP fair-use limits. It is not intended for high-volume automation.
The server returns bounded evidence or an explicit error state. A failed fetch, unavailable verification, or rate limit must not be interpreted as a crawler, schema, or redirect verdict.
Saved targets, named lists, and recent check summaries remain only in this browser.
Upvote what you want most. New ideas can be submitted from the floating Feedback menu; requests appear here once approved, and the most-wanted rise to the top.
You won't be emailed about that request anymore.
Loading…
New requests are reviewed before they appear here.
Where this tool helps
Search published guidance, fetch an article by slug, and preserve the canonical Patrick Stox URL returned with the source.
Choose the complete public corpus for tools and resources or the article-only corpus for published SEO guidance.
Verify one crawler IP, validate pasted schema, trace one public redirect chain, or inspect social metadata for one public page.
Carry capture provenance, finding packets, truncation, unavailable checks, and explicit errors forward instead of converting uncertainty into a verdict.
Connect a compatible Streamable HTTP client to the unauthenticated read-only teaser before deciding whether the bounded tool set fits the workflow.
Watch the full workflow
Hi, this is the free SEO MCP Server. MCP is a standard that lets a compatible AI client discover and call tools. I’ll show you how to connect this server, what its eight free tools do, how a basic search workflow works, and the limits you should understand before using it.
The SEO MCP Server gives compatible AI clients a small menu of SEO actions. It can search published guidance, fetch an article with its source URL, and run a few tightly limited technical checks. It needs no API key and cannot write or change site data. It is a free preview service, not an unlimited public API.
Use it when an AI workflow needs an attributable SEO source, when you want to search either articles or the wider public site, or when a workflow needs one small technical check. It is also a practical way to learn how MCP works before building a larger integration. Every result is designed to keep its evidence and uncertainty attached.
To connect, copy the setup that matches your client. Claude Code uses the command shown here. Claude Desktop, claude dot ai connectors, and Cursor use the JSON examples below it. They all point to the same web address: patrickstox dot com slash api slash M C P. You do not add a password or secret key.
This JSON configuration gives the connection a name and supplies only the server URL. After saving it, check your client’s tool list and confirm that the eight free tools appear. That simple check matters: a prompt cannot call a tool the client did not successfully discover.
The basic workflow is straightforward. Connect the server, confirm the tools appear, search for a useful source, and fetch the full article only when you need it. For technical checks, send only the documented public IP address, pasted markup, or public URL. When content supports an answer, keep the canonical source URL the server returns.
The public roster contains eight read-only tools. Four work with content: search articles, search the full public site, fetch one article, and list the site’s topic pillars. Four run technical checks: verify a crawler IP, validate schema markup, trace redirects, and inspect Open Graph or Twitter social-sharing metadata.
Use “search_content” when you specifically want published SEO articles. This documented example searches the Technical SEO section for the exact phrase “JavaScript SEO.” A result includes the title, article slug, and canonical URL. In plain language, the canonical URL is the official source address you should cite.
After search finds the right article, pass its slug to “get_article.” A slug is the short URL name, such as “javascript-seo.” The response includes the full article text and its canonical URL. It also keeps review context, so a draft awaiting human review is not presented as though it were already vetted.
Two tools work with pasted input. “verify_bot” checks whether one public IP address matches the published evidence for a claimed crawler, such as Googlebot, and returns the date of the crawler-range data it used. “validate_schema” checks pasted JSON-LD or HTML for structured-data problems. Passing that check still cannot guarantee a Google rich result.
The two URL tools accept one public page at a time. “trace_redirect_chain” follows a limited redirect path and reports where it ends. “inspect_og” reads social-sharing fields, resolves image URLs, and shows which tag supplied each platform value. For safety, neither tool returns the page’s full HTML or an unrestricted header dump.
You can narrow searches without learning a complicated query language. Use “in colon” to choose a section, “type colon” to choose a result type, quotation marks for an exact phrase, and a minus sign to exclude a word. Use “search_site” when tools and other resources may help; use “search_content” when you want articles only.
This example result shows the expected shape: a title, the slug “javascript-seo,” and the canonical Patrick Stox URL. Important boundary: this is fixed documentation data. The page does not make a live MCP request while this video is recorded, so we are demonstrating the documented contract rather than claiming the remote service answered now.
Technical results include a record of how the check was captured, plus a finding packet with the evidence, suggested fix, and verification step. This is one of the most valuable design choices: errors and incomplete captures stay explicit. “Unavailable” or “truncated” means the check was not fully evaluated; it does not mean a crawler, schema item, redirect, or social tag failed.
Finally, the free service has firm limits. Content tools allow one hundred twenty calls per minute for each IP address. The four technical tools share ten calls per day for each IP. There are no write actions, private content, Search Console connections, bulk crawls, or general-purpose proxy requests. After an unexpected error, check service status before retrying.
Start with one small workflow and confirm that your client can see the eight documented tools. Keep the returned source URL and evidence with any answer. For normal hands-on work, the browser tools are usually simpler. And if an MCP check fails or returns incomplete data, report it as not evaluated—not as a negative result.