はじめに
第1回(概要編)では、「操作の手がかりはモデルから、期待値は仕様から」という考え方と、全体の構成を紹介しました。
第2回の今回は、その構成を実際に組み立てます。Service Studio の MCP サーバーと mabl MCP を Claude Code につなぎ、O11 と mabl のスキルを入れ、作業の土台になる Git リポジトリを用意するところまでです。
| 回 | 内容 |
|---|---|
| 1. 概要編 | なぜ独立した検証が必要か、考え方の核、全体の構成 |
| 2. 環境構築編(この記事) | Service Studio の MCP と mabl MCP を Claude Code につなぐ |
| 3. 仕様とモデルの突き合わせ編 | AIに仕様と実装の食い違いを見つけさせる |
| 4. テスト作成・実行編 | 仕様どおりの期待値で mabl のテストを作る |
| 5. 修正ループ編 | AIが直し、人が Compare and Merge で取り込む |
| 6. メンテナンス編 | 同期コマンドとバージョン管理で回し続ける |
構成のおさらい
今回つなぐのは次の3つです。
| 部品 | 動く場所 | 接続先 |
|---|---|---|
| Service Studio の MCP サーバー | 手元のPC | http://127.0.0.1:41820/mcp |
| mabl MCP | クラウド | https://mcp.mabl.com/mcp |
| Claude Code | 手元のPC | 上の2つに MCP クライアントとして接続 |
アプリ本体は O11 の個人環境で動かし、mabl はそのアプリをブラウザで操作してテストします。
O11 側の準備
個人環境と Service Studio
検証には、OutSystems が提供する O11 の個人環境(Personal Environment)を使いました。デモアプリはここに公開しています。
Service Studio は、11.55.91 以降で MCP サーバーに対応しています。Mac 版もあります。今回は 11.55.93 を使いました。
個人環境のサーバーは UTC で動いています。日本時間の0時〜9時は、サーバー側の「今日」が日本の前日になります。日付を扱う業務ルールをテストするときは注意してください(第4回でも触れます)。
MCP サーバーを起動する
Service Studio で対象のモジュールを開き、MCP Server の設定画面からサーバーを起動します。状態が Running になれば準備完了です。
設定画面で確認するのは次の3点です。
| 項目 | 設定 | 理由 |
|---|---|---|
| Port / URL | 41820 / http://127.0.0.1:41820/mcp
|
Claude Code の接続先として使う |
| Start when Service Studio opens | オン | 毎回起動し忘れないように |
| Write permissions (Beta) | Manual review changes in compare and merge | AIの変更を、人が差分で確認してから取り込むため |
Write permissions のもう一方の選択肢(Allow automatically merge and publish)を選ぶと、AIの変更がそのまま公開まで進みます。今回の構成では「取り込むかどうかは人が決める」ことを大事にしているので、手動レビューを選びました。なお、書き込みの機能は執筆時点では Beta です。
O11 のスキルを入れる
OutSystems が、O11 の MCP をエージェントから使うためのスキルを GitHub で公開しています。Claude Code の場合は、次の手順で入ります。
git clone https://github.com/OutSystems/outsystems11-mcp.git
cd outsystems11-mcp
bash scripts/install.sh
スキルには、モデルの読み方や変更の進め方など、O11 の MCP ツールを使うときの手順がまとまっています。
mabl 側の準備
mabl では、テスト対象のアプリに合わせて、ワークスペースに次のものを用意しました。いずれも mabl の画面から設定できます。
| 用意したもの | 内容 |
|---|---|
| アプリケーションと環境 | 経費申請アプリと、O11 個人環境の URL |
| クレデンシャル | 申請者2人、承認者1人のテストユーザー |
| 共有フロー | ログインとログアウト。各テストから呼び出す |
テストユーザーを3人に分けたのは、「自分の申請は承認できない」のような、ユーザーの組み合わせで決まる業務ルールを確かめるためです。
mabl のエージェントへの指示(Agent instructions)も設定しますが、これは第4回で詳しく紹介します。
mabl のスキルを入れる
mabl も、コーディングエージェント向けのスキルを mablhq/skills で公開しています。Claude Code のプラグインとして入れると、スキルと MCP サーバーの設定がまとめて入ります。
前提として、次の2つを用意しておきます。
- mabl CLI のインストールとログイン(Node.js 20 以上が必要)
- ターミナルで動く Claude Code 本体(VS Code の拡張機能ではないもの)
npm install -g @mablhq/mabl-cli
mabl auth login --auto
続いて、ターミナルで Claude Code を起動し、プラグインを入れます。
claude
/plugin marketplace add mablhq/skills
/plugin install mabl@mabl
VS Code の Claude Code 拡張機能では、/plugin コマンドによるプラグインのインストールに対応していません。そのため、プラグインはターミナルの Claude Code から入れました。O11 のスキルもターミナルから入れているので、スキルの準備はどちらもターミナルで済ませ、普段の作業は VS Code の拡張機能から行う、という分担です。
入るスキルは次の5つです。
| スキル | 内容 |
|---|---|
mabl-init |
プロジェクトの初期設定。ワークスペース、アプリケーション、環境、クレデンシャルを調べ、CLAUDE.md などに書き込む |
mabl-test-authoring |
対話しながらテストの計画を立て、mabl のクラウドでテストを作る |
mabl-test-coverage-design |
機能単位で、必要なテストの一式を設計して作る |
mabl-test-edit |
既存のテストを変更する |
mabl-debug |
失敗したテストの原因を調べて直す |
あわせて、mabl MCP(https://mcp.mabl.com/mcp)と、ブラウザを操作するための2つの MCP サーバー(chrome-for-mabl、chrome-devtools)も設定されます。
Cursor、GitHub Copilot、OpenAI Codex 向けの入れ方も、リポジトリの README にまとまっています。
mabl-init は、調べたワークスペースの情報を CLAUDE.md に書き込みます。すでに独自のルールを書いた CLAUDE.md がある場合は、書き込まれた内容がリポジトリのルールと食い違っていないかを確認してください(後述の「スキルとルールの食い違いを洗い出す」も参照)。
Claude Code に2つの MCP をつなぐ
リポジトリの直下に .mcp.json を置き、2つの MCP サーバーを登録します。mabl のプラグインを入れた場合、mabl MCP はプラグイン側でも設定されますが、どの接続先を使うかをリポジトリで明示しておくため、ここにも書いています。
{
"mcpServers": {
"servicestudio": {
"type": "http",
"url": "http://127.0.0.1:41820/mcp"
},
"mabl": {
"type": "http",
"url": "https://mcp.mabl.com/mcp"
}
}
}
mabl MCP は OAuth で認証します。初回に使うときに、ブラウザで認可を求められます。
タイムアウトを延ばしておく
O11 のモデルを変更するツールは、Service Studio 側で取り込みや検証が走るため、完了までに時間がかかることがあります。Claude Code の MCP ツールのタイムアウトを長めにしておきます。
export MCP_TOOL_TIMEOUT=1800000 # ミリ秒、30分
claude
servicestudio のツールは並列で呼ばない
検証中にいちばんつまずいたのがこれです。Claude Code は、複数のツールを並列で呼び出して作業を速めようとすることがあります。servicestudio のツールを並列で呼ぶと、OML not found のエラーになりました。
後で紹介する CLAUDE.md に「servicestudio のツールは1つずつ呼ぶ」と書いておくと、エージェントが守ってくれます。
作業の土台になる Git リポジトリ
O11 のモデルは Service Studio とサーバーに、mabl のテストは mabl のクラウドにあります。リポジトリに置くのは、そのどちらにもない情報です。
| 置いたもの | 役割 |
|---|---|
apps/ExpenseApp/business-rules.md |
業務ルール。テストの期待値の正本 |
apps/ExpenseApp/ のその他 |
画面の一覧、エンティティ、テストのカタログなど、モデルから同期した事実 |
prompts/ |
繰り返し使う依頼。誰が実行しても同じ結果になるように |
workspace/ |
mabl のアプリ、環境、クレデンシャル、プランの ID の対応表 |
results/ |
テストの実行結果の要約 |
CLAUDE.md |
エージェントへのルール |
.mcp.json |
MCP サーバーの接続先 |
エージェントに mabl の ID を推測させず、workspace/ の対応表から取らせるようにしたことで、間違ったテストやプランを操作する事故がなくなりました。
CLAUDE.md に書いたルール
CLAUDE.md には、毎回プロンプトで言わなくてもエージェントが守るべきルールを書きます。今回の要点は次のとおりです(実際の文面を要約したものです)。
## 仕様とO11モデルの関係
- 業務ルールの正本は apps/ExpenseApp/business-rules.md と、O11モデルの Description。
- O11の実装ロジック(Ifの条件など)を、期待値の答えとして使わない。
- 仕様と実装が食い違っていたら、どちらかを書き換えずに報告する。
## servicestudio のツール
- 並列で呼ばない。1つずつ呼ぶ。
- O11モデルを変更する前に、変更内容を日本語で説明する。
- omlMerge が待ち時間切れでエラーになっても、再実行せずにユーザーに確認する。
## ユーザーの確認が必要な操作
- コミット、push、mablでの削除、O11モデルの変更。
1つ目のブロックが、第1回で紹介した「期待値は仕様から」を、エージェントのルールとして書いたものです。
スキルとルールの食い違いを洗い出す
O11 と mabl のスキルを入れた後、スキルの手順と CLAUDE.md のルールが食い違う箇所を、エージェント自身に洗い出させました。今回は5つ見つかりました。
スキルは汎用的に書かれているので、「このリポジトリではこうする」というルールとぶつかることがあります。スキルを入れたら一度、食い違いを確認しておくと、後で思わぬ動きをされずに済みます。
動作確認
準備ができたら、Service Studio でモジュールを開いて MCP サーバーが Running になっていることを確認し、Claude Code を起動します。servicestudio と mabl の両方のツールが使える状態になっていれば完了です。
最初に servicestudio のツールを呼ぶと、Service Studio 側にアクセスを許可するかどうかの確認が表示されます。Service Studio のウィンドウが Claude Code の後ろに隠れていると、エージェントが待ち状態のまま止まって見えるので注意してください。
まとめ
| やったこと | ポイント |
|---|---|
| Service Studio の MCP サーバーを起動 | 書き込みは「Compare and Merge で手動レビュー」 |
| O11 と mabl のスキルを導入 | 入れた後に CLAUDE.md との食い違いを確認 |
| mabl のワークスペースを準備 | テストユーザーは業務ルールに合わせて複数用意 |
.mcp.json で2つの MCP を登録 |
タイムアウトを延ばし、servicestudio は並列で呼ばない |
| Git リポジトリを用意 | 仕様、ID の対応表、プロンプト、ルールを置く |
次回は、この環境を使って、O11 のモデルと業務ルールを突き合わせ、仕様と実装の食い違いを AI に見つけさせます。
この記事は個人の検証結果をまとめたものです。所属する組織の公式な見解ではありません。mabl に関する記述は、公開されている製品情報とドキュメントにもとづいています。


