That is what makes it usable inside a loop rather than as a linter you read: validate, look up the rule you tripped, apply the safe fixes, validate again — all from structured output. The docs are also clear about the boundary: the tools run the XML catalogue including the SIMID envelope, but they do not fetch the SIMID HTML or drive a session.
A Rust VAST XML validator with a native MCP server. It checks ad tags against the IAB Tech Lab VAST specification and answers in structured JSON — rule id, severity, the XPath of the offending node, and a spec reference.
- `validate_vast` — raw XML in, an issues array out
- `validate_vast_url` — fetch and validate a tag by URL, following wrapper chains to the configured depth
- `inspect_vast` for a closer look at what a tag contains
- `list_rules` — all 232 rule ids with severities and descriptions; static, so cache it
- `explain_rule` — the full detail, spec reference and fix guidance for one rule id
- `fix_vast` — applies the deterministic safe fixes (HTTP to HTTPS including SIMID, SIMID apiFramework/type/variableDuration, deprecated attribute removal) and returns the patched XML plus a diff of what changed
Nothing to install for the hosted route: point any SSE-capable client at `https://vastlint.org/mcp`. For an air-gapped or low-latency setup, `cargo install vastlint-mcp` and run `vastlint-mcp` over stdio — same tools, same JSON schema, no network round trips.
One command — cargo install vastlint-mcp
