mcpField
T
test-genie

test-genie

ローカル
github.com/MUSE-CODE-SPACE開発ツール01 週間前に更新

test-genie について

test-genie は、iOS、Android、Flutter、React Native、Web プロジェクトのテスト自動化を行う MCP サーバーです。問題を分析して修正案を提示し、反復修正ではテストの再実行と回帰時のロールバックを行います。一部の機械的な修正にはバックアップと構文検証があります。

主な機能

  1. 01プロジェクト構造の分析とテストシナリオ・計画の作成
  2. 02メモリリーク、論理エラー、競合状態、セキュリティ問題の検出
  3. 03修正案の提示、適用、ロールバック
  4. 04修正を反復し、変更後にテストを再実行
  5. 05レポート、テスト履歴、CI 設定の生成
  6. 06限定された安全な機械的変更の自動修正

活用シーン

  1. 01React Native コンポーネントのメモリリークを特定する
  2. 02Flutter ウィジェットに dispose 処理を追加する
  3. 03コミット前に競合状態や一般的なセキュリティ問題を確認する

MCP 対応

MCP サーバーとして、プロジェクト診断、テスト、コード分析、修正のツールと、テストワークフロー用プロンプトを提供します。反復修正ツールはバックアップを伴う変更を適用し、影響を受けるテストを再実行して、回帰があればロールバックできます。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"muse-code-space-test-genie": {
"command": "npx",
"args": [
"-y",
"test-genie-mcp"
]
}
}
}
起動コマンドnpx -y test-genie-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmtest-genie-mcp2.0.3

ツール

19

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
depthenumいいえ分析の深度レベルshallow | normal | deep
platformenumいいえ対象プラットフォーム(指定されていない場合は自動検出)ios | android | flutter | react-native | web
projectPathstringはいプロジェクトのルートディレクトリのパス

詳細

test-genie-mcp

バイブコーディングをする人向け:コマンドを1つ実行するだけで、プロジェクトで実際に何が壊れているのかを優先度順に表示します。

iOS、Android、Flutter、React Native、Web アプリ向けの自己修復型テスト自動化ツールです。MCP サーバーとして動作します。

npm version CI License: MIT MCP

v3.1.1 — バイブチェック+誠実な自動修正。 MCP を1回呼び出せば、約30秒で、競合状態+セキュリティ上の問題+メモリリーク+ロジックエラー+パフォーマンス上の問題を優先度順に表示します。すべてローカルマシン上で処理され、テレメトリーはありません。autoFix: true を渡すと、小規模で安全な機械的修正(弱いハッシュ、単純な Math.random の置き換え)が適用されます。バックアップ+構文検証+構文エラー時のロールバックを行います。より難しい修正をテストで検証しながら適用するには、v3.0.0 の反復修正ループを使用してください。


バイブコーディングをする人向けクイックスタート

ドキュメントは読みません。プロジェクトを開いて Claude に話しかけ、判定結果を知りたい。こちらです。

Claude で(test-genie-mcp をインストールした状態で — セットアップ):

/vibe-check /Users/me/my-app

Claude は内部で diagnose_project を呼び出します。約30秒後に、次の結果が表示されます。

# vibe-check report

- Project: /Users/me/my-app
- Platform: web
- Findings: 11 total — 4 critical, 4 high, 1 medium, 1 low
- Estimated fix time: ~85 min

## Top 5 issues

### 1. [CRIT] Hardcoded AWS access key id found in source
- File: `server.js:7`
- Category: security / secret (CWE-798)
- Confidence: 95%
- Fix: Move the value to an env var, gitignore the config, rotate the leaked key.

### 2. [CRIT] SQL string built by concatenating user input
- File: `server.js:21`
- Category: security / injection (CWE-89)
- Fix: Use parameterized queries (`db.query("... WHERE id = ?", [id])`).

### 3. [HIGH] useState setter called after await without mount guard
- File: `UserProfile.tsx:16`
- Category: race-condition / react-setstate-after-await (CWE-362)
- Confidence: 78%
- Fix: Use AbortController and check signal.aborted before calling setters.

… (top 5 shown — full list at output: "detailed")

## Next steps
1. Address the critical / high findings above.
2. Re-run diagnose_project after fixing to confirm convergence.
3. Use run_iterative_fix_loop for test-driven verification of each fix.

検出結果の autoFixable: true が high/critical の重大度であれば、diagnose_project の呼び出しで autoFix: true を指定して、機械的な置換を直接適用できます(バックアップ+構文検証を実施します。具体的なガードについては SAFETY.md を参照してください)。v3.1.1 で誠実に対応する範囲は限定的です。弱いハッシュ(createHash('md5'|'sha1') → createHash('sha256'))と、セキュリティ上重要なファイル内にある単独の Math.random() が対象です。より広範または構造的な修正(競合状態、eval、exec インジェクション)には、run_iterative_fix_loop を別途実行してください。テストを再実行し、回帰が発生した場合は自動でロールバックします。


test-genie を選ぶ理由

モバイルとクロスプラットフォームのテスト自動化におけるボトルネックは、テストを書くことではなく、失敗したテストから成功するテストに至るまでのループです。test-genie はこのループを完結させます。

failing test → analyzer flags issue → fix proposed → dry-run + syntax check →
applied with backup → affected tests re-run → regression check → loop or stop

この一連のループを担うのが run_iterative_fix_loop ツールです。v3.1.1 の diagnose_project autoFix: true の経路が対象とするのは、その一部に厳密に限られます。バックアップ+ドライラン+構文検証+適用を行いますが、テストは再実行しません(その経路ではテスト回帰時のロールバックも行いません)。目的に合ったツールを選び、それぞれの具体的なガードについては SAFETY.md を参照してください。

その他のツール(Detox、Maestro、Playwright、xcodebuild test)はテストを実行します。test-genie は、スタックトレースを手作業で追わなくても、テストを実行するだけでなく、基準を満たすか、これ以上進められなくなるまで修正も進めます。


5分でできるクイックスタート

# 1. Install
npm install -g test-genie-mcp

# 2. Add to Claude Desktop config (~/.config/claude/claude_desktop_config.json)
{
  "mcpServers": {
    "test-genie": {
      "command": "npx",
      "args": ["test-genie-mcp"],
      "env": {
        "TEST_GENIE_ALLOWED_ROOT": "/path/to/your/project"
      }
    }
  }
}

# 3. Restart Claude Desktop. From a chat:
#    "Run the iterate-fix loop on /Users/me/my-rn-app with autoApply=false"

出力例(省略あり):

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
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):
  - 71fbe…: Fix: useEffect missing cleanup for setInterval (confidence: 85)
  - 92ad1…: Fix: Force-unwrap on possibly-undefined name (confidence: 85)
  - …

Resume token: f8b3…

ファイルに実際にパッチを適用するには、autoApply: true(または resumeToken: "f8b3…")を指定して再度呼び出します。


実際のユースケース

以下のフローは run_iterative_fix_loop の経路(v3.0 の 主な機能)について説明しています。検出 → 提案 → ドライラン → バックアップ付きで適用 → テスト再実行 → 回帰時にロールバックを行います。 v3.1.1 の diagnose_project autoFix の経路は、より限定的な機械的置換のみの経路です。 実際に何が対象となるかについては、SAFETY.md の §4 を参照してください。

1. React Native のメモリリークを自己修復

チームが useEffect に setInterval(...) を追加し、クリーンアップを忘れたとします。test-genie の detect_memory_leaks がそれを検出し、suggest_fixes が return () => clearInterval(id) を提案し(src/tools/fixing/suggestFixes.ts:169-179)、ループがパッチを TS コンパイラーでドライランし、バックアップ付きで適用した後、影響を受けるスナップショットテストだけを再実行して、合格率が100%になったことを確認して停止します。修正前: 失敗するスナップショットが1件。修正後: 失敗は0件、修正を1件適用、.test-genie-backups/ にバックアップが1件。

2. Flutter ウィジェットの dispose() 自動化

AnimationController が破棄されずに残っています。test-genie は dispose() のオーバーライドがないことを検出し、Dart の @override dispose() { controller.dispose(); super.dispose(); } ブロック(suggestFixes.ts:214-217)を生成して、修正したファイルに対して dart analyze を実行し、適用後に flutter test を再実行して収束します。

3. iOS のリテインサイクル(クロージャのキャプチャ)

self.timer = Timer.scheduledTimer(...) { _ in self.tick() } — ルールベースの検出器がクロージャによる self のキャプチャを検出し、修正機能が [weak self] _ in guard let self = self else { return }; self.tick() に書き換えます(suggestFixes.ts:239-242)。swiftc が PATH にある場合は実際に構文チェックを行い、ない場合は test-genie が「検証レベルの引き下げ」を報告するので、そのことがわかります。


反復修正ループの仕組み

┌────────────────────┐
│   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)

シーケンス図と安全ガードの一覧については、docs/ITERATE_FIX_LOOP.md を参照してください。


ツール(23)

#ツールモード
1analyze_app_structure実際
2generate_scenarios実際
3create_test_plan実際
4run_scenario_testハイブリッド
5run_simulationシミュレーション
6run_stress_testハイブリッド
7detect_memory_leaks実際
8detect_logic_errors実際
9suggest_fixes実際
10confirm_fix実際
11apply_fix実際
12rollback_fix実際
13run_full_automationハイブリッド
14run_iterative_fix_loop(v3.0 の目玉)ハイブリッド
15generate_report実際
16get_pending_fixes実際
17get_test_history実際
18analyze_performance実際
19analyze_code_deep実際
20generate_cicd_config実際
21diagnose_project(v3.1 の目玉 — 雰囲気チェック)実際
22detect_race_conditions実際
23detect_security_issues実際

mode の凡例は docs/SIMULATION_VS_REAL.md にあります。

さらに、4 つのリソース(test-genie://iteration-logs、…/test-history/{path}、…/iteration-logs/{loopId}、…/applied-fixes/{path})と 3 つのプロンプト(full-test-pipeline、diagnose-failure、vibe-check)があります。


vibe-check が検出する項目

競合状態(detect_race_conditions / diagnose_project):

パターン言語重大度自動修正可能(v3.1.1)
マウントガードなしで、await の後に useState セッターを呼び出すTS/JS/React高いいえ(構造上の問題)
非同期フェッチを行う useEffect に AbortController/クリーンアップがないTS/JS/React高いいえ(構造上の問題)
arr.forEach(async ...)(通知されない fire-and-forget)TS/JS中いいえ(順序に依存)
Promise.all/順次実行を使わない、隣接するフェッチTS/JS中いいえ
TOCTOU:ロックなしで existsSync の後に readFileSync を実行するTS/JS Node中いいえ
非同期コンテキストでの非アトミックなカウンターのインクリメントTS/JS低いいえ
@MainActor の外での @Published の変更Swift中いいえ
.barrier を使わない、並行する DispatchQueue への書き込みSwift中いいえ
Dispatchers.Main 以外での MutableStateFlow の変更Kotlin中いいえ
flowOn を使わずに Flow を収集するKotlin低いいえ
sync.Mutex を使わない、goroutine と共有マップの組み合わせGo高いいえ

v3.1.1 の正確性監査:以前は useEffect-no-abort と forEach-await を自動修正可能として案内していましたが、 実際にはできません。AbortController でラップしたり、 Promise.all(arr.map(...)) に書き換えたりすると、 静的に検証できない動作の変更が生じます。これらは現在、レポートのみを 出力します。SAFETY.md を参照してください。

セキュリティ(detect_security_issues / diagnose_project):

パターン重大度CWE自動修正可能(v3.1.1)
ハードコードされた AWS/Stripe/GitHub/Google/Slack トークン重大/高CWE-798いいえ(ローテーション)
ハードコードされた JWT シークレットのリテラル高CWE-798いいえ
URL クエリ文字列内の API トークン高CWE-200いいえ
.env ファイルが存在するが、gitignore の対象ではない高CWE-538いいえ(先にローテーションが必要)
req.params/req.body を使った SQL 文字列の連結重大CWE-89いいえ
動的な値を使った innerHTML/dangerouslySetInnerHTML高CWE-79いいえ
リテラル以外を使った eval()/new Function()重大CWE-95いいえ
セキュリティ関連ファイル内の Math.random()、単独の代入高CWE-338はい(crypto.randomInt)
算術式に含まれる Math.random()高CWE-338いいえ(意味上の問題)
セキュリティ関連キーワードを含むファイル内の createHash('md5'|'sha1')高CWE-327はい('sha256')
その他の箇所での createHash('md5'|'sha1')中CWE-327いいえ(重大度の下限未満)
ユーザー入力を含むテンプレートリテラルを使った child_process.exec重大CWE-78いいえ
fetch(req.query.url)(SSRF)高CWE-918いいえ
CORS のオリジンが * かつ Allow-Credentials: true高CWE-942いいえ
httpOnly/secure/sameSite を指定せずに設定された Cookie低CWE-1004いいえ
安全なスキーマを指定しない yaml.load中CWE-502いいえ

v3.1.1 の正確性監査:以前は .env/Math.random(一般)/yaml.load を 自動修正可能として案内していましたが、いずれも無条件で書き換えるにはリスクが高すぎるか、 提供できる戦略がありませんでした。そのため、レポートのみの出力に変更しました。 SAFETY.md §5 を参照してください。


vibe-check では検出できないこと(正直な一覧)

これは「30 秒で明らかな問題を見つける」ためのフィルターであり、Snyk や Semgrep、完全な SAST ツールではありません。次の問題は検出できません。

  • ファイルをまたぐデータフロー。 ユーザー入力が 3 つのファイルを経由して db.query に到達する場合でも、正規表現ではそのつながりを追えません。本格的な SAST は呼び出しグラフ全体で汚染の伝播を追跡します。ロードマップ:上位 N 個のエントリーポイントを対象に、ts-morph で参照をたどる機能。
  • 脆弱な間接依存関係。 npm のアドバイザリは照会しません。それは npm audit の役割であり、古いアドバイザリ一覧を同梱すると誤った情報になるためです。依存関係の CVE も対象にしたい場合は、npm audit --json を並行して実行してください。
  • プロセス間の競合状態。 プロセス内の JS/Swift/Kotlin/Go の競合状態は検出します。サービス間のロック順序や DB トランザクションなど、分散システムの競合状態には別のツールが必要です。
  • 型は正しいがロジックが壊れているコード。 このアナライザーは構文ベースであり、意味解析は行いません。Math.random() を getNonce と命名しても見逃しませんが、適切な名前が付けられた crypto.randomBytes がごく少ないエントロピーで使われている場合は見逃します。
  • 独自のシークレット形式。 固有のプレフィックスを持つ社内トークンには、securityAnalyzer.SECRET_PATTERNS に追加できる正規表現が必要です。PR を歓迎します。
  • リアルタイム/動的な問題。 高負荷時のメモリーリーク、ネットワークのタイムアウト、操作中の描画の遅延などには、静的解析ではなく run_stress_test/run_simulation が必要です。

vibe-check に加えて、より広範囲を確認したい場合は、検出結果を run_iterative_fix_loop に渡してテストで検証しながら適用するか、コンプライアンス用途では Snyk/Semgrep/GitHub Advanced Security にエスカレーションしてください。


vibe-check と代替ツールの比較

vibe-check (test-genie)SnykSemgrepGitHub Advanced Security
ローカルで実行はいハイブリッド(クラウド)はいいいえ(クラウド)
テレメトリーなしはい(ネットワーク呼び出しなし)いいえ一部対応いいえ
修正ループとの統合はい(run_iterative_fix_loop)いいえいいえいいえ
競合状態の検出はい(JS/Swift/Kotlin/Go)いいえ一部対応一部対応
ファイルをまたぐ汚染フローいいえ(ロードマップ)はいはいはい
セットアップ時間なし(test-genie がインストール済みなら、すでに利用できます)アカウント作成+認証インストール+ルールセットリポジトリ単位で有効化

「コミットする前に、何が壊れているか」を知りたいなら、応答速度では vibe-check が優れています。「コンプライアンスとサプライチェーンの監査」が目的なら、専用ツールを使用してください。


test-genie を使用すべきでない場合

  • 本番環境へのデプロイ可否を決めるテスト実行。 test-genie は開発時のフィードバックループ向けに作られています。リリースの判断には、エンドツーエンドで制御できる適切な CI を使用してください。
  • チームがすべての行を手作業でレビューしなければならないコード。 このループの役割は修正を提案して適用することです。すべての修正に人の確認が必要な場合は、autoApply: false(既定値)のまま、修正案の生成のみを目的に使用してください。
  • バックアップがない/バージョン管理されていない状況。 test-genie の自動ロールバックはベストエフォートであり、ファイルごとのバックアップが存在する必要があります。必ず git 作業ツリー内で実行してください。

比較

test-genieDetoxMaestroxcodebuild test
E2E テスト/単体テストの実行✅(Jest/Detox など経由)✅✅✅
コードの問題を検出✅ ルール+LLM❌❌❌
反復的な修正ループ✅ (run_iterative_fix_loop)❌❌❌
テストのリグレッション時に自動ロールバック✅ run_iterative_fix_loop 内のみ❌❌❌
構文エラー時に自動ロールバック✅ すべての適用経路❌❌❌
MCP ネイティブ(Claude/エージェントと通信)✅❌❌❌
マルチプラットフォームiOS+Android+Web+Flutter+RNiOS+AndroidiOS+AndroidiOS のみ

対象範囲に関する注意:diagnose_project autoFix: true は構文検証の 失敗時にロールバックします(applyFix.ts:185-202)が、テストを 再実行しないため、テストのリグレッションを検出できません。テスト駆動の ロールバックには run_iterative_fix_loop を使用してください。 SAFETY.md §2.4 を参照してください。

test-genie は Jest、Detox、xcodebuild test などのツールを内部で使用します。テストランナー層ではなく、オーケストレーション層で動作します。


既知の制限事項

  • プラットフォーム構文チェックのダウングレード。 Swift/Kotlin/Java/Dart では、プラットフォームのコンパイラーを -typecheck モードで使用します。コンパイラーが PATH 上にない場合は、波括弧の対応チェックにフォールバックし、結果に downgraded: true を表示します。実際の検証を行うには、swiftc/kotlinc/javac/dart をインストールしてください。
  • LLM は任意であり、条件に応じて実行されます。 strategy: 'hybrid' では、ルールベースの信頼度がしきい値を下回った場合にのみ LLM が実行されます。API キーがない場合、ループはルールベースのみで動作します。失敗にはなりません。
  • ストレージはマシンごとです。 テスト履歴/反復ログは $TEST_GENIE_STORAGE_DIR(デフォルトは ~/.test-genie-mcp)に保存されます。マシン間では同期されません。
  • シミュレーションモードは「シミュレーション」であり、魔法ではありません。 run_simulation は実際の異常ではなく、もっともらしい異常を返します。実機で実行するには run_scenario_test(ハイブリッド)を使用してください。

設定

環境変数デフォルト目的
TEST_GENIE_ALLOWED_ROOTcwdケイパビリティベースのパス安全性。サーバーはこのルート外の読み書きを拒否します。
TEST_GENIE_STORAGE_DIR~/.test-genie-mcpシナリオ/結果/反復ログの保存先です。
TEST_GENIE_LLM_PROVIDER自動検出anthropic/openai/none。
ANTHROPIC_API_KEY—プロバイダーが anthropic の場合に使用します。
OPENAI_API_KEY—プロバイダーが openai の場合に使用します。
TEST_GENIE_ANTHROPIC_MODELclaude-haiku-4-5Anthropic モデルを上書きします。
TEST_GENIE_OPENAI_MODELgpt-4o-miniOpenAI モデルを上書きします。

v2.x からの移行

  • run_full_automation は引き続き動作します。confirmMode/autoFix オプションは互換性のために維持されていますが、新しい方法は autoApply: boolean です。autoApply: true は confirmMode: 'auto' と同等です。
  • サブプロセスの強化により、プラットフォームツールはシェルのメタ文字を含むスキーム/デバイス/パッケージ名の引数を拒否するようになりました。CI から不自然な値を渡していた場合は、事前にサニタイズしてください。
  • 破壊的変更の一覧と移行手順については、CHANGELOG.md を参照してください。

ロードマップ

  • LLM による修正案の投票(複数の提案から、構文と再テストの差分に基づいて最適なものを選択)
  • 複数リポジトリの同期(1 回の MCP 呼び出しから、N 個のリポジトリでループを並列実行)
  • ファイル保存時にループを実行する「ウォッチモード」
  • Detox/Maestro のアーティファクト取り込みの改善(動画を反復ログにリンク)

貢献

Issue、PR、アイデアを歓迎します。CONTRIBUTING.md(TODO)を参照してください。コードは src/ に、テストは tests/ にあります。PR を送る前に npm test を実行してください。

メンテナー

@MUSE-CODE-SPACE — Yoonkyoung Gong。

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。