mcpField
P
powerplatform mcp/cli

powerplatform mcp/cli

Local
github.com/michsobDeveloper Tools44Updated 6w ago

About powerplatform mcp/cli

PowerPlatform MCP / CLI is an MCP server and standalone command line tool for querying and configuring PowerPlatform and Dataverse environments across multiple environments. It is aimed at developers and administrators who explore or automate Power Platform setup.

Key features

  1. 01Multiple environment configuration and selection
  2. 02Query entities, records, plugins, flows and solutions
  3. 03Write operations for automated environment setup
  4. 04CLI persists full results to a file system cache

Use cases

  1. 01Exploring Dataverse entities and plugin steps conversationally
  2. 02Exporting large query results to disk for later analysis
  3. 03Automating creation of custom APIs, environment variables or security roles

MCP support

This is an MCP server that provides about 67 tools to AI clients, covering entities, records, plugins, Power Automate flows, solutions and security roles.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"powerplatform": {
"command": "npx",
"args": [
"-y",
"powerplatform-mcp"
],
"env": {
"POWERPLATFORM_ENVIRONMENTS": "<POWERPLATFORM_ENVIRONMENTS>",
"POWERPLATFORM_DEV_URL": "<POWERPLATFORM_DEV_URL>",
"POWERPLATFORM_DEV_CLIENT_ID": "<POWERPLATFORM_DEV_CLIENT_ID>",
"POWERPLATFORM_DEV_CLIENT_SECRET": "<POWERPLATFORM_DEV_CLIENT_SECRET>",
"POWERPLATFORM_DEV_TENANT_ID": "<POWERPLATFORM_DEV_TENANT_ID>",
"POWERPLATFORM_UAT_URL": "<POWERPLATFORM_UAT_URL>",
"POWERPLATFORM_UAT_CLIENT_ID": "<POWERPLATFORM_UAT_CLIENT_ID>",
"POWERPLATFORM_UAT_CLIENT_SECRET": "<POWERPLATFORM_UAT_CLIENT_SECRET>",
"POWERPLATFORM_UAT_TENANT_ID": "<POWERPLATFORM_UAT_TENANT_ID>"
}
}
}
}
Run commandnpx -y powerplatform-mcp
Environment variables to set
POWERPLATFORM_ENVIRONMENTS
POWERPLATFORM_DEV_URL
POWERPLATFORM_DEV_CLIENT_ID
POWERPLATFORM_DEV_CLIENT_SECRETSecret
POWERPLATFORM_DEV_TENANT_ID
POWERPLATFORM_UAT_URL
POWERPLATFORM_UAT_CLIENT_ID
POWERPLATFORM_UAT_CLIENT_SECRETSecret
POWERPLATFORM_UAT_TENANT_ID

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npmpowerplatform-mcp

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

PowerPlatform MCP / CLI

A Model Context Protocol (MCP) server and standalone CLI for querying and configuring PowerPlatform / Dataverse environments. Supports multiple environments, entity metadata, records, plugins, flows, solutions, workflows, business rules, security roles, custom APIs, web resources, and more — including write operations for automated environment setup.

Why MCP + CLI?

MCP integrates directly with AI clients (Claude, Cursor, GitHub Copilot) for interactive, conversational exploration of your environments.

CLI writes results to a file system cache instead of returning them inline. MCP tool responses are bound by the AI client's context window, which can truncate or degrade results when querying environments with hundreds of entities, flows, or plugin steps. The CLI avoids this limitation by persisting full results to disk, making them available for follow-up analysis without context pressure. Both interfaces share the same tools and capabilities.

Installation

Requires Node.js 22+ (< 25).

MCP Server
npm install -g powerplatform-mcp
# or
npx powerplatform-mcp
CLI
npm install -g powerplatform-cli
# or
npx powerplatform-cli
Docker
# MCP Server
docker pull ghcr.io/michsob/powerplatform-mcp
docker run --env-file .env ghcr.io/michsob/powerplatform-mcp

# CLI
docker pull ghcr.io/michsob/powerplatform-cli
docker run --env-file .env ghcr.io/michsob/powerplatform-cli entity-attributes account

Configuration

The tool supports multiple environments. Define them via environment variables:

POWERPLATFORM_ENVIRONMENTS=DEV,UAT,PROD

# For each environment, set:
POWERPLATFORM_DEV_URL=https://dev-org.crm.dynamics.com
POWERPLATFORM_DEV_CLIENT_ID=your-client-id
POWERPLATFORM_DEV_CLIENT_SECRET=your-client-secret
POWERPLATFORM_DEV_TENANT_ID=your-tenant-id

POWERPLATFORM_UAT_URL=https://uat-org.crm.dynamics.com
POWERPLATFORM_UAT_CLIENT_ID=...
POWERPLATFORM_UAT_CLIENT_SECRET=...
POWERPLATFORM_UAT_TENANT_ID=...

For local development, copy .env.example to .env and fill in your credentials.

MCP Server

The MCP server is designed for AI-powered clients (Claude, Cursor, GitHub Copilot).

Available MCP Tools (67)

All tools accept an optional environment parameter to target a specific environment (defaults to the first configured).

Entity
ToolDescriptionRequired ParamsOptional
get-entity-metadataGet entity metadataentityName
get-entity-attributesList all attributes/fieldsentityName
get-entity-attributeGet a specific attributeentityName, attributeName
get-entity-relationshipsGet 1:N and N:N relationshipsentityName
create-entity-string-attributeCreate a Single Line of Text columnentityName, schemaName, displayNamemaxLength, requiredLevel, description, solutionName
get-entity-keysList alternate keys on an entityentityName
create-entity-alternate-keyCreate an alternate keyentityName, schemaName, displayName, keyAttributessolutionName
Records
ToolDescriptionRequired ParamsOptional
get-recordGet a record by IDentityNamePlural, recordId
query-recordsOData queryentityNamePlural, filtermaxRecords (default 50)
Plugins
ToolDescriptionRequired ParamsOptional
get-plugin-assembliesList plugin assembliesincludeManaged, maxRecords
get-plugin-assembly-completeAssembly with types, steps, imagesassemblyNameincludeDisabled
get-entity-plugin-pipelinePlugins executing on an entityentityNamemessageFilter, includeDisabled
get-plugin-trace-logsPlugin trace logsentityName, messageName, correlationId, pluginStepId, exceptionOnly, hoursBack, maxRecords
get-all-plugin-stepsAll SDK message processing stepsincludeDisabled, maxRecords
get-plugin-typeLook up a plugin type by class nametypeName
get-sdk-messageLook up an SDK message by namemessageName
create-plugin-stepRegister a plugin stepname, pluginTypeId, sdkMessageId, stage, moderank, supportedDeployment, description, configuration, sdkMessageFilterId, solutionName
Flows (Power Automate)
ToolDescriptionRequired ParamsOptional
get-flowsList cloud flows (smart filtering)activeOnly, maxRecords, nameContains, excludeSystem, excludeCustomerInsights, excludeCopilotSales
search-workflowsSearch workflows and flowsname, primaryEntity, description, category, statecode, includeDescription, maxResults
get-flow-definitionFull definition or parsed summaryflowIdsummary
get-flow-runsFlow run historyflowIdstatus, startedAfter, startedBefore, maxRecords
get-flow-run-detailsRun details with action-level errorsflowId, runId
cancel-flow-runCancel a running/waiting runflowId, runId
resubmit-flow-runRetry a failed runflowId, runId
scan-flow-healthBatch health scan (success rates)daysBack, maxRunsPerFlow, maxFlows, activeOnly
get-flow-inventoryLightweight flow inventorymaxRecords
Solutions
ToolDescriptionRequired ParamsOptional
get-publishersList non-readonly publishers
get-solutionsList visible solutions
get-solutionGet solution by unique nameuniqueName
get-solution-componentsList components in a solutionsolutionUniqueName
export-solutionExport solution (base64)solutionNamemanaged
add-solution-componentAdd a component to a solutionsolutionUniqueName, componentId, componentTypeaddRequiredComponents
publish-customizationsPublish entity or all customizationsentityLogicalName
Workflows (Classic)
ToolDescriptionRequired ParamsOptional
get-workflowsList classic workflowsactiveOnly, maxRecords
get-workflow-definitionXAML definition or summaryworkflowIdsummary
get-ootb-workflowsBackground, BPFs, actions, on-demandmaxRecords, categories
Business Rules
ToolDescriptionRequired ParamsOptional
get-business-rulesList business rulesactiveOnly, maxRecords
get-business-ruleBusiness rule with XAMLworkflowId
Option Sets
ToolDescriptionRequired Params
get-global-option-setGet a global option set definitionoptionSetName
Configuration
ToolDescriptionRequired ParamsOptional
get-connection-referencesConnection referencesmaxRecords, managedOnly, hasConnection, inactive
get-environment-variablesEnvironment variable definitions + valuesmaxRecords, managedOnly
create-environment-variableCreate an environment variable definitionschemaName, displayName, typedefaultValue, description, solutionName
set-environment-variable-valueSet or update an environment variable valuedefinitionId, valueexistingValueId
Custom APIs
ToolDescriptionRequired ParamsOptional
get-custom-apisList Custom API definitionsmaxRecords, includeManaged
get-custom-apiGet a Custom API by unique nameuniqueName
create-custom-apiCreate a Custom API definitionuniqueName, name, displayName, bindingType, isFunction, isPrivate, allowedCustomProcessingStepTypedescription, pluginTypeId, pluginTypeName, boundEntityLogicalName, solutionName
get-custom-api-response-propertiesList response propertiescustomApiId
create-custom-api-response-propertyCreate a response propertycustomApiId, uniqueName, name, displayName, typedescription, logicalEntityName, isOptional, solutionName
get-custom-api-request-parametersList request parameterscustomApiId
create-custom-api-request-parameterCreate a request parametercustomApiId, uniqueName, name, displayName, typedescription, logicalEntityName, isOptional, solutionName
Web Resources
ToolDescriptionRequired ParamsOptional
get-web-resourcesList web resourcesmaxRecords, webResourceType, nameFilter
get-web-resourceGet a web resource by namename
create-web-resourceUpload a new web resourcename, displayName, webResourceType, contentdescription, solutionName
Security Roles
ToolDescriptionRequired ParamsOptional
get-security-rolesList customizable security rolessolutionUniqueName, excludeSystemRoles, includePrivileges, maxRecords
get-security-role-privilegesPrivileges for a role (name, accessright, depth mask)roleIdentityFilter, accessRightFilter
list-privilegesBrowse the system privilege catalog to discover privilegeId GUIDs and supported depthsentityFilter, accessRightFilter, maxRecords
create-security-roleCreate a new role (defaults to root BU); optional solutionUniqueName adds it to a solution in one stepnamebusinessUnitId, description, solutionUniqueName
clone-security-roleClone a role with its privileges. Uses CloneAsRole with a create-then-copy fallback when the action isn't availablesourceRoleIdnewName, targetBusinessUnitId, solutionUniqueName
update-security-roleUpdate a role's name, description, or business unitroleIdname, description, businessUnitId, solutionUniqueName
delete-security-roleDelete a role (destructive — requires confirm: true)roleId, confirm
add-security-role-privilegesAppend privileges to a role (AddPrivilegesRole — leaves existing privileges intact)roleId, privileges[]
remove-security-role-privilegesRemove privileges from a role (loops RemovePrivilegeRole)roleId, privilegeIds[]
replace-security-role-privilegesWipe and replace the full privilege set (ReplacePrivilegesRole — destructive, requires confirm: true)roleId, privileges[], confirm

Each item in privileges[] is { privilegeId, depth, businessUnitId? }. Depth is one of Basic (user), Local (BU), Deep (BU + child), Global (org).

Dependencies
ToolDescriptionRequired Params
check-component-dependenciesDependencies blocking deletioncomponentId, componentType
check-delete-eligibilityCheck if a component can be deletedcomponentId, componentType
Service Endpoints
ToolDescriptionOptional
get-service-endpointsService Bus, webhooks, Event Hub, Event GridmaxRecords
MCP Prompts
PromptDescriptionRequired Args
entity-overviewEntity overview with key attributes and relationshipsentityName
attribute-detailsDetailed attribute info (type, format, requirements)entityName, attributeName
query-templateOData query template with example filtersentityName
relationship-mapComplete 1:N and N:N relationship mapentityName

CLI

Same tools as the MCP server, but results are cached to the file system for full-fidelity output on large data sets.

Global Option

--env <name> — target environment (defaults to first configured).

Commands
Entity
entity-metadata <entityName>
entity-attributes <entityName>
entity-attribute <entityName> <attributeName>
entity-relationships <entityName>
entity-keys <entityName>
create-entity <schemaName> <displayName> <displayCollectionName>  [--primary-name-schema <name>] [--primary-name-display <name>] [--description <desc>] [--ownership <UserOwned|OrganizationOwned>] [--has-activities] [--has-notes] [--solution <name>]
create-entity-string-attribute <entityName> <schemaName> <displayName>  [--max-length <n>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-memo-attribute <entityName> <schemaName> <displayName>  [--max-length <n>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-file-attribute <entityName> <schemaName> <displayName>  [--max-size-kb <n>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-integer-attribute <entityName> <schemaName> <displayName>  [--min <n>] [--max <n>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-decimal-attribute <entityName> <schemaName> <displayName>  [--precision <n>] [--min <n>] [--max <n>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-money-attribute <entityName> <schemaName> <displayName>  [--precision-source <0|1|2>] [--precision <n>] [--min <n>] [--max <n>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-boolean-attribute <entityName> <schemaName> <displayName>  [--true-label <label>] [--false-label <label>] [--default-value <true|false>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-datetime-attribute <entityName> <schemaName> <displayName>  [--format <DateOnly|DateAndTime>] [--behavior <UserLocal|DateOnly|TimeZoneIndependent>] [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-picklist-attribute <entityName> <schemaName> <displayName>  [-o <value:label>]... [--required-level <level>] [--description <desc>] [--solution <name>]
create-entity-lookup <referencingEntity> <referencedEntity> <relationshipSchemaName> <lookupSchemaName> <displayName>  [--required-level <level>] [--description <desc>] [--cascade-delete <NoCascade|RemoveLink|Restrict|Cascade>] [--solution <name>]
create-entity-alternate-key <entityName> <schemaName> <displayName> <keyAttributes...>  [--solution <name>]
delete-entity-attribute <entityName> <attributeName>
Records
record <entityNamePlural> <recordId>
query-records <entityNamePlural> <filter>  [--max <n>]
create-record <entityNamePlural> <jsonBody>
update-record <entityNamePlural> <recordId> <jsonBody>
delete-record <entityNamePlural> <recordId>
associate-records <entityNamePlural> <recordId> <navigationProperty> <relatedEntityNamePlural> <relatedRecordId>
disassociate-records <entityNamePlural> <recordId> <navigationProperty> [relatedRecordId]
Plugins
plugin-assemblies                          [--include-managed] [--max <n>]
plugin-assembly <assemblyName>             [--include-disabled]
plugin-packages                            [--include-managed] [--max <n>]
plugin-type <typeName>
entity-pipeline <entityName>               [--message <msg>] [--include-disabled]
plugin-trace-logs                          [--entity <name>] [--message <msg>] [--correlation-id <id>] [--step-id <id>] [--hours <n>] [--max <n>] [--exceptions-only]
all-plugin-steps                           [--include-disabled] [--max <n>]
sdk-message <messageName>
register-plugin-package <filePath>         [--pkg-version <version>] [--solution <name>]
update-plugin-package <filePath>           --plugin-package-id <id> [--pkg-version <version>]
create-plugin-step <name> <pluginTypeId> <sdkMessageId>  [--stage <n>] [--mode <n>] [--rank <n>] [--supported-deployment <n>] [--description <desc>] [--configuration <cfg>] [--message-filter-id <id>] [--solution <name>]
create-plugin-step-image <stepId>          [--name <name>] [--entity-alias <alias>] [--image-type <0|1|2>] [--message-property-name <name>] [--attributes <csv>]
Flows
flows                                      [--active] [--name <contains>] [--include-managed] [--max <n>]
flow-definition <flowId>                   [--summary]
flow-inventory                             [--max <n>]
flow-runs <flowId>                         [--status <s>] [--after <iso>] [--before <iso>] [--max <n>]
flow-run-details <flowId> <runId>
flow-health                                [--days <n>] [--max-runs <n>] [--max-flows <n>] [--active]
search-workflows                           [--name <name>] [--entity <entity>] [--category <n>] [--active] [--max <n>]
create-cloud-flow <clientDataFile>         [--primary-entity <entity>] [--solution <name>]
activate-flow <flowId>
deactivate-flow <flowId>
Solutions
solutions
solution <uniqueName>
solution-components <uniqueName>
publishers
add-solution-component <solutionUniqueName> <componentId> <componentType>  [--add-required]
publish-customizations                     [--entity <logicalName>]
Workflows
workflows                                  [--active] [--max <n>]
workflow-definition <workflowId>           [--summary]
ootb-workflows                             [--categories <0,1,2,3,4>]
Business Rules
business-rules                             [--active] [--max <n>]
business-rule <workflowId>
Option Sets
optionset <optionSetName>
Dependencies
check-dependencies <componentId> <componentType>
Configuration
connection-references                      [--managed-only] [--has-connection] [--no-connection] [--inactive] [--max-records <n>]
create-connection-reference <logicalName> <displayName> <connectorId>  [--description <desc>] [--solution <name>]
environment-variables                      [--managed-only] [--max-records <n>]
create-environment-variable <schemaName> <displayName>  [--type <type>] [--default-value <val>] [--description <desc>] [--solution <name>]
set-environment-variable-value <definitionId> <value>   [--existing-value-id <id>]
Custom APIs
custom-apis                                [--include-managed] [--max <n>]
custom-api <uniqueName>
create-custom-api <uniqueName> <displayName>  [--binding-type <n>] [--bound-entity <name>] [--is-function] [--is-private] [--processing-type <n>] [--plugin-type-id <id>] [--plugin-type-name <name>] [--description <desc>] [--solution <name>]
custom-api-response-properties <customApiId>
create-custom-api-response-property <customApiId> <uniqueName> <displayName>  [--type <n>] [--description <desc>] [--solution <name>]
custom-api-request-parameters <customApiId>
create-custom-api-request-parameter <customApiId> <uniqueName> <displayName>  [--type <n>] [--description <desc>] [--optional] [--solution <name>]
Web Resources
web-resources                              [--type <n>] [--name <contains>] [--max <n>]
web-resource <name>
create-web-resource <name> <displayName> <filePath>  [--type <n>] [--description <desc>] [--solution <name>]
set-entity-icon <entityName> <svgFilePath>  [--solution <name>] [--web-resource-name <name>] [--display-name <name>] [--no-publish]
Forms & Views
entity-forms <entityName>                  [--type <n>]
entity-form-fields <formId>
add-form-field <entityName> <formId> <attributeName>
remove-form-field <entityName> <formId> <attributeName>
entity-views <entityName>
add-view-column <entityName> <viewId> <attributeName>   [--width <n>]
set-view-columns <entityName> <viewId> <columns...>     [--order-by <attr>] [--desc]
remove-view-column <entityName> <viewId> <attributeName>
PAC Integration
pac-auth                                   Authenticate pac CLI using environment credentials
generate-models <outdirectory>             [--settings <path>] [--entities <filter>] [--namespace <ns>]
deploy-plugin <pluginFile>                 --plugin-id <id> [--type <Nuget|Assembly>] [--configuration <config>]
Security Roles
security-roles                             [--solution <name>] [--include-system] [--include-privileges] [--max-records <n>]
security-role-privileges <roleId>          [--entity <name>] [--access-right <type>]
privileges                                 [--entity <name>] [--access-right <type>] [--max-records <n>]
create-security-role                       --name <name> [--bu <id>] [--description <desc>] [--solution <name>]
clone-security-role <sourceRoleId>         [--name <name>] [--target-bu <id>] [--solution <name>]
update-security-role <roleId>              [--name <name>] [--description <desc>] [--bu <id>] [--solution <name>]
delete-security-role <roleId>              --yes
add-role-privileges <roleId>               --privileges <spec>     # JSON array or shorthand <guid>:<Basic|Local|Deep|Global>,...
remove-role-privileges <roleId>            --privileges <id,id,id>
replace-role-privileges <roleId>           --privileges <spec> --yes
Service Endpoints
service-endpoints                          [--max <n>]

Development

git clone https://github.com/michsob/powerplatform-mcp.git
cd powerplatform-mcp
npm install
cp .env.example .env   # fill in credentials
npm run build
npm run inspector      # test with MCP Inspector

Releasing

To publish a new version:

  1. Update version in package.json
  2. Commit the change to main
  3. Create and push a version tag:
    git tag v1.0.2
    git push origin v1.0.2
    

GitHub Actions will automatically publish:

PackagenpmGitHub PackagesDocker (GHCR)
MCP Servernpm i powerplatform-mcpnpm i @michsob/powerplatform-mcpghcr.io/michsob/powerplatform-mcp
CLInpm i powerplatform-clinpm i @michsob/powerplatform-clighcr.io/michsob/powerplatform-cli

npm publishing uses Trusted Publishing (OIDC) — no tokens or secrets needed. GitHub Packages and GHCR use the built-in GITHUB_TOKEN automatically.

License

MIT

PowerPlatform MCP server

MseeP.ai Security Assessment Badge

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.