mulewatch について
mulewatch は、ローカルの Mule プロジェクトを必要とせず、MuleSoft Anypoint 環境を確認する読み取り専用 MCP サーバーです。運用担当者向けに、最新・過去のログ、デプロイ状況、API Manager、Exchange の情報をまとめて提供します。
主な機能
- 01ビジネスグループと環境の一覧表示
- 02各ターゲットのデプロイ済みアプリ確認
- 03アプリログの取得と分析
- 04過去のモニタリングアーカイブ検索
- 05API Manager インスタンスの一覧表示
- 06Exchange アセットの検索
活用シーン
- 01最新ログからアプリのエラーを調査
- 02過去のインシデントに関するログを検索
- 03環境横断でデプロイと API アセットを確認
MCP 対応
stdio MCP サーバーが、担当者の認証情報を使って MCP クライアントを MuleSoft Anypoint に接続します。ログ、デプロイ、環境、API Manager、Exchange の読み取り専用ツールを提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y mulewatchANYPOINT_CLIENT_IDAnypoint connected app client id (app acts on its own behalf).ANYPOINT_CLIENT_SECRETシークレットAnypoint connected app client secret.ANYPOINT_ORG_IDBusiness group id to operate on. Defaults to the organization the credentials belong to.ANYPOINT_ALLOWED_ENVIRONMENTSComma-separated environment names or ids the server is allowed to read. Unset means all visible environments.ANYPOINT_BASE_URLAnypoint control plane host. Defaults to https://anypoint.mulesoft.com.ANYPOINT_MONITORING_BASE_URLAnypoint Monitoring host. Defaults to https://monitoring.anypoint.mulesoft.com.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
9掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
mulewatch
MCP 経由で MuleSoft Anypoint Platform を読み取り専用で可観測化します。
Anypoint のすべての顧客が自身の認証情報を使って、アプリケーションログ、履歴アーカイブ検索、Runtime Manager、API Manager、Exchange を利用できます。
機能
mulewatch は、MCP クライアント(Claude Desktop、Claude Code、Cursor、OpenClaw)を MuleSoft Anypoint Platform に接続します。これにより、Mule 環境について自然な言葉で質問し、プラットフォーム API から実際の回答を得られます。フローを書く人ではなく、ページャーを受け取る人を対象としており、ローカルの Mule プロジェクトは不要で、すべてのツールは読み取り専用です。
- Runtime Manager のアプリケーションログ。CloudHub 2.0、Runtime Fabric、従来の CloudHub にわたって正規化されます。
- Anypoint Monitoring Archive API を通じた履歴ログ検索。ライブテールのローリングバッファーに残っていない過去のインシデントも検索できます。
- 分析に適したログペイロード。正規化された行に加え、優先度、ロガー、レプリカ別の件数が含まれます。
- Application Manager、CloudHub、ハイブリッドなオンプレミスのターゲットにわたる Runtime Manager のインベントリ。
- API Manager のインスタンスと Exchange のアセットを網羅し、1 つのサーバーで「何がデプロイされ、何に接続され、何が問題を起こしたか」に回答できます。
特定の顧客向けにハードコードされているものはありません。ビジネスグループ、環境、認証情報はすべて、接続済みアプリから取得されます。
MuleSoft 公式 MCP サーバーとの違い
MuleSoft は独自の MCP サーバー(mulesoft-mcp-server、ドキュメント)を公開しています。これは開発ツールです。Mule プロジェクトのひな形を作成し、フローや API 仕様を生成して、主に IDE 内のローカルプロジェクトからアプリケーションをデプロイします。
mulewatch は運用ツールです。環境に書き込みを行わず、ローカルプロジェクトも必要とせず、公式サーバーがまったく扱わない領域、つまり Monitoring Archive の履歴ログを含むアプリケーションログの取得と検索に対応します。2 つのサーバーは問題なく併用できます。デプロイやひな形作成のツールが必要な場合は、公式のものをお使いください。
要件
- Node.js 20 以降
- 読み取りたいビジネスグループにアクセスできる Anypoint Platform アカウント
- 「自身に代わって動作する」 が有効な接続済みアプリ(推奨)、またはプラットフォームの認証情報
- 履歴ログ検索のみ:組織で Anypoint Monitoring が有効であること
接続アプリのスコープ
使用する対象に応じて、必要なビジネスグループと環境のスコープを付与してください。スコープが不足している場合、Anypoint は詳細を示さずに 403 Forbidden を返します。mulewatch はこれを捕捉し、必要と思われるスコープ名を表示します。
| 対象 | スコープ |
|---|---|
| 環境、ビジネスグループ | View Environments、View Organization |
| Runtime Manager のアプリとログ | Read Applications |
| 履歴アーカイブの検索 | Anypoint Monitoring の Viewer |
| API Manager のインスタンス | View APIs Configuration |
| Exchange アセット | Exchange の閲覧アクセス |
セットアップ
Anypoint Platform → Access Management → Connected Apps で接続アプリを作成し、「App acts on its own behalf (client credentials)」 を選択して、上記のスコープを付与し、クライアント ID とシークレットをコピーしてください。
設定は環境変数のみです。設定ファイルはなく、既定の組織もありません。
ANYPOINT_CLIENT_ID=your_connected_app_client_id
ANYPOINT_CLIENT_SECRET=your_connected_app_client_secret
| 変数 | 必須 | 用途 |
|---|---|---|
ANYPOINT_CLIENT_ID / ANYPOINT_CLIENT_SECRET | いずれかの認証方式 | 接続アプリのクライアント認証情報。自動化に推奨 |
ANYPOINT_USERNAME / ANYPOINT_PASSWORD | いずれかの認証方式 | プラットフォームへのログイン |
ANYPOINT_ACCESS_TOKEN | いずれかの認証方式 | 事前生成されたベアラートークン。他の 2 つより優先されます |
ANYPOINT_ORG_ID | いいえ | ビジネスグループ ID。未設定の場合は「認証情報に紐付けられた組織」になります |
ANYPOINT_ALLOWED_ENVIRONMENTS | いいえ | カンマ区切りの環境名または ID。設定すると、すべてのツールがリスト外の環境を拒否します |
ANYPOINT_BASE_URL | いいえ | コントロールプレーンのホスト。既定値は https://anypoint.mulesoft.com です |
ANYPOINT_MONITORING_BASE_URL | いいえ | Monitoring のホスト。既定値は https://monitoring.anypoint.mulesoft.com です |
ビジネスグループ
環境はルート組織ではなく、ビジネスグループに属します。anypoint_list_environments が空で返された場合、認証情報はルート組織に解決されています。anypoint_list_business_groups を呼び出して ID を一覧表示し、1 つを orgId として渡すか、ANYPOINT_ORG_ID に固定してください。
本番環境にアクセスできないようにする
ANYPOINT_ALLOWED_ENVIRONMENTS は個々のツールではなく、サーバー全体に適用されます。次の設定では、
ANYPOINT_ALLOWED_ENVIRONMENTS=Dev,Sandbox
対象のビジネスグループにかかわらず、すべてのツールがリスト外の環境を拒否し、その理由を示します。多層防御のため、アクセス可能な環境を限定した接続アプリと併用してください。
実行
インストールは不要です。MCP クライアントで npx を指定してください。
{
"mcpServers": {
"mulewatch": {
"command": "npx",
"args": ["-y", "mulewatch"],
"env": {
"ANYPOINT_CLIENT_ID": "your_connected_app_client_id",
"ANYPOINT_CLIENT_SECRET": "your_connected_app_client_secret"
}
}
}
}
この設定ブロックは Claude Desktop(claude_desktop_config.json)、Cursor(.cursor/mcp.json)、OpenClaw でそのまま動作します。Claude Code の場合:
claude mcp add mulewatch --env ANYPOINT_CLIENT_ID=... --env ANYPOINT_CLIENT_SECRET=... -- npx -y mulewatch
クローンから実行する場合:
npm install
npm run build
npm start
サーバーは stdio で通信します。これは MCP クライアントが想定する方式です。まず anypoint_whoami を実行して、他の操作を行う前に認証情報、ビジネスグループ、スコープを確認してください。
ツール
すべてのツールは読み取り専用です。いずれも orgId を指定して、設定済みのビジネスグループを上書きできます。
anypoint_whoami
サーバーが使用している認証情報、ビジネスグループ、ホスト、環境許可リストを確認します。引数はありません。問題が起きた場合は、まずこのツールを呼び出してください。
anypoint_list_business_groups
認証情報に紐付けられた組織配下のビジネスグループを、ID と階層の深さとともに一覧表示します。
{ "rootOrgId": "optional-root-organization-id" }
anypoint_list_environments
ビジネスグループの環境を一覧表示します。ANYPOINT_ALLOWED_ENVIRONMENTS が設定されている場合は、その値で絞り込みます。
{ "orgId": "your-business-group-id" }
anypoint_list_deployed_apps
environmentId または environmentName を指定して、環境にデプロイされた Mule アプリケーションを一覧表示します。
{ "environmentName": "Dev", "target": "all" }
| オプション | 用途 |
|---|---|
target | application_manager(デフォルト)、cloudhub、hybrid、または all |
limit | 返すレコードの最大数。デフォルトは 100 です |
includeRaw | レスポンスに未加工の API オブジェクトを含めます |
includeErrors | ターゲットのエンドポイントが利用できない場合、またはアクセスが許可されていない場合に、ターゲットごとのエラーを含めます |
application_manager は CloudHub 2.0 と Runtime Fabric のデプロイを対象とし、cloudhub はレガシー CloudHub、hybrid はオンプレミスの Runtime Manager を対象とします。all はすべてのターゲットに問い合わせ、処理を中断する代わりにターゲットごとの失敗を報告します。
anypoint_list_app_logs
アプリケーションの Runtime Manager の最新ログを一覧表示します。
{ "environmentName": "Dev", "appName": "my-mule-app" }
| オプション | 用途 |
|---|---|
environmentId | environmentName の代わりに使用します |
deploymentId | アプリ名が曖昧な場合、またはすでに判明している場合に使用します |
specId | 特定の Application Manager デプロイメント仕様/設定 ID |
target | auto(デフォルト)、application_manager、または cloudhub |
limit | ログエントリの最大数。デフォルトは 100、最大は 500 です |
offset | Application Manager のログオフセット。デフォルトは 0 です |
descending | 最新のログを先に表示します。デフォルトは true です |
startTime / endTime | Application Manager の時刻フィルター。ISO 8601 形式 |
includeRaw | 未加工の API レスポンスを含めます |
includeErrors | target が auto の場合、失敗したターゲットのエラーを含めます |
CloudHub 2.0 と Runtime Fabric では、このツールは appName からデプロイメントを特定し、現在の仕様を解決してから、その仕様のログを読み取ります。レガシー CloudHub では、CloudHub のログエンドポイントを直接呼び出します。
anypoint_get_app_logs_for_analysis
上記と同じソースを対象としますが、生のリストではなく、分析に適したペイロードを返します。問題を診断する場合はこちらを優先してください。
{ "environmentName": "Dev", "appName": "my-mule-app", "limit": 200, "errorOnly": true }
anypoint_list_app_logs のすべてのオプションに加えて、次のオプションを使用できます。
| オプション | 用途 |
|---|---|
searchTerms | タイムスタンプ、優先度、メッセージ、ロガー、スレッド、またはインスタンスに対して照合する、大文字と小文字を区別しないフィルター |
errorOnly | ERROR と FATAL の行のみを返します |
レスポンスには analysis.totalFetched、analysis.totalMatched、analysis.priorityCounts、analysis.loggerCounts、analysis.instanceCounts、analysis.logs が含まれます。カウントは取得したすべてのログを表し、logs には一致したログが格納されます。
anypoint_search_archived_logs
ライブテールで確認できる期間を超えた日付について、Anypoint Monitoring Archive API を通じて過去のログを検索します。
これは、ほかのツールでは代替できないツールです。anypoint_list_app_logs と anypoint_get_app_logs_for_analysis は Runtime Manager のライブテールを読み取ります。ライブテールは小さなローリングバッファーのため、アプリケーションが頻繁に稼働している場合は数分以内に古い内容が流れてしまい、startTime/endTime をどのように指定しても確認できません。アーカイブには各 10 分間のウィンドウが終了してからおよそ 10 分後にファイルが格納され、はるかに長期間保存されます。
組織で Anypoint Monitoring が有効になっている必要があります。 有効でない場合、すべての呼び出しが 403 または 404 を返します。その場合は、Runtime Manager の UI から手動で ログをダウンロード してエクスポートしてください。
{
"environmentName": "Prod",
"appName": "my-mule-app",
"date": "2026-08-09",
"searchTerms": ["Started product import", "Import finished"]
}
| オプション | 用途 |
|---|---|
date | 必須。YYYY-MM-DD(UTC) |
endDate | 任意の範囲終了日(両端を含む)。YYYY-MM-DD(UTC)。合計で最大 7 日 |
searchTerms | 大文字と小文字を区別しないテキストフィルター |
errorOnly | ERROR と FATAL の行のみを返します |
maxEntities | 全件スキャンへのフォールバック時に調査するレプリカエンティティ数の上限。デフォルトは 150、最大は 300 |
maxFiles | ダウンロードして解析するアーカイブファイル数の上限。デフォルトは 100、最大は 500 |
limit | 返す一致行数の上限。デフォルトは 500、最大は 2000 |
includeRaw | 正規化されたフィールドとともに、解析済みの生エントリを含めます |
ログの検索方法。 Archive API はアプリケーション単位ではなく、レプリカ/ポッド単位({appName}_{replicaId})でインデックスを作成するため、読み取り前にレプリカを特定する必要があります。mulewatch はまず、Runtime Manager のライブテールで確認できるレプリカ ID(entityResolution: "live-replica")を試します。通常、ポッドは再デプロイの間も長期間稼働するため、直近の過去の日付のログも同じレプリカが生成していることが多く、一般的な検索ではアーカイブへの呼び出しは数回で済みます。指定された日付にそのレプリカのファイルがない場合(たとえば、その後にアプリケーションが再デプロイされた場合)、アプリケーションがこれまでに使用したすべてのレプリカを一覧表示して調査する方法(entityResolution: "full-scan")にフォールバックします。調査対象は maxEntities で制限されます。
Archive API のリクエスト上限は 1 分あたり 60 件です。クライアントはこの上限を下回るようにリクエストを調整し、429 へのバックオフも行います。多数のレプリカに対する全件スキャンへのフォールバックには時間がかかることがあるため、可能な範囲で日付の範囲を絞ってください。レスポンスには、実行された検索方法と、上限によって結果が切り詰められたかどうかが示されます。
anypoint_list_api_manager_instances
環境内で API Manager が管理する API インスタンスを一覧表示します。
{ "environmentName": "Dev", "assetId": "my-api" }
| オプション | 用途 |
|---|---|
assetId | Exchange アセット ID でフィルターします |
technology | テクノロジーでフィルターします。例:mule4、flexGateway |
limit / offset | ページネーション。デフォルトは 100 / 0 |
includeRaw | 生の API オブジェクトを含めます |
anypoint_search_exchange_assets
組織内のアセットを Anypoint Exchange で検索します。
{ "search": "customer", "types": ["rest-api"], "limit": 20 }
| オプション | 用途 |
|---|---|
search | アセット名と説明文を全文検索します |
types | アセットタイプでフィルターします。例:rest-api、connector、template、example |
limit / offset | ページネーション。デフォルトは 50 / 0 |
includeRaw | 生の API オブジェクトを含めます |
技術スタック
| レイヤー | テクノロジー |
|---|---|
| ランタイム | Node.js 20 以降、ES モジュール |
| 言語 | TypeScript 5.7、strict、dist/ にコンパイル |
| プロトコル | Model Context Protocol SDK 1.30、stdio トランスポート |
| バリデーション | zod 4 |
| 認証 | Anypoint の client_credentials トークンフロー、ユーザー名/パスワード、またはベアラートークン |
| テスト | node:test、テストランナーへの依存なし |
リポジトリ構成
.
├── src/
│ ├── index.ts # bin entry: config check, stdio wiring
│ ├── tools.ts # MCP tool registration and argument schemas
│ ├── client.ts # AnypointClient: auth, org resolution, all API calls
│ ├── config.ts # env-var config, environment allowlist
│ ├── normalize.ts # envelope unwrapping, log normalization, analysis
│ ├── archive-parse.ts # archive log line parsing, date range enumeration
│ └── errors.ts # AnypointApiError and message formatting
├── test/ # unit tests for the pure logic
├── docs/
│ ├── logo.png # project mark, used in this README
│ └── og-image.png # social preview card
├── server.json # MCP registry manifest
├── PRICING.md # positioning notes
└── .env.example
検証状況
開発中に、稼働中の Anypoint 組織に対して読み取りパスを実行しました。
| ツール | 状況 |
|---|---|
anypoint_whoami | 実環境で検証済み |
anypoint_list_business_groups | 実環境で検証済み |
anypoint_list_environments | 実環境で検証済み |
anypoint_list_deployed_apps | 実環境で検証済み(application_manager。cloudhub/hybrid のターゲットは未実行) |
anypoint_list_app_logs | 実環境で検証済み(Application Manager のパス) |
anypoint_get_app_logs_for_analysis | 実環境で検証済み(Application Manager のパス) |
anypoint_search_exchange_assets | 実環境で検証済み |
anypoint_search_archived_logs | 実環境で検証済み — live-replica の高速パスと full-scan のフォールバックの両方 |
anypoint_list_api_manager_instances | 未検証 — テストに使用した接続済みアプリに View APIs Configuration スコープがなく、呼び出しは 403 を返しました |
この確認に使用したアプリケーションでは、アーカイブに669 個の履歴レプリカエンティティが含まれていました。当日の検索は live-replica の高速パスで処理され、そのうち1 個を調査して、127 個のアーカイブファイルを見つけ、2,859 行のログを解析しました。最後の再デプロイより前の日付を検索すると、正しく full-scan パスにフォールバックしました。この低速なケースを制限するために maxEntities 上限が設けられています。
補足
- すべてのツールは読み取り専用です。設計上、デプロイ、停止、再起動、ポリシー変更のツールはありません。LLM が本番環境の Mule 環境を変更すべきではなく、デプロイについては MuleSoft 公式サーバーがすでに対応しているためです。
- トークンは有効期限の1分前までメモリにキャッシュされ、ディスクには一切書き込まれません。
- 認証情報は環境変数からのみ読み取られ、ログには記録されません。
- Anypoint は、接続済みアプリのスコープが不足している場合に、詳細のない
403を返します。これらは捕捉され、不足している可能性のあるスコープが注記されます。 - EU などのコントロールプレーンは、
ANYPOINT_BASE_URLとANYPOINT_MONITORING_BASE_URLを上書きすることで利用できます。
ライセンス
Apache-2.0。MuleSoft、Anypoint Platform、CloudHub は Salesforce, Inc. の商標です。本プロジェクトは独立したプロジェクトであり、Salesforce と提携しておらず、Salesforce の推奨を受けていません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。