sauce-api-mcp について
sauce-api-mcpは、デバイスクラウドテストを管理するチーム向けにSauce LabsのテストサービスへMCP経由でアクセスするサーバーです。コアAPIサーバーと、公式OpenAPI仕様からツールを動的生成するRDCサーバーを含みます。
主な機能
- 01アカウント、チーム、権限の確認
- 02デバイスの検索と利用状況の確認
- 03ジョブ、ビルド、ログ、テスト資産の調査
- 04アップロード済みアプリとトンネルの管理
- 05OpenAPI仕様からRDCツールを生成
- 06大きなリストレスポンスの制限
活用シーン
- 01最近のテスト失敗の調査
- 02利用可能な実機の検索
- 03ビルド性能とジョブ成果物の確認
- 04Sauce Connectトンネルの監視
MCP 対応
2つのMCPサーバーを提供します。コアサーバーはSauce Labsのアカウント、デバイス、ジョブ、ビルド、ストレージ、トンネルAPIに対応し、RDCサーバーはAPIツールを動的に生成します。どちらもMCPクライアントに設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Sauce Labs MCP サーバー
Sauce Labs のテストプラットフォームと包括的に統合する Model Context Protocol(MCP)サーバーです。この パッケージには、AI アシスタントが自然言語での会話を通じて Sauce Labs のデバイスクラウドを操作し、テストジョブを管理し、 ビルドを分析し、テストインフラストラクチャを監視できる、相互に補完する 2 つの MCP サーバーが含まれています。
ヒント
ホスト型で、より多機能なオプションをお求めですか? Sauce MCP は、 Sauce Labs が
https://mcp.saucelabs.comでホストする公式 MCP サーバーです。インストールや更新は不要で、 このパッケージより幅広いツールを提供します。これには、実デバイスのライブ制御(タップ、入力、スクリーンショット、アプリの インストール/起動)、ネットワークキャプチャ、AI を活用したテストケースの作成、実行、スケジュール設定が含まれます。設定手順については、 AI クライアントを接続するをご覧ください。
サーバー
このパッケージには、用途に合わせて最適化された 2 つの独立した MCP サーバーが含まれています。
sauce-api-mcp(コアサーバー) — アカウント管理、デバイス検索、ジョブ分析、ビルド、ストレージ、トンネルに対応した Sauce Labs API の完全な統合です。
sauce-api-mcp-rdc(RDC サーバー) — Real Device Cloud(RDC)に特化したサーバーです。起動時に、公式 Sauce Labs OpenAPI 仕様から
FastMCP の OpenAPIProvider を使って MCP ツールを動的に生成するため、コードを変更せずにツールセットを常に最新の状態に保てます。バイナリペイロード、セッションのライフサイクル、アプリのインストール状況のポーリングなど、特別な処理が必要なエンドポイント向けに、手書きのツールも少数含まれています。
LLM クライアントで両方のサーバーを同時に設定すると、Sauce Labs の全機能を利用できます。
機能
🚀 主な機能
- アカウント管理:アカウントの詳細、チーム情報、ユーザー権限を確認できます
- デバイスクラウドへのアクセス:300 台以上の実デバイス(iOS、Android)と仮想マシンを閲覧できます
- テストジョブ管理:最近のジョブを取得し、テスト結果を分析して、失敗をデバッグできます
- ビルドの監視:ビルドのステータスを追跡し、ジョブの一覧を確認して、テストスイートを分析できます
- ストレージ管理:アップロードしたアプリやテスト成果物を管理できます
- トンネルの監視:Sauce Connect トンネルのステータスと設定を確認できます
🔧 高度な機能
- リアルタイムのデバイスステータス:データセンター全体のデバイスの空き状況と使用状況を監視できます
- クロスプラットフォームテスト:Virtual Device Cloud(VDC)と Real Device Cloud(RDC)の両方に対応しています
- テスト分析:ログ、動画、パフォーマンス指標など、ジョブの詳細情報を確認できます
- チームでの共同作業:適切なアクセス制御を備えた複数チームのサポート
- 動的な RDC API:
sauce-api-mcp-rdcは起動時に OpenAPI 仕様から最新の RDC v2 エンドポイントを自動検出します。 ネットワークに接続できない場合は、キャッシュされた仕様をフォールバックとして使用します - レスポンスの整形:大きな API のリストレスポンスは自動的に切り詰められ、LLM のコンテキスト予算を抑えます(
SAUCE_MCP_MAX_RESPONSE_ITEMSで設定可能) - ファイルの安全性:デバイスとのファイルの送受信は
~/.sauce-mcp/files/内に制限され、パストラバーサルを防ぎます
前提条件
- Python 3.10+
pip- API アクセスが可能な Sauce Labs アカウント
- Claude Desktop、Gemini CLI、Goose、またはその他の MCP 対応 LLM クライアント
インストール
PyPI からパッケージをインストールします。
pip install sauce-api-mcp
これにより、両方のサーバーがインストールされ、コマンドラインのエントリーポイントが登録されます。
sauce-api-mcp— コアサーバーsauce-api-mcp-rdc— RDC OpenAPI サーバー
インストールを確認します。
which sauce-api-mcp
which sauce-api-mcp-rdc
LLM クライアントの設定
Claude Desktop(Mac / Linux / Windows)
-
Claude Desktop の設定ファイルを確認します:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
- macOS:
-
Python のインストール先にある
binディレクトリを確認します:python3 -c "import sys; print(sys.prefix + '/bin')" -
両方のサーバーを設定に追加します:
{ "mcpServers": { "sauce-api-mcp-core": { "command": "/path/to/bin/sauce-api-mcp", "env": { "SAUCE_USERNAME": "your-sauce-username", "SAUCE_ACCESS_KEY": "your-sauce-access-key" } }, "sauce-api-mcp-rdc": { "command": "/path/to/bin/sauce-api-mcp-rdc", "env": { "SAUCE_USERNAME": "your-sauce-username", "SAUCE_ACCESS_KEY": "your-sauce-access-key" } } } } -
Claude Desktop を再起動して、サーバーを読み込みます。
Gemini CLI
~/.gemini/settings.json に追加します:
{
"mcpServers": {
"sauce-api-mcp-core": {
"command": "/path/to/bin/sauce-api-mcp",
"env": {
"SAUCE_USERNAME": "your-sauce-username",
"SAUCE_ACCESS_KEY": "your-sauce-access-key"
}
},
"sauce-api-mcp-rdc": {
"command": "/path/to/bin/sauce-api-mcp-rdc",
"env": {
"SAUCE_USERNAME": "your-sauce-username",
"SAUCE_ACCESS_KEY": "your-sauce-access-key"
}
}
}
}
Goose
~/.config/goose/config.yaml に追加します:
sauce-api-mcp-core:
cmd: /path/to/bin/sauce-api-mcp
description: Sauce Labs MCP (Core)
enabled: true
envs:
SAUCE_USERNAME: your-sauce-username
SAUCE_ACCESS_KEY: your-sauce-access-key
type: stdio
sauce-api-mcp-rdc:
cmd: /path/to/bin/sauce-api-mcp-rdc
description: Sauce Labs MCP (RDC)
enabled: true
envs:
SAUCE_USERNAME: your-sauce-username
SAUCE_ACCESS_KEY: your-sauce-access-key
type: stdio
環境変数(代替方法)
認証情報を設定ファイルに追加する代わりに、環境変数としてエクスポートできます:
export SAUCE_USERNAME="your-sauce-username"
export SAUCE_ACCESS_KEY="your-sauce-access-key"
その後、設定から env ブロックを省略します。両方のサーバーが自動的に環境変数を読み込みます。
設定
必須の環境変数
| 変数 | 説明 |
|---|---|
SAUCE_USERNAME | Sauce Labs のユーザー名 |
SAUCE_ACCESS_KEY | Sauce Labs のアクセスキー(アカウント設定にあります) |
オプションの環境変数
| 変数 | デフォルト | 説明 |
|---|---|---|
SAUCE_REGION | US_WEST | データセンターのリージョン:US_WEST、US_EAST、EU_CENTRAL |
SAUCE_MCP_MAX_RESPONSE_ITEMS | 100 | 切り捨て前に返されるリスト項目の最大数(RDC サーバー) |
Sauce Labs の認証情報を取得する
- Sauce Labs アカウントにログインします
- Account → User Settings に移動します
- Username と Access Key をコピーします
インストールのトラブルシューティング
「Command not found: sauce-api-mcp」
エントリポイントスクリプトが PATH にありません。フルパスを指定する方法を使用します:
python3 -m pip list | grep sauce-api-mcp
python3 -c "import sys; print(sys.prefix + '/bin/sauce-api-mcp')"
MCP クライアントでの「ENOENT: no such file or directory」
MCP クライアントが別の Python 環境を使用しています。解決方法:
- 絶対フルパスを使用する(推奨) —
which sauce-api-mcpではなく、python3 -c "import sys; print(sys.prefix + '/bin/sauce-api-mcp')"で表示されたパスを設定に指定します - モジュール呼び出し(代替方法):
"command": "python3", "args": ["-m", "sauce_api_mcp.main"]
プロンプトの例
- 「最近のテスト失敗を表示して」
- 「利用可能な iPhone 16 デバイスを探して」
- 「最新のビルドのパフォーマンスを分析して」
- 「Samsung デバイスでセッションを開始して、アプリをインストールして」
- 「現在、どのトンネルが実行中?」
利用可能なツール
コアサーバー(sauce-api-mcp)
アカウントと組織
| ツール | 説明 |
|---|---|
get_account_info | 現在のユーザーアカウント情報を取得します |
lookup_users | 組織内のユーザーを検索します |
get_user | ユーザーの詳細情報を取得します |
lookup_teams | 組織内のチームを検索します |
get_team | チームの詳細を取得します |
list_team_members | 特定のチームのメンバー全員を一覧表示します |
lookup_service_accounts | サービスアカウントを一覧表示します |
get_service_account | サービスアカウントの詳細を取得します |
get_my_active_team | 認証済みユーザーのアクティブなチームを取得します |
デバイス管理
| ツール | 説明 |
|---|---|
get_devices_status | すべてのデバイスと現在のステータスを一覧表示します |
get_specific_device | 特定のデバイスの詳細情報を取得します |
get_private_devices | アカウントで利用可能なプライベートデバイスを一覧表示します |
テストジョブ
| ツール | 説明 |
|---|---|
get_recent_jobs | 最近のテストジョブを取得します |
get_job_details | 特定のジョブに関する詳細情報を取得します |
get_real_device_jobs | 実機上のアクティブなジョブを一覧表示します |
get_specific_real_device_job | 特定の実機ジョブの詳細を取得します |
get_specific_real_device_job_asset | ジョブのアセット(ログ、動画、スクリーンショット)をダウンロードします |
ビルド
| ツール | 説明 |
|---|---|
lookup_builds | フィルターを指定してビルドを検索します |
get_build | 特定のビルドに関する詳細情報を取得します |
get_build_for_job | ジョブに関連付けられたビルドを取得します |
lookup_jobs_in_build | ビルド内のすべてのジョブを一覧表示します |
ストレージ
| ツール | 説明 |
|---|---|
get_storage_files | アップロード済みのアプリケーションファイルを一覧表示します |
get_storage_groups | アプリのストレージグループを一覧表示します |
get_storage_groups_settings | ストレージグループの設定を取得します |
upload_file_to_storage | アプリファイルをSauce Storageにアップロードします |
update_storage_group_settings | アプリグループの設定(再署名、インストルメンテーションなど)を更新します |
トンネル
| ツール | 説明 |
|---|---|
get_tunnels_for_user | アクティブなSauce Connectトンネルを一覧表示します |
get_tunnel_information | 特定のトンネルの詳細を取得します |
get_current_jobs_for_tunnel | トンネルを使用しているジョブ数を確認します |
get_tunnel_version_downloads | Sauce Connectの各バージョンのダウンロードURLを取得します |
テストアセットとログ
| ツール | 説明 |
|---|---|
get_test_assets | VDCジョブのテスト成果物を取得します |
get_log_json_file | VDCジョブのテスト実行ログを構造化形式で取得します |
get_network_har_file | フィルタリングしたHARネットワークキャプチャーデータを取得します |
filter_har_data | キャッシュ済みのHARデータを効率的にフィルタリングします(再ダウンロードを回避) |
RDC サーバー(sauce-api-mcp-rdc)
RDC サーバーは、Sauce Labs RDC v2 OpenAPI仕様からツールを自動生成します。仕様の進化に伴い、ツールの全リストは変化しますが、以下のカテゴリは常に含まれます。
セッション管理
| ツール | 説明 |
|---|---|
createSession | 実機を割り当て、ACTIVEセッションを返します。ACTIVEになるかタイムアウトするまでポーリングします(約55秒) |
listSessions | オプションのフィルタリングを指定して、現在のデバイスセッションを一覧表示します |
deleteSession | セッションを終了し、デバイスをプールに返却します |
get_session_details | 特定のセッションの詳細情報をすべて取得します |
デバイスの検出
| ツール | 説明 |
|---|---|
listDevices | OS/モデルで絞り込んで、デバイスカタログ全体を閲覧します |
list_device_status | デバイスのリアルタイムの利用可能状況を取得します |
アプリ管理
| ツール | 説明 |
|---|---|
installApp | デバイスでアプリのインストールを開始します(インストール ID を返します) |
waitForAppInstallation | インストール状況をポーリングします。FINISHED になるまで繰り返し呼び出します |
launchApp | インストール済みのアプリを起動します |
uninstallApp | デバイスからアプリを削除します |
list_app_installations | 進行中または最近のアプリのインストールを一覧表示します |
install_app_from_storage | Sauce Storage からアプリをインストールします |
デバイス操作
| ツール | 説明 |
|---|---|
take_screenshot | 現在のデバイス画面をキャプチャします |
open_url_or_deeplink | デバイスで URL またはディープリンクを開きます |
execute_shell_command | adb シェルコマンドを実行します(Android) |
applyDeviceSettings | デバイス設定(向き、ロケールなど)を変更します |
ファイル操作
| ツール | 説明 |
|---|---|
push_file_to_device | ローカルファイルをデバイスにアップロードします(~/.sauce-mcp/files/ のみに制限) |
pull_file_from_device | デバイスからファイルをダウンロードします |
listFiles | デバイスのディレクトリ内のファイルを一覧表示します |
removeFile | デバイスからファイルを削除します |
statFile | デバイス上のファイルまたはディレクトリのメタデータを取得します |
ネットワークとプロキシ
| ツール | 説明 |
|---|---|
proxy_http | デバイスのプロキシ経由で HTTP リクエストを転送します |
startNetworkCapture / stopNetworkCapture | ネットワークトラフィックをキャプチャします |
setNetworkProfile / setNetworkConditions | ネットワーク状況をシミュレートします |
listNetworkProfiles | 利用可能なネットワークプロファイルを一覧表示します |
resetNetworkConditions | 通常の接続状態に戻します |
Appium
| ツール | 説明 |
|---|---|
startAppiumServer | デバイスと同じ場所でホストされる Appium サーバーを起動します |
getAppiumServerStatus | Appium の実行状況を確認し、エンドポイント URL を取得します |
listAppiumVersions | 利用可能な Appium のバージョンを一覧表示します |
launchWebDriverAgent | iOS デバイスで WDA を起動します |
getWebDriverAgentStatus | WDA のステータスを確認します |
開発環境のセットアップ
前提条件
- Python 3.10+
uvパッケージマネージャー- Git
クローンとセットアップ
git clone https://github.com/saucelabs/sauce-api-mcp.git
cd sauce-api-mcp
uv sync
これにより、仮想環境を作成し、すべての依存関係(テスト用の追加依存関係を含む)を編集可能モードでインストールします。
プロジェクト構成
sauce-api-mcp/
├── src/sauce_api_mcp/
│ ├── main.py # Core server — hand-written MCP tools
│ ├── rdc_dynamic.py # RDC server — OpenAPIProvider + hand-written tools
│ ├── models.py # Pydantic response models
│ └── shared/ # Shared utilities
├── tests/ # Test suite
├── server.json # MCP Registry manifest
├── pyproject.toml # Package config, entry points, PSR release config
└── uv.lock # Locked dependencies
サーバーをローカルで実行する
uv run sauce-api-mcp
uv run sauce-api-mcp-rdc
どちらも Error: This server is not meant to be run interactively と表示します。これは想定どおりです(ターミナルではなく、MCP クライアントと標準入出力経由で通信します)。
ローカルの開発チェックアウトを MCP クライアントに指定するには、次のようにします。
{
"command": "/path/to/sauce-api-mcp/.venv/bin/sauce-api-mcp"
}
テストの実行
テストは次の3つのグループに分かれています。
# Integration tests (no live credentials required)
uv run pytest -m "not live and not slow"
# Live tests (require SAUCE_USERNAME + SAUCE_ACCESS_KEY)
uv run pytest -m "live and not slow"
# Slow tests (allocate real devices — takes minutes)
uv run pytest -m "slow"
# Full suite
uv run pytest
依存関係の追加
uv add httpx
uv add --dev pytest-asyncio
CI/リリースワークフロー
継続的インテグレーション
main を対象とするすべてのプルリクエストでは、build.yml を介して3つのジョブが順番に実行されます。
- test — Python 3.10、3.11、3.12 での統合テスト(並列実行)
- test-live — Python 3.12 でのライブテスト(
testの後に実行) - test-slow — Python 3.12 での低速テスト(
test-liveの後に実行)
リリース
GitHub Actions の Release ワークフロー(publish.yml)から手動でリリースを実行します。
- Actions → Release → Run workflow に移動します
- リリースの種類として
patch、minor、major、prereleaseのいずれかを選択します - プレリリースの場合は、必要に応じてトークン(
alpha、beta、rc)を設定します
その後、ワークフローによって次の処理が行われます。
python-semantic-releaseを使用して、pyproject.tomlとserver.jsonのバージョンを更新しますv*の Git タグと、自動生成された変更履歴を含む GitHub リリースを作成します- 安定版リリースを PyPI と MCP Registry に公開します
- プレリリース(alpha/beta/rc)は TestPyPI のみに公開します
コントリビューション
コントリビューションを歓迎します!ガイドラインについては、CONTRIBUTING.md をご覧ください。
ヘルプ
- Sauce Labs のドキュメント:docs.saucelabs.com
- API リファレンス:docs.saucelabs.com/dev/api
- サポート:アカウントダッシュボードから Sauce Labs サポートにお問い合わせください
- GitHub Issues:バグの報告や機能のリクエスト
変更履歴
リリースと変更の全履歴については、 GitHub Releases ページをご覧ください。
v1.1.0
sauce-api-mcpとsauce-labs-mcp(RDC OpenAPI)を統合し、単一のモノレポパッケージにしました- RDC に特化したサーバー用に
sauce-api-mcp-rdcエントリーポイントを追加しました - RDC サーバーを非推奨の
FastMCPOpenAPIからOpenAPIProvider + FastMCP(fastmcp 3.x)に移行しました workflow_dispatchとpython-semantic-releaseによるリリースワークフローを自動化しました。リリースの種類は作成者が選択します( patch/minor/major/prerelease)- CI を3つの順次実行ステージに分割しました:統合テスト(マトリックス 3.10–3.12)→ ライブテスト → 低速テスト
- 再現性のあるインストールのため、依存関係を
uv.lockで固定しました
v1.0.3
- Apache License 2.0 に更新しました(以前は MIT)
v1.0.2
- 公式 MCP Registry に登録しました
- Python 3.9 のサポートを追加しました
v1.0.1
- インストール手順を改善し、README を全面的に改訂しました
v1.0.0
- Sauce Labs API との完全な統合を備えた初回リリース
テストコミュニティのために ❤️ を込めて作成
ライセンス
Apache 2.0(バージョン 1.1.0 以降)
1.0.3 より前のバージョンは MIT License の下でリリースされました。
保証の免責
本ソフトウェアは「現状有姿」で提供され、明示的か黙示的かを問わず、商品性、特定目的への適合性、および権利侵害がないことの保証を含みますが、これらに限定されない、いかなる種類の保証も伴いません。いかなる場合も、作者または著作権者は、本ソフトウェアまたは本ソフトウェアの使用その他の取引に起因する、または関連する、契約、不法行為その他の理由によるあらゆる請求、損害その他の責任について、一切責任を負いません。
責任の制限
いかなる場合においても、SAUCE LABS, INC.は、本ソフトウェアの使用に起因するいかなる損害(代替の商品またはサービスの調達、使用、データもしくは利益の損失、または事業の中断を含みますが、これらに限定されません)について、その発生原因や責任の法理(契約、厳格責任、不法行為(過失その他を含みます)を含みますが、これらに限定されません)を問わず、またそのような損害の可能性について知らされていた場合であっても、直接的、間接的、付随的、特別、懲罰的、または結果的な損害に対して一切責任を負いません。
一般的な使用
MCP サーバーは、一般に公開されている API との連携を促進するための、無料のオープンソースツールとして提供されています。ユーザーは、Apache License 2.0 の条件に従って、ソフトウェアを自由に変更および配布できます。
本ソフトウェアを使用することで、お客様は自己の責任において使用していること、および適用されるすべての法令を遵守する責任を負うことを認めるものとします。
補償
お客様は、本ソフトウェアへのアクセスまたは使用に起因する、あるいは何らかの形で関連する、あらゆる請求、責任、損害、損失、または費用(合理的な弁護士費用および訴訟費用を含みます)について、Sauce Labs, Inc.(「Sauce Labs」)、その役員、取締役、従業員、および代理人を補償し、損害を与えないことに同意するものとします。
これには、以下が含まれますが、これらに限定されません。
-
サードパーティの LLM プロバイダーとのやり取り: 本ソフトウェアが、LLM とのやり取りに一般公開されている API を利用していることを認めるものとします。お客様は、サードパーティの LLM サービスの利用について単独で責任を負います。これには、LLM プロバイダーの利用規約の遵守、およびトークン料金などの利用に伴う費用が含まれます。Sauce Labs は、サードパーティの LLM プロバイダーのコンテンツ、プライバシーポリシー、または慣行を管理せず、それらについて一切責任を負いません。
-
LLM が生成するコンテンツ: MCP サーバーおよびその基盤となる LLM の使用を通じて生成、受信、または送信されるコンテンツについて、お客様が単独で責任を負います。Sauce Labs は、お客様または第三者がサーバーを通じて行う通信の内容を承認せず、管理もしません。
-
お客様のコードおよび変更: MCP サーバーを基にお客様が作成する変更、機能強化、または派生物はお客様自身のものであり、それらの性能および使用により生じる可能性のあるあらゆる責任について、お客様が単独で責任を負います。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。