Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Polyglot MCP test generation with 8-section contract enforcement across Python, TS, Java, Go, C++.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"universal-test-framework": {
"command": "uvx",
"args": [
"universal-test-framework",
"--transport",
"stdio"
]
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add universal-test-framework -- uvx universal-test-framework --transport stdioวางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"universal-test-framework": {
"command": "uvx",
"args": [
"universal-test-framework",
"--transport",
"stdio"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"universal-test-framework": {
"type": "stdio",
"command": "uvx",
"args": [
"universal-test-framework",
"--transport",
"stdio"
]
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
ค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 6 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub phoenice-labs ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
registry ไม่ได้ระบุว่าต้องใช้กุญแจ แต่บางตัวจะขอให้ล็อกอินตอนใช้ครั้งแรก
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.0.2) เข้า registry 7 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Python (uv) ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, Fomu MCP
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.
Kenya government form guides: checklists, draft letters, eCitizen, Huduma, timelines. Sample data.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
Contract-driven test enforcement and reporting for LLM-generated code — via MCP, VS Code, Copilot CLI, Claude, Cursor, or Python SDK.
UTF is an MCP server and contract enforcement engine. It does not replace your AI coding assistant — it gives every test your AI writes a mandatory quality gate, a structured audit trail, and a comprehensive compliance report.
AI tools — GitHub Copilot, Claude, Cursor, Gemini — generate tests fast. The problem: fast ≠ trustworthy.
| Without UTF | With UTF |
|---|---|
| Tests exist but nobody knows *why* | Every test is linked to a requirement |
| "Covers everything" — nobody can prove it | Traceability matrix maps REQ → test |
| CI passes; real behavior untested | Gap analysis flags what is NOT covered |
LLM wrote a test that asserts True | Meaningfulness check rejects trivial assertions |
| No history of what was tested | Persistent registry survives session restarts |
| Report shows pass/fail counts only | 8-section per-test detail cards in HTML report |
You may already use markdown files (AGENTS.md, copilot-instructions.md, .cursorrules) to guide your AI. UTF is complementary — not competing:
| Markdown instructions | UTF |
|---|---|
| Describe *how* to write tests | Enforce a contract on *every* test produced |
| Rely on LLM to follow instructions | Block tests that fail the contract at generation time |
| No verification after generation | Score each test 0–1 against 8 measurable criteria |
| No persistent state between sessions | SQLite registry persists all tests and results |
| No compliance report | HTML report with per-test 8-section detail cards |
Use markdown instructions to *shape* how your AI thinks. Use UTF to *verify* and *report on* what it produced.
TC-{PRJ}-{MODULE}-{NNN} and classic TC-{MODULE}-{NNN} both accepteduvx (zero-clone), local clone, Docker, GitHub MCP Registry, pip SDK.utf/rules/ override global defaults| # | Method | How Started | Registry Location | @utf Slash Cmds | Best For |
|---|---|---|---|---|---|
| 1 | uvx (zero-install) | mcp.json + uvx | /.utf/utf.db | ❌ use natural language | Any developer with uv |
| 2 | Local Clone | install-vscode-mcp.ps1 | /.utf/utf.db | ✅ with extension | Contributing / customizing UTF |
| 3 | Docker / HTTP | docker compose up | Named volume or bind mount | ❌ use natural language | Team / remote / CI |
| 4 | GitHub MCP Registry | Auto via client | /.utf/utf.db | ❌ use natural language | Discoverable via MCP marketplace |
| 5 | pip + SDK | Python import | Caller controls cwd | N/A | CI scripts / programmatic |
All methods (1, 2, 4) using stdio transport write the registry to `${workspaceFolder}/.utf/utf.db` — isolated per project and persistent across sessions.
Requires uv. No cloning, no venv.
Add to %APPDATA%\Code\User\mcp.json (Windows) or ~/.config/Code/User/mcp.json (macOS/Linux):
{
"servers": { "utf": { "type": "stdio", "command": "uvx", "args": ["--from", "universal-test-framework", "utf-server", "--transport", "stdio"], "cwd": "${workspaceFolder}", "env": { "UTF_PROJECT_DIR": "${workspaceFolder}" } } } }
Registry:
.utf/utf.dbinside${workspaceFolder}— isolated per project, persistent across sessions.
Reload VS Code after editing
mcp.json.
git clone https://github.com/phoenice-labs/Universal-Test-Framework
cd Universal-Test-Framework
.\scripts\install-vscode-mcp.ps1
.\scripts\install-vscode-mcp.ps1 -InitProject -ProjectDir C:\my-project
Reload VS Code → open Copilot Chat → ask naturally: generate e2e tests for my backend.
The install script writes this entry to mcp.json:
{
"utf": { "type": "stdio", "command": " ", "args": ["-m", "mcp_server.server", "--transport", "stdio"], "cwd": "${workspaceFolder}", "env": { "PYTHONPATH": " " } } }
Registry:
${workspaceFolder}/.utf/utf.db— isolated per project.
`@utf` slash commands are available after the VSIX extension is installed.
# Start the UTF server
cd Universal-Test-Framework docker compose -f docker/docker-compose.yml up -d
Connect from VS Code by adding to mcp.json:
{
"servers": { "utf-remote": { "type": "sse", "url": "http://localhost:8765/sse" } } }
Registry: persisted in a named Docker volume (
utf_registry → /app/.utf/utf.db).
For per-project isolation with Docker, use a bind-mount in
docker-compose.yml:
`yaml
volumes:
- /path/to/your/project/.utf:/app/.utf
`
Because Docker uses HTTP/SSE transport (no
${workspaceFolder}templating), passproject_dir
explicitly in tool calls, or set
UTF_PROJECT_DIRin the container environment.
Per-project Docker workflow:
# docker-compose.override.yml
services: utf-server: volumes:
Once published, UTF is discoverable via the MCP marketplace. Clients that support server.json install it automatically. The generated mcp.json entry is equivalent to Method 1 (uvx).
Registry isolation: The MCP registry schema does not support a
cwdfield at the registry level.
UTF resolves project isolation via (in priority order):
1.
project_dirargument passed to each tool call
2.
UTF_PROJECT_DIRenvironment variable
3.
Path.cwd()fallback (server's working directory)
For correct isolation, ensure the MCP client writes
"cwd": "${workspaceFolder}"and
"UTF_PROJECT_DIR": "${workspaceFolder}"in the generated entry (UTF'smcp-gallery.jsondoes this).
pip install universal-test-framework
from mcp_server.tools.generate_tests import generate_tests
from pathlib import Path
result = generate_tests( test_type="unit", source_code=open("src/auth.py").read(), project_dir=str(Path.cwd()), # ← pass explicitly for correct registry isolation ) print(result["suite_code"])
Registry:
/.utf/utf.dbwhenproject_diris passed; falls back toPath.cwd().
| Tool | Description |
|---|---|
generate_tests | Generate a complete test suite satisfying the 8-section contract |
validate_test_contract | Validate any test (generated or hand-written) against the contract |
analyze_coverage | Identify coverage gaps in an existing test suite |
build_traceability_matrix | Build a requirements → tests traceability matrix |
suggest_test_types | Recommend test types with rationale from source code |
detect_language_framework | Auto-detect programming language and test framework |
import_test_results | Import JUnit XML from any test run into the UTF registry |
query_registry | Query the persistent per-project test registry |
run_tests | Execute test files and return structured CI results |
run_mutation_tests | Run mutation testing and return mutation score |
feedback_status | Get gap analysis, coverage health, and trend report |
generate_report | Generate HTML / JUnit / JSON contract compliance report |
health | Server health check: version, uptime, tool count |
Every test generated by UTF must satisfy all 8 sections. Tests that fail any hard section are blocked — returned in blocked_tests, never silently included.
| # | Section | What It Must Contain | Weight |
|---|---|---|---|
| 1 | test_id | Unique ID: TC-{TYPE}-{NNN} (e.g. TC-US-042) | 10% |
| 2 | why_generated | Rationale tied to a requirement (≥50 chars) | 10% |
| 3 | requirement_mapping | At least one US-, AC-, REQ-, JIRA-, BUG-, or NFR- reference | 15% |
| 4 | how_it_exercises | GIVEN / WHEN / THEN with inputs, mocks, assertions (≥100 chars) | 20% |
| 5 | coverage_contribution | Coverage type + module + estimated % | 15% |
| 6 | expected_outcome | Precise return values, status codes, state changes (≥50 chars) | 15% |
| 7 | gaps_missing | Honest list of what this test does NOT cover (≥40 chars) | 10% |
| 8 | meaningfulness_check | Self-assessment: meaningful / redundant / hallucinated (≥50 chars) | 5% |
Minimum passing score: 0.85. Tests below this threshold are blocked regardless of individual section presence. "none" in gaps or vague rationale like "to test the function" are rejected.
| Language | Frameworks | Test Types |
|---|---|---|
| Python | pytest | unit, integration, api, e2e, security, performance |
| TypeScript | Jest, Vitest, Playwright | unit, integration, e2e, api |
| JavaScript | Jest, Vitest | unit, integration |
| Java | JUnit 5 + AssertJ, Maven | unit, integration, api |
| Go | go-test + testify | unit, integration, api |
| C++ | Google Test | unit |
This is the canonical flow for using UTF with any AI CLI (Copilot, Claude, Cursor) or VS Code. Follow the phases in order — skipping Phase 1 registration means the report has no Per-Test Contract Detail cards.
┌─────────────────────────────────────────────────────────────────────────┐
│ PHASE 1 — CONTRACT GENERATION (LLM writes, UTF validates + registers) │ │ │ │ ① generate_tests (scaffold) │ │ ② LLM writes real test methods — each with its own TC-ID and │ │ 8-section comment block (WHY / REQ / HOW / COV / OUT / GAP / MEAN)│ │ ③ validate_test_contract — score must be ≥ 0.85 per test │ │ ④ register_contracts — parse test file, upsert status=generated rows │ │ ⑤ generate_report — verify Per-Test Contract Detail cards appear │ │ │ │ PHASE 2 — EXECUTION (pytest/jest/maven runs, results captured) │ │ │ │ ⑥ pytest --junit-xml=utf-tests/reports/results.xml │ │ ⑦ import_test_results — upsert executed/failed rows
ตัดมาแค่ช่วงต้น อ่านต่อใน repo