{
  "markdown": "\n# mcp-seo-tools\n\nAn MCP (Model Context Protocol) server that gives AI agents a suite of SEO analysis tools. Analyze any public webpage for meta tags, heading structure, broken links, keyword density, page speed, and sitemap health — all without external API keys.\n\n## Tools\n\n| Tool | Description |\n|------|-------------|\n| `seo_meta_analyze` | Audit meta tags, Open Graph, and Twitter Card tags with scoring |\n| `seo_heading_check` | Validate H1-H6 hierarchy, detect skipped levels and duplicates |\n| `seo_link_check` | Find broken links, redirects, and missing anchor text |\n| `seo_keyword_density` | Measure keyword frequency and check target keyword placement |\n| `seo_page_speed` | Measure TTFB, load time, HTML size, and resource counts |\n| `seo_sitemap_parse` | Parse sitemap.xml, check freshness, duplicates, and compliance |\n\n## Requirements\n\n- Node.js 18+\n- No API keys needed — all tools use direct HTTP requests and HTML parsing\n\n## Installation\n\n```bash\ngit clone <repo-url>\ncd mcp-seo-tools\nnpm install\nnpm run build\n```\n\n## Usage with Claude Code\n\nAdd to your Claude Code MCP configuration:\n\n```bash\nclaude mcp add seo-tools node D:/products/mcp-servers/mcp-seo-tools/dist/index.js\n```\n\n## Usage with Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"seo-tools\": {\n      \"command\": \"node\",\n      \"args\": [\"D:/products/mcp-servers/mcp-seo-tools/dist/index.js\"]\n    }\n  }\n}\n```\n\n## Tool Details\n\n### seo_meta_analyze\n\nFetches a URL and inspects all meta-related elements. Checks title length (optimal: 30-60 chars), meta description length (optimal: 120-160 chars), canonical URL, viewport tag, language attribute, Open Graph completeness, and Twitter Card setup. Returns a 0-100 score.\n\n```\nInput: { \"url\": \"https://example.com\" }\n```\n\n### seo_heading_check\n\nParses all headings on a page and builds a visual hierarchy tree. Flags: missing H1, multiple H1s, skipped heading levels, empty headings, overly long headings (>70 chars), and duplicate headings.\n\n```\nInput: { \"url\": \"https://example.com\" }\n```\n\n### seo_link_check\n\nExtracts all anchor tags from a page, resolves relative URLs, deduplicates, and probes each link with a HEAD request (falling back to GET when needed). Classifies links as ok, broken, redirect, timeout, or error. Reports internal vs. external link ratio.\n\n```\nInput: { \"url\": \"https://example.com\", \"max_links\": 100 }\n```\n\n### seo_keyword_density\n\nStrips scripts, styles, and navigation, then tokenizes the remaining body text. Computes frequency and density for single words, bigrams, and trigrams (filtering stop words). When a target keyword is provided, checks whether it appears in the title, H1, meta description, and first paragraph.\n\n```\nInput: { \"url\": \"https://example.com\", \"target_keyword\": \"seo tools\" }\n```\n\n### seo_page_speed\n\nMeasures Time to First Byte and total download time from the server's perspective. Counts external scripts, stylesheets, images, and iframes. Detects render-blocking scripts (missing async/defer), images without alt text or dimensions, missing compression, and absence of lazy loading.\n\n```\nInput: { \"url\": \"https://example.com\" }\n```\n\n### seo_sitemap_parse\n\nAccepts a sitemap URL or any page URL (automatically appends `/sitemap.xml`). Falls back to checking `robots.txt` for a Sitemap directive. Handles both `<sitemapindex>` and `<urlset>` formats. Validates URL count limits, lastmod freshness, duplicate entries, protocol consistency, and trailing slash patterns.\n\n```\nInput: { \"url\": \"https://example.com\" }\n```\n\n## License\n\nMIT\n",
  "bytes": 3559,
  "sha": "5e466ced59fa7cdcabe02dec7d54ad9831936bbad143e19ea53fffa6a50d9a8d",
  "repo_slug": "rog0x/mcp-seo-tools",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_rog0x_seo_f9d78d7c/readme"
}