見出し画像

「あのフロー動かして」の一言で、Power Automate Desktopは動くのか? ―Claude×RPA連携をMCPでつないだ全手順

こんにちは!YaroTechです。

前回(構想編)で、「クロ助(Claude Desktop)にRPAを"自分の手"で動かしてもらう」ための設計図を広げました。Power Automate Desktop(以下PAD)のフローを、AIへの一言で起動する自作MCP「pad-mcp」の構想です。そして今回、いよいよ実機で作って、動かして、ストップウォッチで測りました。

先に、いちばん正直な結果からお伝えします。「起動の速さ」だけで勝負したら、手動のほうが速かったんです。それでも私は、AIにRPAを渡してよかったと思っています。この記事は、その負けを認めたうえで「じゃあ価値はどこにあったのか」を、実測とソースコードで確かめた記録です。

※見出し画像のプロンプトは一番下におまけで公開中!



🖥️ 実行環境

今回の検証は、すべて以下の実機(X1)で行いました。数値はこの環境での実測値です。

  • PC: ThinkPad X1 Carbon(非ARM)

  • OS: Windows 11 Home 25H2

  • メモリ: 32GB

  • RPA: Power Automate Desktop 11.2606.217.0(Microsoft Store版・無料プラン

  • AI(司令塔): Claude Desktop(クロ助)

  • AI(実装担当): Claude Code(クロコ)

  • 自作MCP: Python 3.12.10 / FastMCP 3.4.2(stdio接続)

実装のコードを書いたのは、今回もクロコ(Claude Code)です。私は「検証」と「計測」と「判断」に集中しました。「コードはクロコが書く」という前作からの構図を、今回も地で行っています。


🎯 この記事で得られること

この記事は有料記事ですが、「結果は無料、再現は有料」の方針で切り分けています。

無料で読めること

  • PAD三部作(書ける→覚える→動かす)の完結の物語

  • 前回予告した「5つの壁」の勝敗表(実測ベース・全勝)

  • Before/Afterの実測値(手動 vs 一言)と、手動が勝った正直な話

  • クロ助がPAD画面を見ずにRPAを動かした瞬間の描写

有料で読めること

  • pad-mcpのソースコード全文(Python / FastMCP・コメント付き)

  • フロー台帳 `pad_flows.json` と `claude_desktop_config.json` の設定内容

  • URLプロトコルの正確な書式と、入力変数のエスケープの正解

  • つまずき実録の詳細(エラー原文つき・deserializeエラーの真犯人)

  • 許可リスト方式のセキュリティ実装


📊 実際の成果

まず、前回予告した5つの壁の勝敗です。結論から言うと、全部越えられました。ただし壁②だけは一度負けて、二度目で勝っています(その顛末は後述)。

  • 壁① URLプロトコル起動:〇 ― 無料版のまま起動成功。Premium要求は出ませんでした。

  • 壁② 入力変数:〇 ― フローに日本語テキストを渡せました(※一度失敗→方式変更で成功)。

  • 壁③ 完了検知:〇 ― マーカーファイル+実行ログ+トースト通知の三重で検知。

  • 壁④ 一覧取得:〇 ― PADに一覧APIは無いので、台帳(許可リスト)方式で確定。

  • 壁⑤ 許可リスト:〇 ― 台帳外のフローは、PADに触れる前に門前払い。

そして、いちばんお見せしたかったBefore/Afterです。正直に、計測条件も添えて書きます。

Before(手動起動):PADコンソールが閉じた状態から、コンソールを起動→フローを選択→実行ボタン→フローが動き出すまで。実測 8秒

After(クロ助に一言):依頼を送り、PADの信頼確認ダイアログで「続行」を押し、フローが動き出すまで。実測 13秒〜

そう、単発の起動レースは、手動の勝ちでした。理由もはっきりしています。無料版では「外部からフローを実行しますか?」という信頼確認ダイアログが必ず出るので、そのぶんクリックが1回増えるのです。さらにフロー本体の実行時間(今回のテストフローで約10秒)は、手動でもAI経由でもまったく同じでした。当たり前ですが、動かしているPADは同じ一つですから、経路を変えても実行そのものは速くなりません。

信頼確認ダイアログ

ここまで測って、私は「じゃあ意味がなかったのか?」と少し落ち込みました。でも、実際に何度も動かすうちに、価値は速さじゃないところにあったと気づきます。それが次の実践パートの主題です。


🚀 実践内容

まず「素の起動」から確かめた

いきなりMCPを作らず、MCPなしのURL単体で起動を確かめる、という順番にしました。トラブルが出たときに「PAD側の問題か、MCP側の問題か」を即座に切り分けるためです。

PADには、フローを外部から起動するための`ms-powerautomate:`というURLプロトコルが用意されています。ここで最初の山場が来ました。

山場①:公式ドキュメントすら、割れていた

事前調査で分かっていたのは、公式ドキュメント同士が矛盾しているという事実でした。URL起動の解説ページには「Premium(有償)プランが必要」と書いてある一方、リリースノートには「ショートカット/URL起動はもうPremium限定ではなく全ユーザーが使える」と書いてある。どちらが本当なのか、5つのAIに横断調査させても意見が割れました。

こういうときは、実機が最終審判です。X1の無料版PADで、テストフローの完成URLを叩いてみました。結果は――起動成功。出てきたのは「続行/キャンセル」の信頼確認ダイアログだけで、Premiumを要求する画面は一切出ませんでした。公式の矛盾は、「無償化された」側が正しかった、と自分の手で決着をつけられたわけです。

クロ助がPADを"見ずに"動かした瞬間

素の起動が確認できたので、クロコにpad-mcpを実装してもらい、Claude Desktopに登録しました。3つの道具(`list_flows`/`run_flow`/`get_run_status`)が認識されたのを確認して、いよいよ通し検証です。

pad-mcpがClaudeDesktopに登録されて3つの道具もちゃんと認識してくれています!

山場②:三部作の完結

私はクロ助にこう頼みました。「使えるフロー教えて」。クロ助は台帳どおり2件を返します。続けて「TestFlow01を動かして」。ここから起きたことを、実際のツールの動きで書くと
――クロ助は`run_flow`を呼び、実行を追跡するための固有IDを発行し、PADにURLを送りました。
私が信頼ダイアログで「続行」を押すと、クロ助は`get_run_status`で状態を確認し、最初は「実行中(起動から13秒)」、少し待ってから「success(正常に完了しました)」と報告してきたのです。

このとき、クロ助はPADの画面を一度も見ていません。それでも「起動した」「まだ動いている」「終わった」を、自分で判断して私に報告しました。前作で"書ける"ようになり、その前で"覚える"ようになったRPAが、ついに"動かす"に到達した瞬間でした。

PAD三部作、これで完結です。

ドキドキのClaudeDesktopから初のPawerautomateDesktopを起動⇒実行⇒完了をクロ助から操作

価値は「速さ」ではなく、この4つだった

起動レースには負けました。でも何度も使ううちに、AIにRPAを渡す本当の価値は、次の4つだと分かってきました。

① 文脈を離れなくていい。 手動なら、今やっている作業を中断してPADコンソールを探しに行きます。AI経由なら、クロ助と話している流れのまま「ついでにあれ動かして」で済む。8秒 vs 13秒の差より、"作業を中断して別アプリを探しに行かない"ことのほうが、体感ではずっと効きます。

② 完了検知と成否報告まで自動。 手動起動は「押して終わり」。本当に成功したかは自分で結果ファイルを開いて確かめます。pad-mcpは、成功/失敗を検知して言葉で報告してくれる。この「終わったか、成功したか」を人間が見張らなくていいのは、地味ですが大きい。

③ 探さない・間違えない。 どのフローがあったか思い出す必要も、似た名前のフローを誤爆する心配もありません。台帳に載ったフローだけが、名前で正確に呼ばれます。

④ ワークフローを"部品"にできる。 前作のスキルでRPAフローを作り、今回のMCPでそれを動かす。「スキルで作る × MCPで動かす」が一本の線でつながりました。フローが、AIから呼べる部品になったのです。


(ここまでが無料パートです。ここから先は、
pad-mcpのソースコード全文・設定ファイル・URLとエスケープの正確な書式・つまずき実録の詳細を、そのまま再現できる形でお見せします。
「自分のPADでも、AIの一言で動かしたい」という方は、ここからが本編です。)

「関連記事」の次から有料部分です。


🔗 関連記事

今回の内容に関連する過去記事もぜひご覧ください:


全体像:3つの道具と、1冊の台帳

pad-mcpは、Python製の小さなMCPサーバーです。提供する道具は3つ。

  • `list_flows()` … 台帳に載っているフロー一覧を返す

  • `run_flow(flow_name, input_text=None)` … 台帳のフローを起動する

  • `get_run_status(flow_name)` … 直近に起動したフローの成否を返す

そして中心にあるのが、フロー台帳 `pad_flows.json`。これが「許可リスト」そのものです。PADには「フロー一覧を列挙する公式API」が存在しないので、手で台帳を書く方式が現実解になります。台帳に無いフローは、一切実行できません

URLプロトコルの正確な書式

PADのフローは、次の形のURLで起動します。実際に使ったのは、PADのフロープロパティにある「URLを実行」からコピーできる完成URL(`environmentid`+`workflowid`+`source=Other`付き)でした。

ここから先は

14,016字 / 3画像
この記事のみ ¥ 1,000
Amazon Payで支払うと最大2%還元のチャンス! 9/30まで

【YaroTech Lab — AIを毎日使い倒す人の実験室】 ▶ なにをするメンバーシップ?\ 毎…

ラボメンバー

¥500 / 月
1ヶ月無料

記事がお役に立てたなら嬉しいです! いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。 あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨ 一緒に羽ばたき続けましょう!