Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
Deterministic visual inspection for AI agents. Overlap, overflow, contrast, quality.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
作者はレジストリにインストール情報を載せていません。下にある作者のREADMEをご覧ください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月9日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント AbduljabbarBXR で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.2.2)がレジストリに届いたのは2 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにRustも必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Agilitycms MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
An MCP server that provides access to Agility CMS. See https://mcp.agilitycms.com for more details.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Deterministic visual inspection for AI agents. The eyes a coding agent never had.
Cornea gives a coding agent that builds web pages a real way to *see* them. As a token-cheap, deterministic structural model it can reason over exactly, instead of megabytes of screenshots and raw DOM dumped into context.
An agent doesn't need a *photo* of a page. It needs to know is my layout broken, and how. Cornea computes an abstract *visual geometry model* of every element (box, position, z-order, computed styles) and derives inspection conclusions. overlap, overflow, contrast, quality. Then exposes them as native tools on three surfaces: CLI, MCP, and HTTP API.
One promise holds everything together: same input → byte-identical output. No Chromium, no sub-pixel variance, no server. A single ~1.4 MB binary.
# Build (Rust 1.98+, edition 2024)
cargo build --release
./target/release/cornea tests/fixtures/sample-bugs.html 360
Requires only
cargo. No browser, no Node, no system dependencies. Builds fine on a phone-class device.
Or install the `cornea` command from npm (no Rust toolchain needed):
npm install -g optrex # provides the cornea command
cornea --help
Take this page below. It looks fine as source. But it's hiding four layout bugs. Cornea finds every one.
<!-- tests/fixtures/sample-bugs.html (excerpt) -->
Card 1 Card 2 Card 3
Left overlap Right overlap ... Hard to read on white
Run it and Cornea reports the damage instantly:
$ ./target/release/cornea tests/fixtures/sample-bugs.html 360
{ "html_file": "tests/fixtures/sample-bugs.html", "viewport_w": 360.0, "element_count": 17, "est_tokens": 1068, // <-- entire page read for ~1k tokens "report": { "total_elements": 17, "visible_elements": 14, "overlaps": [ ... 7 collisions ... ], "overflows": [ ... 1 clipped ... ], "contrast": [ ... 2 AA failures ... ], "quality": { "score": 0.06, "label": "broken" } } }
Each finding is precise and actionable:
| Finding | Detail |
|---|---|
| Overlap | section.row ⇄ div.overlap-right, area 20000 px². The absolutely-positioned boxes cover the cards |
| Overflow | div.overflow-bad: right edge 600 exceeds viewport 360 → clipped |
| Contrast | black on blue: ratio 2.44:1. Fails WCAG AA (needs 4.5) |
| Contrast | #cccccc on white: ratio 1.61:1. Fails WCAG AA |
That is the value: hundreds of tokens, not hundreds of kilobytes, and a deterministic answer the agent can act on and re-verify.
Cornea is one engine, three doors. All three returns identical inspection JSON because they funnel through a single shared dispatch.
cornea <file.html | http(s)://url> [viewport_width] [viewport_height] [--js]
$ cornea page.html 360
{ "html_file": "page.html", "viewport_w": 360.0, "element_count": 42, "json_bytes": 8124, "est_tokens": 2193, "report": { "total_elements": 42, "visible_elements": 38, "overlaps": [], "overflows": [], "contrast": [], "quality": { "score": 1.0, "label": "good" } } }
cornea --serve
An agent calls layout.* tools directly; it passes the page source, or a live URL (see URL capture below), per call:
→ {"method":"tools/call","params":{"name":"layout.overlaps",
"arguments":{"html":" A ..." ,"width":360}}} ← {"id":1,"result":{"content":[{"text":"[{\"a_sel\":\"...div \u21c4 ...div\",\"area\":20000}]"}]}}
| Tool | Returns |
|---|---|
layout.inspect | Full visual model + report |
layout.overlaps | Elements whose boxes collide |
layout.overflow | Clipped / collapsed / off-screen |
layout.contrast | WCAG AA ratios for text elements |
layout.quality | 0..1 health score + issue list |
layout.fidelity | Which CSS features are exact vs approximated |
cornea --serve-http [addr] # default 127.0.0.1:8080
curl -s -X POST http://127.0.0.1:8080/inspect \
-H 'Content-Type: application/json' \ -d '{"html":" bady ","width":360}'
{"total_elements":1,"contrast":[{"selector":"...>p","fg":"#cccccc","bg":"#ffffff",
"ratio":1.61,"pass_aa":false}]}
| Route | Method | Returns |
|---|---|---|
/inspect | POST | Full report |
/overlaps | POST | Collisions |
/overflow | POST | Clipped / collapsed / off-screen |
/contrast | POST | WCAG ratios |
/quality | POST | Health score |
/fidelity | GET | Engine capabilities |
/health | GET | Liveness |
Every surface accepts a URL where the HTML would go. Cornea fetches the page, inlines its external stylesheets and external scripts (relative URLs resolved against the page), then inspects what a browser would actually show. That is the live coding session loop: run your dev server, point cornea at it, read the layout verdict.
cornea http://localhost:3000 390
{ "url": "http://localhost:3000", "width": 390, "height": 844 } // HTTP /inspect
{ "method": "tools/call", "params": { "name": "layout.quality",
"arguments": { "url": "http://localhost:3000", "width": 390 } } } // MCP
Honesty around capture:
height emulates a fixed viewport (screenshot frame, iframe, email) and enables below the fold clipping checks. Default 0 means an unbounded scrolling page. ┌─────────────────────────────────────┐
HTML + CSS ──► │ cornea (one binary) │ │ │ │ dom.rs html5ever ──► tree │ │ css.rs + inline │ │ │ │ layout.rs deterministic layout │ │ (block/inline/flex, │ │ box model, z-index) │ │ │ │ │ model.rs Visual Geometry Model │ │ │ │ │ inspect.rs overlap / overflow / │ │ contrast / quality │ │ │ │ │ rest.rs canonical dispatch │ └───────┬─────────────┬───────────────┘ │ │ ┌─────┴────┐ ┌────┴───────────────┐ │ CLI │ │ MCP (stdio) / HTTP│ │ cornea │ │ layout.* / REST │ └──────────┘ └────────────────────┘
Read the full technical spec: CORNEA-ARCHITECTURE.md
Cornea never silently fakes precision. layout.fidelity tells an agent exactly what it can trust, and every report carries its own warnings for sources the engine saw but did not apply (external stylesheets, external scripts, media queries, unresolved colors):
{
"exact": ["box model", "block flow", "inline text estimates", "flex row/column (no wrap)", "z-index", "visibility", "absolute/fixed left/top", "inline styles", "class/id/tag selectors", "WCAG contrast (hex, rgb, hsl, alpha)"], "approximate": ["text glyph width (not shaping)", "flex-grow/flex-basis distribution", "percentage widths", "overlap semantics ignore intentional stacking"], "deferred": ["grid (parsed as block flow)", "media queries", "border-radius", "external stylesheet when not captured", "complex selectors (combinators, pseudo)"], "js": { "engine": "boa", "phase": "A", "enabled": "opt-in via --js / js:true", "dom_shim": "static HTML mirrored in first; getElementById; innerHTML parses markup", "unsupported": ["async APIs", "event dispatch", "selector engine", "React/SPA mounting (Phase B)"] } }
Cornea can execute inline ` ` that builds its DOM via a minimal shim, then run the result through the same deterministic layout engine:
cornea page.html 360 --js # inline scripts build the DOM first
{ "html": "<p>…</p>", "width": 360, "js": true } // HTTP /inspect and MCP layout.*
document.getElementById, and innerHTML parses real markup into elements. Static content survives script runs.style.* assignments are serialized back to style="…" and participate in overlap/contrast checks.setTimeout, fetch, …) rather than hung. Any such use is surfaced in the report's js_notes, so determinism stays a guarantee. runs only when a capture layer (URL capture) inlined its body first.ROADMAP-JS.md.54 tests run clean with cargo test; CI enforces fmt, clippy `-D warnings`, release build, tests, and a CLI smoke test on every push.
$ cargo test
Running unittests src/lib.rs ... 36 passed // determinism, overlap, overflow, Running unittests src/main.rs ... 9 passed // contrast, inline flow, flex, Running tests/endpoints.rs ... 9 passed // nesting, empty input, MCP, CLI, JS, capture
layout.* is called over real stdio MCP.display:none, long text, flex row/col, inline wrapping.| Feature | Status |
|---|---|
| Block flow, box model (content/border-box) | exact |
| Inline text runs (horizontal, wrapping) | exact |
| Flex row / column (simplified, no wrap) | approximate |
| Absolute / fixed positioning (left/top) | exact |
z-index, visibility, display:none | exact |
.class / #id / tag selectors + inline styles | exact |
| WCAG contrast (hex, rgb, hsl, al
冒頭だけを表示しています。続きはリポジトリで読めます