Claude SEO can integrate with Model Context Protocol (MCP) servers to access external APIs and enhance analysis capabilities.
Use Google's PageSpeed Insights API directly for real Core Web Vitals data.
Configuration:
curl -H "X-Goog-Api-Key: $GOOGLE_API_KEY" \
"https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=URL"
For organic search data, use the mcp-server-gsc MCP server by ahonn. Provides search performance data, URL inspection, and sitemap management.
Configuration:
{
"mcpServers": {
"google-search-console": {
"command": "npx",
"args": ["-y", "mcp-server-gsc"],
"env": {
"GOOGLE_CREDENTIALS_PATH": "/path/to/credentials.json"
}
}
}
}
Use mcp-server-pagespeed by enemyrr for Lighthouse audits, CWV metrics, and performance scoring via MCP.
Configuration:
{
"mcpServers": {
"pagespeed": {
"command": "npx",
"args": ["-y", "mcp-server-pagespeed"],
"env": {
"PAGESPEED_API_KEY": "your-api-key"
}
}
}
}
The MCP ecosystem for SEO has matured significantly. These are production-ready integrations:
| Tool | Package / Endpoint | Type | Notes |
|---|---|---|---|
| Ahrefs | @ahrefs/mcp |
Official | Launched July 2025. Supports local and remote modes. Backlinks, keywords, site audit data. |
| Semrush | https://mcp.semrush.com/v1/mcp |
Official (remote) | Full API access via remote MCP endpoint. Domain analytics, keyword research, backlink data. |
| Google Search Console | mcp-server-gsc |
Community | By ahonn. Search performance, URL inspection, sitemaps. |
| PageSpeed Insights | mcp-server-pagespeed |
Community | By enemyrr. Lighthouse audits, CWV metrics, performance scoring. |
| DataForSEO | dataforseo-mcp-server |
Official extension | 9 modules, 79 tools, 23 commands. Install: ./extensions/dataforseo/install.sh. See extension docs. |
| kwrds.ai | kwrds MCP server | Community | Keyword research, search volume, difficulty scoring. |
| SEO Review Tools | SEO Review Tools MCP | Community | Site auditing and on-page analysis API. |
import requests
def get_pagespeed_data(url: str, api_key: str) -> dict:
"""Fetch PageSpeed Insights data for a URL."""
endpoint = "https://www.googleapis.com/pagespeedonline/v5/runPagespeed"
params = {
"url": url,
"strategy": "mobile", # or "desktop"
"category": ["performance", "accessibility", "best-practices", "seo"]
}
headers = {"X-Goog-Api-Key": api_key}
response = requests.get(endpoint, params=params, headers=headers)
return response.json()
def get_crux_data(url: str, api_key: str) -> dict:
"""Fetch Chrome UX Report data for a URL."""
endpoint = "https://chromeuxreport.googleapis.com/v1/records:queryRecord"
payload = {
"url": url,
"formFactor": "PHONE" # or "DESKTOP"
}
headers = {"Content-Type": "application/json", "X-Goog-Api-Key": api_key}
response = requests.post(endpoint, json=payload, headers=headers)
return response.json()
| Metric | Description |
|---|---|
| LCP | Largest Contentful Paint (lab) |
| INP | Interaction to Next Paint (estimated) |
| CLS | Cumulative Layout Shift (lab) |
| FCP | First Contentful Paint |
| TBT | Total Blocking Time |
| Speed Index | Visual progress speed |
| Metric | Description |
|---|---|
| LCP | 75th percentile, real users |
| INP | 75th percentile, real users |
| CLS | 75th percentile, real users |
| TTFB | Time to First Byte |
If you don't have API keys, Claude SEO can still:
The analysis will note that actual Core Web Vitals measurements require field data from real users.