Power Platform Pipeline MCP Server
Exposes Power Platform Pipeline operations as MCP tools for Copilot Studio agents, enabling pipeline discovery, deployments, approvals, and configuration management.
README
Power Platform Pipeline MCP Server
A Model Context Protocol (MCP) server that exposes Power Platform Pipeline operations as tools for Copilot Studio agents and any MCP-compatible client.
Features
| Category | Tools |
|---|---|
| Pipeline Discovery | list_pipelines, get_pipeline_stages |
| Deployments | deploy_solution, get_deployment_status, get_deployment_history |
| Approvals | list_pending_approvals, approve_deployment, reject_deployment |
| Configuration | list_environment_variables, set_environment_variable, list_connection_references, update_connection_reference |
Architecture
Copilot Studio / MCP Client
│ HTTP (Streamable HTTP transport)
▼
Express HTTP Server (POST /mcp, GET /mcp SSE, DELETE /mcp)
│
McpServer (@modelcontextprotocol/sdk)
│
┌─────┴────────────────────────┐
│ │
Dataverse Web API PAC CLI
(Axios + MSAL OAuth2) (child_process)
Prerequisites
- Node.js 20+
- PAC CLI installed and on
PATH— required fordeploy_solution. Install via:dotnet tool install --global Microsoft.PowerApps.CLI.Tool - Entra ID App Registration with:
- Client credentials (client ID + secret)
- API permissions:
Dynamics CRM → user_impersonation(delegated) or assigned a system administrator role in the target environment as an application user - The same service principal is used for all Dataverse calls AND the
UpdateApprovalStatusapproval action — this is a Microsoft requirement
Setup
1. Clone and install
git clone https://github.com/MattCollins-Jones/power-platform-pipeline-mcp.git
cd power-platform-pipeline-mcp
npm install
2. Configure environment variables
cp .env.example .env
# Edit .env with your values
| Variable | Description |
|---|---|
AZURE_CLIENT_ID |
App registration client ID |
AZURE_CLIENT_SECRET |
App registration client secret |
AZURE_TENANT_ID |
Entra ID tenant ID |
DATAVERSE_URL |
Environment root URL, e.g. https://yourorg.crm.dynamics.com |
PORT |
Port to listen on (default: 3000) |
3. Authenticate PAC CLI (development)
For local development, authenticate the PAC CLI manually before starting the server:
pac auth create \
--kind ServicePrincipal \
--applicationId $AZURE_CLIENT_ID \
--clientSecret $AZURE_CLIENT_SECRET \
--tenant $AZURE_TENANT_ID \
--environment $DATAVERSE_URL
4. Build and start
npm run build
npm start
Or for development with hot-reload:
npm run dev
Docker
Build and run with Docker (PAC CLI auth is handled by docker-entrypoint.sh):
docker build -t pp-pipeline-mcp .
docker run -p 3000:3000 \
-e AZURE_CLIENT_ID=... \
-e AZURE_CLIENT_SECRET=... \
-e AZURE_TENANT_ID=... \
-e DATAVERSE_URL=https://yourorg.crm.dynamics.com \
pp-pipeline-mcp
Azure App Service / Container Apps Deployment
- Build the Docker image and push to Azure Container Registry (ACR):
az acr build --registry <your-acr> --image pp-pipeline-mcp:latest . - Create a Container App or App Service instance pointing to the image.
- Set the four required environment variables as application settings.
- The
docker-entrypoint.shwill authenticate PAC CLI on each container start.
Tip: Use Managed Identity with a federated credential to avoid storing the client secret.
Connecting from Copilot Studio
- Deploy the server to a publicly accessible HTTPS endpoint (e.g.
https://your-app.azurewebsites.net). - In Copilot Studio, go to Settings → AI Capabilities → Model Context Protocol.
- Add a new MCP server with the URL:
https://your-app.azurewebsites.net/mcp - All 12 tools will be discovered automatically and made available to your agent.
Tool Reference
list_pipelines
Lists all deployment pipelines in the environment. No parameters required.
get_pipeline_stages
| Parameter | Type | Description |
|---|---|---|
pipelineId |
string |
GUID of the pipeline from list_pipelines |
deploy_solution
Triggers a PAC CLI deployment. PAC CLI must be authenticated on the server.
| Parameter | Type | Description |
|---|---|---|
solutionName |
string |
Unique name of the solution |
stageId |
string |
Target stage GUID from get_pipeline_stages |
currentVersion |
string |
Current version, e.g. 1.0.0.0 |
newVersion |
string |
Version after deploy, e.g. 1.0.0.1 |
environment |
string |
Source environment URL |
get_deployment_status
| Parameter | Type | Description |
|---|---|---|
deploymentStageRunId |
string |
GUID of the stage run |
get_deployment_history
| Parameter | Type | Description |
|---|---|---|
stageId |
string |
Stage GUID to query |
solutionName |
string? |
Optional solution filter |
top |
number? |
Max records (1–50, default 20) |
list_pending_approvals
| Parameter | Type | Description |
|---|---|---|
pipelineStageId |
string? |
Optional stage filter |
approve_deployment
| Parameter | Type | Description |
|---|---|---|
deploymentStageRunId |
string |
Stage run to approve |
approvalComments |
string? |
Optional comments |
reject_deployment
| Parameter | Type | Description |
|---|---|---|
deploymentStageRunId |
string |
Stage run to reject |
approvalComments |
string |
Reason for rejection |
list_environment_variables
| Parameter | Type | Description |
|---|---|---|
solutionUniqueName |
string |
Solution unique name |
set_environment_variable
| Parameter | Type | Description |
|---|---|---|
environmentVariableDefinitionId |
string |
Definition GUID |
newValue |
string |
New value |
environmentVariableValueId |
string? |
Existing value GUID (omit to create) |
list_connection_references
| Parameter | Type | Description |
|---|---|---|
solutionUniqueName |
string |
Solution unique name |
update_connection_reference
| Parameter | Type | Description |
|---|---|---|
connectionReferenceId |
string |
Connection reference GUID |
connectionId |
string |
Target connection ID |
Security Notes
- Store
AZURE_CLIENT_SECRETin Azure Key Vault and reference it as an App Service secret — never commit it to source control. - The service principal must be added as an Application User in the Power Platform Admin Centre with the appropriate security role for each environment it operates in.
- The
UpdateApprovalStatusDataverse action requires the caller to be the service principal that owns the pipeline connection — this server satisfies that requirement automatically.
Project Structure
src/
index.ts — MCP server entry point, Express HTTP transport
auth/
msalClient.ts — MSAL token acquisition (client credentials)
clients/
dataverseClient.ts — Axios Dataverse Web API client with auth interceptor
pacCliClient.ts — child_process wrapper for PAC CLI
tools/
pipelines.ts — list_pipelines, get_pipeline_stages
deployments.ts — deploy_solution, get_deployment_status, get_deployment_history
approvals.ts — approve_deployment, reject_deployment, list_pending_approvals
configuration.ts — env vars, connection references
types/
index.ts — Shared TypeScript interfaces
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。