{
  "markdown": "> [!WARNING]\n> **Deprecated and no longer maintained.** GEO Analyzer's AI-search content analysis has been consolidated into **[SEO Audit Console](https://github.com/houtini-ai/seo-audit)** (`npm i @houtini/seo-audit-console`) — which scores AI-Overview citation, passage relevance, agent readiness and content extractability alongside a full technical SEO audit, all in one MCP. Please migrate there.\n\n---\n\n<div align=\"center\">\n  <img src=\"https://raw.githubusercontent.com/houtini-ai/geo-analyzer/main/assets/logo.png\" width=\"120\" height=\"120\" alt=\"GEO Analyzer\" />\n</div>\n\n# GEO Analyzer\n\n[![npm version](https://img.shields.io/npm/v/@houtini/geo-analyzer)](https://www.npmjs.com/package/@houtini/geo-analyzer)\n[![MCP Registry](https://img.shields.io/badge/MCP-Registry-blue?style=flat-square)](https://registry.modelcontextprotocol.io)\n[![Known Vulnerabilities](https://snyk.io/test/github/houtini-ai/geo-analyzer/badge.svg)](https://snyk.io/test/github/houtini-ai/geo-analyzer)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nContent analysis for AI search visibility. Measures what actually matters for getting cited by ChatGPT, Claude, Perplexity, and Google AI Overviews.\n\n<p align=\"center\">\n  <a href=\"https://glama.ai/mcp/servers/@houtini-ai/geo-analyzer\">\n    <img width=\"380\" height=\"200\" src=\"https://glama.ai/mcp/servers/@houtini-ai/geo-analyzer/badge\" alt=\"GEO Analyzer MCP server\" />\n  </a>\n</p>\n\n> **Quick Navigation**\n>\n> [What it does](#what-it-does) | [Installation](#installation) | [Usage examples](#usage-examples) | [Output](#output) | [Tools](#tools) | [Troubleshooting](#troubleshooting) | [Research foundation](#research-foundation)\n\n## What It Does\n\nGEO Analyzer examines content for the signals AI systems use when selecting sources to cite:\n\n- **Claim Density** - Extractable facts per 100 words\n- **Information Density** - Word count vs predicted AI coverage\n- **Answer Frontloading** - How quickly key information appears\n- **Semantic Triples** - Structured (subject, predicate, object) relationships\n- **Entity Recognition** - Named entities AI can reference\n- **Sentence Structure** - Optimal length for AI parsing\n\nThe analysis runs locally using Claude Sonnet 4.5 for semantic extraction. No external services, no data leaving your machine.\n\n## Installation\n\n### Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"geo-analyzer\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@houtini/geo-analyzer@latest\"],\n      \"env\": {\n        \"ANTHROPIC_API_KEY\": \"sk-ant-...\"\n      }\n    }\n  }\n}\n```\n\n**Config locations:**\n- Windows: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- Linux: `~/.config/Claude/claude_desktop_config.json`\n\nRestart Claude Desktop after saving.\n\n### Claude Code (CLI)\n\nClaude Code uses a different registration mechanism -- it doesn't read `claude_desktop_config.json`. Use `claude mcp add` instead:\n\n```bash\nclaude mcp add -e ANTHROPIC_API_KEY=sk-ant-... -s user geo-analyzer -- npx -y @houtini/geo-analyzer@latest\n```\n\nVerify with:\n\n```bash\nclaude mcp get geo-analyzer\n```\n\nYou should see `Status: Connected`.\n\n### Requirements\n\n- Node.js 20+\n- Anthropic API key ([console.anthropic.com](https://console.anthropic.com))\n\n## Usage Examples\n\n### Analyse a Published URL\n\n```\nAnalyse https://example.com/article for \"topic keywords\"\n```\n\nThe topic context helps score relevance but isn't required:\n\n```\nAnalyse https://example.com/article\n```\n\n### Analyse Text Directly\n\nPaste content for analysis (minimum 500 characters):\n\n```\nAnalyse this content for \"sim racing wheels\":\n\n[Your content here]\n```\n\n### Summary Mode\n\nGet condensed output without detailed recommendations:\n\n```\nAnalyse https://example.com/article with output_format=summary\n```\n\n## Output\n\n### Scores (0-10)\n\n| Score | Measures |\n|-------|----------|\n| **Overall** | Weighted average of all factors |\n| **Extractability** | How easily AI can extract facts |\n| **Readability** | Structure quality for AI parsing |\n| **Citability** | How quotable and attributable |\n\n### Key Metrics\n\n**Information Density:**\n- Word count with coverage prediction\n- Optimal range: 800-1,500 words\n- Pages under 1K words: ~61% AI coverage\n- Pages over 3K words: ~13% AI coverage\n\n**Answer Frontloading:**\n- Claims and entities in first 100/300 words\n- First claim position\n- Score indicating answer immediacy\n\n**Claim Density:**\n- Target: 4+ claims per 100 words\n- Extractable facts, statistics, measurements\n\n**Sentence Length:**\n- Target: 15-20 words average\n- Matches Google's ~15.5 word chunk extraction\n\n### Recommendations\n\nPrioritised suggestions with:\n- Specific locations in content\n- Before/after examples\n- Rationale based on research\n\n## Tools\n\n### analyze_url\n\nFetches and analyses published web pages.\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `url` | Yes | URL to analyse |\n| `query` | No | Topic context for relevance scoring |\n| `output_format` | No | `detailed` (default) or `summary` |\n\n### analyze_text\n\nAnalyses pasted content directly.\n\n| Parameter | Required | Description |\n|-----------|----------|-------------|\n| `content` | Yes | Text to analyse (min 500 chars) |\n| `query` | No | Topic context for relevance scoring |\n| `output_format` | No | `detailed` (default) or `summary` |\n\n## Troubleshooting\n\n**\"ANTHROPIC_API_KEY is required\"**\nAdd your API key to the `env` section in config.\n\n**\"Cannot find module\" after config change**\nRestart Claude Desktop completely.\n\n**\"Content too short\"**\nMinimum 500 characters required for meaningful analysis.\n\n**Paywalled content returns errors**\nThe analyser can only access publicly available pages.\n\n## Performance\n\n- URL analysis: ~8-10 seconds\n- Text analysis: ~5-7 seconds  \n- Cost: ~$0.14 per analysis (Sonnet 4.5)\n\n## Migration from v1.x\n\nv2.0 removed external dependencies. Update your config:\n\n**Old (v1.x):**\n```json\n{\n  \"env\": {\n    \"GEO_WORKER_URL\": \"https://...\",\n    \"JINA_API_KEY\": \"jina_...\"\n  }\n}\n```\n\n**New (v2.x):**\n```json\n{\n  \"env\": {\n    \"ANTHROPIC_API_KEY\": \"sk-ant-...\"\n  }\n}\n```\n\n## Development\n\n```bash\ngit clone https://github.com/houtini-ai/geo-analyzer.git\ncd geo-analyzer\nnpm install\nnpm run build\n```\n\n## Research Foundation\n\nThe analysis methodology draws from peer-reviewed research and empirical studies:\n\n### MIT GEO Paper (2024)\nAggarwal et al., \"GEO: Generative Engine Optimization\" - ACM SIGKDD\n\nKey findings applied:\n- Claim density target of 4+ per 100 words\n- Optimal sentence length of 15-20 words\n- 40% improvement in AI citation rates with extractability focus\n\n[arxiv.org/abs/2311.09735](https://arxiv.org/abs/2311.09735)\n\n### Dejan AI Grounding Research (2025)\nEmpirical analysis of 7,060 queries and 2,275 pages\n\nKey findings applied:\n- ~2,000 word total grounding budget per query\n- Rank #1 source gets 531 words (28% of budget)\n- Rank #5 source gets 266 words (13% of budget)\n- Average extraction chunk: 15.5 words\n- Pages <1K words: 61% coverage\n- Pages 3K+ words: 13% coverage\n\n[dejan.ai/blog/how-big-are-googles-grounding-chunks](https://dejan.ai/blog/how-big-are-googles-grounding-chunks/)  \n[dejan.ai/blog/googles-ranking-signals](https://dejan.ai/blog/googles-ranking-signals/)\n\n---\n\nMIT License - [Houtini.ai](https://houtini.ai)\n",
  "bytes": 7371,
  "sha": "04ae9b81ae9c48d02af67c5c7bf546524101ac89a15df00f4e6344b3f13576dc",
  "repo_slug": "houtini-ai/geo-analyzer",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_houtini_ai_geo_analyzer_8c012be8/readme"
}