MobiLoop について
MobiLoopは、AndroidとiOSのビルド、実機テスト、検証を支援する、モバイル開発チーム向けの制御付きMCPツール層です。ログやスクリーンショットなどの証拠に基づいて失敗を分類し、既定のオーケストレーターではコード修正と再テストを自動化しません。
主な機能
- 01AndroidとiOSのビルド・テストループ
- 02AppiumによるUI自動化
- 03スクリーンショット、ログ、APIの証拠
- 04フローチェックポイントの記録と再生
- 05セキュリティスキャンと承認ゲート
活用シーン
- 01モバイルのエンドツーエンドテスト実行
- 02端末の証拠を使った失敗の調査
- 03コードをスキャンしてセキュリティ修正を評価
MCP 対応
コード、ビルド、端末、Appium、検証、フロー、セキュリティのツールを、一体型または役割別のMCPサーバーとして提供します。影響の大きい操作では承認を必須にでき、テキスト内の一般的な機密情報は既定でマスキングされます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e MOBILOOP_WORKSPACE_ROOT -e APPIUM_SERVER_URL ghcr.io/enessubass/mobiloop-mcp:0.1.0-alpha.15MOBILOOP_WORKSPACE_ROOTWorkspace path mounted into the container.APPIUM_SERVER_URLAppium server URL reachable from the container.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/enessubass/mobiloop-mcp:0.1.0-alpha.15stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
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、Windows | Node.js 20+ |
| Android のビルド/テスト | macOS、Linux、Windows | Android SDK、adb、エミュレーターまたは物理デバイス、必要に応じて Java/Gradle、Appium、互換性のある UiAutomator2 ドライバー |
| Flutter Android | macOS、Linux、Windows | Flutter SDK、Android SDK、UI フロー用の Appium |
| React Native Android | macOS、Linux、Windows | Node/npm、Android Gradle ツールチェーン、Android SDK、Appium |
| iOS シミュレーター | macOS のみ | Xcode、xcrun simctl、iOS Simulator、Appium、互換性のある XCUITest ドライバー |
| Docker MCP ランタイム | macOS、Linux、Windows | Docker、およびデバイスを操作する場合はホスト側のモバイルツール |
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-mcp | Android adb およびエミュレーターのツール |
mobiloop-ios-mcp | iOS シミュレーターおよび Xcode のツール |
mobiloop-appium-mcp | Appium UI 自動化ツール |
mobiloop-verify-mcp | アサーションおよび証拠の収集 |
mobiloop-flow-mcp | ソースフロー分析およびチェックポイントの再生 |
mobiloop-loop-mcp | イテレーションの記録およびレポート |
mobiloop-ci-mcp | 成果物マニフェスト、GitHub のサマリー、PR コメント |
mobiloop-orchestrator-mcp | Android および 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_* の名前を使用してください。
共通フィールド:
| 項目 | デフォルト値 | 目的 |
|---|---|---|
securityMode | secure | secure ではプロジェクトローカルの設定を無視し、trusted では明示的な上書きを有効にします |
workspaceRoot | 現在の作業ディレクトリ | MCP サーバーがアクセスできるモバイルアプリのワークスペース |
artifactsDir | .mobiloop | 証跡、ログ、スクリーンショット、レポート、フローメモリー |
runId | 未設定 | 任意の実行識別子。成果物は .mobiloop/runs/<id> に書き込まれます |
maxCommandMs | 120000 | コマンドのデフォルトのタイムアウト |
maxOutputBytes | 1048576 | コマンドツールの出力上限 |
maxFixAttempts | 3 | 推奨される修正ループの上限 |
maxTestIterations | 5 | オーケストレーターのループ上限 |
maxRuntimeMinutes | 30 | 推奨される合計実行時間の上限 |
allowedBranchPattern | ^feature/ai-[A-Za-z0-9._/-]+$ | コミットツールを使用できるブランチ |
appiumServerUrl | http://127.0.0.1:4723 | trusted モードの Appium エンドポイント。secure モードではホスト環境を使用します |
adbPath | adb | Android Debug Bridge のパス |
emulatorPath | emulator | Android エミュレーター CLI のパス |
xcrunPath | xcrun | iOS シミュレーター CLI のパス |
xcodebuildPath | xcodebuild | Xcode ビルド CLI のパス |
sqlitePath | sqlite3 | 読み取り専用アサーション用の SQLite CLI のパス |
apiAllowlist | localhost のみ | API 検証で許可される URL |
appiumAllowlist | localhost のみ | trusted モードの Appium オリジン許可リスト |
forbiddenPathGlobs | シークレット関連のデフォルト値 | 読み取り/書き込み操作が禁止されるファイル |
toolPolicies | 組み込みのデフォルト値 | trusted モードでのツールごとのリスクおよび承認メタデータの上書き |
requireApproval | secure モードでは true | 影響の大きいツールで承認ペイロードを必須にします |
redactArtifacts | true | テキスト成果物とテキスト応答から一般的なシークレットと個人情報を伏せます |
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"
}
}
推奨される初回実行
MOBILOOP_WORKSPACE_ROOTをモバイルアプリに設定します。security.scan_sourceとsecurity.generate_test_planを実行します。- エミュレーターを起動するかデバイスを接続してから、Appium を起動します。
env.preflightとflow.analyze_from_codeを実行します。- 承認済みのビルド/リント/単体テストのアクションを実行します。
- アプリをインストールし、Appium セッションを作成して、小規模なユーザーフローを 1 つ検証します。
- 証拠を収集します。バグが確認された場合は、修正を適用して再実行し、セキュリティスキャンを比較します。
- 修正がリリース可能と判断する前に、
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_textappium.tap_by_accessibility_idappium.tap_by_resource_idappium.tap_coordinatesappium.type_textappium.swipeappium.go_backappium.wait_for_visibleappium.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*.mobileprovisionGoogleService-Info.plistgoogle-services.jsonsecretまたは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_filecode.search_codecode.apply_patchcode.git_diffcode.create_branchcode.commit_changescode.open_pr
環境
env.preflightenv.compatibility_matrixenv.ensure_appium
ビルド
build.detect_projectbuild.install_dependenciesbuild.run_lintbuild.run_unit_testsbuild.build_debug_apkbuild.build_release_candidatebuild.collect_build_logs
セキュリティ
security.scan_sourcesecurity.generate_test_plansecurity.compare_scanssecurity.release_gate
Android デバイス
device.list_devicesdevice.start_emulatordevice.stop_emulatordevice.install_appdevice.uninstall_appdevice.clear_app_datadevice.grant_permissionsdevice.capture_screenshotdevice.pull_logs
iOS
ios.list_simulatorsios.boot_simulatorios.shutdown_simulatorios.build_appios.install_appios.launch_appios.capture_screenshotios.collect_logs
Appium
appium.create_sessionappium.delete_sessionappium.observe_screenappium.get_page_sourceappium.get_accessibility_treeappium.tap_by_textappium.tap_by_accessibility_idappium.tap_by_resource_idappium.tap_coordinatesappium.type_textappium.swipeappium.go_backappium.wait_for_visibleappium.assert_visibleappium.assert_not_visible
検証
verify.assert_screen_contains_textverify.assert_no_crash_in_logcatverify.assert_appium_session_healthyverify.assert_api_responseverify.collect_evidenceverify.assert_navigation_reachedverify.assert_accessibility_labelsverify.assert_screenshot_diffverify.assert_sqlite_queryverify.hash_artifact
フロー
flow.analyze_from_codeflow.generate_test_scenariosflow.run_scriptflow.record_checkpointflow.record_test_runflow.plan_replayflow.replay_to_checkpointflow.read_memoryflow.clear_memory
ループ
loop.record_iterationloop.read_iterationsloop.generate_report
CI
ci.collect_artifact_manifestci.write_github_step_summaryci.comment_prci.create_github_annotations
ポリシー
policy.list_tools
オーケストレーター
orchestrator.run_android_validation_looporchestrator.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
- docs/ARCHITECTURE.md
- docs/ARCHITECTURE_DETAILED.md
- docs/TOOL_REFERENCE.md
- docs/CONFIGURATION.md
- docs/AGENT_PROTOCOL.md
- docs/TEST_STRATEGY.md
- docs/CI_CD.md
- docs/SECURITY_THREAT_MODEL.md
- docs/OPERATIONS.md
- docs/OPERATIONS_RUNBOOK.md
- docs/TROUBLESHOOTING_DETAILED.md
- docs/FLOW_MEMORY.md
- docs/ORCHESTRATOR.md
- docs/RELEASE_PROCESS.md
- docs/LIMITATIONS.md
- docs/EXAMPLES.md
- docs/QUICKSTART_FLUTTER.md
- docs/DOCKER.md
- docs/SECURITY.md
- docs/demo/flutter-login-loop.md
- docs/releases/v0.1.0-alpha.1.md
- docs/releases/v0.1.0-alpha.2.md
- docs/releases/v0.1.0-alpha.3.md
- docs/releases/v0.1.0-alpha.4.md
- docs/releases/v0.1.0-alpha.10.md
- docs/releases/v0.1.0-alpha.11.md
- docs/releases/v0.1.0-alpha.14.md
- docs/releases/v0.1.0-alpha.15.md
- docs/releases/v0.1.0-alpha.13.md
- docs/releases/v0.1.0-alpha.12.md
- .github/workflows/android-fixture-e2e.yml
- .github/workflows/deploy-pages.yml
- examples/android-validation-loop.json
- examples/flutter-ios-validation-loop.json
- examples/flow-memory-replay.json
- examples/github-actions-mobiloop.yml
- examples/mobile-fixtures/flutter-login-demo
- examples/mobile-fixtures/android-kotlin-login-demo
- examples/mobile-fixtures/react-native-login-demo
- examples/artifacts/successful-loop-report.md
- examples/artifacts/real-runs/flutter-login-android
- examples/artifacts/real-runs/native-android-login
License
MIT. See LICENSE.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。