Skip to main content
Glama
karenrebecag

Power Automate MCP

by karenrebecag

Power Automate MCP

AIエージェントが個人用Power Automateクラウドフローを検査・編集できるローカルMCPサーバーです。自分のMicrosoftアカウントで認証し、管理者の同意も有料サブスクリプションも不要です。

このプロジェクトが存在する理由は、ホスト型の代替サービスが、Microsoftがあなたのアカウントに無料で公開しているAPIをラップするだけで月額料金を請求するからです。また、変更内容を言葉で説明して、エージェントにガードレール付きで適用してもらうほうがよい場合に、Power Automateポータルは操作しづらいインターフェースだからです。このリポジトリは、そのAPIが実際にどのように動作するかをリバースエンジニアリングした解説書であり、動作するツールとしてパッケージ化されています。

個人プロジェクトであり、現状のまま提供されます。 依存する前に信頼性に関する注意とdocs/SECURITY.mdをお読みください。

Microsoftとは提携しておらず、Microsoftによる推奨でもありません。


興味深い点:IT部門に頼らずに認証する方法

「コードからPower Automateを管理する」チュートリアルはどれも、Entra IDにアプリを登録して、管理者にDynamics CRM user_impersonationまたはFlows.Manage.Allへの同意を求めるように指示します。ロックダウンされた企業テナントでは、その要求は受け入れられません。常設のサービスプリンシパルを付与することになり、管理者が(当然ながら)拒否します。

このプロジェクトは、Microsoftが対話型ツール用に提供しているパブリックなファーストパーティクライアントIDを使用することで、その問題を完全に回避します:

51f81489-12ee-4a9e-aaae-a2591f45987d   ("Dynamics 365 Example Client", of XrmToolBox fame)

OAuth 2.0デバイスコードグラントを通じて駆動されるこれは委任型ログインです。トークンはあなたのIDと権限を保持し、承認を求めるサービスプリンシパルは存在せず、同意画面も表示されません。ポータルで既に持っている権限とまったく同じ権限で、ラップトップからPower Automateと通信できます。それ以上でもそれ以下でもありません。

トークンの対象者には、文書化する価値のある、あまり知られていない癖が1つあります:

https://service.flow.microsoft.com//user_impersonation
                                  ^^ two slashes, on purpose

レガシーリソースURIはスラッシュで終わり、v2スコープ構文は/user_impersonationを追加するため、二重スラッシュが生成されます。一部のテナントは単一スラッシュ形式を拒否します。その1つの文字列が、正常なログインと、不透明なAADSTSエラーの違いです。

Related MCP server: MCP Power Automate

もう1つの興味深い点:異なるフローを参照する2つのAPI

2つのRESTバックエンドがあり、それらは互換性がありません:

api.flow.microsoft.com

api.powerplatform.com

ステータス

非公開、非サポート

公式、文書化済み(2024-10-01)

個人用フローを参照

はい

いいえ — Dataverseなしでは404

ソリューションフローを参照

はい

はい

使用目的

すべて(個人用フロー)

配線済み、休止中

最も調査コストがかかった教訓:サポートされているAPIは個人用フローをまったく参照できないということです。フローがDataverseソリューション内に存在する必要があります。そのため、通常のユーザーがポータルで作成するフローを管理するツール(有料のMCPを含む)は、サポートされていないサービスAPIに頼らざるを得ません。このプロジェクトは、そのトレードオフを隠すのではなく、明示的にしています。

src/client/flow-api.tsは両方のベースURLを1つのスイッチの背後に保持しているため、後でソリューションに移行するフロー(またはサービスAPIが最終的に壊れる未来)は、書き換えではなく1つの定数の変更で対応できます。


信頼性に関する注意(必読)

api.flow.microsoft.comはMicrosoftによって非公開かつ非サポートです。予告なく形状が変わったり消えたりする可能性があり、その際にこのツールは壊れます。そのリスクこそが、有料サービスが代わりに吸収するために課金しているものです。自分で修正する個人用ツールとしては、妥当なトレードオフです。重要な用途には適していません。適切に選択してください。

すべてはあなたとして実行されます。アカウントへのアクセスを失うと、ツールは動作を停止します。背後にサービスIDはありません。


インストール

要件:Node 18+(組み込みのfetch用)とpnpm。Power Automateを使用できるMicrosoftの職場または学校アカウント — それだけです。

git clone https://github.com/karenrebecag/PowerAutomate_MCP.git
cd PowerAutomate_MCP
pnpm install
pnpm build

資格情報 — 一度だけサインイン

編集する設定ファイルも、貼り付けるシークレットもありません。認証は、自分のMicrosoftアカウントに対する対話型のデバイスコードログインです:

pnpm login

URLと短いコードが表示されます:

  Power Automate MCP — sign in

  1. Open:  https://microsoft.com/devicelogin
  2. Code:  ABCD-EFGH

  Waiting for you to finish signing in...

URLを開き、コードを入力し、管理したいフローのあるアカウントでサインインして承認します。成功すると、更新トークンが.pa-token(権限0600、gitignore済み)に書き込まれます。サーバーはそこから自動的に短期間のアクセストークンを生成します。期限が切れるまで再確認は求められません(約90日間の非アクティブ)。アカウントを切り替えたり、期限切れのトークンから回復したりするには、pnpm loginを再実行するだけです。

オプションの環境変数

変数

デフォルト

設定するタイミング

PA_TENANT_ID

organizations

アカウントが複数のテナントに属する場合、特定のテナントGUIDを固定します。

PA_TOKEN_FILE

パッケージの隣の.pa-token

更新トークンを別の場所に保存します。

検証(任意ですが推奨)

pnpm probeはフェーズ0を実行します。あなたのテナントに対してすべての読み取りエンドポイントを呼び出し、実際のレスポンスをscratch/(gitignore済み)にダンプします。ルートがお使いの環境で404を返す場合、使用中ではなくここで確認できます。書き込み操作は何も行いません。

pnpm probe

MCPクライアントに登録

サーバーをクライアントの設定に追加します。Claude Codeの場合は~/.mcp.jsonです:

{
  "mcpServers": {
    "power-automate": {
      "command": "node",
      "args": ["/absolute/path/to/PowerAutomate_MCP/dist/index.js"]
    }
  }
}

dist/index.jsへの絶対パスを使用してください。サーバーは自身の場所を基準に.pa-tokenを見つけるため、クライアントで作業ディレクトリや環境を設定する必要はありません。クライアントを再起動(またはサーバーに再接続)すると、7つのツールが表示されます。クライアントなしでターミナルから簡単に確認する方法:

printf '%s\n%s\n%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"c","version":"1"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
  | node dist/index.js

ツール

ツール

書き込み?

機能

list_environments

いいえ

アカウントが参照できるすべての環境。環境IDはここから始めます。

list_flows

いいえ

環境内のクラウドフロー(要約フィールド)。

get_flow

いいえ

完全な編集可能な定義+接続参照。

get_flow_runs

いいえ

最近の実行履歴:ステータス、コード、タイミング。

get_run_actions

いいえ

1回の実行のアクション別の内訳。失敗したアクションのinputs/outputsリンクを追跡します。デバッグビューです。

set_flow_state

はい

フローを開始/停止します。confirm: trueを渡さない限りプレビューします。

create_or_update_flow

はい

定義オブジェクトからフローを作成または編集します。dryRunがデフォルトです — 実際に書き込むにはdryRun: falseを渡します。

典型的なエージェントワークフロー

障害の検査/デバッグ

list_environments
list_flows(environmentId)
get_flow_runs(environmentId, flowId)
get_run_actions(environmentId, flowId, runName)   → see which action failed

定義を安全に変更

get_flow(environmentId, flowId)                   → copy properties.definition
… edit the definition object …
create_or_update_flow(..., dryRun: true)          → default; shows wouldSend
create_or_update_flow(..., dryRun: false)         → only after explicit OK

両方の書き込みツールは、明示的にオプトインするまで(dryRun: false/confirm: true)何も変更しません。それを煩わしさではなく機能として扱ってください。1つの不適切な定義が、本番の自動化を壊す可能性があります。

会話例(これが目的です)

あなた: 「営業に新規リードを通知」が今朝失敗したのはなぜ?

エージェント: (list_environments → list_flows → get_flow_runs → get_run_actions) 09:14の実行はHTTP_To_CRMアクションで401により失敗しました。トークン接続参照はフローにまだ存在しています。下流のAPIが呼び出しを拒否しました。

あなた: 接続を修正するまでフローを停止して。

エージェント: (set_flow_stateプレビュー → 承認後にconfirm: true) フローを停止しました。

このループでPower Automateデザイナーを開く必要はありません。エージェントは、ポータルで既に持っているのと同じ権限を使用します。


プロジェクト構成

src/
  auth/       device-code login + silent refresh (the interesting bit)
  client/     thin HTTP wrapper over the two REST backends
  core/       shared MCP result helpers
  tools/      one file per MCP tool (added after Phase 0 confirms shapes)
  server.ts   MCP server wiring
  index.ts    stdio transport entry point
scripts/
  probe-endpoints.ts   Phase 0 reconnaissance — run before trusting any tool
docs/
  SECURITY.md          tokens, disk artifacts, blast radius
  DEVELOPMENT.md       how to extend tools without guessing routes

構築方法(仕様/プローブ駆動)

  1. フェーズ0 — pnpm probeがライブテナントの読み取りルートにアクセスし、実際のJSONをscratch/(gitignore済み)に保存します。

  2. ツールは、それらの形状に対してのみ型付けされ、実装されます。

  3. 404または正しくないように見えるルートは削除されます(例:スタンドアロンのlist_connectionsはv1にありません。参照はget_flowに引き続き表示されます)。

  4. 書き込みはプレビューをデフォルトにして出荷されるため、エージェントが誤って最初の試行で定義を適用することはありません。

詳細:docs/DEVELOPMENT.md。

ステータス

動作中。7つのツール(読み取り5つ、書き込み2つ)があり、それぞれライブテナントでフェーズ0によってキャプチャされたレスポンスに基づいて整形されています。pnpm verify(型チェック+lint+フォーマット+テスト)がローカルゲートです。

v1に含まれないもの: フローの削除、デスクトップフロー、テナント管理者API、スタンドアロンの接続一覧。

ドキュメント

ドキュメント

内容

docs/SECURITY.md

トークンファイル、委任された爆発半径、コミットしてはいけないもの

docs/DEVELOPMENT.md

プローブファーストのワークフロー、スクリプト、ツールの追加

CLAUDE.md

このリポジトリで作業するコーディングエージェント向けの厳格なルール

ライセンスと意図

MIT。個人向けの教育的なリバースエンジニアリングプロジェクトです。他の人がこのAPIの仕組みを学び、その上に独自の個人用ツールを構築できるように共有されています。自分のアカウントと組織のポリシーの範囲内で使用してください。

Microsoftとは提携しておらず、Microsoftによる推奨でもありません。

Available Tools

7 tools
create_or_update_flowA

Create a new flow or update an existing one from a definition object. dryRun is the default — pass dryRun:false to actually write. Get the definition shape from get_flow.

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNoDefault true — preview only. Pass false to actually write.
flowIdNoFlow ID to update. Omit to CREATE a new flow.
definitionYesThe workflow definition object (properties.definition from get_flow).
displayNameNoDisplay name. Required when creating.
environmentIdYesEnvironment ID.
connectionReferencesNoConnection references map (properties.connectionReferences from get_flow).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=false, so a write is expected, but the description adds a crucial behavioral detail—the write is skipped by default and only happens when dryRun:false is passed. It does not disclose overwrite semantics or potential side effects beyond those annotations, but the default behavior is important and clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The main operation is front-loaded, and the dryRun default and definition source reference are compactly included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create-or-update tool with no output schema, the description covers the essential action, the write-default safety mechanism, and how to obtain the definition shape. It does not explicitly explain update-discovery behavior and id handling, but those are largely covered by parameter schema and the description as a whole is sufficient for basic usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description does not need to restate parameter meanings. It adds a light mention of dryRun default and references get_flow for the definition shape, both also reflected in the schema, so it provides marginal additional value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and object: 'Create a new flow or update an existing one from a definition object.' It clearly states both the operation and the resource and distinguishes this from get_flow pointing to a definition source.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage guidance: dry-run is the default and passing dryRun:false performs the actual write, and it directs the user to get_flow for the definition shape. It does not explicitly enumerate alternatives or when not to use this tool, but the context is fairly unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flowA
Read-only

Full flow definition (triggers, actions, parameters) and connection references.

ParametersJSON Schema
NameRequiredDescriptionDefault
flowIdYesFlow ID (the `name` field from list_flows).
environmentIdYesEnvironment ID.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the detail that connection references are included, which is useful, but it does not disclose behavioral details such as response shape, error cases, or whether the flow is executed. This is acceptable given the annotations but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, information-dense sentence that front-loads the core purpose and enumerates the key contents without filler. Every word contributes to the agent's understanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-ID tool, the description adequately covers what the tool returns: full flow definition and connection references. There is no output schema, but the description mitigates this by naming the major response components. It does not mention error behavior or prerequisites, but those are not critical for this low-complexity operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both environmentId and flowId are fully documented in the input schema, including the note that flowId corresponds to the name field from list_flows. The description adds no additional parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the exact resource and scope: a full flow definition including triggers, actions, parameters, and connection references. This clearly distinguishes the tool from siblings like get_flow_runs and get_run_actions, which focus on runs rather than definitions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'full flow definition' makes the intended use obvious: retrieve the complete definition of one flow rather than a list of flows or run-level data. It does not explicitly name alternatives or list exclusions, but the scope is clear enough for an agent to select it correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_flow_runsB
Read-only

Recent run history for a flow: status, code and timing per run.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMax runs (default 20).
flowIdYesFlow ID.
environmentIdYesEnvironment ID.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds the return fields but does not disclose ordering, freshness, pagination behavior, or any caveats about the returned history.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence states the resource and the key output dimensions without filler. Every word contributes to understanding what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with fully documented parameters, the description is mostly complete. It mentions the key returned aspects, though it could have added ordering or recency behavior; 'Recent' plus the top parameter makes this workable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with flowId, environmentId, and top all individually documented. The description adds no parameter-level meaning beyond restating the general concept, so the schema carries the burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific resource (flow run history) and the data it returns (status, code, timing per run). It is clear enough to distinguish from get_flow, though it does not explicitly contrast with the similar sibling get_run_actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance about when to use this tool versus alternatives like get_flow or get_run_actions, and no mention of prerequisites or context. Usage is only implied by the tool name and the general description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_run_actionsA
Read-only

Per-action breakdown of one run — the debugging view. Follows inputs/outputs links for failed actions by default (or a named action, or all).

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesRun ID from get_flow_runs.
flowIdYesFlow ID.
includeIONoFollow inputs/outputs links for: failed actions (default), all, or none.
actionNameNoOnly this action; follows its I/O links.
environmentIdYesEnvironment ID.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint=true and openWorldHint=true, lowering the burden on the description. The description adds genuinely useful context beyond annotations: the default behavior of following inputs/outputs links for failed actions, which an agent cannot infer from structured data. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with zero waste. The primary purpose is front-loaded ('Per-action breakdown... debugging view') and the behavioral detail is delivered efficiently in the second sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a moderate 5-parameter surface with full schema coverage, read-only annotations, and no output schema required, the description explains the purpose and the key default behavior. Nothing essential an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter (runId, flowId, includeIO, actionName, environmentId) is already documented in the schema. The description's mention of 'failed actions by default (or a named action, or all)' mirrors the includeIO enum already present in the schema, adding little semantic value beyond it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource ('per-action breakdown of one run') with an explicit framing ('the debugging view'). It clearly distinguishes itself from siblings like get_flow_runs (which returns the run list) and get_flow (single flow definition) — this tool drills to the action level of one run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'debugging view' label implies when to use it, and the action-level scope contrasts with the run-level siblings. However, no alternative is named explicitly and there's no when-not-to-use guidance, so usage is only implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_environmentsA
Read-only

List every Power Platform environment the signed-in account can see.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the 'every' and 'signed-in account' scope, which complements the openWorldHint by clarifying the visibility boundary, but does not go into details like pagination or environment properties.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single clear sentence with zero waste; the key scoping ('every', 'signed-in account') is front-loaded. Perfectly sized for a no-parameter list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for a simple list operation, but the lack of an output schema and absence of any mention of return format or filtering capabilities leaves minor gaps. However, given the simplicity, it is adequately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters; the schema is empty with 100% coverage, so there is nothing to document. The description adds no parameter meaning, but with no params, this is a baseline high score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool lists every Power Platform environment visible to the signed-in account—a specific verb (list) and resource (environments). It distinguishes from siblings like list_flows which target a different resource type, though it doesn't explicitly name the sibling for comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description and 'signed-in account' context imply it's for browsing available environments, but there is no explicit when-to-use guidance or mention of alternatives among siblings. It's clear enough for obvious cases but lacks explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_flowsA
Read-only

List cloud flows in an environment (summary fields, not the full definition).

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoMax flows to return.
environmentIdYesEnvironment ID from list_environments.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint=true in annotations, the read-only nature is already declared; the description adds that the result contains summary fields rather than full flow definitions, which is a meaningful output-behavior disclosure. It does not detail pagination or default limits, but the schema's top parameter covers the limit behavior and no contradictions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with a parenthetical carries the core purpose, scope, and an output caveat with no filler. The actionable verb is front-loaded and every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, read-only list operation, the description plus schema covers the required environmentId and the optional max count, and the summary-fields caveat gives the agent enough to choose the tool and interpret the response at a high level. There is no output schema, and the description does not enumerate exactly which summary fields are returned or any paging behavior, so a small completeness gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline applies. The description adds no parameter-level detail beyond the schema, which already explains environmentId as coming from list_environments and top as the max number of flows to return.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List'), a concrete resource ('cloud flows'), and a scope ('in an environment'), immediately distinguishing it from get_flow, which returns a single flow's full definition. The parenthetical clarifies that output is summary fields, not full definitions, removing ambiguity about its purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly indicates this is the tool to use when you need an inventory/summary of cloud flows within a specific environment, and the 'not the full definition' caveat implies when not to use it. It does not explicitly name a sibling like get_flow as the alternative, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_flow_stateA

Turn a flow on (start) or off (stop). Previews by default; pass confirm:true to apply.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYesTurn the flow on (start) or off (stop).
flowIdYesFlow ID.
confirmNoMust be true to actually apply. Omit to preview the intended change.
environmentIdYesEnvironment ID.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explicitly discloses the critical behavioral gate: it previews by default and only actually mutates state when confirm:true is passed. Given annotations readOnlyHint=false and openWorldHint=true, this adds the key safety-relevant context an agent needs before invoking the tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no filler: the primary action is front-loaded, followed by the essential preview/confirm caveat. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is sufficient for a simple four-parameter tool: it states the operation, the states, and the confirmation mechanism. It does not describe what the preview output looks like, but since there is no output schema this is a partial gap rather than a serious omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all parameters, including the meaning of confirm and the start/stop enum. The description adds no new parameter-level information; it merely restates the behavior already captured in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the action ('Turn a flow on/off'), the resource (flow), and the two valid states (start/stop). This makes it clearly distinct from siblings such as list_flows, get_flow, and create_or_update_flow, which concern discovery, reading, or definition changes rather than operational state.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The usage is implied: invoke this tool when you want to start or stop a flow, and the preview behavior supports a safe exploratory workflow. However, the description does not explicitly name alternatives such as create_or_update_flow for definition changes, nor does it mention when not to use this tool or what prerequisites must exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedcreate_or_update_flow
    • First observedget_flow
    • First observedget_flow_runs
    • First observedget_run_actions
    • First observedlist_environments
    • First observedlist_flows
    • First observedset_flow_state

TDQS

A3.9/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct resource/action combination: environments, flow lists, full flow definitions, run history, per-action run details, flow state, and create/update. No two tools overlap in purpose; an agent can easily select the correct tool for a given task.

Naming Consistency4/5

The naming follows a clear verb_noun pattern with verbs like list_, get_, set_, and create_or_update_. The only minor inconsistency is the use of both list_ and get_ for read operations, which could cause slight ambiguity (e.g., list_flows vs get_flow), but the distinction between summary and full definition is established in descriptions.

Tool Count5/5

Seven tools is an appropriate, focused set for a Power Automate management server. The scope is clear, and each tool serves a necessary function without redundancy. This size is large enough to be useful yet small enough to avoid confusion.

Completeness4/5

The toolset covers the main lifecycle operations for flows: listing, retrieving, updating, setting state, and inspecting runs/actions. A notable missing operation is the ability to delete a flow, and there is no explicit way to list all runs across flows, but the core workflows of inspection and modification are well-covered.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers