SEO MCP 서버

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.

Connect

Claude Code

claude mcp add --transport http patrickstox https://patrickstox.com/api/mcp

Claude Desktop or claude.ai custom connector

{
  "mcpServers": {
    "patrickstox": {
      "url": "https://patrickstox.com/api/mcp"
    }
  }
}

Cursor

{
  "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.

요청은 당사 서버에서 처리되며 처리 후에는 저장되지 않습니다. 익명 실행별 결과 계수는 종합 연구에 사용될 수 있습니다. URL, 도메인, IP 및 식별자는 절대 포함되지 않으며 100회 미만의 실행에 대한 통계는 공개하지 않습니다.

How to use it

  1. Add the endpoint with the configuration for your MCP client.
  2. Confirm the client discovers the tools below before relying on a prompt-driven call.
  3. Use 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.
  4. For verification tools, supply only the documented public IP, pasted markup, or public URL and preserve the returned evidence and error state.
  5. Cite the canonical URL returned with published content.

Available tools

ToolWhat it doesArguments
search_contentSearch 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_siteSearch 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_articleFetch 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_pillarsList the site's content pillars and clusters (taxonomy) with URLs and internal-PageRank share, from the build-time content graph.None
verify_botVerify 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 address
claim — Optional crawler id, e.g. "googlebot"
validate_schemaValidate 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 characters
mode — "jsonld" (default) or "html"
trace_redirect_chainTrace 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 trace
ua — Optional user-agent profile: default, browser, googlebot, bingbot, gptbot, claudebot, or perplexitybot
inspect_ogInspect 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 inspect
ua — Optional allowlisted user-agent profile: default, browser, facebookexternalhit (default), or googlebot

search_content example

Arguments

{
  "query": "in:technical-seo \"javascript seo\""
}

Trimmed response

[
  {
    "slug": "javascript-seo",
    "title": "JavaScript SEO",
    "url": "https://patrickstox.com/technical-seo/javascript-seo/"
  }
]

search_site example

Arguments

{
  "query": "in:tools canonical"
}

Trimmed response

[
  {
    "title": "Canonical Tag Checker",
    "kind": "tool",
    "url": "https://patrickstox.com/tools/canonical-checker/"
  }
]

get_article example

Arguments

{
  "slug": "javascript-seo"
}

Trimmed response

{
  "content": [
    {
      "type": "text",
      "text": "# JavaScript SEO\n…"
    }
  ]
}

list_pillars example

Arguments

{}

Trimmed response

[
  {
    "kind": "pillar",
    "label": "Technical SEO",
    "url": "https://patrickstox.com/technical-seo/",
    "pagerankShare": "8.42%"
  }
]

verify_bot example

Arguments

{
  "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 example

Arguments

{
  "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 example

Arguments

{
  "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 example

Arguments

{
  "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
}

Search syntax

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.

Example project

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.

What each step produces

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.

How project data is stored

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.

Features

  • Search the complete public site corpus or only published SEO guidance, with canonical attribution.
  • Fetch full article markdown and list the public content taxonomy with build-time PageRank share.
  • Verify one crawler IP, validate pasted schema, trace one public redirect chain, or inspect social metadata from one public page.
  • Return versioned capture provenance and portable finding packets with verification-tool results.
  • Supports MCP 2026-07-28 plus the legacy 2025 initialization flow over Streamable HTTP, without a key.

Limits & fair use

  • Published-content tools: 120 calls per minute per IP.
  • Tool calls (bot verification, schema validation, redirect tracing, and social metadata inspection): 10 calls per day per IP across the teaser tool set.
  • URL inspection accepts only public URLs and allowlisted user agents, validates every redirect hop, and bounds redirects, bytes, and time.

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.

Limitations

  • No write actions, private content, Search Console access, bulk crawling, or general proxy behavior.
  • Public tool calls share a small daily per-IP teaser quota.
  • Bot verification depends on dated published ranges and available DNS evidence.
  • Schema checks are deterministic eligibility guidance, not a guarantee of a rich result.
  • URL checks are bounded and accept only public HTTP(S) targets.
  • A truncated inspect_og capture may report observed tags, but missing fields, completeness, and score remain explicitly not evaluated.

Attribution

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.

Frequently asked questions

Is this a public API?

No. This is a small, read-only MCP teaser for agents. The site’s ordinary tool endpoints remain same-origin only, and the MCP tool calls have a deliberately small fair-use limit.

What can an agent do?

It can search and fetch published content, inspect the content taxonomy, verify one public crawler IP, validate pasted JSON-LD or HTML, trace one public redirect chain, and inspect Open Graph or Twitter metadata from one public URL. It cannot change site data or access private content.

How should an agent cite this content?

Use the canonical article URL returned by the server whenever you rely on material from a fetched article.

Does the MCP server require an API key?

No. The teaser endpoint is unauthenticated, read-only, and protected by per-IP fair-use limits. It is not intended for high-volume automation.

What happens when a tool cannot verify a result?

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.

로컬 데이터

저장된 대상, 이름 있는 목록 및 최근 검사 요약은 이 브라우저에만 남습니다.

피드백
버그 신고

SEO MCP 서버에서 문제가 발생했나요? 무슨 일이 있었는지 알려 주세요. 신고는 공개 목록이 아니라 비공개 분류 대기열로 바로 전송됩니다.

전송될 정보
 도구 입력, 업로드, 붙여넣은 소스, 전체 결과, 쿼리 매개변수 또는 URL 조각은 자동으로 첨부되지 않습니다. 위에서 선택한 구절을 수정하거나 삭제할 수 있습니다. 브라우저 및 악용 방지 메타데이터는 스팸 방지를 위해 처리됩니다. 

이 도구 정보

AI 에이전트를 Patrick Stox의 읽기 전용 MCP 서버에 연결해 게시된 SEO 콘텐츠를 검색하고, 크롤러 IP, 구조화 데이터, 리디렉션 체인 및 소셜 메타데이터를 제한된 범위에서 확인합니다.

쓰기 작업이나 비공개 콘텐츠 접근은 제공하지 않으며, 결과에는 출처와 확인 상태가 함께 반환됩니다.

기능

  • canonical URL을 유지하면서 게시된 콘텐츠를 검색하고 전체 문서를 가져오는 읽기 전용 도구
  • 크롤러 IP, JSON-LD 또는 HTML, 공개 리디렉션 체인, Open Graph 및 Twitter 메타데이터 확인
  • 버전이 지정된 캡처 출처, 근거, 수정 지침과 재검증 방법을 포함한 결과
  • Streamable HTTP의 상태 비저장 요청과 이전 initialize 흐름을 모두 지원하는 제한형 공개 엔드포인트

작동 방식

페이지와 Worker는 동일한 MCP 도구 레지스트리와 인수 스키마를 사용합니다. https://patrickstox.com/api/mcp 로 들어온 요청은 범위가 제한된 읽기 전용 처리기로 전달되며, 콘텐츠 결과는 빌드 시점의 게시 코퍼스에서 제공됩니다. 모든 호출은 근거 또는 명시적인 오류 상태를 반환합니다.

제한사항

  • 대량 자동화를 위한 범용 공개 API가 아니며, IP별 공정 사용 한도가 작게 설정되어 있습니다.
  • 쓰기 작업, 비공개 데이터, Search Console 접근, 대규모 크롤링 또는 범용 프록시 기능을 제공하지 않습니다.
  • URL 도구는 공개 HTTP(S) 대상만 허용하고 리디렉션 수, 바이트 및 시간을 제한합니다. 실패하거나 잘린 캡처는 부정 판정이 아니라 미평가 상태입니다.

자주 묻는 질문

공개 API인가요?

아니요. 에이전트를 위한 소규모 읽기 전용 체험판입니다. 사이트의 일반 도구 엔드포인트는 동일 출처에서만 사용할 수 있으며, 이 서버의 도구 호출에는 의도적으로 낮게 설정된 공정 사용 한도가 있습니다.

에이전트는 무엇을 할 수 있나요?

게시된 콘텐츠를 검색하고 가져오며, 콘텐츠 분류 체계를 살펴보고, 공개 크롤러 IP 하나를 확인하고, 붙여 넣은 JSON-LD 또는 HTML을 검증할 수 있습니다. 또한 공개 리디렉션 체인 하나를 추적하고 공개 URL 하나에서 소셜 공유용 메타데이터를 확인할 수 있습니다. 사이트 데이터를 변경하거나 비공개 콘텐츠에 접근할 수는 없습니다.

에이전트는 이 콘텐츠를 어떻게 인용해야 하나요?

가져온 글의 자료를 사용할 때는 서버가 반환한 글의 canonical URL을 사용하세요.

이 서버에 API 키가 필요한가요?

아니요. 체험판 엔드포인트는 인증이 필요 없는 읽기 전용이며 IP별 공정 사용 한도로 보호됩니다. 대량 자동화용이 아닙니다.

도구가 결과를 검증할 수 없으면 어떻게 되나요?

서버는 제한된 범위의 근거 또는 명시적인 오류 상태를 반환합니다. 가져오기 실패, 검증 불가 또는 요청 한도를 크롤러, 스키마, 리디렉션에 대한 판정으로 해석해서는 안 됩니다.

다음 단계에이전트 준비도 검사기 — verify it with a direct check. 안내는 영어로 제공됩니다.