loading…
Search for a command to run...
loading…
Advanced content gap analysis using Query Decomposition and Keyword Fan-Out (Google's patented methodology). Tells you exactly what user queries your content co
Advanced content gap analysis using Query Decomposition and Keyword Fan-Out (Google's patented methodology). Tells you exactly what user queries your content covers - and what it misses. Built on academic research because I needed to understand how AI search engines actually evaluate content.
npm version MCP Registry License TypeScript MCP Research Backed
Advanced content gap analysis for the AI search era
Analyze your content to discover what user queries it covers (and misses) using the same techniques AI search engines use internally.
Quick Navigation
Why this matters | What it does | Installation | How to use | Methodology | Features deep-dive | Parameters | Troubleshooting
The problem: Traditional SEO focused on keywords and backlinks. AI search engines (ChatGPT, Perplexity, Gemini) don't work that way. They evaluate whether your content can answer user queries - across dozens of query variations you've probably never considered.
The solution: This MCP uses research-backed techniques from Google and academic papers to:
The result: Content optimized for Generative Engine Optimization (GEO) - answering the queries AI search engines need to cite your work.
1. Content-Only Analysis (Default) Analyzes what questions your content naturally answers based on structure and topics.
Analyze https://your-site.com/article with standard depth
2. Hybrid Analysis (Content + Keyword Targeting) Combines content analysis with keyword-specific query variants. This is the power mode.
Analyze https://your-site.com/article with target_keyword "direct drive racing wheels"
Generates 15-25 query variants by default across 5 types:
3. Keyword-Only Analysis Focus purely on keyword variants, skip content inference (50% faster).
Analyze https://your-site.com/article with target_keyword "sim racing" and fan_out_only true
Interactive visual dashboard showing:
Plus detailed markdown report with all data.
The fastest way to get started - no cloning or building required:
claude_desktop_config.json:{
"mcpServers": {
"fanout": {
"command": "npx",
"args": ["-y", "@houtini/fanout-mcp@latest"],
"env": {
"ANTHROPIC_API_KEY": "sk-ant-api03-your-key-here"
}
}
}
}
Config file locations:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonClaude Code uses a different registration mechanism -- it doesn't read claude_desktop_config.json. Use claude mcp add instead:
claude mcp add -e ANTHROPIC_API_KEY=sk-ant-... -s user fanout -- npx -y @houtini/fanout-mcp@latest
Verify with:
claude mcp get fanout
You should see Status: Connected.
List available tools
You should see fanout:analyze_content_gap in the output.
Analyze https://example.com/article for query coverage gaps
Claude will create an interactive dashboard showing:
When to use: You're optimizing for a specific keyword or topic.
Analyze https://example.com/sim-racing-guide with target_keyword "sim racing wheels"
This generates 15-25 query variants related to your keyword and checks coverage for each. Perfect for:
Focus on specific area:
Quick analysis of https://example.com/pricing focusing on "enterprise plans"
Comprehensive deep-dive:
Comprehensive analysis of https://example.com/installation-guide
Custom variant types:
{
"url": "https://example.com/article",
"target_keyword": "sim racing",
"fan_out_types": ["equivalent", "specification", "comparison"]
}
Context signals for smarter variants:
{
"url": "https://example.com/products",
"target_keyword": "racing wheel",
"context": {
"intent": "shopping",
"specificity_preference": "specific",
"temporal": {
"currentDate": "2024-12-15",
"season": "winter"
}
}
}
This tool implements techniques from cutting-edge Information Retrieval research:
Query Fan-Out - Based on Google's patented methodology (US 11663201 B2) and research paper Training Query Fan-Out Models with Generative Neural Networks. Generates query variants across 8 types to discover how users actually search for information.
Self-RAG - Self-Reflective Retrieval-Augmented Generation validates coverage with evidence. No hallucinations - every "covered" claim includes exact quotes from your content.
Query Decomposition - Least-to-Most prompting breaks complex topics into prerequisite, core, and follow-up queries.
Want to understand the research? 📖 Read our accessible explainer:
This document explains:
For implementation details, see research/google-fanout-adaptation.md.
Default: 5 Variant Types (most actionable)
Equivalent (3-5 variants) - Alternative phrasings with same intent
Specification (3-5 variants) - More specific versions with details
Follow-Up (3-5 variants) - Logical next questions
Comparison (3-5 variants) - "Vs" and alternatives
Clarification (2-3 variants) - Understanding questions
Optional: 3 Additional Types (request via fan_out_types parameter)
Why 5 by default? These 5 types generate the most actionable, realistic queries users actually type. The other 3 are available but tend to:
Want all 8 types?
{
"target_keyword": "your keyword",
"fan_out_types": ["equivalent", "specification", "generalization", "followUp", "comparison", "clarification", "relatedAspects", "temporal"]
}
Provide context signals to guide more relevant variants:
Shopping Intent:
{
"context": {
"intent": "shopping",
"specificity_preference": "specific"
}
}
Generates: "where to buy X", "X Black Friday deals", "best budget X 2024"
Temporal Context:
{
"context": {
"temporal": {
"currentDate": "2024-12-15",
"season": "winter"
}
}
}
Generates: "X 2024", "new X December 2024", "latest X winter 2024"
Research Intent:
{
"context": {
"intent": "research",
"specificity_preference": "balanced"
}
}
Generates: "how does X work", "X comparison guide", "X vs Y detailed analysis"
Every query assessment includes:
COVERED (90-100% confidence) - Exact evidence found
Query: "best PS5 racing wheels under £300"
Evidence: "For most PlayStation owners getting into sim racing, I'd recommend
starting with the Logitech G29. It's proven kit, widely available, and you
can sell it easily if sim racing doesn't stick. Current Amazon pricing sits
at £200..."
Location: Entry Level: The £200-300 Sweet Spot
PARTIAL (40-89% confidence) - Topic mentioned but incomplete
Query: "how to calibrate PS5 racing wheel"
Evidence: "Whatever you do, always write down your force feedback settings
for each car in Gran Turismo 7."
Gap: Only mentions saving settings but provides no actual calibration steps
Recommendation: Add detailed calibration guide with step-by-step instructions
GAP (0-39% confidence) - No coverage found
Query: "wireless PS5 racing wheel options"
Gap: No wireless racing wheel options discussed
Recommendation: Add section on wireless PS5 racing wheel options if any exist
Based on testing with a 6,491-word article:
| Mode | Queries | Time | Speed |
|---|---|---|---|
| Content-Only | 14 | 90s | Baseline |
| Keyword-Only | 19 | 86s | 50% faster than hybrid |
| Hybrid (5 types) | 35 | 174s | Comprehensive |
| Hybrid (complex keyword) | 36 | 217s | Handles 11-word keywords |
Key insight: ~4-5 seconds per query assessed. More queries = more time, but quality stays consistent.
Optimization tips:
quick depth for fast scans (5 queries, ~25s)keyword-only mode when you only need variant coverageAll metrics validated through comprehensive testing:
Query Quality:
Evidence Quality:
Coverage Results (from real tests):
Scenario: Technical blog post about "direct drive sim racing wheels"
Analysis:
Analyze https://simracingcockpit.gg/ps5-sim-racing-guide with target_keyword "direct drive sim racing wheels"
Results:
Impact: After adding recommended sections:
Scenario: E-commerce product page for sim racing wheels
Analysis:
Analyze https://shop.com/racing-wheels with target_keyword "buy racing wheel" and context {"intent": "shopping", "specificity_preference": "specific"}
Results:
Impact: Critical gaps identified that were invisible to traditional SEO.
analyze_content_gap| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
url |
string | ✅ Yes | - | URL to analyze |
depth |
enum | No | standard |
Analysis depth: quick (5 queries), standard (15), comprehensive (30) |
focus_area |
string | No | - | Focus on specific topic (e.g., "pricing", "installation") |
target_keyword |
string | No | - | Enable keyword fan-out mode with query variants |
fan_out_types |
array | No | [5 types] | Variant types: equivalent, specification, generalization, followUp, comparison, clarification, relatedAspects, temporal |
fan_out_only |
boolean | No | false |
Skip content inference, only generate keyword variants |
context |
object | No | - | Context signals for variant generation |
context.temporal |
object | No | - | Temporal context with currentDate and season |
context.intent |
enum | No | - | User intent: shopping, research, navigation, entertainment |
context.specificity_preference |
enum | No | - | Specificity level: broad, specific, balanced |
Scales linearly (~4-5s per query). Large analyses (50+ queries) take 4-5 minutes. Consider:
quick depth for fast scanskeyword-only mode when appropriateOptimized for 2,000-10,000 word articles:
focus_area parameter for large documentsDefault generates 15-25 variants (5 types):
English only:
Works best with focused topical content:
claude_desktop_config.json syntax (no trailing commas)\\ for Windows, / for Unix)ANTHROPIC_API_KEY is setquick depth for faster resultskeyword-only mode (50% faster than hybrid)fanout-mcp/
├── src/
│ ├── index.ts # MCP server setup
│ ├── types.ts # TypeScript types
│ ├── tools/
│ │ └── analyze-content-gap.ts # Main tool implementation
│ └── services/
│ ├── content-fetcher.ts # Web scraping
│ ├── query-decomposer.ts # Query generation
│ ├── keyword-fanout.ts # Variant generation
│ ├── coverage-assessor.ts # Self-RAG assessment
│ └── report-formatter.ts # Output formatting
├── research/
│ ├── keyword-fanout-explained.md # Accessible research explainer ⭐
│ ├── google-fanout-adaptation.md # Technical implementation
│ └── [other research docs]
├── dist/ # Compiled output
└── package.json
npm install # Install dependencies
npm run build # Compile TypeScript
npm run dev # Watch mode for development
Comprehensive test suite in TESTING-REPORT.md:
Artifacts use components inspired by the Claude Visual Style Guide for consistent, accessible rendering:
Components:
Important: Artifacts must use inline SVG icons - window.lucide is not reliably available in Claude's sandboxed environment.
All styling uses Tailwind CSS utility classes with semantic tokens for dark mode compatibility.
Contributions welcome! Areas of interest:
Please open an issue to discuss before submitting PRs.
Apache License 2.0
Copyright 2024 Houtini Ltd
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
For commercial licensing enquiries, please visit https://houtini.com
Richard Baxter
Houtini.ai
GitHub: https://github.com/houtini-ai
Questions? Open an issue on GitHub
Commercial enquiries: https://houtini.com
Status: ✅ Production Ready - v0.2.0 (Keyword Fan-Out Release)
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"fan-out-query-mcp": {
"command": "npx",
"args": []
}
}
}