mcp-server-competitor-content
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-server-competitor-contentAnalyze content gaps between our page and top 3 competitors"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-server-competitor-content
MCP server for competitor content analysis: scrape, keywords, content gaps, heading diffs, readability, quality scores, SERP features, and clustering.
Install
cd mcp-server-competitor-content
npm install
npm run buildRun
npm run buildbefore pointing Cursor atdist/index.js.
Related MCP server: SEO MCP Server
Cursor MCP config
Update the path for your machine:
{
"mcpServers": {
"competitor-content": {
"command": "node",
"args": ["/path/to/mcp-server-competitor-content/dist/index.js"],
"env": {
"LOG_LEVEL": "info",
"RATE_LIMIT_DELAY_MS": "1000",
"RESPECT_ROBOTS_TXT": "true",
"ENABLE_HEADLESS_FALLBACK": "true",
"SERP_PROVIDER": "serpapi",
"SERP_API_KEY": "your-key"
}
}
}
}Tools
Tool | Description |
| Extract body, headings, meta, links, schema (Playwright fallback if thin SPA HTML) |
| TF-IDF keywords/bigrams from URL or text |
| Your content as |
| H1–H6 outline comparison |
| Flesch-Kincaid, SMOG, Coleman-Liau |
| Word count, links, media, schema, meta |
| Featured snippet, PAA, related searches via SerpApi/DataForSEO/CSE (not Google scraping) |
| TF-IDF cosine clustering (optional embeddings via config) |
Patched blueprint gaps
SERP —
serpProvider.ts; fails withSERP_PROVIDER_UNCONFIGUREDif unsetHeadless — Playwright only when static body <
HEADLESS_MIN_CONTENT_CHARSrobots.txt — parsed ruleset cached per domain (
ROBOTS_CACHE_TTL_SECONDS)Embeddings — optional; default clustering is TF-IDF
Gap analysis input —
yourContent: { type: "url"|"raw_text", value }
Scripts
npm test
npm run test:coverage
npm run build
npm run devLogs → stderr JSON. stdout reserved for MCP stdio.
License
MIT
Available Tools
8 toolscluster_competitorsCluster competitorsB
Group competitor pages by TF-IDF cosine similarity (embeddings optional via config).
| Name | Required | Description | Default |
|---|---|---|---|
| k | No | ||
| urls | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure; it does reveal the core algorithm and that embeddings are optional, which helps predict behavior. It does not state whether the tool fetches pages, mutates anything, or what the return shape is, so transparency is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that states action, object, and method with no filler. The parenthetical config note adds relevant optionality without bloating.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations and no output schema, the description omits the return value, the role of k, and any relationship to sibling tools like scrape_page that probably supply page content. It is enough to guess the intent, but not enough to invoke confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the description compensates only for urls by saying 'competitor pages'; k, the only other parameter, is never mentioned or tied to the clustering behavior. The method detail explains the computation but not what values k accepts should mean for the number of clusters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description opens with a specific verb ('Group') and resource ('competitor pages') and adds the similarity method ('TF-IDF cosine similarity'), so it is unambiguous. It doesn't explicitly contrast with siblings like compare_headings or content_gap_analysis, though the grouping intent is distinct enough.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No sentence explains when an agent should choose cluster_competitors over a sibling, nor when the optional embeddings config should be used. The only hint, 'embeddings optional via config,' is a configuration detail, not a usage condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_headingsCompare headingsC
Diff H1–H6 outlines across multiple competitor URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| urls | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It does not disclose whether the tool performs network requests, its read-only nature, rate limits, or the nature of the 'diff' output. There is no mention of side effects or error behavior, leaving significant uncertainty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no redundancy. It is front-loaded with the verb and resource. While terse, it is efficient and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and minimal annotations, so the description must explain what the result looks like and when to use it. It fails to describe the comparison format, pagination, or any constraints beyond the schema. The lack of context about sibling tools makes it hard for an agent to decide appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must explain the 'urls' parameter. It only says 'multiple competitor URLs', which adds little beyond the schema's array type and min/max constraints. It does not clarify URL format, validation, or how the parameter influences the diff.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Diff' and a clear resource 'H1–H6 outlines across multiple competitor URLs'. It distinguishes from siblings by explicitly focusing on heading structures, which is distinct from content_gap_analysis or scrape_page. Purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives like content_gap_analysis or scrape_page. It only states what it does without any context on selection criteria or exclusions. The agent is left to infer applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_gap_analysisContent gap analysisA
Compare your content (URL or raw_text) against competitor URLs to find missing keywords, heading gaps, and similarity scores.
| Name | Required | Description | Default |
|---|---|---|---|
| yourContent | Yes | ||
| competitorUrls | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the comparison behavior and result categories, but does not mention whether it fetches competitor URLs, how it handles raw_text, or any limitations. This is moderate transparency for a read-oriented analysis tool, with no annotation contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single focused sentence that front-loads the action and includes the key input modes and outputs. There is no filler or repetition, and every phrase contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description lists the output dimensions ('missing keywords, heading gaps, similarity scores'), which is sufficient to understand the result at a high level. It could add more on fetch behavior or return format, but the core invocation context is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does clarify the semantics of both parameters: your content can be a URL or raw_text, while the second parameter is a list of competitor URLs. It doesn't describe the nested type/value object structure, but the schema itself provides that structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific, informative verb ('Compare') and names both the resources ('your content' vs 'competitor URLs') and the outputs ('missing keywords, heading gaps, similarity scores'). This makes the tool's function clear and differentiates it from single-purpose siblings like extract_keywords or compare_headings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case—comparing your own content against competitors to identify gaps—but does not explicitly say when to prefer it over alternatives, nor does it mention exclusions. It gives enough context for selection but leaves alternative routing to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
content_quality_scoreContent quality scoreB
Score content quality: word count, links, media, schema, meta, headings.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It lists what factors are scored but doesn't disclose how the score is computed, whether it's a numeric score or a report, whether it makes network requests, or any side effects. For a tool with no annotations, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the main action and lists the key factors. It's efficient and easy to parse, though it could be slightly more structured with a second sentence for usage guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no annotations, no output schema, and only 0% schema description coverage, the description is too thin. An agent doesn't know what the output looks like, how the score is calculated, or what to do with the result. Sibling tools like readability_score and content_gap_analysis suggest related but distinct functions, and the description doesn't clarify the boundary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does add meaning by explaining what the tool does with the URL (scores content quality based on listed factors), but it doesn't clarify the URL format beyond the schema's 'uri' format, nor does it explain what the output looks like. The description adds some value but not enough to fully compensate for the 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('score') and resource ('content quality'), and lists the dimensions it evaluates: word count, links, media, schema, meta, headings. This distinguishes it from siblings like readability_score (which focuses on readability) and extract_keywords (which extracts keywords), though it doesn't explicitly name any sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: call this when you need a content quality score based on the listed factors. However, it doesn't explicitly state when to use this tool versus alternatives like readability_score or content_gap_analysis, nor does it mention any exclusions or prerequisites (e.g., URL must be accessible).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_keywordsExtract keywordsB
Extract TF-IDF keywords and bigrams from a URL or raw text.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| text | No | ||
| topK | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does not explain whether a URL is fetched server-side, what happens if both url and text are supplied, how topK interacts with keywords vs. bigrams, or what the output format looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with zero filler. The core action and input types are front-loaded, and every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema and no annotations, the description omits important operational details such as conflict resolution between url/text, return shape, and network behavior. An agent could call it correctly for simple cases but would be guessing on ambiguous inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It maps 'URL or raw text' to the url and text parameters, but it leaves topK unexplained and does not clarify precedence or whether topK applies to keywords, bigrams, or both.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Extract'), names the precise technique ('TF-IDF keywords and bigrams'), and defines the input sources ('URL or raw text'). This clearly differentiates it from sibling tools like content_gap_analysis or readability_score.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when you need keyword extraction from a URL or text. However, it provides no explicit guidance on when not to use it or how it compares to alternatives such as content_gap_analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readability_scoreReadability scoreC
Flesch-Kincaid, SMOG, and Coleman-Liau readability metrics for a URL or raw text.
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | ||
| text | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior, but it only mentions inputs. It omits whether the operation is read-only, what the output structure is, potential failure modes, or any side effects, leaving the agent with an incomplete safety and behavior picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the key metrics and input types with no filler. Every word contributes to understanding the tool's core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description carries the burden of explaining return values, parameter requirements, and usage constraints. It fails to state what the tool returns, whether url or text is required, or any prerequisites, making it insufficient for a confident invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It clarifies that url and text are the two accepted input forms, which adds meaning beyond the bare schema. However, it doesn't explain whether they are mutually exclusive, optional, or how they relate to each other, leaving room for ambiguous invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly names three readability metrics (Flesch-Kincaid, SMOG, Coleman-Liau) and the two input types (URL or raw text), making the tool's function unmistakable. It doesn't differentiate itself from siblings like content_quality_score, but the specific metrics make its purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over alternatives such as content_quality_score or extract_keywords. The description states only what the tool does, not the context in which it should be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrape_pageScrape pageA
Fetch and extract clean article body, headings, meta, links, and schema signals from a URL (headless fallback for thin SPA HTML).
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| forceHeadless | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does reasonably well: it discloses the headless fallback for thin SPA HTML and signals that the body is cleaned/extracted. It doesn't cover edge behavior like redirects, errors, or output format, but for a simple read tool this is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that front-loads the action and resource list, then adds the key conditional behavior in parentheses. Every element earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter fetch tool with no output schema, the description covers what will be extracted and the main behavioral nuance. It does not describe the exact response structure, but the listed extraction targets give an agent enough context to invoke and interpret the result correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, but it only indirectly addresses parameters: 'URL' maps to the url field and 'headless fallback' hints at forceHeadless. The description provides no explicit explanation of when or why to set forceHeadless, leaving some burden on the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs ('Fetch and extract') and names the exact resources ('article body, headings, meta, links, and schema signals') from a URL. This clearly distinguishes it from the sibling analysis tools, which operate on content rather than retrieve it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the raw content extraction tool versus the analysis-oriented siblings, but it never explicitly states when to choose it over alternatives or when not to use it. The usage context is clear but left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
serp_featuresSERP featuresA
Detect featured snippets, PAA, related searches, and organic results via configured SERP API (never scrapes Google directly).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| region | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a meaningful behavioral trait: calls go through a configured SERP API rather than direct scraping, which implies external dependency and rate-limit considerations. Yet it does not state whether the operation is read-only, whether configuration is required beforehand, or what happens on API failure—leaving notable gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that leads with the tool's core outputs, then adds the API/scraping constraint. Every phrase earns its place, and there is no repetition of the title or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple two-parameter tool, the description conveys the central purpose and a key operational constraint. However, with no output schema and no annotation coverage, it omits any description of the return format, the role of the region parameter, and prerequisites like API configuration, leaving an agent with unresolved questions before invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the query or region parameters at all. While the parameter names are somewhat self-explanatory, the description adds no meaning about acceptable formats, semantics, or how region affects results, so it fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Detect') and names a clear resource: SERP features, explicitly listing featured snippets, PAA, related searches, and organic results. This makes it easy to distinguish from sibling tools like scrape_page or extract_keywords, which address different resources and operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a use case—detecting SERP features via a configured API—and adds a constraint ('never scrapes Google directly'), which signals a boundary. However, it does not explicitly state when to choose this tool over alternatives such as scrape_page, nor does it provide any exclusions or condition-based routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v1.0.0- First observed
cluster_competitors - First observed
compare_headings - First observed
content_gap_analysis - First observed
content_quality_score - First observed
extract_keywords - First observed
readability_score - First observed
scrape_page - First observed
serp_features
TDQS
Scored across 8 tools
Each tool targets a distinct aspect of competitor content analysis: scraping, keyword extraction, heading comparison, gap analysis, readability, quality scoring, SERP features, and clustering. The boundaries are clear, with content_gap_analysis serving as a higher-level composite rather than overlapping with the lower-level tools.
All names use snake_case and are descriptive, but patterns are mixed: some follow verb_noun (scrape_page, extract_keywords, cluster_competitors) while others are noun_noun (content_gap_analysis, readability_score, serp_features). This is still readable and predictable, but not a single consistent verb-first convention.
Eight tools is well-scoped for the server's purpose. Each tool covers a meaningful step in competitor content analysis without unnecessary redundancy or feature bloat.
The surface covers the core workflow: fetch competitor content, extract and compare keywords/headings, assess readability and quality, detect SERP features, and cluster competitors. No critical operations are missing for the stated domain.
Maintenance
Related MCP Connectors
SEO competitor intelligence for AI agents: content gaps, backlink opportunities, AI-citation topics.
SEO, competitor and AI-search data, plus blog management — draft, schedule and publish posts.
SEO, GEO & AI Visibility — research, write, optimize, publish & monitor content. 121 tools.
SEO research SaaS exposed as 30+ MCP tools. Forge niche analysis, plans, and writer-ready briefs.
Related MCP Servers
- AlicenseBqualityDmaintenanceAdvanced 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.1221 npm12Apache 2.0
- AlicenseAqualityDmaintenanceEnables SEO page generation with competitor research and Schema.org structured data. Provides tools to search competitors for a keyword and generate high-quality SEO content with FAQPage schema.21 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables competitive analysis by validating companies, identifying sectors and top competitors, and generating comparative reports with actionable insights.-
- FlicenseAqualityDmaintenanceEnables fetching, crawling, and analyzing web pages with 29 tools for SEO audits, content extraction, and more.29-