Skip to main content
Glama
AKzar1el

Web Validator by DigestSEO

Web Validator by DigestSEO

npm version CI License: MIT Indexed on TensorBlock MCP Index mcp-web-validator MCP server

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.

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-validator

Hosted endpoint:

https://web-validator-mcp.digestseo.com/mcp

Related 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

html.local

Validate a local HTML file.

Reads the selected file and submits its markup to the external W3C Nu HTML Checker at validator.w3.org/nu/.

html.url

Validate the markup returned by a public URL.

Fetches the URL, then submits the returned markup to the external Nu checker.

css.local

Validate a local CSS file.

Reads the selected file and submits its CSS to the external W3C Jigsaw CSS Validator.

seo.metadata

Audit titles, descriptions, canonical tags, headings, viewport metadata, image alt attributes, and Open Graph metadata.

Processes supplied HTML locally.

links.broken

Check links extracted from supplied HTML.

Sends bounded HTTP requests to eligible public links.

schema.markup

Parse JSON-LD blocks and report JSON syntax errors.

Processes supplied HTML locally.

report.validation

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.

screenshot.capture

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

audit_public_webpage

Fetch one authorized public HTML page and run the combined HTML, SEO/accessibility-signal, and JSON-LD syntax audit. Link checks are optional.

audit_public_site

Run a bounded sitemap-first audit of up to eight authorized, same-origin public pages. It respects robots.txt, returns compact page coverage and deduplicated findings, and does not run site-wide link checks.

validate_html

Validate raw HTML markup already supplied in the conversation.

validate_css

Parse supplied CSS for syntax errors inside the Worker.

audit_seo_metadata

Audit supplied HTML for covered on-page SEO and accessibility signals.

validate_schema_markup

Check JSON-LD blocks in supplied HTML for JSON syntax errors.

check_broken_links

Check up to 20 authorized public links extracted from supplied HTML.

generate_validation_report

Combine the checks for supplied markup; base_url resolves relative links but does not fetch a page.

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.json

  • macOS: ~/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-validator

This 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

Add to 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 ci

Run the local quality gates:

npm run check
npm test
npm run build
npm pack --dry-run

Run the local stdio server:

npm start

Validate the hosted Worker separately:

cd chatgpt-plugin
npm ci
npm run check
npm test
npm run deploy:dry-run

See 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 tools
css.localValidate local CSSA
Read-onlyIdempotent
Inspect

Reads a bounded local CSS file and sends it to the W3C Jigsaw CSS Validator. Use only files the user is authorized to share.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute or workspace-relative path to a CSS file.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
errorsYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 HTMLA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYesAbsolute or workspace-relative path to an HTML file.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
errorsYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 URLA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesPublic HTTP(S) URL on port 80 or 443.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
errorsYes
fetchedUrlNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 linksA
Read-onlyIdempotent
Inspect

Resolves and checks up to 25 public HTTP(S) links in supplied HTML. Redirects are reported but not followed, and response bodies are discarded.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseUrlNoOptional public HTTP(S) base URL used to resolve relative links.
maxLinksNoMaximum number of public HTTP(S) links to check, from 1 to 25.
htmlContentYesRaw HTML markup containing links to check.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
linksYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 reportA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
baseUrlNoOptional public HTTP(S) base URL used to resolve relative links.
cssFilePathNoOptional absolute or workspace-relative CSS file path.
htmlFilePathYesAbsolute or workspace-relative HTML file path.

Output Schema

ParametersJSON Schema
NameRequiredDescription
linksYes
errorsNo
reportYes
summaryYes
seoIssuesYes
cssMessagesYes
failedChecksYes
htmlMessagesYes
schemaIssuesYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 syntaxA
Read-onlyIdempotent
Inspect

Parses JSON-LD blocks in supplied HTML locally and reports empty blocks or JSON syntax errors. It does not validate vocabulary semantics.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlContentYesRaw HTML containing JSON-LD script blocks.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
issuesYes
truncatedYes
totalIssuesYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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 screenshotsA
DestructiveIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputDirNoDirectory where PNG screenshots will be written..mcp-validator/screenshots
viewportsNoOptional viewport definitions; defaults to desktop, tablet, and mobile sizes.
targetPathYesLocal HTML path or HTTP(S) URL to render.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
screenshotsYes
outputDirectoryYes

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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 metadataA
Read-onlyIdempotent
Inspect

Analyzes supplied HTML locally for metadata, heading structure, viewport configuration, image alternatives, and Open Graph fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlContentYesRaw HTML markup to inspect locally.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
issuesYes
truncatedYes
totalIssuesYes

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 8 tool updatesv1.1.0
    • Addedcss.local
    • Addedhtml.local
    • Addedhtml.url
    • Addedlinks.broken
    • Addedreport.validation
    • Addedschema.markup
    • Addedscreenshot.capture
    • Addedseo.metadata
  2. 7 tool updatesv1.0.1
    • Removedaudit_seo_metadata
    • Removedcheck_broken_links
    • Removedgenerate_validation_report
    • Removedvalidate_local_css
    • Removedvalidate_local_html
    • Removedvalidate_schema_markup
    • Removedvalidate_url
  3. 7 tool updatesv1.0.0
    • First observedaudit_seo_metadata
    • First observedcheck_broken_links
    • First observedgenerate_validation_report
    • First observedvalidate_local_css
    • First observedvalidate_local_html
    • First observedvalidate_schema_markup
    • First observedvalidate_url

TDQS

A4.2/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Integrates 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.
    19
    30
    3
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables 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.
    3
    93
    1
    MIT

Latest Blog Posts

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