Web Validator by DigestSEO
by AKzar1el · remote · local (npm) · no sign-in to list tools · v1.3.42 · published by GitHub user AKzar1el
Audit public webpages and supplied markup for HTML, CSS, SEO, JSON-LD, and link issues.
8 tools: 5 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone0Claude Code: ask
- Changes things5Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
3 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http web-validator https://web-validator-mcp.digestseo.com/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "check_broken_links" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_broken_links" says "link": a word for a change.
The server marks "generate_validation_report" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "generate_validation_report" says "generate": a word for a change.
The input schema at properties.url.description mentions "credentials".
What this check looks forMatched text
inputSchema.properties.url.description: "...lic HTTP(S) webpage URL; private pages, credentials, and custom ports are rejected."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
8 tools
Changes things 5Claude Code: ask
audit_public_siteUse this for a bounded, sitemap-first audit of a public website the user owns or is authorized to inspect.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this for a bounded, sitemap-first audit of a public website the user owns or is authorized to inspect. It fetches at most 8 same-origin HTML pages per call, respects robots.txt, and returns compact page summaries plus deduplicated findings. It does not recursively follow HTML links, authenticate, execute JavaScript, fetch assets, or run site-wide link checks. Use page_offset to continue when more sitemap pages remain.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
- destructiveHint: false
- idempotentHint: true
audit_public_webpageUse this when the user provides one live public webpage URL.1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Info
The input schema at properties.url.description mentions "credentials".
What this check looks forMatched text
inputSchema.properties.url.description: "...lic HTTP(S) webpage URL; private pages, credentials, and custom ports are rejected."
Description, as the server wrote it Use this when the user provides one live public webpage URL. Fetches one bounded static HTML response, then runs HTML validation, SEO/accessibility-signal, and JSON-LD syntax checks. It checks links only when requested and does not crawl, execute JavaScript, authenticate, or fetch linked stylesheets. Use only URLs the user owns or is authorized to inspect.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
- destructiveHint: false
- idempotentHint: true
audit_seo_metadataUse this for a focused SEO/accessibility-signal check of supplied HTML.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it Use this for a focused SEO/accessibility-signal check of supplied HTML. It does not fetch a live webpage; use audit_public_webpage for a URL.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
- idempotentHint: true
check_broken_linksUse this for a focused check of up to 20 public HTTP(S) links found in supplied HTML.1 finding
Why it is in this group
- The name "check_broken_links" says "link": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "check_broken_links" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "check_broken_links" says "link": a word for a change.
Description, as the server wrote it Use this for a focused check of up to 20 public HTTP(S) links found in supplied HTML. It does not fetch base_url, follow redirects, or retain response bodies.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
- destructiveHint: false
- idempotentHint: true
generate_validation_reportUse this when HTML markup is already supplied.1 finding
Why it is in this group
- The name "generate_validation_report" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "generate_validation_report" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "generate_validation_report" says "generate": a word for a change.
Description, as the server wrote it Use this when HTML markup is already supplied. Combines Nu HTML validation with local CSS, SEO, accessibility-signal, and JSON-LD syntax checks. It does not fetch a webpage from base_url; use audit_public_webpage for a live URL.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
- destructiveHint: false
- idempotentHint: true
Only reads 3Claude Code: allow
validate_cssUse this when raw CSS source is supplied.No findings
Why it is in this group
- The name "validate_css" says "validate": a word for reading.
Description, as the server wrote it Use this when raw CSS source is supplied. Parses it inside the Worker and returns syntax messages without contacting an external service.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
- idempotentHint: true
validate_htmlUse this when raw HTML markup is supplied.No findings
Why it is in this group
- The name "validate_html" says "validate": a word for reading.
Description, as the server wrote it Use this when raw HTML markup is supplied. Sends that markup to the Nu HTML Checker hosted at validator.nu and returns validation messages. For a live URL, use audit_public_webpage.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: true
- destructiveHint: false
- idempotentHint: true
validate_schema_markupUse this for a focused JSON-LD syntax check of supplied HTML.No findings
Why it is in this group
- The name "validate_schema_markup" says "validate": a word for reading.
Description, as the server wrote it Use this for a focused JSON-LD syntax check of supplied HTML. It parses JSON only and does not validate Schema.org vocabulary semantics.
Annotations the server declares
- readOnlyHint: true
- openWorldHint: false
- destructiveHint: false
- idempotentHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.42. Values in angle brackets are yours to fill in.
claude mcp add --transport http web-validator https://web-validator-mcp.digestseo.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__web-validator__validate_html",
"mcp__web-validator__validate_css",
"mcp__web-validator__validate_schema_markup"
],
"ask": [
"mcp__web-validator__audit_seo_metadata",
"mcp__web-validator__check_broken_links",
"mcp__web-validator__generate_validation_report",
"mcp__web-validator__audit_public_webpage",
"mcp__web-validator__audit_public_site"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as web-validator. Review it before you use it.
