power-automate-mcp-server について
power-automate-mcp-serverは、エージェントからMicrosoft Power Automateのクラウドフローを調査・管理するMCPサーバーです。主に読み取り中心の運用機能を提供し、書き込み操作を明示的に有効にした場合のみフローを変更できます。
主な機能
- 01フローと環境の一覧表示と確認
- 02フロー実行履歴の確認と障害調査
- 03接続とフロー所有者の確認
- 04フローの有効化、無効化、キャンセル、再送信
- 05書き込み有効時のフロー作成、更新、削除
活用シーン
- 01フローを検索して定義を確認
- 02失敗したフロー実行の調査
- 03フローの接続と所有者の確認
- 04フローや実行履歴への制限付き変更
MCP 対応
MCPツールとして、Power Automateの環境、フロー、実行履歴、接続、所有者の操作を公開します。読み取り専用ツールは既定で有効で、ENABLE_WRITE_OPS=trueの場合のみ書き込みを受け付けます。非公式APIを使用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y power-automate-mcp-serverAZURE_CLIENT_IDApplication (client) ID of your Entra app registration (multi-tenant public client).AZURE_TENANT_IDTenant GUID. Required for the Flow audience ('common' fails with AADSTS50059).FLOW_SCOPESComma-separated OAuth scopes (e.g. .../Flows.Read.All,.../Flows.Manage.All).AZURE_AUTH_MODEシークレットinteractive (device-code, default) or clientCredentials (app-only).AZURE_CLIENT_SECRETシークレットClient secret — only for clientCredentials mode.ENABLE_WRITE_OPSSet to 'true' to enable mutating tools (default read-only).DEFAULT_ENVIRONMENTEnvironment id used when a tool omits 'environment'.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
18掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
power-automate-mcp-server
CLI/エージェントのコンテキストから Microsoft Power Automate のクラウドフローを調査、操作、作成できる MCP サーバーです。フローの一覧表示と調査、実行のデバッグ、接続と所有者の確認に加え、明示的に有効化した場合は、フローの有効化/無効化、実行のキャンセル/再送信、所有者の管理、そしてフローの作成/更新/削除ができます。
主に管理を目的とした機能です。複雑なフローロジックを作成する場合は、Power Automate ポータルのビジュアルデザイナーのほうが適しています。一方、プログラムから作成するためのcreate_flow/update_flow/delete_flowも利用できます(書き込みゲートで制御)。FastMCP 上でSomaMCP(テレメトリ、ヘルス/情報/ダッシュボード、エラー分類)を基盤として構築されています。
⚠️ 非公式 API です。 v1 は
api.flow.microsoft.comを対象としています。これは Power Automate ポータル自体が使用する API です。Microsoft は、これを「サポートしていません。お客様は代わりに Dataverse Web API を使用してください」としています。実際には安定しており、Dataverse とは異なり、すべてのフロー(個人用の「マイ フロー」を含む)が対象となり、M365 に付属する権利でも(Premium ライセンスなしで)利用できます。すべてのツールの説明にこの免責事項が記載されています。将来に向けて、サポート対象の Dataverse バックエンドのスタブを用意しています(src/backend/dataverse/README.mdを参照)。
クイックスタート
pnpm install
cp .env.example .env # set AZURE_CLIENT_ID (see "App registration" below)
pnpm build
pnpm dev:stdio # local agent over stdio (device-code sign-in to stderr)
初回の使用時に、サーバーはデバイスコードのプロンプトを標準エラー出力に表示します。https://microsoft.com/deviceloginを開いてコードを入力し、サインインしてください。トークンはキャッシュされ(TOKEN_CACHE_PATH、モード 0600)、以降は自動的に更新されます。
MCP クライアントに追加する(stdio)
{
"mcpServers": {
"power-automate": {
"command": "npx",
"args": ["-y", "power-automate-mcp-server", "--stdio"],
"env": { "AZURE_CLIENT_ID": "<your-app-registration-client-id>" },
},
},
}
このリポジトリで開発していますか? プロジェクトスコープの.mcp.json(stdio、ローカルのdist/bin.js)が付属しています。pnpm buildの実行後、AZURE_CLIENT_IDをエクスポートしてリポジトリを Claude Code で開くと、power-automateサーバーが自動的に読み込まれます(デバイスコードで一度サインインしてください。以降はキャッシュされたトークンが再利用されます)。
アプリの登録
このサーバーにはデフォルトのクライアント ID が含まれていません。独自の ID を一度だけ登録してください。
- Azure Portal → Microsoft Entra ID → App registrations → New registration。
- 名前を付けます(例:
power-automate-mcp)。サポートされるアカウントの種類はマルチテナントです(使用する組織が常に 1 つだけの場合は、シングルテナントでも構いません)。 - Authentication → Add a platform → Mobile and desktop applications。 リダイレクト URI に
http://localhostを追加します(デバイスコードでは使用しませんが、プラットフォームの登録に必要です)。「Allow public client flows」= Yesに設定します。 - API permissions → Add a permission。 Power Automate/Microsoft Flow Service API の委任されたアクセス許可が必要です。選択肢に表示されない場合は、以下の「トークンの対象ユーザー」を参照してください。ここが既知の難点です。
- Application (client) IDをコピーして、
AZURE_CLIENT_IDに設定します。
代わりに、非対話型のclientCredentialsモードを使う場合は、クライアントシークレットを追加し、管理者の同意を得てアプリケーションのアクセス許可を付与してから、AZURE_AUTH_MODE=clientCredentials、AZURE_TENANT_ID=<your tenant>、AZURE_CLIENT_SECRET=...を設定してください。なお、アプリ専用モードでは Flow へのアクセス範囲が限られます(一般に個人用の「マイ フロー」は表示できません)。
検証済みの動作する構成 ⚠️
実際のテナントで確認済みです。対話型 Flow 認証には、以下の4 項目すべてが必要です。いずれかが欠けると、それぞれ異なる不可解な AADSTS… エラーが発生します(詳細は docs/api-notes.md を参照してください)。
- 特定のテナント —
AZURE_TENANT_ID=<your-tenant-GUID>を設定し、commonは使用しないでください。commonとリソーススコープを組み合わせるとAADSTS50059が発生します(MSAL では空のデバイスコード応答として隠されます)。 - アプリに Microsoft Flow Service の委任されたアクセス許可を設定します(リソースアプリ ID は
7df0a125-d3be-4c96-aa54-591f83ff541c)。設定されていない場合はAADSTS650057が発生します。 - 他の(段階的に同意された)アクセス許可を持つアプリを再利用する場合は、
.defaultではなく特定のスコープを指定します。.defaultはアプリ全体を検証するため、AADSTS650051が発生することがあります。専用アプリでは.defaultを使用できます。FLOW_SCOPESで指定してください。 - 「Allow public client flows」= Yes にします(
isFallbackPublicClient=true)。オフの場合、トークンの引き換えに失敗し、invalid_clientが発生します。
検証済みの FLOW_SCOPES:
https://service.flow.microsoft.com/Flows.Read.All,https://service.flow.microsoft.com/Flows.Manage.All
az で既存のアプリを構成する
APP=<your-app-client-id>; FLOW=7df0a125-d3be-4c96-aa54-591f83ff541c
# Flows.Read.All + Flows.Manage.All (delegated), then tenant-wide consent:
az ad app permission add --id "$APP" --api "$FLOW" --api-permissions \
e45c5562-459d-4d1b-8148-83eb1b6dcf83=Scope 30b2d850-00c3-4802-b7ae-ece9af9de5c6=Scope
az ad app permission admin-consent --id "$APP"
# enable device-code (public client flows):
az ad app update --id "$APP" --set isFallbackPublicClient=true
推奨: Flow の委任されたアクセス許可のみを持つ専用のパブリッククライアントアプリを使用すると、
.default/共有アプリに関する問題(#3)を完全に回避できます。Graph アプリを再利用するより、すっきりした構成になります。
ツール
すべてのツールはデフォルトで読み取り専用です。書き込みツールも登録されますが、ENABLE_WRITE_OPS=true が設定されていない場合は実行を拒否します。
読み取り専用(常に有効)
| ツール | パラメーター | 戻り値 |
|---|---|---|
list_environments | — | { id, name, displayName, location, isDefault }[] |
list_flows | environment?、owner? | { name, displayName, state, createdTime, lastModifiedTime, owner }[] |
get_flow | environment?、flow | definition、connectionReferences、トリガー/アクション名を含むフロー全体 |
list_flow_runs | environment?、flow、top?(≤100)、status? | { name, status, startTime, endTime, durationMs, triggerName, error }[] |
get_flow_run | environment?、flow、run | 実行の詳細+最初の失敗+raw プロパティ(デバッグ用) |
list_connections | environment? | { name, apiName, displayName, status, accountName, expiresAt }[] |
list_flow_owners | environment?、flow | { principalId, principalType, roleName, principalDisplayName }[] |
書き込み(ENABLE_WRITE_OPS=true が必要です)
| ツール | パラメーター |
|---|---|
create_flow | environment?、displayName、definition、connectionReferences?、state? |
update_flow | environment?、flow、displayName / definition / state / connectionReferences のいずれか |
delete_flow | environment?、flow、confirm(true である必要があります) |
enable_flow / disable_flow | environment?、flow |
cancel_flow_run | environment?、flow、run |
resubmit_flow_run | environment?、flow、run、trigger |
add_flow_owner | environment?、flow、principalId、roleName(CanEdit|CanView) |
remove_flow_owner | environment?、flow、principalId |
作成(
create_flow/update_flow):definitionは Logic Apps 形式の生の ワークフロー JSON です(テンプレートとしてget_flowの出力を参照してください)。複雑な ロジックにはビジュアルデザイナーが適しています。編集する場合は、get_flow→definitionを変更 →update_flowに渡します。
environment を省略すると、DEFAULT_ENVIRONMENT が設定されている場合はその値を使用し、そうでない場合は検出されたデフォルト環境(isDefault: true)を使用します。
設定
全項目については .env.example を参照してください。主な項目:AZURE_CLIENT_ID(必須)、
AZURE_TENANT_ID(common)、AZURE_AUTH_MODE、TRANSPORT(stdio|http)、PORT、
ENABLE_WRITE_OPS、DEFAULT_ENVIRONMENT、MCP_API_KEY、TELEMETRY、TOKEN_CACHE_PATH。
トランスポートとデプロイ
| シナリオ | トランスポート | 認証 | 備考 |
|---|---|---|---|
| ローカルエージェント | stdio | デバイスコード | 主な方法です。すべての操作が可能です。pnpm dev:stdio。 |
| Docker、単一オペレーター | http | デバイスコード + マウントされたトークンボリューム | docker logs 経由で一度認証すれば、認証状態が保持されます。すべての操作が可能です。docker compose up。 |
| Docker、無人運用 | http | clientCredentials | 人間による操作は不要ですが、個人用フローにはアクセスできません。そもそもフロートークンを発行できるか確認してください。 |
警告
**HTTP トランスポートは単一オペレーター向けです。**すべての呼び出し元が同じ Power Automate ID を共有します。サーバーがプロセス全体で単一のトークン(デバイスコードによるサインイン 1 回、または 1 つのアプリ ID)を保持し、
MCP_API_KEYは共有の静的ベアラーとして、_アクセス_を制御しますが、 ID は制御しません。ユーザーごとの分離を期待して、HTTP エンドポイントを複数のユーザーに公開 しないでください。全員が同じ人のフローを参照、変更できてしまいます。ユーザーごとに分離するには、 stdio(ユーザーごとに 1 つのプロセスを実行します。Claude Desktop ではすでにこの方式で動作しています)を使用するか、 v2 のユーザーごとの OAuth 対応をお待ちください (#9)。
**v2:**FastMCP の
AzureProviderとディスク上のトークンキャッシュを使用した、HTTP 経由のユーザーごとのブラウザー OAuth (上流のトークンはセッション上で参照できます)。フォークせずに SomaMCP のbackendOptionsパススルーから利用できます。v1 ではまだ組み込まれていません。
# Docker (single-operator device-code with a persisted token volume)
AZURE_CLIENT_ID=... docker compose up --build
docker compose logs -f # grab the device code on first run
curl -s http://localhost:3333/health
開発
pnpm validate # format + lint + typecheck + test + build
pnpm test # vitest (unit)
pnpm dev # http transport, watch
pnpm dev:stdio # stdio transport, watch
pnpm build # tsdown -> dist/
実際のテナントに接続する統合テストは test/integration/ にあり、INTEGRATION=1 の場合のみ実行されます
(そのフォルダーの README を参照してください)。CI では単体テストのみを実行します。
トラブルシューティング
- デバイスコードでトークンが発行されない/「device-code sign-in failed for all scope candidates」
→ Flow のオーディエンスにアプリへのアクセス許可を付与できません。「Token audience」と
docs/api-notes.mdを参照してください。 - すべての呼び出しで
auth errorが発生する → トークンキャッシュが古くなっています。再認証するために再起動するか、TOKEN_CACHE_PATHを削除してください。 - 既知のフローが
not foundになる → 環境が間違っています。まずlist_environments/list_flowsを実行してください。 フローのnameは GUID であり、表示名ではありません。 forbidden→ サインインしているユーザーには、そのフローに対する権限がありません。clientCredentialsモードでlist_flowsが空になる → アプリ専用アクセスでは個人用フローを参照できません。interactiveを使用してください。- エンドポイントが予期せず 404/410 を返す → Microsoft が api-version を変更した可能性があります。ポータルのネットワークタブを確認し、新しい
api-versionを固定してください(docs/api-notes.mdを参照)。
ライセンス
MIT。
SapientsAI がスポンサーです — ビジネス向けエージェント型 AI を構築
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。