Deterministic SVG perception for LLM agents — measures, never guesses. MCP server.
Config is the same across clients — only the file and path differ.
{
"mcpServers": {
"vector-mirror": {
"args": [
"-y",
"vector-mirror"
],
"command": "npx"
}
}
}Are you the author?
Add this badge to your README to show your security score and help users find safe servers.
Mirror renders SVG in a real browser and reports what is actually where — in grid cells and > W3C color names, with prose and structured output — and it never guesses. Spatial layout > constraints become unit tests. And every tool description is a claim the server proves about > itself. Built for agents that can't afford to hallucinate coordinates.
Run this in your terminal to verify the server starts. Then let us know if it worked — your result helps other developers.
npx -y 'playwright' 2>&1 | head -1 && echo "✓ Server started successfully"
After testing, let us know if it worked:
Five weighted categories — click any category to see the underlying evidence.
Playwright downloads and installs browsers without verifying the authenticity of the SSL certificate
### Summary Use of `curl` with the `-k` (or `--insecure`) flag in installer scripts allows attackers to deliver arbitrary executables via Man-in-the-Middle (MitM) attacks. This can lead to full system compromise, as the downloaded files are installed as privileged applications. ### Details The following scripts in the `microsoft/playwright` repository at commit [`bee11cbc28f24bd18e726163d0b9b1571b4f26a8`](https://github.com/microsoft/playwright/commit/bee11cbc28f24bd18e726163d0b9b1571b4f26a8) u
Click any tool to inspect its schema.
Be the first to review
Have you used this server?
Share your experience — it helps other developers decide.
Sign in to write a review.
Others in ai-ml / design
Dynamic problem-solving through sequential thought chains
Workspace template + MCP server for Claude Code, Codex CLI, Cursor & Windsurf. Multi-agent knowledge engine (ag-refresh / ag-ask) that turns any codebase into a queryable AI assistant.
Persistent memory using a knowledge graph
MCP server for accessing Figma plugin console logs and screenshots via Cloudflare Workers or local mode
MCP Security Weekly
Get CVE alerts and security updates for io.github.c64dos-png/vector-mirror and similar servers.
Start a conversation
Ask a question, share a tip, or report an issue.
Sign in to join the discussion.
Mirror renders SVG in a real browser and reports what is actually where — in grid cells and W3C color names, with prose and structured output — and it never guesses. Spatial layout constraints become unit tests. And every tool description is a claim the server proves about itself. Built for agents that can't afford to hallucinate coordinates.
When an LLM agent edits an SVG, how does it know whether the change worked? Today it either guesses from the source text (and hallucinates positions, because layout is a render-time property, not a source property) or it takes a screenshot and guesses from pixels (and burns tokens on a vision round-trip that still can't name a color or address a region precisely).
Mirror is the third option: a measuring eye. It is a sensory organ for LLMs, not a tool with a purpose. It perceives and measures; it never interprets, decides, or acts — the brain (the LLM or you) does that. The eye has three tissues:
| Tissue | What it does |
|---|---|
| Retina (measurement) | renders the SVG in real Chromium and measures geometry, colors, visibility |
| Mouth (utterance) | says what it saw — prose + structured, two projections of one truth |
| Package insert (self-description) | explains the organ to a stranger brain: every tool description is a machine-verified claim |
Because the measurement runs in a real browser engine, Mirror sees what the browser sees — including things the SVG source never tells you.
A cold agent (no source code, MCP only) built a 17-element mission-control panel and verified it to an exact stop-condition. Here is the loop, with real outputs from that session:
# 1 — INSPECT: see the layout in LLM grammar (no constraints checked yet)
inspect(svg)
→ scene: 16 elements, grid 16×10, canvas_validity: valid
e.g. { id: "led-ok", tag: "circle", cell: "B3", color: "lime" }
colors come out as W3C NAMES, never hex.
# 2 — CONSTRAINTS: ask the vocabulary (it is finite and closed)
constraints()
→ 11 types. RIGHT-OF / BELOW deliberately do NOT exist
(use LEFT-OF / ABOVE with swapped operands).
# 3 — ANALYZE: turn layout intent into unit tests
analyze(svg, ["#title CENTERED-IN #frame", "#led-ok ABOVE #led-warn", ...16 constraints])
→ PARTIAL: 2 unchecked SUBJECT_TIME_VARIANT
"#beacon has an animated r → not measurable; geometrically satisfied @t0 (bbox …)"
# the eye refuses to guess about an animated value. It says so, with a reason code.
# 4 — fix, re-analyze until PASS (convergence is tracked, not vibes)
analyze(svg_v3, [...], previousIssueCount: N)
→ PASS (corrections == [] && unchecked == [] && canvas_validity == valid && diff == [])
# 5 — SNIPER LOOP: pin a baseline, edit, catch regressions in one call
bookmark("panel-pass", analysisId)
compare(sabotaged_svg, [], "panel-pass")
→ FAIL: FARBÄNDERUNG orange→crimson + VERSCHOBEN D7→H8
with ready-to-apply fixes: { x: 262→182, y: 372→324 }
# exactly the two injected faults. Nothing more, nothing less.
The agent's verdict, verbatim: "In 13 calls it never once guessed, lied, or made me guess.
analyze landed on the first try. Lost diagnostic loops: 0." — 8.5/10.
Mirror's differentiator is not what it measures but that it is honest about what it cannot.
| Capability | What it gives the agent | Honest about | |----