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.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ผู้ทำยังไม่ได้ใส่วิธีติดตั้งใน registry ให้ดู README ของผู้ทำด้านล่าง
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub AbduljabbarBXR ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.2.2) เข้า registry 2 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Rust ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Tethered Trust
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:↓ ดาวน์โหลดต่อสัปดาห์i★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
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.
Fit, compatibility and recall checks for AI agents before they buy: verdicts, evidence, receipts.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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
ตัดมาแค่ช่วงต้น อ่านต่อใน repo