
Test Genie
io.github.MUSE-CODE-SPACE由 GitHub 账号 MUSE-CODE-SPACE 发布v2.0.3更新于 Oct 24, 2026
AI-powered app test automation for iOS, Android, Flutter, React Native, Web
概览
一个 MCP 服务器,用于扫描 iOS、Android、Flutter、React Native 和 Web 项目中的缺陷、安全问题与竞态条件,并提出和应用修复。
- 可以做什么
- Test Genie 提供 23 个用于应用测试自动化和代码分析的工具。其主打工具 diagnose_project 会快速扫描并返回按优先级排序的问题列表,例如硬编码密钥、SQL 注入、竞态条件、内存泄漏和性能问题。其他工具可检测内存泄漏、逻辑错误、竞态条件和安全问题,提出并应用带备份的修复、回滚更改、运行场景与压力测试,以及生成报告和 CI/CD 配置。run_iterative_fix_loop 工具将检测、试运行、打补丁、重跑测试和回归回滚串联起来。
- 适用场景
- 适合在提交前快速检查移动端或跨平台应用存在哪些问题,也适合让助手提出并应用小型机械式修复,并通过重跑测试加以验证。它面向开发反馈循环,不适用于生产发布门禁或合规级安全审计。
- 运行要求
- 以 npm 包(test-genie-mcp)通过 stdio 在本地运行,仅限桌面端,需要 Node.js。可选环境变量包括用于限制文件访问的 TEST_GENIE_ALLOWED_ROOT、用于存放历史记录的 TEST_GENIE_STORAGE_DIR,以及用于可选 LLM 修复策略的 ANTHROPIC_API_KEY 或 OPENAI_API_KEY。安装 swiftc、kotlinc、javac 或 dart 等平台编译器可提升语法校验效果。
安装
在 SourceWeft 中
- 打开 控制台中的 Test Genie,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
test-genie-mcp
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.
[npm version] [CI] [License: MIT] [MCP]
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.
Vibe coders quickstart
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):
Claude calls diagnose_project under the hood. ~30 seconds later you see:
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.
Why test-genie?
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:
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.
5-minute Quickstart
Expected output (truncated):
Re-call with autoApply: true (or resumeToken: "f8b3…") to actually patch the files.
Real use cases
The flows below describe the
run_iterative_fix_looppath (v3.0 headline) — full detect → propose → dry-run → apply-with-backup → re-run-tests → rollback-on-regression. Thediagnose_project autoFixpath in v3.1.1 is the narrower mechanical-replacement-only path; see SAFETY.md §4 for what that one actually touches.
1. React Native memory-leak self-healing
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/.
2. Flutter widget dispose() automation
AnimationController 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.
3. iOS retain-cycle (closure capture)
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.
How the iterate-fix loop works
See docs/ITERATE_FIX_LOOP.md for a sequence diagram and the full safety-guard list.
Tools (23)
mode legend in 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).
What vibe-check catches
Race conditions (detect_race_conditions / diagnose_project):
v3.1.1 honesty audit:
useEffect-no-abortandforEach-awaitwere previously advertised as auto-fixable. They are not — wrapping withAbortControlleror 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):
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 — flipped to report-only. See SAFETY.md §5.
What vibe-check misses (honest list)
This is a "catch the obvious stuff in 30s" filter, not Snyk / Semgrep / a full SAST tool. We don't catch:
- Cross-file data-flow. If user input flows through three files before reaching a
db.query, the regex won't connect the dots. A real SAST traces taint across the call graph. Roadmap: ts-morph reference walking for top-N entry points. - Vulnerable transitive deps. We don't query npm advisories — that's
npm audit's job, and bundling a stale advisory list would lie. Runnpm audit --jsonin parallel if you want dep-CVE coverage. - Race conditions across processes. We catch in-process JS / Swift / Kotlin / Go races. Distributed races (lock ordering across services, DB transactions) need different tooling.
- Type-correct but logic-broken code. The analyzer is syntactic, not semantic. A
Math.random()namedgetNoncewon't fool us; a properly-namedcrypto.randomBytesused with a tiny entropy budget will. - Custom secret formats. Internal company tokens with unique prefixes need a regex you can add to
securityAnalyzer.SECRET_PATTERNS. PR welcome. - Real-time / dynamic issues. Memory leaks under load, network timeouts, slow renders mid-interaction — those need
run_stress_test/run_simulation, not static analysis.
If you want deeper coverage on top of vibe-check: feed the findings into run_iterative_fix_loop for test-verified application, or escalate to Snyk / Semgrep / GitHub Advanced Security for compliance use cases.
vibe-check vs alternatives
If your goal is "before I commit, what's broken?", vibe-check wins on latency. If your goal is "compliance + supply chain audit", use the dedicated tools.
When NOT to use test-genie
- Production-gate test runs. test-genie is built for the development feedback loop. For shipping decisions, use a proper CI that you control end-to-end.
- Code your team must hand-review every line of. The loop's job is to propose and apply fixes; if every fix needs a human eye, leave
autoApply: false(the default) and use it as a fix-proposal generator only. - No backup / no version control situations. test-genie's auto-rollback is best-effort and requires the per-file backup to exist. Always run inside a git working tree.
Comparison
Scope note:
diagnose_project autoFix: truerolls back on syntax-validate failure (applyFix.ts:185-202) but does not re-run tests, so it cannot detect test regressions. For test-driven rollback userun_iterative_fix_loop. See SAFETY.md §2.4.
test-genie uses tools like Jest, Detox, and xcodebuild test under the hood — it sits at the orchestration layer, not the test-runner layer.
Known limitations
- Platform syntax check downgrade. For Swift/Kotlin/Java/Dart we try the platform compiler in
-typecheckmode. If the compiler isn't on PATH, we fall back to brace-balance validation and surfacedowngraded: truein the result. Installswiftc/kotlinc/javac/dartfor real validation. - LLM is optional and gated.
strategy: 'hybrid'only kicks LLM in when rule-based confidence is below threshold. Without an API key the loop is rule-based-only — no failure. - Storage is per-machine. Test history / iteration logs live under
$TEST_GENIE_STORAGE_DIR(defaults to~/.test-genie-mcp). Not synced across machines. - Simulated mode is "simulation," not magic.
run_simulationreturns plausible anomalies, not real ones. Userun_scenario_test(hybrid) for real-device runs.
Configuration
Migrating from v2.x
run_full_automationstill works. TheconfirmMode/autoFixoptions are kept for compatibility butautoApply: booleanis the new way —autoApply: trueis equivalent toconfirmMode: 'auto'.- Subprocess hardening means platform tools now reject scheme / device / package-name arguments that contain shell metacharacters. If your CI was passing weird-looking values, sanitize them first.
- See CHANGELOG.md for the full breaking-change list + migration recipes.
Roadmap
- LLM-based fix-proposal voting (multiple proposals → pick the best by syntax + retest delta)
- Multi-repo sync (run the loop across N repos in parallel from one MCP call)
- A "watch mode" that runs the loop on file save
- Better Detox / Maestro artifact ingestion (link videos into iteration logs)
Contributing
Issues, PRs, and ideas welcome — see CONTRIBUTING.md (TODO). Code lives under src/, tests under tests/. Run npm test before sending a PR.
Maintainer
@MUSE-CODE-SPACE — Yoonkyoung Gong.
License
MIT — see LICENSE.
来源:README.md,提交 6f17d84
工具
0版本历史
1- v2.0.3最新Sep 16, 2026
评分
已满足适用检查项的 50%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分