Power Automate MCP
Power Automate MCP
一个本地 MCP 服务器,让 AI 代理能够检查并编辑你的个人 Power Automate 云端流——使用你自己的 Microsoft 账户进行身份验证,无需管理员同意,也无需付费订阅。
它存在的原因在于,那些托管型替代方案要按月收费,来包装一个微软本已免费向你的账户开放的 API。本仓库就是对这个 API 实际工作原理的逆向工程说明,并打包成了一个可用的工具。个人项目,按现状提供——在依赖它之前,请先阅读可靠性说明。
有趣之处:如何在不找 IT 的情况下完成认证
每一个“从代码管理 Power Automate”的教程都会告诉你:要在 Entra ID 中注册一个应用,并让管理员同意 Dynamics CRM user_impersonation 或 Flows.Manage.All。在严格控制的企业租户中,这种请求根本无法落地——它会授予一个常驻服务主体,而管理员(理所当然地)会拒绝。
这个项目完全绕开了这一点,使用的是微软为交互式工具提供的一个公共第一方客户端 ID:
51f81489-12ee-4a9e-aaae-a2591f45987d ("Dynamics 365 Example Client", of XrmToolBox fame)它通过 **OAuth 2.0 设备码授权(device-code grant)**来完成,这是一种 委托 登录:令牌携带的是你的身份和你的权限,没有需要任何人审批的服务主体,也不会出现同意页面。你可以用自己在门户中已有的完全一致的权限,从笔记本电脑上直接操作 Power Automate——不多不少。
令牌的 audience 有一个不太明显的怪癖,值得记录一下:
https://service.flow.microsoft.com//user_impersonation
^^ two slashes, on purpose旧的资源 URI 以斜杠结尾,而 v2 的 scope 语法会追加 /user_impersonation,于是形成了双斜杠。有些租户会拒绝单斜杠形式。这一个字符串,就决定了你得到的是一次成功的登录,还是一串晦涩的 AADSTS 错误。
另一个有趣之处:两个 API 看到的流程不同
这里有两个 REST 后端,它们不可互换:
|
| |
状态 | 无文档、不受支持 | 官方、有文档( |
能看到个人流程 | 能 | 不能——没有 Dataverse 就会 404 |
能看到解决方案流程 | 能 | 能 |
我们用它做什么 | 全部事情(个人流程) | 已接入,但处于休眠状态 |
花费研究时间最多的教训是:那个受支持的 API 根本看不到个人流程。它要求流程必须存在于 Dataverse 解决方案中。所以,任何管理普通用户在门户中所创建流程的工具——包括每一个付费 MCP——都别无选择,只能依赖这个不受支持的服务 API。本项目把这个取舍明确展示出来,而不是隐瞒它。
src/client/flow-api.ts 使用一个开关来控制这两个 base URL,因此,将来某个流程移入解决方案(或者服务 API 终于崩溃的那个未来),都只需修改一个常量,而不是重写代码。
可靠性说明(请阅读)
api.flow.microsoft.com 是无文档且不受微软支持的。它有可能在没有通知的情况下变形或消失,届时这个工具会随之失灵。付费服务试图接收的正是这种风险。对于一个自己修复问题的个人工具来说,这是一个不错的权衡;但对任何正在承载重要任务的场景,则并不合适。请自行判断。
一切都以你的身份运行。如果你失去对账户的访问权,这个工具就无法工作——它背后没有任何服务身份。
安装
要求: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 并输入代码后,用你负责管理的流程所属账户登录,然后批准即安全。成功之后,一个 refresh token 会被写入 .pa-token(权限为 0600,已被 gitignore 忽略)。服务器会自动利用它为该请求生成短时访问令牌,所以在过期(约 90 天无活动)之前,已不要求你再登录一次。要切换账户或从过期令牌中恢复,只需重新运行 pnpm login。
可选的环境变量
变量 | 默认值 | 何时设置 |
|
| 当你的账户同属于多个租户时,设置固定的特定租户 GUID。 |
| 包旁边的 | 将 refresh token 存储到其他位置。 |
验证(可选,但建议)
运行 pnpm probe 会执行第 0 阶段——它用 你的租户调用每个只读 endpoint,并将真实响应转储到 scratch/(已被 gitignore)。如果某个路由在你的环境中 404 了,你会在这里看到它,而不是在使用中途突然出事。该命令不做任何写操作。
pnpm probe在你的 MCP 客户端中注册
将服务器添加到 MCP 客户端的配置中。对于 Claude Code,那就是 ~/.mcp.json:
{
"mcpServers": {
"power-automate": {
"command": "node",
"args": ["/absolute/path/to/PowerAutomate_MCP/dist/index.js"]
}
}
}请为 dist/index.js 使用绝对路径。服务器会相对于自己的位置查找 .pa-token,所以客户端不需要设置任何工作目录或环境变量。重启客户端(或重新连接服务器)后,这七个工具就会出现了。如果不想使用 MCP 客户端,想在终端里快速确认,可以这样:
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工具
工具 | 写操作? | 用途 |
| 否 | 该账户可见的所有环境。从这里开始,获取环境 ID。 |
| 否 | 某个环境中的云端流(摘要字段)。 |
| 否 | 完整的可编辑定义和连接引用。 |
| 否 | 最近的运行历史:状态、代码、计时情况。 |
| 否 | 单次运行的按操作分解;追踪失败操作的 inputs/outputs 链接。这是调试视图。 |
| 是 | 启动/停止一个流程。除非你传入 |
| 是 | 根据定义对象创建或编辑流程。 |
典型用法
list_environments → grab the environment ID
list_flows(environmentId) → find the flow you want, grab its ID
get_flow(env, flowId) → read the definition
… edit the definition object …
create_or_update_flow(env, flowId, definition) → preview (dryRun on)
create_or_update_flow(env, flowId, definition, dryRun:false) → apply这两个写入工具在您明确选择(不)之前(dryRun: false / confirm: true)不会对任何内容进行改动。请把它视为一种特性,而不是麻烦——因为一个糟糕的定义很可能毁掉正在运行的自动化任务。
项目结构
src/
auth/ device-code login + silent refresh (the interesting bit)
client/ thin HTTP wrapper over the two REST backends
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当前状态
工作正常。七个工具(五个读取,两个写入),每一个都是针对第 0 阶段探测某活跃真实租户时捕获的真实响应形状进行类型定义的。pnpm verify(类型检查 + lint + 格式 + 测试)全部通过。list_connections 有意没有出现在 v1 中——它的路径属于另一个不同的 provider 路径,被舍弃而不是用一个猜测的函数来发布;连接引用反正也可以从 get_flow 中看到。
许可证与意图
这是个人学习性质的逆向工程项目。分享主要是让其他人了解这个 API 的运作方式,并在此基础上构建自己的个人工具。此项目与微软无关,也未获得微软的认可或背书。请在你自己的账户范围内,并遵守你所在组织的政策使用。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Self-hosted MCP gateway: turn any API, database or MCP server into AI connectors — no code.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/karenrebecag/PowerAutomate_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server