Web Validator by DigestSEO
This server validates web pages and performs technical SEO audits, enabling AI coding assistants to catch issues in HTML/CSS markup, metadata, links, and structured data — directly from local files or live URLs.
Validate HTML (
validate_local_html/validate_url): Check local HTML files or live URLs against the W3C Nu HTML Checker for syntax errors and compliance issues.Validate CSS (
validate_local_css): Check local CSS files against the W3C Jigsaw CSS Validator for styling and syntax errors.Audit SEO Metadata (
audit_seo_metadata): Run a fast, offline SEO audit analyzing title/description lengths, heading hierarchies, viewport responsiveness, image alt attributes, and Open Graph metadata.Check Broken Links (
check_broken_links): Extract and test all hyperlinks in HTML content, detecting broken internal or external URLs (supports a base URL for resolving relative paths).Validate Schema Markup (
validate_schema_markup): Parse and validate JSON-LD structured data blocks embedded in HTML.Generate Unified Report (
generate_validation_report): Combine all checks (HTML, CSS, SEO, schema, broken links) into a single Markdown report with PageSpeed-inspired scoring tables.Capture Screenshots: Take responsive screenshots (desktop, tablet, mobile) of local or live pages using a headless browser.
Click on "Install 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., "@Web Validator by DigestSEOValidate the HTML in about.html"
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.
Web Validator by DigestSEO
An MCP server for HTML and CSS validation, technical SEO and accessibility checks, JSON-LD syntax validation, broken-link checks, and responsive screenshots. It is part of the DigestSEO suite of open-source SEO tools.
Product: digestseo.com/validator-mcp
Engineering case study: DigestSEO MCP Suite — AI visibility, Search Console, web validation, and trend intelligence
Documentation: this README
Support: digestseo.com/support
Privacy: digestseo.com/privacy
Choose the right surface
This repository contains two deliberately separate MCP surfaces:
Surface | Transport | Best for | Access and side effects |
Local npm server | stdio | Claude Desktop, Cursor, and other local MCP clients | Can read user-selected workspace files, contact validation and link targets, and write screenshot files. |
Hosted app | Streamable HTTP | ChatGPT and remote MCP clients | Can fetch one authorized public HTML page, run a bounded sitemap-first site audit, or process supplied markup. It cannot access local files, authenticate, recursively crawl links, execute page JavaScript, or create screenshots. |
Local installation:
npx -y mcp-web-validatorHosted endpoint:
https://web-validator-mcp.digestseo.com/mcpRelated MCP server: aria51 MCP Server
Requirements
Node.js 22.12.0 or newer
An MCP client that supports stdio, or a client that supports Streamable HTTP for the hosted endpoint
Puppeteer may download a compatible browser during npm installation. The browser is used only by the local screenshot.capture tool.
Local server tools
The npm package exposes these exact runtime tool names:
Tool | Purpose | Network or filesystem behavior |
| Validate a local HTML file. | Reads the selected file and submits its markup to the external W3C Nu HTML Checker at |
| Validate the markup returned by a public URL. | Fetches the URL, then submits the returned markup to the external Nu checker. |
| Validate a local CSS file. | Reads the selected file and submits its CSS to the external W3C Jigsaw CSS Validator. |
| Audit titles, descriptions, canonical tags, headings, viewport metadata, image alt attributes, and Open Graph metadata. | Processes supplied HTML locally. |
| Check links extracted from supplied HTML. | Sends bounded HTTP requests to eligible public links. |
| Parse JSON-LD blocks and report JSON syntax errors. | Processes supplied HTML locally. |
| Combine HTML, optional CSS, SEO, JSON-LD, and bounded link checks in a Markdown report. | Reads selected files, contacts the validators, and checks eligible public links found in the HTML. |
| Capture desktop, tablet, mobile, or custom viewport screenshots. | Opens a selected local file or eligible public URL and writes PNG files to the selected output directory; existing matching files may be replaced. |
Hosted app tools
The hosted app exposes eight tools:
Tool | Purpose |
| Fetch one authorized public HTML page and run the combined HTML, SEO/accessibility-signal, and JSON-LD syntax audit. Link checks are optional. |
| Run a bounded sitemap-first audit of up to eight authorized, same-origin public pages. It respects |
| Validate raw HTML markup already supplied in the conversation. |
| Parse supplied CSS for syntax errors inside the Worker. |
| Audit supplied HTML for covered on-page SEO and accessibility signals. |
| Check JSON-LD blocks in supplied HTML for JSON syntax errors. |
| Check up to 20 authorized public links extracted from supplied HTML. |
| Combine the checks for supplied markup; |
audit_public_webpage follows at most three validated redirects, accepts a bounded text/html response, and records the final URL. It does not crawl additional pages, execute JavaScript, authenticate, or fetch linked stylesheets and assets. audit_public_site first locks the final public origin, reads bounded same-origin robots.txt and XML sitemap documents, then audits at most eight eligible sitemap pages in one call. It never follows HTML links, subdomains, external sitemap entries, private/reserved destinations, custom ports, or cross-origin redirects; use page_offset when the response says more eligible pages remain. The fetched HTML is sent to https://html5.validator.nu/, the same external Nu HTML Checker used by validate_html and the report tool. CSS parsing, SEO analysis, and JSON-LD parsing run inside the DigestSEO Worker. Optional link checks make capped HEAD requests, with a bounded GET fallback where necessary, to eligible public HTTP(S) URLs; link redirects are reported but not followed. The site tool intentionally does not perform site-wide link checking. The hosted app does not retain tool inputs, fetched HTML, or results.
Privacy Policy
Only validate files, markup, and public webpages that you own or are authorized to inspect. Public page URLs can contain sensitive query values, so remove tokens and private identifiers before submitting them. Do not submit passwords, API keys, access tokens, payment data, health data, private source code, or other sensitive personal data.
The local server runs with the same operating-system permissions as its MCP client. Review tool inputs before approving file access, outbound validation, link checking, or screenshot creation. The hosted app has no access to your local filesystem.
See the published privacy policy for data-handling details and SECURITY.md for private vulnerability reporting.
Configure a local client
Claude Desktop
Add the server to claude_desktop_config.json:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"mcp-web-validator": {
"command": "npx",
"args": ["-y", "mcp-web-validator"]
}
}
}Restart Claude Desktop after saving the configuration.
Cursor and compatible clients
Create a command/stdio MCP server with:
npx -y mcp-web-validatorThis repository also includes a Cursor Marketplace plugin manifest. After the plugin is published, install Web Validator by DigestSEO from Cursor's Marketplace or add the repository from Cursor's plugin UI. The plugin bundles the same local stdio server and does not require API keys or environment variables.
Kiro
This installs the local stdio package, preserving its workspace-file and screenshot capabilities. Node.js 22.12.0+ is required.
Development
Clone the repository and install the locked dependencies:
git clone https://github.com/AKzar1el/mcp-web-validator.git
cd mcp-web-validator
npm ciRun the local quality gates:
npm run check
npm test
npm run build
npm pack --dry-runRun the local stdio server:
npm startValidate the hosted Worker separately:
cd chatgpt-plugin
npm ci
npm run check
npm test
npm run deploy:dry-runSee CONTRIBUTING.md for contribution expectations. Deployment and marketplace-review notes live in chatgpt-plugin/SUBMISSION.md. For agent-assisted installation, see llms-install.md.
Ecosystem
License
Licensed under the MIT License.
Available Tools
8 toolscss.localValidate local CSSARead-onlyIdempotentInspect
Reads a bounded local CSS file and sends it to the W3C Jigsaw CSS Validator. Use only files the user is authorized to share.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Absolute or workspace-relative path to a CSS file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| errors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnlyHint, openWorldHint, idempotentHint, destructiveHint=false), and the description adds genuinely useful context beyond them: the specific external destination (W3C Jigsaw), a 'bounded' size constraint, and the privacy implication that local file content is sent to a third party. It does not contradict the annotations; openWorldHint aligns with the external send.
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?
Two sentences with zero waste; the core function is front-loaded in the first sentence and the critical security constraint lands in the second. Every word earns its place.
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 single-parameter tool with a full schema, strong annotations, and an output schema, the definition is nearly complete: it names the external service, flags the sharing boundary, and scopes the input. The only real gaps are that 'bounded' is unspecified as to the actual size cap, and there is no routing to sibling tools for related but different validations.
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 100%, with filePath already described as 'Absolute or workspace-relative path to a CSS file.' The description adds only marginal qualifiers ('bounded', 'local') that do not substantially enrich parameter understanding, so the baseline of 3 applies.
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?
States a specific verb and resource: 'Reads a bounded local CSS file and sends it to the W3C Jigsaw CSS Validator.' The domain (CSS validation) and input type (local CSS) clearly distinguish it from siblings like html.local, seo.metadata, and links.broken, so an agent can tell it apart without opening schemas.
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 context (validating a local CSS file) and adds an authorization constraint ('Use only files the user is authorized to share'), but it never states when to prefer this over alternatives or when not to use it. No explicit exclusions or sibling routing are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
html.localValidate local HTMLARead-onlyIdempotentInspect
Reads a bounded local HTML file and sends its markup to the W3C Nu HTML Checker. Use only files the user is authorized to share.
| Name | Required | Description | Default |
|---|---|---|---|
| filePath | Yes | Absolute or workspace-relative path to an HTML file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| errors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds valuable context that the file's markup is transmitted to an external third-party service (W3C Nu HTML Checker), which explains the authorization warning. It does not detail response processing, but the output schema likely covers that.
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 two short, front-loaded sentences with no filler. It states the core mechanism first, then the critical authorization constraint, making every word earn its place.
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 single-parameter read-only validation tool with an output schema and strong annotations, the description covers the essential operational facts: input type, external service interaction, and authorization requirement. Nothing critical is missing for an agent to decide whether and how to invoke this 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?
The schema provides 100% description coverage for the single filePath parameter, including its type and path semantics. The tool description adds tool-level context about reading local HTML but adds no new parameter-specific meaning beyond what the schema already documents, so the baseline score of 3 is appropriate.
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 action ('reads', 'sends its markup to the W3C Nu HTML Checker') and a specific resource ('local HTML file'), which clearly identifies what the tool does. The locally-scoped resource also distinguishes it from the sibling html.url without needing to inspect that tool.
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 clearly frames the tool as operating on local HTML files, and the authorization note ('Use only files the user is authorized to share') provides an important usage condition. It does not explicitly name alternatives such as html.url for remote files, but the local vs. URL distinction is strongly implied by the title and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
html.urlValidate a public URLARead-onlyIdempotentInspect
Fetches a bounded public HTTP(S) page, then sends its markup to the W3C Nu HTML Checker. Private, reserved, credentialed, and nonstandard-port destinations are rejected.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Public HTTP(S) URL on port 80 or 443. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| errors | Yes | |
| fetchedUrl | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive behavior. The description adds useful behavioral constraints beyond that: the fetch is 'bounded', and the tool rejects private, reserved, credentialed, and nonstandard-port URLs. No contradiction with annotations.
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?
Two concise sentences, each earning its place: the first states the core operation, the second states the rejection criteria. The most important action is front-loaded and there is 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 one-parameter tool with rich annotations, the description is largely complete: it covers the action, the validation target, and security constraints. It leaves open what 'bounded' means exactly and does not describe the return value, but neither is essential for a caller to select and invoke it 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?
The schema covers 100% of the single parameter with 'Public HTTP(S) URL on port 80 or 443'. The description reinforces the same restriction but adds no new parameter semantics, so the baseline of 3 is appropriate.
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 ('fetches') and resource ('public HTTP(S) page') and explains the follow-through action ('sends its markup to the W3C Nu HTML Checker'). It clearly distinguishes this as a validation tool from the sibling set (e.g., links.broken, screenshot.capture) by describing its unique pipeline.
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 context for use is clearly implied: validate a public HTML page via W3C Nu. It also gives exclusions (private, reserved, credentialed, nonstandard-port destinations are rejected), but it does not explicitly name alternatives or say when not to use this versus other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
links.brokenCheck public linksARead-onlyIdempotentInspect
Resolves and checks up to 25 public HTTP(S) links in supplied HTML. Redirects are reported but not followed, and response bodies are discarded.
| Name | Required | Description | Default |
|---|---|---|---|
| baseUrl | No | Optional public HTTP(S) base URL used to resolve relative links. | |
| maxLinks | No | Maximum number of public HTTP(S) links to check, from 1 to 25. | |
| htmlContent | Yes | Raw HTML markup containing links to check. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| links | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations, the description adds meaningful behavioral details: redirects are reported but not followed, and response bodies are discarded. These are important for understanding how links are checked and align with readOnlyHint and idempotentHint. No 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?
Two sentences, front-loaded with the core purpose and followed by concise behavioral constraints. Every clause adds information, and there is 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?
Given the output schema exists, return values don't need description. The description covers limit, redirect handling, and body handling, which are the key operational details an agent needs before invoking. It doesn't mention possible errors or network dependencies, but annotations and schema cover much of that context.
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 100%, so the baseline is 3. The description does not directly explain parameters but reinforces maxLinks ('up to 25') and htmlContent ('supplied HTML'), while baseUrl is left to the schema. No extra value beyond schema, but no gap.
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 clearly states the tool checks public HTTP(S) links in supplied HTML, with a precise verb ('checks') and resource ('up to 25 public HTTP(S) links'). It also distinguishes itself by noting redirects are reported but not followed and response bodies are discarded, making its function specific and 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?
The description implies usage for link checking in HTML but does not explicitly state when to prefer this tool over alternatives or when not to use it. It doesn't mention sibling tools like html.url or report.validation, leaving the selection partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report.validationGenerate a validation reportARead-onlyIdempotentInspect
Combines W3C HTML/CSS validation, local SEO/accessibility checks, JSON-LD syntax checks, and a bounded public-link check into a Markdown and structured report.
| Name | Required | Description | Default |
|---|---|---|---|
| baseUrl | No | Optional public HTTP(S) base URL used to resolve relative links. | |
| cssFilePath | No | Optional absolute or workspace-relative CSS file path. | |
| htmlFilePath | Yes | Absolute or workspace-relative HTML file path. |
Output Schema
| Name | Required | Description |
|---|---|---|
| links | Yes | |
| errors | No | |
| report | Yes | |
| summary | Yes | |
| seoIssues | Yes | |
| cssMessages | Yes | |
| failedChecks | Yes | |
| htmlMessages | Yes | |
| schemaIssues | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, lowering the bar. The description adds meaningful behavioral context by listing the exact validation categories and noting that the public-link check is 'bounded,' while also stating the report is Markdown and structured. It does not explain error behavior or the exact boundary of the link check, but the annotation coverage makes this sufficient.
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 entire description is one efficient sentence with no filler. It front-loads the main purpose, enumerates the validation components in a compact list, and ends with the output format, making it easy to scan.
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 a full output schema and 100% parameter schema coverage, the description does not need to re-explain return values or parameter syntax. It covers the tool's scope and output format well. The main gap is the absence of explicit guidance on when to choose this aggregator versus individual sibling tools, but the included components make that mostly inferable.
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 100%, so the schema already documents htmlFilePath, cssFilePath, and baseUrl. The description's mention of W3C HTML/CSS validation and public-link checks loosely maps to parameters, but it does not add explicit parameter-level meaning beyond what the schema provides, so the baseline 3 applies.
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 ('Combines') and clearly identifies the resource: a validation report covering W3C HTML/CSS, SEO/a11ility, JSON-LD, and public-link checks. It distinguishes itself from the single-purpose sibling tools by presenting this as the aggregate reporting tool, so an agent can tell them apart.
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 clearly implies this is the tool to use when a comprehensive validation report is needed, since it explicitly bundles multiple validation types into one output. However, it does not explicitly name alternatives or state when not to use it, such as 'for a single HTML check use html.local'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
schema.markupValidate JSON-LD syntaxARead-onlyIdempotentInspect
Parses JSON-LD blocks in supplied HTML locally and reports empty blocks or JSON syntax errors. It does not validate vocabulary semantics.
| Name | Required | Description | Default |
|---|---|---|---|
| htmlContent | Yes | Raw HTML containing JSON-LD script blocks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| issues | Yes | |
| truncated | Yes | |
| totalIssues | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, idempotent, non-destructive), so the description's added value lies in the local-execution trait and the precise failure modes it reports (empty blocks, JSON syntax errors). Those behaviors are not derivable from the schema or annotations, and the semantic-validation exclusion further reduces surprise.
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?
Two sentences and roughly two dozen words. The main action and expected results are front-loaded, with the scope exclusion in a compact second sentence. No filler or redundant restating of the tool name.
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 single-parameter tool with full annotations and a provided output schema, the description covers input, scope, execution context, action, and non-goals. The only unaddrressed boundary is HTML that contains no JSON-LD blocks at all, a minor gap given the output schema likely handles it.
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 100%: htmlContent is already documented as 'Raw HTML containing JSON-LD script blocks.' The description's phrase 'supplied HTML' adds no parameter-level information beyond the schema, so the baseline of 3 applied.
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?
States a specific verb and resource ('Parses JSON-LD blocks in supplied HTML') and names the concrete reported outcomes ('empty blocks or JSON syntax errors'). The explicit exclusion of vocabulary semantics sets it apart from the broader validation and metadata siblings despite the generic 'schema' name.
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?
Provides clear context: it operates on locally supplied HTML and targets syntactic validation, which helps an agent decide when to reach for it. The closing limitation ('does not validate vocabulary semantics') functions as an implicit when-not-to-use, though it stops short of naming a specific sibling tool for that job.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screenshot.captureCapture responsive screenshotsADestructiveIdempotentInspect
Renders a local HTML file or HTTP(S) URL in a sandboxed local Chromium browser and writes PNG screenshots to the requested directory. Existing matching files may be replaced.
| Name | Required | Description | Default |
|---|---|---|---|
| outputDir | No | Directory where PNG screenshots will be written. | .mcp-validator/screenshots |
| viewports | No | Optional viewport definitions; defaults to desktop, tablet, and mobile sizes. | |
| targetPath | Yes | Local HTML path or HTTP(S) URL to render. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| screenshots | Yes | |
| outputDirectory | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already carry destructiveHint=true and idempotentHint=true; the description adds useful nuance by saying existing matching files 'may be replaced' and noting the run occurs in a sandboxed local Chromium browser. This clarifies the mutation risk beyond the raw annotations, though it does not detail the output file naming pattern or external network behavior implied by openWorldHint.
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?
Two sentences, no filler, and the core rendering-and-output behavior is front-loaded. The replacement caveat is placed at the end where it is easy to notice but does not obscure the primary purpose.
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 full schema coverage, rich annotations, and an output schema, the description is largely complete: it covers input type, output type, destination, and destructive behavior. The only meaningful gap is the lack of explicit guidance on when to choose this tool over sibling tools, and the exact filename derivation for generated screenshots.
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 100%, so the baseline is 3. The description loosely aligns targetPath with 'local HTML file or HTTP(S) URL' and outputDir with 'requested directory,' but it does not add new meaning beyond the schema, which already documents all three parameters and the viewport 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 states a specific action ('Renders a local HTML file or HTTP(S) URL'), a concrete mechanism ('sandboxed local Chromium browser'), and a clear output ('writes PNG screenshots'). It distinguishes itself from sibling validation/metadata tools by focusing on visual capture rather than analysis or reporting.
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 intended use is implied: use this tool when a rendered screenshot of an HTML file or URL is needed. However, it does not explicitly state when to prefer this over sibling tools like html.local, html.url, or report.validation, nor does it mention any conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
seo.metadataAudit SEO metadataARead-onlyIdempotentInspect
Analyzes supplied HTML locally for metadata, heading structure, viewport configuration, image alternatives, and Open Graph fields.
| Name | Required | Description | Default |
|---|---|---|---|
| htmlContent | Yes | Raw HTML markup to inspect locally. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| issues | Yes | |
| truncated | Yes | |
| totalIssues | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds valuable context beyond those annotations: analysis happens locally, implying the HTML is not sent to an external service—a meaningful behavioral disclosure for privacy-sensitive usage. No contradiction with annotations.
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 18-word sentence that front-loads the verb and resource, then enumerates the audit scope efficiently. Every word earns its place; no filler, repetition, or hedging.
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's moderate complexity, an output schema exists for return values, annotations fully cover the safety profile, and the description enumerates the analysis areas. The only minor gap is no mention of how results are structured or presented, but the output schema handles that, so the description is complete enough for an agent to invoke it 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 100%, so the schema already documents htmlContent as 'Raw HTML markup to inspect locally.' The description reinforces that the input is supplied HTML and lists what will be inspected, but adds no new format, encoding, or usage details beyond the schema. Baseline 3 is appropriate.
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 ('Analyzes'), a clear resource ('supplied HTML'), and lists concrete checks: metadata, heading structure, viewport, image alternatives, Open Graph fields. While it doesn't explicitly contrast with siblings like html.local, the SEO-audit focus makes its scope reasonably distinct from the generic HTML and screenshot tools.
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 word 'locally' and 'supplied HTML' implicitly signal that this tool is for raw HTML you already have, not for fetching a URL (contrast with html.url). However, there is no explicit when-to-use guidance, no mention of alternatives, and no exclusion statements—so the routing is left to inference.
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. Dates show when Glama detected each change.
8 tool updates
v1.1.0- Added
css.local - Added
html.local - Added
html.url - Added
links.broken - Added
report.validation - Added
schema.markup - Added
screenshot.capture - Added
seo.metadata
7 tool updates
v1.0.1- Removed
audit_seo_metadata - Removed
check_broken_links - Removed
generate_validation_report - Removed
validate_local_css - Removed
validate_local_html - Removed
validate_schema_markup - Removed
validate_url
7 tool updates
v1.0.0- First observed
audit_seo_metadata - First observed
check_broken_links - First observed
generate_validation_report - First observed
validate_local_css - First observed
validate_local_html - First observed
validate_schema_markup - First observed
validate_url
TDQS
Each tool targets a distinct validation or analysis concern: CSS, HTML, SEO metadata, links, schema markup, reporting, and screenshots. Even html.local and html.url are clearly separated by input source.
All tool names follow the same lowercase dot-separated two-part convention, such as css.local, html.url, and schema.markup. The pattern is consistent and predictable across the entire set.
Eight tools is well-scoped for a web validation server, covering distinct validation tasks without unnecessary overlap or bloat. Each tool has a clear purpose and contributes to the overall workflow.
The tool set covers HTML and CSS validation, SEO checks, JSON-LD syntax, link checking, reporting, and screenshots. Minor gaps exist, such as no URL-based CSS validation and limited schema-depth checking, but the core validation workflows are covered.
Maintenance
Related MCP Connectors
Run SEO + AI-visibility (GEO) audits from Claude, Cursor & other AI clients.
- VibeSEOOAuthdev.vibeseo
SEO research, audits, backlinks, GSC, and content workflow tools for AI agents.
Real SEO data for AI assistants: page audits, Keyword Planner volumes, Search Console history.
Direct access to Cypress tests results and accessibility reports in your AI workflow.
Related MCP Servers
- AlicenseAqualityAmaintenanceIntegrates SEO analysis and Google Search Console data directly into Claude Code and Cursor. Performs real-time site audits, detects technical SEO issues, validates meta tags, generates structured data, and provides AI-powered recommendations for both production sites and local development servers.19303MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding assistants to test web accessibility by scanning URLs, detecting violations, and running focused audits on keyboard navigation, screen reader compatibility, and WCAG criteria — all within the assistant's loop.MIT
- AlicenseAqualityDmaintenanceEnables AI agents to perform comprehensive web accessibility checks (WCAG 2.1/2.2) including color contrast analysis, ARIA validation, and full accessibility report generation without requiring any API key.8MIT
- AlicenseAqualityCmaintenanceEnables AI coding agents to perform real-browser accessibility scanning of localhost pages using Playwright and axe-core, returning WCAG 2.1 violations with structured fix plans.3931MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/AKzar1el/mcp-web-validator'
If you have feedback or need assistance with the MCP directory API, please join our Discord server