Skip to main content
Glama
karenrebecag

Power Automate MCP

by karenrebecag

Power Automate MCP

Локальный MCP-сервер, который позволяет ИИ-агенту просматривать и редактировать ваши личные облачные потоки Power Automate — с аутентификацией через вашу собственную учётную запись Microsoft, без согласия администратора и без платной подписки.

Он существует потому, что облачные альтернативы взимают ежемесячную плату за обёртку API, который Microsoft уже предоставляет вашей учётной записи бесплатно. Этот репозиторий — это описание обратной разработки того, как этот API на самом деле работает, упакованное как рабочий инструмент. Личный проект, предоставляется как есть — прочтите замечание о надёжности, прежде чем полагаться на него.


Самое интересное: как он аутентифицируется, не спрашивая IT

Каждый учебник «управляйте Power Automate из кода» говорит вам зарегистрировать приложение в Entra ID и получить согласие администратора на Dynamics CRM user_impersonation или Flows.Manage.All. В закрытом корпоративном тенанте такой запрос — неприемлем: он предоставляет постоянный сервисный субъект, и администраторы (справедливо) отказывают.

Этот проект полностью обходит это, используя публичный first-party client ID, который Microsoft поставляет для интерактивных инструментов:

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

Реализованный через OAuth 2.0 device-code grant, это делегированный вход: токен несёт вашу личность и ваши разрешения, нет сервисного субъекта, который нужно одобрять, и не появляется экран согласия. Вы можете общаться с Power Automate со своего ноутбука с ровно теми правами, которые у вас уже есть в портале — ни больше, ни меньше.

У аудитории токена есть одна неочевидная особенность, которую стоит задокументировать:

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

Унаследованный URI ресурса заканчивается слэшем, а синтаксис области v2 добавляет /user_impersonation, что даёт двойной слэш. Некоторые тенанты отклоняют форму с одним слэшем. Эта одна строка — разница между работающим входом и непонятной ошибкой AADSTS.

Другая интересная часть: два API, которые видят разные потоки

Есть два REST-бэкенда, и они не взаимозаменяемы:

api.flow.microsoft.com

api.powerplatform.com

Статус

Не документирован, не поддерживается

Официальный, документированный (2024-10-01)

Видит личные потоки

Да

Нет — 404 без Dataverse

Видит решения потоки

Да

Да

Для чего мы его используем

Всё (личные потоки)

Подключён, но неактивен

Урок, который стоил больше всего исследований: поддерживаемый API вообще не видит личные потоки. Он требует, чтобы поток находился в решении Dataverse. Поэтому любой инструмент, который управляет потоками, которые обычный пользователь создаёт в портале — включая каждый платный MCP — не имеет выбора, кроме как использовать неподдерживаемый сервисный API. Этот проект делает этот компромисс явным, а не скрывает его.

src/client/flow-api.ts держит оба базовых URL за одним переключателем, так что поток, который позже переедет в решение (или будущее, где сервисный API наконец сломается) — это изменение одной константы, а не переписывание.


Замечание о надёжности (прочитайте это)

api.flow.microsoft.com не документирован и не поддерживается Microsoft. Он может изменить форму или исчезнуть без предупреждения, и этот инструмент сломается, когда это произойдёт. Именно этот риск платные сервисы берут на себя за вас. Для личного инструмента, где вы чините вещи сами, это нормальный компромисс. Для чего-то критически важного — нет. Выбирайте соответственно.

Всё работает как вы. Если вы потеряете доступ к учётной записи, инструмент перестанет работать — за ним нет сервисной идентичности.


Установка

Требования: Node 18+ (для встроенного fetch) и pnpm. Учётная запись Microsoft work/school, которая может использовать Power Automate — ничего больше.

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

Учётные данные — войдите один раз

Нет файла конфигурации для редактирования и нет секрета для вставки. Аутентификация — это интерактивный device-code вход в вашу собственную учётную запись 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, gitignored). Сервер автоматически создаёт кратковременные access-токены из него — вас не спросят снова, пока он не истечёт (~90 дней бездействия). Чтобы переключить учётные записи или восстановиться после истёкшего токена, просто запустите pnpm login снова.

Необязательные переменные окружения

Переменная

По умолчанию

Когда её устанавливать

PA_TENANT_ID

organizations

Зафиксируйте конкретный GUID тенанта, если ваша учётная запись принадлежит нескольким.

PA_TOKEN_FILE

.pa-token рядом с пакетом

Храните refresh token в другом месте.

Проверка (необязательно, но рекомендуется)

pnpm probe запускает Phase 0 — он вызывает каждый read-эндпоинт против вашего тенанта и сбрасывает реальные ответы в scratch/ (gitignored). Если маршрут 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 относительно своего собственного расположения, поэтому в клиенте не нужно устанавливать рабочую директорию или env. Перезапустите клиент (или переподключите сервер), и появятся семь инструментов. Быстрая проверка из терминала без клиента:

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

нет

Пошаговая разбивка одного запуска; следует по ссылкам inputs/outputs для неудачных действий. Отладочное представление.

set_flow_state

да

Запустить / остановить поток. Предпросмотр, если не передать confirm: true.

create_or_update_flow

да

Создать или отредактировать поток из объекта определения. dryRun — по умолчанию — передайте dryRun: false, чтобы реально записать.

Типичный поток

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

Статус

Работает. Семь инструментов (пять чтения, два записи), каждый типизирован против реальных форм ответов, захваченных Phase 0-пробой против живого тенанта. pnpm verify (typecheck + lint + format + tests) — зелёный. list_connections намеренно отсутствует в v1 — его маршрут находится под другим путём провайдера и был удалён, а не выпущен как догадка; ссылки на подключения видны внутри get_flow в любом случае.

Лицензия и намерение

Личный, образовательный проект по обратной инженерии. Поделился, чтобы другие могли узнать, как работает этот API, и построить свои собственные личные инструменты на его основе. Не аффилирован с Microsoft и не одобрен Microsoft. Используйте в рамках своей собственной учётной записи и политик вашей организации.# Power Automate MCP

Локальный MCP-сервер, который позволяет ИИ-агенту просматривать и редактировать ваши личные облачные потоки Power Automate — с аутентификацией через вашу собственную учётную запись Microsoft, без согласия администратора и без платной подписки.

Он существует потому, что облачные альтернативы взимают ежемесячную плату за обёртку API, который Microsoft уже предоставляет вашей учётной записи бесплатно. Этот репозиторий — это описание обратной инженерии того, как этот API на самом деле работает, упакованное как рабочий инструмент. Личный проект, предоставляется как есть — прочитайте замечание о надёжности, прежде чем полагаться на него.


Самое интересное: как он аутентифицируется, не спрашивая IT

Каждый учебник «управляйте Power Automate из кода» говорит вам зарегистрировать приложение в Entra ID и получить согласие администратора на Dynamics CRM user_impersonation или Flows.Manage.All. В закрытом корпоративном тенанте такой запрос — неприемлем: он предоставляет постоянный сервисный субъект, и администраторы (справедливо) отказывают.

Этот проект полностью обходит это, используя публичный first-party client ID, который Microsoft поставляет для интерактивных инструментов:

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

Реализованный через OAuth 2.0 device-code grant, это делегированный вход: токен несёт вашу личность и ваши разрешения, нет сервисного субъекта, который нужно одобрять, и не появляется экран согласия. Вы можете общаться с Power Automate со своего ноутбука с ровно теми правами, которые у вас уже есть в портале — ни больше, ни меньше.

У аудитории токена есть одна неочевидная особенность, которую стоит задокументировать:

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

Устаревший URI ресурса заканчивается слэшем, а синтаксис области v2 добавляет /user_impersonation, что даёт двойной слэш. Некоторые тенанты отклоняют форму с одним слэшем. Эта одна строка — разница между работающим входом и непонятной ошибкой AADSTS.

Другая интересная часть: два API, которые видят разные потоки

Есть два REST-бэкенда, и они не взаимозаменяемы:

api.flow.microsoft.com

api.powerplatform.com

Статус

Не документирован, не поддерживается

Официальный, документированный (2024-10-01)

Видит личные потоки

Да

Нет — 404 без Dataverse

Видит решения потоки

Да

Да

Что мы используем для

Всё (личные потоки)

Подключён, но неактивен

Урок, который стоил больше всего исследований: поддерживаемый API вообще не видит личные потоки. Он требует, чтобы поток находился в решении Dataverse. Поэтому любой инструмент, который управляет потоками, которые обычный пользователь создаёт в портале — включая каждый платный MCP — не имеет выбора, кроме как использовать неподдерживаемый сервисный API. Этот проект делает этот компромисс явным, а не скрывает его.

src/client/flow-api.ts держит оба базовых URL за одним переключателем, так что поток, который позже переедет в решение (или будущее, где сервисный API наконец сломается) — это изменение одной константы, а не переписывание.


Замечание о надёжности (прочитайте это)

api.flow.microsoft.com не документирован и не поддерживается Microsoft. Он может изменить форму или исчезнуть без предупреждения, и этот инструмент сломается, когда это произойдёт. Именно этот риск платные сервисы берут на себя, чтобы поглотить его за вас. Для личного инструмента, где вы чините вещи сами, это нормальный компромисс. Для чего-то критически важного — нет. Выбирайте соответственно.

Всё работает как вы. Если вы потеряете доступ к учётной записи, инструмент перестанет работать — за ним нет сервисной идентичности.


Установка

Требования: Node 18+ (для встроенного fetch) и pnpm. Учётная запись Microsoft work/school, которая может использовать Power Automate — ничего больше.

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

Учётные данные — войдите один раз

Нет файла конфигурации для редактирования и нет секрета для вставки. Аутентификация — это интерактивный device-code вход в вашу собственную учётную запись 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, gitignored). Сервер автоматически создаёт краткосрочные access-токены из него — вас не спросят снова, пока он не истечёт (~90 дней бездействия). Чтобы переключить учётные записи или восстановиться после истёкшего токена, просто запустите pnpm login снова.

Необязательные переменные окружения

Переменная

По умолчанию

Когда её устанавливать

PA_TENANT_ID

organizations

Зафиксируйте конкретный GUID тенанта, если ваша учётная запись принадлежит нескольким.

PA_TOKEN_FILE

.pa-token рядом с пакетом

Храните refresh-токен в другом месте.

Проверка (необязательно, но рекомендуется)

pnpm probe запускает Phase 0 — он вызывает каждый read-эндпоинт против вашего тенанта и сбрасывает реальные ответы в scratch/ (gitignored). Если маршрут 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 относительно своего собственного расположения, поэтому в клиенте не нужно устанавливать рабочую директорию или env. Перезапустите клиент (или переподключите сервер), и появятся семь инструментов. Быстрая проверка из терминала без клиента:

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

нет

Пошаговая разбивка одного запуска; следует за ссылками inputs/outputs для неудачных действий. Отладочное представление.

set_flow_state

да

Запустить / остановить поток. Предпросмотр, если не передать confirm: true.

create_or_update_flow

да

Создать или отредактировать поток из объекта определения. dryRun — по умолчанию — передайте dryRun: false, чтобы реально записать.

Типичный поток

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

Статус

Работает. Семь инструментов (пять чтения, два записи), каждый типизирован против реальных форм ответов, захваченных Phase 0-проверкой против живого тенанта. pnpm verify (typecheck + lint + format + tests) — зелёный. list_connections намеренно отсутствует в v1 — его маршрут находится под другим путём провайдера и был удалён, а не отправлен как догадка; ссылки на подключения видны внутри get_flow в любом случае.

Лицензия и намерение

Личный, образовательный проект обратной инженерии. Поделился, чтобы другие могли узнать, как работает этот API, и построить свои собственные личные инструменты на его основе. Не аффилирован с Microsoft и не одобрен Microsoft. Используйте в рамках своей собственной учётной записи и политик вашей организации.

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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.

View all MCP Connectors

Latest Blog Posts

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