Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
AI-powered app test automation for iOS, Android, Flutter, React Native, Web
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"test-genie": {
"command": "npx",
"args": [
"-y",
"test-genie-mcp"
]
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add test-genie -- npx -y test-genie-mcp프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"test-genie": {
"command": "npx",
"args": [
"-y",
"test-genie-mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"test-genie": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"test-genie-mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 GitHub 계정 MUSE-CODE-SPACE 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(2.0.3)은 10개월 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, FOGA node
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도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.
A Finch OG Agent cell as an MCP server: read the world, dry-run and take ERC-8414 tenders by policy.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
Built for vibe coders: one command, get a prioritized list of what's actually broken about your project.
Self-healing test automation for iOS, Android, Flutter, React Native and Web apps — as an MCP server.
v3.1.1 — vibe-check + honest auto-fix. One MCP call, ~30 seconds: race conditions + security issues + memory leaks + logic errors + perf smells, prioritized. Stays on your machine, no telemetry. Pass
autoFix: truefor the small, safe mechanical fixes (weak-hash, simpleMath.randomassignment) — backup + syntax-validate + rollback-on-syntax-fail. For test-verified application of harder fixes, use v3.0.0's iterate-fix loop.
You don't read the docs. You open the project, talk to Claude, and want a verdict. Here it is:
In Claude (with test-genie-mcp installed — setup):
/vibe-check /Users/me/my-app
Claude calls diagnose_project under the hood. ~30 seconds later you see:
# vibe-check report
server.js:7server.js:21db.query("... WHERE id = ?", [id])).UserProfile.tsx:16… (top 5 shown — full list at output: "detailed")
If any finding is autoFixable: true and is at high/critical severity, the diagnose_project call accepts autoFix: true to apply the mechanical replacement directly (with backup + syntax validation — see SAFETY.md for the exact guards). The v3.1.1 honest scope is narrow: weak hash (createHash('md5'|'sha1') → createHash('sha256')) and standalone Math.random() in security-sensitive files. For broader/structural fixes (race conditions, eval, exec injection) run run_iterative_fix_loop separately — it re-runs tests and auto-rolls-back on regression.
The bottleneck in mobile + cross-platform test automation isn't writing tests — it's the loop *between* a failing test and a passing test. test-genie closes that loop:
failing test → analyzer flags issue → fix proposed → dry-run + syntax check →
applied with backup → affected tests re-run → regression check → loop or stop
This full loop is the run_iterative_fix_loop tool. The diagnose_project autoFix: true path in v3.1.1 covers a strict subset — backup + dry-run + syntax-validate + apply, without re-running tests (so no test-regression rollback in that path). Use the right tool for the job — and see SAFETY.md for the exact guards on each.
Other tools (Detox, Maestro, Playwright, xcodebuild test) run tests. test-genie **runs tests *and* drives the fix until the bar is met or it can no longer make progress** — without you scrubbing through stack traces.
# 1. Install
npm install -g test-genie-mcp
{ "mcpServers": { "test-genie": { "command": "npx", "args": ["test-genie-mcp"], "env": { "TEST_GENIE_ALLOWED_ROOT": "/path/to/your/project" } } } }
Expected output (truncated):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Iterative fix loop f8b3… — PAUSED-FOR-CONFIRMATION ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Iterations completed: 1 Fixes applied: 0 Regressions rolled back: 0 Final tests: 7/10 passing (3 failing)
Pending confirmations (3):
Resume token: f8b3…
Re-call with autoApply: true (or resumeToken: "f8b3…") to actually patch the files.
The flows below describe the `run_iterative_fix_loop` path (v3.0
headline) — full detect → propose → dry-run → apply-with-backup →
re-run-tests → rollback-on-regression. The
diagnose_project autoFix
path in v3.1.1 is the narrower mechanical-replacement-only path; see
SAFETY.md §4 for what that one actually touches.
A team adds setInterval(...) in a useEffect and forgets cleanup. test-genie's detect_memory_leaks flags it, suggest_fixes proposes return () => clearInterval(id) (src/tools/fixing/suggestFixes.ts:169-179), the loop dry-runs the patch through the TS compiler, applies with backup, re-runs only the affected snapshot test, confirms 100% pass, stops. Before: 1 failing snapshot. After: 0 failing, 1 fix applied, 1 backup at .test-genie-backups/.
dispose() automationAnimationController left undisposed. test-genie sees the missing dispose() override, generates a Dart @override dispose() { controller.dispose(); super.dispose(); } block (suggestFixes.ts:214-217), runs dart analyze on the patched file, applies, re-runs flutter test, converges.
self.timer = Timer.scheduledTimer(...) { _ in self.tick() } — rule-based detector flags closure self-capture, fixer rewrites to [weak self] _ in guard let self = self else { return }; self.tick() (suggestFixes.ts:239-242). If swiftc is on PATH the syntax check is real; otherwise test-genie reports "downgraded validation" so you know.
┌────────────────────┐
│ collect tests │ (run_scenario_test / supplied list) └─────────┬──────────┘ │ pass-rate ≥ threshold? ── yes ──▶ SUCCESS │ no ▼ ┌────────────────────┐ │ detect issues │ memory + logic analyzers └─────────┬──────────┘ │ ┌────────────────────┐ │ suggest fixes │ rule-based (default) → LLM (hybrid, optional) └─────────┬──────────┘ │ ┌────────────────────┐ │ dry-run + syntax │ TS compiler API / platform compiler / brace check └─────────┬──────────┘ │ ┌────────────────────┐ │ apply with backup │ per-file .test-genie-backups/ └─────────┬──────────┘ │ ┌────────────────────┐ │ re-run tests │ regression? yes → auto-rollback └─────────┬──────────┘ │ ▼ loop (≤ maxIterations, ≤ totalTimeout)
See [docs/ITERATE_FIX_LOOP.md](docs/ITERATE_FIX_LOOP.md) for a sequence diagram and the full safety-guard list.
| # | Tool | Mode |
|---|---|---|
| 1 | analyze_app_structure | real |
| 2 | generate_scenarios | real |
| 3 | create_test_plan | real |
| 4 | run_scenario_test | hybrid |
| 5 | run_simulation | simulated |
| 6 | run_stress_test | hybrid |
| 7 | detect_memory_leaks | real |
| 8 | detect_logic_errors | real |
| 9 | suggest_fixes | real |
| 10 | confirm_fix | real |
| 11 | apply_fix | real |
| 12 | rollback_fix | real |
| 13 | run_full_automation | hybrid |
| 14 | run_iterative_fix_loop (v3.0 headline) | hybrid |
| 15 | generate_report | real |
| 16 | get_pending_fixes | real |
| 17 | get_test_history | real |
| 18 | analyze_performance | real |
| 19 | analyze_code_deep | real |
| 20 | generate_cicd_config | real |
| 21 | `diagnose_project` (v3.1 headline — vibe-check) | real |
| 22 | detect_race_conditions | real |
| 23 | detect_security_issues | real |
mode legend in [docs/SIMULATION_VS_REAL.md](docs/SIMULATION_VS_REAL.md).
Plus 4 resources (test-genie://iteration-logs, …/test-history/{path}, …/iteration-logs/{loopId}, …/applied-fixes/{path}) and 3 prompts (full-test-pipeline, diagnose-failure, vibe-check).
Race conditions (detect_race_conditions / diagnose_project):
| Pattern | Language | Severity | Auto-fixable (v3.1.1) |
|---|---|---|---|
useState setter called after await without mount guard | TS/JS/React | high | no (structural) |
useEffect with async fetch, no AbortController/cleanup | TS/JS/React | high | no (structural) |
arr.forEach(async ...) (silent fire-and-forget) | TS/JS | medium | no (ordering-sensitive) |
Adjacent fetches without Promise.all / sequencing | TS/JS | medium | no |
TOCTOU: existsSync then readFileSync without lock | TS/JS Node | medium | no |
| Non-atomic counter increment in async context | TS/JS | low | no |
@Published mutation outside @MainActor | Swift | medium | no |
Concurrent DispatchQueue writes without .barrier | Swift | medium | no |
MutableStateFlow mutated off Dispatchers.Main | Kotlin | medium | no |
Flow collected without flowOn | Kotlin | low | no |
Goroutine + shared map without sync.Mutex | Go | high | no |
v3.1.1 honesty audit:
useEffect-no-abortandforEach-awaitwere
previously advertised as auto-fixable. They are not — wrapping with
AbortControlleror rewriting toPromise.all(arr.map(...))changes
behavior we can't verify statically. They are now report-only. See
SAFETY.md.
Security (detect_security_issues / diagnose_project):
| Pattern | Severity | CWE | Auto-fixable (v3.1.1) | |
|---|---|---|---|---|
| Hardcoded AWS / Stripe / GitHub / Google / Slack token | critical / high | CWE-798 | no (rotate) | |
| Hardcoded JWT secret literal | high | CWE-798 | no | |
| API token in URL query string | high | CWE-200 | no | |
.env file present but not gitignored | high | CWE-538 | no (rotation must follow) | |
SQL string concat with req.params / req.body | critical | CWE-89 | no | |
innerHTML / dangerouslySetInnerHTML with dynamic value | high | CWE-79 | no | |
eval() / new Function() with non-literal | critical | CWE-95 | no | |
Math.random() in security-sensitive file, standalone assignment | high | CWE-338 | yes (crypto.randomInt) | |
Math.random() mixed into arithmetic | high | CWE-338 | no (semantic) | |
| `createHash('md5'\ | 'sha1')` in security-keyword file | high | CWE-327 | yes ('sha256') |
| `createHash('md5'\ | 'sha1')` elsewhere | medium | CWE-327 | no (below severity floor) |
child_process.exec with user-input template literal | critical | CWE-78 | no | |
fetch(req.query.url) (SSRF) | high | CWE-918 | no | |
CORS * origin + Allow-Credentials: true | high | CWE-942 | no | |
Cookie set without httpOnly / secure / sameSite | low | CWE-1004 | no | |
yaml.load without safe schema | medium | CWE-502 | no |
v3.1.1 honesty audit:
.env/Math.random(general)/yaml.loadwere
previously advertised as auto-fixable. They were either too risky to
rewrite blindly or no strategy shipped — flipp
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요