Atlas / MCP servers / aleksuix / vastlint

vastlintBLOCK

mcp/aleksuix/vastlint

IAB VAST, VMAP, and DAAST validator. Hosted MCP at https://vastlint.org/mcp (auth none).

Verdict
BLOCK
Grade
D
Trust score
67 /100
Exposed tools
—
Transport
sse · stdio
License
Apache-2.0
Stars
19
01

Overview

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

Website & web validator: VAST tag validator Paste a VAST tag and get results in your browser, no install required.

A high-performance VAST XML validator built on a pure-Rust core. Checks ad tags against the IAB Tech Lab VAST specification so you don't have to read it. Over $30 billion in annual CTV and video ad spend flows through VAST XML, and malformed tags are one of the most common causes of lost impressions, broken tracking, and revenue discrepancies between platforms. There is no widely adopted open-source tool that validates VAST XML against the full IAB specification across all published versions.

VASTlint ships a native MCP server - making VAST validation available as a callable tool from Claude, Cursor, the AAMP Buyer Agent SDK, or any MCP-compatible client. Connect to vastlint.org/mcp and call validate_vast, validate_vast_url, inspect_vast, list_rules, explain_rule, or fix_vast. Each tool returns structured JSON with rule IDs, XPath locations, and spec references.

Native bindings for realtime ad pipelines: `vastlint-go` (CGo, prebuilt static libs, no Rust toolchain needed), `vastlint-java` (gRPC client for JVM ad servers), `vastlint-erlang` (Elixir/Erlang: OTP port mode for production ad delivery, DirtyCpu NIF for non-critical paths), and a WASM npm package for Node.js and browsers. All bindings share the same compiled Rust core. Consistent results everywhere, sub-millisecond latency at scale.

Need a copy-paste frontend starting point? See the React drop-in example in npm/examples.

[](https://crates.io/crates/vastlint-cli) [](h

Read from source at commit 1d31a29518a4OBSERVED · 2026-10-10
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 vastlint -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "vastlint": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ]
    }
  }
}
03

Trust audit

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

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

What the source does

Filesystem
declared (4 observation(s))
Network
declared (2 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
node_modules/typescript/lib/lib.es5.d.ts:998
exec(string: string): RegExpExecArray | null;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMInventory / provenance · inv.binary · CWE-1104
chrome/vast-lint-extension.zip
vast-lint-extension.zip
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
vscode/vastlint-0.4.1.vsix
vastlint-0.4.1.vsix
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.binary · CWE-1104
vscode/vastlint-0.4.5.vsix
vastlint-0.4.5.vsix
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInventory / provenance · inv.symlink · CWE-1104
node_modules/.bin/tsc
node_modules/.bin/tsc
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
node_modules/.bin/tsserver
node_modules/.bin/tsserver
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
node_modules/vastlint
node_modules/vastlint
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
node_modules/vastlint-client
node_modules/vastlint-client
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
node_modules/vastlint-react
node_modules/vastlint-react
Why it matters. link not followed
LOWInventory / provenance · inv.hidden_file · CWE-1104
node_modules/.package-lock.json
.package-lock.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
vscode/.vscodeignore
.vscodeignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/chrome-extension.yml:69
run: wasm-pack build crates/vastlint-wasm --target bundler --out-dir ../../npm/pkg
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/chrome-extension.yml:72
run: wasm-pack build crates/vastlint-wasm --target nodejs --out-dir ../../npm/pkg-node
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/ecosystem-smoke.yml:517
wasm-pack build crates/vastlint-wasm --target bundler --out-dir ../../npm/pkg
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/ecosystem-smoke.yml:518
wasm-pack build crates/vastlint-wasm --target nodejs --out-dir ../../npm/pkg-node
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
.github/workflows/ecosystem-smoke.yml:580
wasm-pack build crates/vastlint-wasm --target bundler --out-dir ../../npm/pkg
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
crates/vastlint-grpc/LOAD-TEST.md:124
./target/release/examples/loadgen --target http://127.0.0.1:50340 \
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
crates/vastlint-grpc/LOAD-TEST.md:130
./target/release/examples/loadgen --target http://127.0.0.1:50341 \
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
crates/vastlint-grpc/examples/loadgen.rs:68
target: "http://127.0.0.1:50051".to_string(),
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
crates/vastlint-core/tests/fixtures/warn_publica_large.xml:14
<![CDATA[ https://prebid-log.getpublica.com/bpixel2.png?CIUIEiRhOTQ0OGI2Ni0wNjAwLTQwMTYtYTM2Zi03YzljNDYxZjAxMTYaJDllNjE1MzQwLTcyOTgtNGViNy05ZTI2LWJlYWVmMTllMjI5Myo0CiQ4N2YxZmE0MS1mZTBhLTQ1MTctOTA4Mi0y
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
crates/vastlint-core/tests/fixtures/warn_publica_large.xml:23
<![CDATA[ https://vtrk.dv.tech/?tid=ZW-12000000&ec=vast&cid=ba35cd15-9ede-43ac-81b3-0597b76744ec&el=https%3A%2F%2Fserverside.doubleclick.net%2Fddm%2Fpfadx%2FN1670579.3958515PMPRECISIONTHETR%2FB3443917
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
crates/vastlint-core/tests/fixtures/warn_publica_large.xml:38
<![CDATA[ https://ox-rtb-us-east1.openx.net/win/publica?p=6.616&t=2DAABBgABAAECAAIBAAsAAgAAAfUcGApLcVVIeVJneHhWHBa0uoKAr52JkgMW7a7LwceqvKnRAQAcFtHrrZ_A74KO8AEW16zb6qvu7_3eAQAWwrHtng0VBjgkNTVjMDU4NjctM
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
crates/vastlint-core/tests/fixtures/warn_publica_large.xml:41
<![CDATA[ https://prebid-log.getpublica.com/bpixel2.png?CPIHEiRhOTQ0OGI2Ni0wNjAwLTQwMTYtYTM2Zi03YzljNDYxZjAxMTYaJDllNjE1MzQwLTcyOTgtNGViNy05ZTI2LWJlYWVmMTllMjI5Myo0CiQ4N2YxZmE0MS1mZTBhLTQ1MTctOTA4Mi0y
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
crates/vastlint-core/tests/fixtures/warn_publica_large.xml:181
<![CDATA[ https://samsungtv-d.openx.net/v/1.0/rv?t=creativeView&ts=2DAABBgABAAECAAIBAAsAAgAAAfUcGApLcVVIeVJneHhWHBa0uoKAr52JkgMW7a7LwceqvKnRAQAcFtHrrZ_A74KO8AEW16zb6qvu7_3eAQAWwrHtng0VBjgkNTVjMDU4Njct
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
node_modules/typescript/lib/lib.webworker.d.ts:11992
atob(data: string): string;

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 1d31a29518a4full audit observations/trust-audit/mcp-server/aleksuix__vastlint.json · Report an issue / request a re-scan
04

Audit history

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

DateSourceVerdictGradeScoreChange
2026-10-101d31a29518a4BLOCKD67first audit
05

Questions

What is the vastlint MCP server?

IAB VAST, VMAP, and DAAST validator. Hosted MCP at https://vastlint.org/mcp (auth none).

Is vastlint safe to connect to an agent?

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

What credentials does vastlint need?

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

How does vastlint run?

It speaks sse and stdio, so it runs as a local process your client starts. It is published on npm as vastlint at 0.14.0.

How current is this page?

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

Advertisement