mcpField
M
MobiLoop

MobiLoop

ローカル
enessubass.github.io開発ツール112 週間前に更新

MobiLoop について

MobiLoopは、AndroidとiOSのビルド、実機テスト、検証を支援する、モバイル開発チーム向けの制御付きMCPツール層です。ログやスクリーンショットなどの証拠に基づいて失敗を分類し、既定のオーケストレーターではコード修正と再テストを自動化しません。

主な機能

  1. 01AndroidとiOSのビルド・テストループ
  2. 02AppiumによるUI自動化
  3. 03スクリーンショット、ログ、APIの証拠
  4. 04フローチェックポイントの記録と再生
  5. 05セキュリティスキャンと承認ゲート

活用シーン

  1. 01モバイルのエンドツーエンドテスト実行
  2. 02端末の証拠を使った失敗の調査
  3. 03コードをスキャンしてセキュリティ修正を評価

MCP 対応

コード、ビルド、端末、Appium、検証、フロー、セキュリティのツールを、一体型または役割別のMCPサーバーとして提供します。影響の大きい操作では承認を必須にでき、テキスト内の一般的な機密情報は既定でマスキングされます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"enessubass-mobiloop": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MOBILOOP_WORKSPACE_ROOT",
"-e",
"APPIUM_SERVER_URL",
"ghcr.io/enessubass/mobiloop-mcp:0.1.0-alpha.15"
],
"env": {
"MOBILOOP_WORKSPACE_ROOT": "<MOBILOOP_WORKSPACE_ROOT>",
"APPIUM_SERVER_URL": "<APPIUM_SERVER_URL>"
}
}
}
}
起動コマンドdocker run -i --rm -e MOBILOOP_WORKSPACE_ROOT -e APPIUM_SERVER_URL ghcr.io/enessubass/mobiloop-mcp:0.1.0-alpha.15
設定が必要な環境変数
MOBILOOP_WORKSPACE_ROOTWorkspace path mounted into the container.
APPIUM_SERVER_URLAppium server URL reachable from the container.

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

パッケージ
ocighcr.io/enessubass/mobiloop-mcp:0.1.0-alpha.15

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

MobiLoop MCP

エージェントによるモバイルのビルド・テスト・修正ループのための、ガード付き MCP サーバーです。

ドキュメントサイト | インストール | セキュリティモデル | ツールリファレンス

code change -> build -> install on device -> Appium test -> evidence -> classify -> report

MobiLoop MCP は、AI コーディングエージェントと実際のモバイル開発環境の間に位置する、制御されたツールレイヤーです。MCP クライアントは、モバイルプロジェクトの読み取りやパッチ適用、ビルド、Android または iOS のターゲットへのインストール、Appium を使ったアプリの操作、ログ・画面・API の結果の検証、既知のアプリフローのチェックポイントの記憶、証拠に基づくレポートの作成を行えます。

この名前は、核となる契約を表しています。モバイル開発作業は、変更、ビルド、デバイスでの実行、検証、証拠に基づくトリアージという、測定可能なループを通じて進める必要があります。

エージェントがコードを書くだけではないワークフロー向けに構築されています。ビルド、実行、テスト、観察、失敗の分類を行い、証拠を提示します。エージェントは引き続き、別個のガード付きコードツールを使ってパッチを適用し、再テストできますが、そのパッチ適用ステップは意図的にデフォルトのオーケストレーターの対象外となっています。

現在、MobiLoop はガード付きのビルド・テスト・検証ループと、証拠に基づく失敗の分類を提供します。パッチ適用と再テストの完全自動化は、より厳格な承認、ロールバック、レビューの制御が有効になるまで、意図的にデフォルトのオーケストレーターの対象外としています。

主な機能

  • 証拠優先のモバイルループ:ビルドログ、スクリーンショット、Appium XML ソース、logcat/シミュレーターのログ、API レスポンス、スクリーンショットの差分、イテレーション記録を扱います。
  • Android と iOS のツール分割:Android の adb/エミュレーターツールと iOS の xcrun simctl/xcodebuild ツールを分離しています。
  • Appium UI 自動化:セマンティックなタップ、文字入力、スワイプ、戻る操作、表示確認、スクリーンショット、アクセシビリティの概要に対応します。
  • フローの記憶:実行時の画面チェックポイントを記録し、直近で成功したパスを記憶して、安定したセットアップ手順をターゲットのチェックポイントまで自動再生します。
  • シナリオ生成とフロー DSL:ソースをスキャンして E2E シナリオの候補を検出し、wait/tap/type/assert/evidence のステップを含む高レベルの JSON フローを実行します。
  • ソースフロー分析:Flutter、React Native、Android、iOS のソースをスキャンして、画面、ルート、遷移、表示テキストの候補を検出します。
  • 根本原因の分類:logcat の証拠を、アプリのバグ、自動化エラー、環境の不足、リモートルール、テストデータの問題に分類します。
  • サーバー側の承認ゲート:セキュアモードでは、影響の大きいツールに有効な承認ペイロードが必要です。
  • 組み込みのモバイルセキュリティループ:別のスキャナーパッケージを使わずに、ソースとプラットフォーム設定をスキャンし、テスト計画を生成し、修正を比較して、リリース判断を制御します。
  • デフォルトでの秘匿化:テキスト成果物、コマンド出力、MCP/CLI のテキスト応答から、一般的なシークレット、ベアラートークン、API キー、メールアドレス、電話番号を秘匿化します。
  • ガード付きコードツール:ワークスペース内の読み取り・検索・パッチ適用、禁止されたシークレットパス、ガード付きブランチ、コミット、PR 作成に対応します。
  • Docker 対応の MCP ランタイム:ホストまたはランナー上にモバイル SDK、エミュレーター、デバイス、Appium を配置したまま、Node MCP サーバーを Docker でパッケージ化します。
  • 組み合わせ可能なバイナリ:すべてを 1 つのサーバーとして実行するか、それぞれの役割を個別の MCP サーバーに分割できます。
  • ポータブルなモバイル QA スキル:テストの計画、証拠の収集、既存ツールを使った範囲限定の修正・再テストワークフローの実行に対応する、MIT ライセンスのエージェントスキルです。

これは何か

このプロジェクトは、次のアーキテクチャ向けに MCP ツールを提供します。

AI / MCP client
  |
  v
MobiLoop MCP
  |
  |-- code tools
  |-- environment preflight
  |-- build tools
  |-- Android device tools
  |-- iOS simulator tools
  |-- Appium tools
  |-- verification tools
  |-- flow-memory replay tools
  |-- loop/report tools
  |-- CI publication tools
  |-- Android/iOS orchestrators
  |-- security scan and release gate tools
  |
  v
mobile repo + emulator/device + Appium + build toolchain

このサーバーは、モデルがそう述べたという理由だけでテストに合格したとは判断しません。合格の判断は、コマンドの終了コード、スクリーンショット、ページソース、ログの確認、API のアサーション、記録されたループのイテレーションなど、ツールの出力によって裏付けられる必要があります。

これは何ではないか

  • Android SDK、Xcode、Flutter、Gradle、React Native、Appium、またはプラットフォームドライバーの代替ではありません。
  • 汎用のモバイルエミュレーターコンテナーではありません。iOS シミュレーターには macOS が必要であり、Android エミュレーターの移植性は、ホストのアクセラレーション機能とデバイスへのアクセスに依存します。
  • 制限のないシェルブリッジではありません。ツールは構造化され、保護されています。
  • 本番環境へのデプロイツールではありません。リリース署名、ストアへのアップロード、本番環境のシークレットは、デフォルトの対象範囲外です。

要件

対象アプリに必要なものだけをインストールしてください。

ワークフローホスト必要なツール
MCP ランタイムmacOS、Linux、WindowsNode.js 20+
Android のビルド/テストmacOS、Linux、WindowsAndroid SDK、adb、エミュレーターまたは物理デバイス、必要に応じて Java/Gradle、Appium、互換性のある UiAutomator2 ドライバー
Flutter AndroidmacOS、Linux、WindowsFlutter SDK、Android SDK、UI フロー用の Appium
React Native AndroidmacOS、Linux、WindowsNode/npm、Android Gradle ツールチェーン、Android SDK、Appium
iOS シミュレーターmacOS のみXcode、xcrun simctl、iOS Simulator、Appium、互換性のある XCUITest ドライバー
Docker MCP ランタイムmacOS、Linux、WindowsDocker、およびデバイスを操作する場合はホスト側のモバイルツール

Appium またはフロー再生ツールを使用する前に、Appium を起動してください。

appium --address 127.0.0.1 --port 4723

ローカルにインストールした Appium も使用できます。

npx appium --address 127.0.0.1 --port 4723

Android の場合、Appium プロセスから次のものが見えることを確認してください。

export ANDROID_HOME=/absolute/path/to/android/sdk
export ANDROID_SDK_ROOT=/absolute/path/to/android/sdk
export PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH"

Genymotion デバイスがすでに起動している場合は、Android SDK の platform-tools を PATH に追加してから、フローを開始する前にデバイスを確認してください。

export PATH="$HOME/Library/Android/sdk/platform-tools:$PATH"
adb devices -l

ソースからインストールする

npm ci
npm test

プロジェクトローカルの MCP とバンドルされたスキルを設定し、ホストを診断してください。

node dist/src/cli.js setup --workspace /absolute/path/to/mobile/app --client codex --yes
node dist/src/cli.js doctor --workspace /absolute/path/to/mobile/app --target android

クライアント:codex、claude、cursor、vscode、generic。プレビューするには --dry-run を使用してください。セットアップでは他のサーバーを保持し、変更したファイルをバックアップします。SDK のインストールやアプリデータの変更は行いません。Windows、アップグレード、前提条件については、インストールを参照してください。NPM レジストリへの公開は有効になっていません。これらのコマンドは、ビルド済みのチェックアウトを使用します。

オールインワン MCP サーバーを実行します。

MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/index.js

開発時は次のようにします。

npm run dev

CLI による代替手段

MCP クライアントでサーバーを呼び出し可能なツールとして公開できない場合は、CLI ラッパーを使用してください。

MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js list-tools

ツールポリシーのメタデータを確認します。

MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js list-tools --json

同じメタデータは、MCP 内の policy.list_tools からも利用できます。

ツールを直接呼び出します。

MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js call flow.generate_test_scenarios '{"goal":"login smoke and validation"}'

シナリオ候補を生成します。

MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app \
node dist/src/cli.js generate-scenarios "cover onboarding, login, and validation"

MCP クライアントの設定

オールインワンサーバー

ローカル開発や、よりシンプルな MCP クライアントには、こちらを使用してください。

{
  "mcpServers": {
    "mobiloop": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/index.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app",
        "APPIUM_SERVER_URL": "http://127.0.0.1:4723"
      }
    }
  }
}
サーバーの分割

責任ごとに、より厳密なポリシー境界を設けたい場合は、サーバーを分割します。

{
  "mcpServers": {
    "mobile-code": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/code.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
      }
    },
    "mobile-build": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/build.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
      }
    },
    "mobile-device": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/device.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
      }
    },
    "mobile-appium": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/appium.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app",
        "APPIUM_SERVER_URL": "http://127.0.0.1:4723"
      }
    },
    "mobile-flow": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/flow.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app",
        "APPIUM_SERVER_URL": "http://127.0.0.1:4723"
      }
    },
    "mobile-verify": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/verify.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
      }
    },
    "mobile-loop": {
      "command": "node",
      "args": ["/absolute/path/to/mobiloop-mcp/dist/src/servers/loop.js"],
      "env": {
        "MOBILOOP_WORKSPACE_ROOT": "/absolute/path/to/mobile/app"
      }
    }
  }
}

すべてのバイナリを以下に示します。

バイナリ範囲
mobiloopツールの一覧表示、ツールの呼び出し、シナリオの生成を行う CLI ラッパー
mobiloop-mcpすべてのツール
mobiloop-code-mcpコードおよび Git ツール
mobiloop-env-mcp環境の事前チェックおよび互換性マトリックス
mobiloop-build-mcp依存関係、リンター、テスト、APK ビルドのツール
mobiloop-device-mcpAndroid adb およびエミュレーターのツール
mobiloop-ios-mcpiOS シミュレーターおよび Xcode のツール
mobiloop-appium-mcpAppium UI 自動化ツール
mobiloop-verify-mcpアサーションおよび証拠の収集
mobiloop-flow-mcpソースフロー分析およびチェックポイントの再生
mobiloop-loop-mcpイテレーションの記録およびレポート
mobiloop-ci-mcp成果物マニフェスト、GitHub のサマリー、PR コメント
mobiloop-orchestrator-mcpAndroid および iOS のビルド・インストール・テスト・検証ループ
mobiloop-security-mcp静的モバイルセキュリティスキャン、テスト計画、スキャン比較、リリースゲート

設定

セキュアモードでは、プロジェクトディレクトリから設定を読み込みません。ワークスペースと Appium の値は、ホスト環境に設定してください。

export MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app
export APPIUM_SERVER_URL=http://127.0.0.1:4723

ホストが管理するファイル設定を使う場合は、サンプルをコピーし、そのファイルを明示的に指定します。

cp mobiloop.config.example.json mobiloop.config.json

または、ファイルを明示的に指定します。

export MOBILOOP_CONFIG=/absolute/path/to/mobiloop.config.json

AGENTIC_MOBILE_MCP_CONFIG と AGENTIC_MOBILE_WORKSPACE_ROOT は、レガシーなフォールバックとして引き続き使用できますが、新しいプロジェクトでは MOBILOOP_* の名前を使用してください。

共通フィールド:

項目デフォルト値目的
securityModesecuresecure ではプロジェクトローカルの設定を無視し、trusted では明示的な上書きを有効にします
workspaceRoot現在の作業ディレクトリMCP サーバーがアクセスできるモバイルアプリのワークスペース
artifactsDir.mobiloop証跡、ログ、スクリーンショット、レポート、フローメモリー
runId未設定任意の実行識別子。成果物は .mobiloop/runs/<id> に書き込まれます
maxCommandMs120000コマンドのデフォルトのタイムアウト
maxOutputBytes1048576コマンドツールの出力上限
maxFixAttempts3推奨される修正ループの上限
maxTestIterations5オーケストレーターのループ上限
maxRuntimeMinutes30推奨される合計実行時間の上限
allowedBranchPattern^feature/ai-[A-Za-z0-9._/-]+$コミットツールを使用できるブランチ
appiumServerUrlhttp://127.0.0.1:4723trusted モードの Appium エンドポイント。secure モードではホスト環境を使用します
adbPathadbAndroid Debug Bridge のパス
emulatorPathemulatorAndroid エミュレーター CLI のパス
xcrunPathxcruniOS シミュレーター CLI のパス
xcodebuildPathxcodebuildXcode ビルド CLI のパス
sqlitePathsqlite3読み取り専用アサーション用の SQLite CLI のパス
apiAllowlistlocalhost のみAPI 検証で許可される URL
appiumAllowlistlocalhost のみtrusted モードの Appium オリジン許可リスト
forbiddenPathGlobsシークレット関連のデフォルト値読み取り/書き込み操作が禁止されるファイル
toolPolicies組み込みのデフォルト値trusted モードでのツールごとのリスクおよび承認メタデータの上書き
requireApprovalsecure モードでは true影響の大きいツールで承認ペイロードを必須にします
redactArtifactstrueテキスト成果物とテキスト応答から一般的なシークレットと個人情報を伏せます

MOBILOOP_ARTIFACTS_DIR は、読み取り専用 Docker セキュリティサーバー内の /artifacts など、ホストが管理する専用の証跡マウント先を指定できます。

環境変数で選択したフィールドを上書きできます。

export MOBILOOP_WORKSPACE_ROOT=/absolute/path/to/mobile/app
export APPIUM_SERVER_URL=http://127.0.0.1:4723
export MOBILOOP_RUN_ID=local-login-smoke
export MOBILOOP_REQUIRE_APPROVAL=true
export MOBILOOP_SECURITY_MODE=secure

設定スキーマは schema/mobiloop.config.schema.json にあります。docs/CONFIGURATION.md を参照してください。

承認ペイロードは次の形式を使用します。

{
  "approval": {
    "approved": true,
    "approvedBy": "human-or-ci",
    "reason": "Run Android validation on emulator",
    "expiresAt": "2026-05-11T12:00:00Z"
  }
}

推奨される初回実行

  1. MOBILOOP_WORKSPACE_ROOT をモバイルアプリに設定します。
  2. security.scan_source と security.generate_test_plan を実行します。
  3. エミュレーターを起動するかデバイスを接続してから、Appium を起動します。
  4. env.preflight と flow.analyze_from_code を実行します。
  5. 承認済みのビルド/リント/単体テストのアクションを実行します。
  6. アプリをインストールし、Appium セッションを作成して、小規模なユーザーフローを 1 つ検証します。
  7. 証拠を収集します。バグが確認された場合は、修正を適用して再実行し、セキュリティスキャンを比較します。
  8. 修正がリリース可能と判断する前に、security.release_gate を適用します。

Appium の実機検証

v0.1.0-alpha.10 は、Android 15 を実行する Genymotion Galaxy S24 上のインストール済み MiniTakip Android アプリで検証されました。状態を変更しないこの検証では、MobiLoop を使用して ADB ターゲットを検出し、Appium 3 UiAutomator2 セッションを作成して、スクリーンショットとページソース XML を取得し、アクセシビリティツリーを読み取ってから、セッションを終了しました。フォームデータの入力、レコードの作成、アプリデータの削除は行っていません。

以下に示すように、appium.create_session では W3C 機能を直接受け付けます。MobiLoop は Appium に送信する前に、WebDriver の capabilities エンベロープでラップします。

{
  "capabilities": {
    "alwaysMatch": {
      "platformName": "Android",
      "appium:automationName": "UiAutomator2",
      "appium:udid": "127.0.0.1:6555",
      "appium:appPackage": "com.example.app",
      "appium:appActivity": ".MainActivity",
      "appium:noReset": true
    }
  },
  "approval": {
    "approved": true,
    "approvedBy": "human-or-ci",
    "reason": "Open an Appium session for a bounded validation run"
  }
}

セッションの作成後は、証拠の取得に appium.observe_screen と appium.get_accessibility_tree を使用し、その後、必ず appium.delete_session を呼び出してください。セッションが成功しても、選択した画面とアサーションが確認できたことを示すだけで、製品の一連の操作全体が成功したことを意味するわけではありません。

Flutter Android アプリでの大まかなツールの実行順序は次のとおりです。

env.preflight { "target": "flutter" }
security.scan_source
security.generate_test_plan
flow.analyze_from_code
build.detect_project
build.install_dependencies
build.run_lint
build.run_unit_tests
build.build_debug_apk
device.list_devices
device.install_app
appium.create_session
appium.wait_for_visible
appium.tap_by_text
verify.assert_no_crash_in_logcat
verify.collect_evidence
loop.record_iteration
loop.generate_report

Android オーケストレーター

orchestrator.run_android_validation_loop は、ビルド、インストール、Appium、検証、証拠、反復の記録を対象とする、範囲が限定された Android ループを実行します。

最小限の形式:

{
  "goal": "Build and verify login flow on Android.",
  "kind": "flutter",
  "packageName": "com.example.app",
  "serial": "emulator-5554",
  "runLint": true,
  "runUnitTests": true,
  "buildDebugApk": true,
  "clearAppData": false,
  "collectEvidence": true,
  "maxTestIterations": 3,
  "appiumCapabilities": {
    "platformName": "Android",
    "appium:automationName": "UiAutomator2",
    "appium:deviceName": "Android Emulator",
    "appium:udid": "emulator-5554",
    "appium:appPackage": "com.example.app",
    "appium:appActivity": ".MainActivity",
    "appium:noReset": true
  },
  "appiumSteps": [
    {
      "tool": "appium.wait_for_visible",
      "args": {
        "locator": { "strategy": "text", "value": "Login" },
        "timeoutMs": 10000
      }
    }
  ],
  "expectedTexts": ["Home"],
  "approval": {
    "approved": true,
    "approvedBy": "project-owner",
    "reason": "Build, install and test the selected test app using authorized synthetic data"
  }
}

最小限の形式では、完全なログインシナリオになりません。実際のロケーター、フォーム操作、結果のアサーションを指定して、Android の例 を調整してください。承認ペイロードは実際の権限付与を表します。アプリのリセットには別途承認が必要です。

iOS オーケストレーター

orchestrator.run_ios_validation_loop は、xcodebuild、シミュレーターの起動、アプリのインストール/起動、Appium XCUITest、検証、証拠、反復の記録を対象とする、範囲が限定された iOS シミュレーターループを実行します。

Flutter の最小限の形式:

{
  "goal": "Build and verify login flow on iOS.",
  "kind": "flutter",
  "workspace": "ios/Runner.xcworkspace",
  "scheme": "Runner",
  "configuration": "Debug",
  "sdk": "iphonesimulator",
  "destination": "platform=iOS Simulator,name=iPhone 15",
  "buildSettings": {
    "ARCHS": "arm64",
    "EXCLUDED_ARCHS": ""
  },
  "simulatorDevice": "iPhone 15",
  "bundleId": "com.example.app",
  "runLint": true,
  "runUnitTests": true,
  "buildIosApp": true,
  "bootSimulator": true,
  "installApp": true,
  "launchApp": true,
  "collectEvidence": true,
  "maxTestIterations": 2,
  "appiumCapabilities": {
    "platformName": "iOS",
    "appium:automationName": "XCUITest",
    "appium:deviceName": "iPhone 15",
    "appium:bundleId": "com.example.app",
    "appium:noReset": true
  },
  "appiumSteps": [
    {
      "tool": "appium.wait_for_visible",
      "args": {
        "locator": { "strategy": "text", "value": "Login" },
        "timeoutMs": 15000
      }
    }
  ],
  "expectedTexts": ["Home"],
  "approval": {
    "approved": true,
    "approvedBy": "project-owner",
    "reason": "Build, install and test only the selected simulator demo"
  }
}

examples/flutter-ios-validation-loop.json と docs/QUICKSTART_FLUTTER.md を参照してください。

buildSettings と xcodebuildArgs は ios.build_app に渡されます。そのため、MCP ループを離れることなく、Apple Silicon の arm64 シミュレータービルドやカスタム DerivedData 設定など、ホスト固有のシミュレーター要件にプロジェクトを対応させることができます。

AI 生成シナリオの候補

MobiLoop はアプリのソースコードから E2E シナリオの候補を生成できます。これにより、エージェントは何もない画面からではなく、具体的なテスト計画を起点にできます。

{
  "tool": "flow.generate_test_scenarios",
  "args": {
    "goal": "cover onboarding, login, form validation, and main navigation",
    "maxScenarios": 8,
    "includeNegativeCases": true
  }
}

出力には、優先度、候補となるステップ、アサーション、ソース参照、制限事項が含まれます。これらは実行可能な候補として扱ってください。エージェントは Appium で実行して証拠を収集し、安定したチェックポイント経路へと改善する必要があります。

カスタムのクライアントコードを記述せずにスクリプトを実行するには:

{
  "tool": "flow.run_script",
  "args": {
    "sessionId": "APPIUM_SESSION_ID",
    "steps": [
      { "action": "observe", "waitForAnyText": ["Giriş Yap", "Login"], "waitForPackageIdle": true },
      { "action": "tapText", "text": "Giriş Yap", "matchMode": "auto" },
      {
        "action": "type",
        "locator": { "strategy": "text", "value": "E-posta" },
        "text": "[email protected]",
        "mode": "sendKeys"
      },
      { "action": "assertText", "text": "Ana Sayfa" },
      { "action": "collectEvidence", "label": "login-result" }
    ]
  }
}

フローの記憶と自動リプレイ

フローの記憶機能を使うと、セットアップ画面を通過済みと見なすことなく、モバイルテストを繰り返す際の時間を短縮できます。

current Appium source
  -> normalized screen signature
  -> match recorded checkpoint
  -> replay known semantic actions
  -> arrive at target checkpoint
  -> continue test-specific assertions

画面のシグネチャは、Appium のページソースから構築されます。

  • 表示テキスト
  • アクセシビリティラベルとコンテンツ説明
  • リソース ID
  • クラス名
  • クリック可能なテキスト

このデータは次の場所に保存されます。

.mobiloop/flow/memory.json

runId を有効にすると、同じファイルが .mobiloop/runs/<runId>/flow/memory.json に保存されます。

チェックポイントを記録する

安定した画面で:

{
  "testName": "onboarding-to-login",
  "name": "Onboarding 1",
  "order": 1,
  "sessionId": "APPIUM_SESSION_ID",
  "actionToNext": {
    "tool": "appium.tap_by_text",
    "args": {
      "text": "Next"
    }
  }
}

次の画面で:

{
  "testName": "onboarding-to-login",
  "name": "Login",
  "order": 2,
  "sessionId": "APPIUM_SESSION_ID"
}

成功した経路を記録します。

{
  "testName": "onboarding-to-login",
  "status": "passed",
  "checkpointIds": ["onboarding-to-login-001-onboarding-1", "onboarding-to-login-002-login"]
}
後で再生

実行せずに計画します:

{
  "sessionId": "APPIUM_SESSION_ID",
  "testName": "onboarding-to-login",
  "targetCheckpointId": "onboarding-to-login-002-login",
  "dryRun": true
}

実行します:

{
  "sessionId": "APPIUM_SESSION_ID",
  "testName": "onboarding-to-login",
  "targetCheckpointId": "onboarding-to-login-002-login",
  "minimumScore": 0.55,
  "delayMs": 500
}

サポートされている再生アクション:

  • appium.tap_by_text
  • appium.tap_by_accessibility_id
  • appium.tap_by_resource_id
  • appium.tap_coordinates
  • appium.type_text
  • appium.swipe
  • appium.go_back
  • appium.wait_for_visible
  • appium.assert_visible

セマンティックアクションを優先してください。座標は最後の手段として使用してください。

examples/flow-memory-replay.json を参照してください。

Docker

推奨される Docker モデルは次のとおりです:

Docker container
  - read-only Security MCP for static project review

Trusted isolated worktree or self-hosted runner
  - approved build, device, Appium, and patch actions
  - Android SDK/emulator/device, Appium, Flutter/Gradle/React Native
  - Xcode and iOS Simulator on macOS

ビルド:

docker build -t mobiloop-mcp:local .

公開されている GHCR イメージ:

docker pull ghcr.io/enessubass/mobiloop-mcp:latest

MCP stdio サーバーとして実行:

docker run --rm -i \
  --read-only --cap-drop ALL --security-opt no-new-privileges \
  --tmpfs /artifacts:rw,noexec,nosuid,size=256m,uid=10001,gid=10001,mode=0770 \
  -e MOBILOOP_WORKSPACE_ROOT=/workspace \
  -e MOBILOOP_ARTIFACTS_DIR=/artifacts \
  -e MOBILOOP_SECURITY_MODE=secure \
  -v /absolute/path/to/mobile/app:/workspace:ro \
  --entrypoint node \
  ghcr.io/enessubass/mobiloop-mcp:latest /app/dist/src/servers/security.js

docs/DOCKER.md を参照してください。

安全性モデル

デフォルト設定は意図的に保守的です。

  • ファイルアクセスは、シンボリックリンクの解決後に workspaceRoot 内に制限されます。
  • セキュアモードではプロジェクトローカルの設定を無視し、承認を必須とし、ホストが制御するループバック Appium を使用します。
  • シークレットと思われるパスはブロックされます。
  • コミットツールは、デフォルトでは feature/ai-* に一致するブランチでのみ動作します。
  • 汎用のシェル実行ツールはありません。
  • API チェックは apiAllowlist によって制限されます。
  • エビデンスは、ホストが専用の MOBILOOP_ARTIFACTS_DIR マウントを明示的に提供しない限り、.mobiloop に書き込まれます。
  • 実行時と出力の制限が適用されます。

デフォルトでブロックされるパスは次のとおりです:

  • .env、.env.*
  • *.keystore、*.jks、*.p12
  • *.mobileprovision
  • GoogleService-Info.plist
  • google-services.json
  • secret または credential を含むパス

セキュアモードでは、依存関係のインストール、lint/テスト/ビルドコマンド、デバイス操作、パッチ、コミット、プッシュ、PR 作成などの影響の大きい操作に対して承認が必須になります。 MobiLoop は mobiloop list-tools --json を通じて機械可読なポリシーメタデータを公開します。詳しくは docs/TOOL_REFERENCE.md を参照してください。

docs/SECURITY.md を参照してください。

アーティファクト

デフォルトのアーティファクトディレクトリは次のとおりです:

.mobiloop

runId または MOBILOOP_RUN_ID が設定されている場合、アーティファクトの書き込み先には実行ごとのルートが使用されます:

.mobiloop/runs/<runId>

一般的な内容:

ディレクトリ内容
build/依存関係、lint、テスト、APK ビルドのログ
screenshots/Appium またはデバイスのスクリーンショット
sources/Appium のページソース XML
logs/デバイスまたはシミュレーターのログ
evidence/検証アーティファクトの統合版
flow/ソースフロー分析、チェックポイントメモリ、再生記録
loop/JSONL 形式のイテレーション記録
reports/Markdown 形式の最終レポート
ci/CI マニフェスト、要約、注釈
security/ソーススキャン、生成された計画、比較結果

ツールグループ

コード
  • code.read_file
  • code.search_code
  • code.apply_patch
  • code.git_diff
  • code.create_branch
  • code.commit_changes
  • code.open_pr
環境
  • env.preflight
  • env.compatibility_matrix
  • env.ensure_appium
ビルド
  • build.detect_project
  • build.install_dependencies
  • build.run_lint
  • build.run_unit_tests
  • build.build_debug_apk
  • build.build_release_candidate
  • build.collect_build_logs
セキュリティ
  • security.scan_source
  • security.generate_test_plan
  • security.compare_scans
  • security.release_gate
Android デバイス
  • device.list_devices
  • device.start_emulator
  • device.stop_emulator
  • device.install_app
  • device.uninstall_app
  • device.clear_app_data
  • device.grant_permissions
  • device.capture_screenshot
  • device.pull_logs
iOS
  • ios.list_simulators
  • ios.boot_simulator
  • ios.shutdown_simulator
  • ios.build_app
  • ios.install_app
  • ios.launch_app
  • ios.capture_screenshot
  • ios.collect_logs
Appium
  • appium.create_session
  • appium.delete_session
  • appium.observe_screen
  • appium.get_page_source
  • appium.get_accessibility_tree
  • appium.tap_by_text
  • appium.tap_by_accessibility_id
  • appium.tap_by_resource_id
  • appium.tap_coordinates
  • appium.type_text
  • appium.swipe
  • appium.go_back
  • appium.wait_for_visible
  • appium.assert_visible
  • appium.assert_not_visible
検証
  • verify.assert_screen_contains_text
  • verify.assert_no_crash_in_logcat
  • verify.assert_appium_session_healthy
  • verify.assert_api_response
  • verify.collect_evidence
  • verify.assert_navigation_reached
  • verify.assert_accessibility_labels
  • verify.assert_screenshot_diff
  • verify.assert_sqlite_query
  • verify.hash_artifact
フロー
  • flow.analyze_from_code
  • flow.generate_test_scenarios
  • flow.run_script
  • flow.record_checkpoint
  • flow.record_test_run
  • flow.plan_replay
  • flow.replay_to_checkpoint
  • flow.read_memory
  • flow.clear_memory
ループ
  • loop.record_iteration
  • loop.read_iterations
  • loop.generate_report
CI
  • ci.collect_artifact_manifest
  • ci.write_github_step_summary
  • ci.comment_pr
  • ci.create_github_annotations
ポリシー
  • policy.list_tools
オーケストレーター
  • orchestrator.run_android_validation_loop
  • orchestrator.run_ios_validation_loop

トラブルシューティング

env.preflight で Appium が見つからないと表示される

Appium を起動し、APPIUM_SERVER_URL が Appium を指していることを確認します。

APPIUM_SERVER_URL=http://127.0.0.1:4723

env.preflight は、接続可能な Appium サーバー、またはグローバルな appium コマンドのどちらでも受け付けます。

Appium が Android SDK を見つけられない

Android の環境変数を設定して Appium を起動します。

ANDROID_HOME=/absolute/path/to/android/sdk \
ANDROID_SDK_ROOT=/absolute/path/to/android/sdk \
PATH="$ANDROID_HOME/platform-tools:$ANDROID_HOME/emulator:$PATH" \
appium --address 127.0.0.1 --port 4723
Appium でテキストをタップしても画面が遷移しない

アクセシビリティ ID またはリソース ID を優先してください。テキストを使用する場合、このサーバーはまずそのテキストを含むクリック可能な親要素を試し、次にテキストノードにフォールバックします。カスタムの Flutter または React Native ウィジェットでは、可能であれば安定したセマンティクス ID/アクセシビリティ ID を追加してください。

Flow の再生で間違った画面に一致した

まず flow.plan_replay を使用してください。minimumScore を上げ、より適切なチェックポイントを記録し、一時的な読み込み状態をチェックポイントにしないようにしてください。

Docker からエミュレーターまたは Appium が見えない

Appium をホスト上で実行し、host.docker.internal を使ってコンテナから接続します。Linux では、--add-host=host.docker.internal:host-gateway を追加してください。

Docker で iOS が動作しない

iOS シミュレーターのワークフローには、Xcode がインストールされた macOS が必要です。iOS ツールは macOS ホスト上で直接実行するか、macOS のセルフホストランナーで実行してください。

npm のキャッシュ権限が原因で npm pack --dry-run が失敗する

クリーンなキャッシュを使用してください。

npm_config_cache=/tmp/mobiloop-npm-cache npm pack --dry-run

開発

npm ci
npm run format:check
npm run lint
npm run typecheck
npm test
npm run site:check
npm run pack:check

Dockerfile は、イメージのビルド中にもテストスイートを実行します。

Project Files

License

MIT. See LICENSE.

コメント

MCP は初めてですか?

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

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