Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Scored, maintainable locators from a live page for AI coding agents, with checks and repairs.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"corlabs": {
"command": "npx",
"args": [
"-y",
"@corlabsdev/mcp"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add corlabs -- npx -y @corlabsdev/mcpวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"corlabs": {
"command": "npx",
"args": [
"-y",
"@corlabsdev/mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"corlabs": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@corlabsdev/mcp"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ผู้ลงทะเบียน (corlabs.dev) ไม่ใช่เจ้าของ repo (kushshah12) อาจเป็นคนอื่นที่นำมาลงต่อ
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 0 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.1.7) เข้า registry 10 วันที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, zanadir
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว 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.
Find what a repository's CI is missing, and which security checks cannot fail the build.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
An MCP server that lets a coding agent open a page, pick an element, and get ranked, graded locators for it in the test framework you use.
More at corlabs.dev.
Requires Node 18+ and Google Chrome (Microsoft Edge, or Playwright's Chromium, also work). Nothing is installed globally: your agent runs the server with npx.
Add COR to your client. Every client runs the same command, npx -y @corlabsdev/mcp.
Claude Code
claude mcp add cor -- npx -y @corlabsdev/mcp
To share it with your team, put it in .mcp.json at the project root instead:
{ "mcpServers": { "cor": { "command": "npx", "args": ["-y", "@corlabsdev/mcp"] } } }
GitHub Copilot (VS Code) — create .vscode/mcp.json (or run MCP: Add Server from the Command Palette):
{ "servers": { "cor": { "type": "stdio", "command": "npx", "args": ["-y", "@corlabsdev/mcp"] } } }
Then open Copilot Chat, switch to Agent mode, and enable cor in the tools list.
Codex (CLI and IDE extension)
codex mcp add cor -- npx -y @corlabsdev/mcp
or add this to ~/.codex/config.toml:
[mcp_servers.cor]
command = "npx" args = ["-y", "@corlabsdev/mcp"]
Cursor — .cursor/mcp.json, and Claude Desktop — claude_desktop_config.json:
{ "mcpServers": { "cor": { "command": "npx", "args": ["-y", "@corlabsdev/mcp"] } } }
Any other MCP client: register a stdio server whose command is npx with arguments -y @corlabsdev/mcp.
Restart the client (or reload the window), then ask your agent to open your page: *"Use COR to open https://example.com/login and write the locators for the sign-in form."*
If no browser is found the server says so; install Chrome, or run npx playwright-core install chromium.
Options (append to args, or after -- in claude mcp add):
| Flag | Effect |
|---|---|
--headless | Run the browser without a window (default: visible) |
--idle-minutes | Close the browser after n idle minutes |
--no-records | Write no entry records into your project (see below) |
| Tool | Does |
|---|---|
cor_open | Open a page; lists its controls with refs |
cor_snapshot | Text, controls and entries within one region of a large page |
cor_inspect | Ranked, graded locators for the elements you name, as entries to place in your code |
cor_click, cor_fill, cor_press | Act on the page and report what changed |
cor_check | Fail any locator in your files that did not come from COR |
cor_grade | Score a locator you wrote yourself |
cor_heal | Propose a repair for a locator that stopped matching |
cor_close | Close the browser |
cor_open the page, then cor_inspect every element the test touches, in one call.// COR cor:… comment included, in the file it names.cor_check before the tests. When a test breaks on a locator, cor_grade it and cor_heal if it is broken.npx -y @corlabsdev/mcp runs the latest version each time it starts. To pin one, use npx -y @corlabsdev/mcp@0.1.0.
Configure COR MCP instead of Playwright MCP for test authoring, not alongside it: COR drives the browser (open, click, fill, press), returns locators as entries for your locator files, checks them (cor_check) and repairs them (cor_heal). With a second browser server attached, an agent falls back to its snapshots and types its own selectors — which cor_check will then fail.
Settings are optional. COR infers your test framework and conventions from the repo; to override them, add a cor.config.js at the project root. framework names the test framework and the rest go under locators. Every field is optional; cor_open reports what was inferred and what was overridden:
module.exports = {
framework: 'playwright', // 'playwright' | 'cypress' | 'webdriverio' locators: { order: 'framework', // 'framework' (default: each framework's published guidance, after uniqueness) or 'testid-first' testIdAttribute: 'data-test', // what getByTestId reads (default: playwright.config's testIdAttribute, else data-testid) store: 'page-object-class', // 'page-object-class' | 'constants' | 'json' | 'yaml' storeDir: 'tests/pages', }, }
Every cor_inspect that recommends a locator also gives it an entry: the code to place in your locator file, the file and member it belongs in, and a comment carrying a short id, // COR cor:7f3a2c · … (in a YAML map, # COR cor:…). Keep that comment: cor_check uses the id to tell COR's locators from typed ones, and a later repair uses it to find what the locator pointed at. COR never edits your files — the agent places the entry.
Where: .cor/records/ .json in your project root (where your test framework's package.json is), one small file per element. Inspecting the same element again reuses its id and refreshes its file. For a JSON locator map, which cannot hold comments, COR also keeps .cor/ids.json ("file#key": "id") — it never adds keys to your map.
Commit them. They are how a repair works on a teammate's machine or in a CI checkout: the id travels in your code and the record travels with the repo. Add .cor/records/ to .gitignore if you would rather keep them on one machine.
What each record holds: the page (origin and path, masked), the element's position as a tag path, the entry's member name, the element's fingerprint — its tag; aria-label, aria-labelledby, name, placeholder, type, role, title, alt, href, for if present; up to 80 characters of its own text; its first five class names — and up to 12 locators ranked for it, stored as data ({ "kind": "testId", "value": "[data-test=\"…\"]" }), not as code to paste. COR never shows a record's contents to the agent.
What is never stored: what anyone typed into a field (input values), cookies, local storage, or anything from a storage-state file you pass to cor_open.
Masking. On an authenticated page the fields above can contain account data, so before anything is written:
| Found in text, attributes, classes or locators | Stored as |
|---|---|
| an email address | [email] |
| a run of 6 or more digits (order numbers, phone and card numbers; spaces and dashes allowed) | [number] |
| a long string of 24+ mixed letters and digits (tokens, session ids) | [token] |
the query string or fragment of an href | removed |
Short numbers and ordinary words are kept, because a heal needs them ("Step 2", "Qty 12", "Pay now"). Values are masked, not hashed. A heal compares stored values with the live page as plain text, so a hashed value could never match again.
Turning it off: start the server with --no-records or set COR_RECORDS=off (the old --no-fingerprints / COR_FINGERPRINTS=off still work): no record is written; entries still carry an id, and cor_check then checks ids for presence only. The ~/.cor/fingerprints/ store of earlier versions is no longer written or read; deleting it is safe.
The server sends anonymous usage metrics to help us see how COR is installed and used. Two events:
mcp_installed, once per install, on the first start: package version, Node version, OS platform.mcp_tool_called, once per tool call: tool name, duration in milliseconds, outcome (ok, tool_error, exception, or timeout), package version.Each install has a random anonymous ID, stored in ~/.cor/install-id. The first start prints one line on stderr saying so.
Never sent: page URLs or origins, element text, locators, file paths, input values, cookies, storage, record contents, error messages, or any email address. Every field is listed in the code (src/telemetry.js), and nothing else is added.
Turning it off: set COR_TELEMETRY=off (or COR_OFFLINE=true, which stops all outbound data). Nothing is sent and no ID file is written.