Atlas / MCP servers / akzar1el / mcp-web-validator

mcp-web-validatorBLOCK

mcp/akzar1el/mcp-web-validator

W3C HTML/CSS Validator and Technical SEO Audit MCP Server. Part of the DigestSEO (https://digestseo.com) suite.

Verdict
BLOCK
Grade
F
Trust score
59 /100
Exposed tools
8 8r · 0w · 0d
Transport
stdio
License
MIT
Stars
9
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://www.npmjs.com/package/mcp-web-validator) [](https://github.com/AKzar1el/mcp-web-validator/actions/workflows/ci.yml) [](LICENSE) [](https://tensorblock.co/mcp/servers/github-akzar1el-mcp-web-validator-4b38b48a) [](https://glama.ai/mcp/servers/AKzar1el/mcp-web-validator)

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:

Read from source at commit 377f5b184a6bOBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code
claude mcp add mcp-web-validator -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "mcp-web-validator": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Exposed tools (8)

8 read · 0 write · 0 destructive.

ToolRiskDescription
css.localread
html.localread
html.urlread
links.brokenread
report.validationread
schema.markupread
screenshot.captureread
seo.metadataread
04

Trust audit

BLOCKgrade F · trust 59/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
none-observed
Network
declared (5 observation(s))
Shell
declared (3 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (21)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
chatgpt-plugin/worker-configuration.d.ts:3049
exec(input?: (string | URLPatternInit), baseURL?: string): URLPatternResult | null;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
chatgpt-plugin/worker-configuration.d.ts:3340
exec(cmd: string[], options?: ContainerExecOptions): Promise<ExecProcess>;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
chatgpt-plugin/worker-configuration.d.ts:12120
exec(query: string): Promise<D1ExecResult>;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
chatgpt-plugin/src/language-subtags.ts:5
"MzQmR8cZEAlkUwQAiBBoHIQMCZSAAkNEkMZZZVwEBIAR9GfXUBgOwG0ObaGJRCBhQEACAwAAEADAQdHd90d0m1NABAJCBAEQAAQAIAAAAEEABAJA8N/f7//+/7u9/++vf//Bc/V2OYf///8P9zvw//9cUCiX/t//9///f/f///////8/nv7//9/Eq6Dn+///7/9////
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
src/language-subtags.ts:5
"MzQmR8cZEAlkUwQAiBBoHIQMCZSAAkNEkMZZZVwEBIAR9GfXUBgOwG0ObaGJRCBhQEACAwAAEADAQdHd90d0m1NABAJCBAEQAAQAIAAAAEEABAJA8N/f7//+/7u9/++vf//Bc/V2OYf///8P9zvw//9cUCiX/t//9///f/f///////8/nv7//9/Eq6Dn+///7/9////
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
chatgpt-plugin/src/validators.test.ts:80
"http://169.254.169.254/",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
test/network.test.js:150
"http://169.254.169.254/",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
test/network.test.js:786
headers: { location: "http://169.254.169.254/latest/meta-data" },
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
chatgpt-plugin/SUBMISSION.md:100
4. `Audit http://127.0.0.1/admin.` The app must reject loopback, private, reserved, credentialed, custom-port, and other non-public destinations.
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
chatgpt-plugin/src/network.test.ts:155
"http://127.0.0.1/",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
chatgpt-plugin/src/network.test.ts:186
new Response(null, { status: 302, headers: { location: "http://127.0.0.1/private" } }),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
chatgpt-plugin/src/network.test.ts:332
new Response(null, { status: 302, headers: { location: "http://127.0.0.1/private" } }),
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
chatgpt-plugin/src/site-audit.test.ts:330
'<entry><link href="http://127.0.0.1/private" /></entry>',
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
chatgpt-plugin/src/language-subtags.ts:8
atob(PRIMARY_LANGUAGE_SUBTAG_BITS_BASE64),
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
chatgpt-plugin/worker-configuration.d.ts:295
atob(data: string): string;
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
chatgpt-plugin/worker-configuration.d.ts:383
declare function atob(data: string): string;
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
src/language-subtags.ts:8
atob(PRIMARY_LANGUAGE_SUBTAG_BITS_BASE64),
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
chatgpt-plugin/package.json
@modelcontextprotocol/ext-apps, @modelcontextprotocol/server, agents, cheerio, ipaddr.js, postcss, zod, @cloudflare/vitest-pool-workers
Why it matters. 11 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, cheerio, undici, zod, @types/node, tsx, typescript
Why it matters. 7 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
README.md:76
`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, authenticat
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
SECURITY.md:11
Use [GitHub private vulnerability reporting](https://github.com/AKzar1el/mcp-web-validator/security/advisories/new). If that form is unavailable, email `[email protected]` with the subject `Secu
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 377f5b184a6bfull audit observations/trust-audit/mcp-server/akzar1el__mcp-web-validator.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-11377f5b184a6bBLOCKF59first audit
06

Questions

What is the mcp-web-validator MCP server?

W3C HTML/CSS Validator and Technical SEO Audit MCP Server. Part of the DigestSEO (https://digestseo.com) suite.

What tools does mcp-web-validator expose?

8 in total: 8 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is mcp-web-validator safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (59/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does mcp-web-validator need?

No credential environment variables were found in its source, so it appears to need none.

How does mcp-web-validator run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as mcp-web-validator at 1.3.42.

How current is this page?

The grade is for one exact copy of the source (377f5b184a6b), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement