Power Portals Pro
NUGET · POWERPORTALSPRO.MCP
Component API, code samples and Dataverse metadata for building Power Portals Pro portals.
Available components
Last scanned (7 hours ago)
Scores higher than 66% of NuGet servers
Category Cloud Infrastructure
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- No production dependencies, so there is no dependency health to assess. View diagnostics → Pass
Provenance & Transparency32
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Build provenance not yet verified. View diagnostics → Unverified
- Licence could not be checked: the licence is shipped as a file inside the package, not declared as a standard (SPDX) licence identifier, so we cannot tell whether it is OSI-approved.Unverified
- Actively maintained (last published 1 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability65
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 28490 tokens (~271/item across 105 items; 105 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management99
- Stability check failed: the tool surface changed between 10.0.0 and 13.0.0: 0 tool removals, 1 breaking changes, 35 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 13 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 106 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +15
- Malware scan: unverified → pass ▲ security
- 3 Nov 26 −15
- Malware scan: pass → unverified ▼ security
- Package version: 12.0.0 → 13.0.0 functional
- 1 Nov 26 0
- Schema quality: 23093 → 27552 ▼ functional
- Package version: 11.4.0 → 12.0.0 functional
- 31 Oct 26 0
- Security disclosure: unverified → fail ▼ functional
- 30 Oct 26 0
- Security disclosure: fail → unverified ▼ functional
- 26 Oct 26 0
- Package version: 11.0.0 → 11.4.0 functional
- 23 Oct 26 0
- Package version: 11.3.0 → 11.4.0 functional
- 22 Oct 26 0
- Stability: fail → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Package version: 11.2.0 → 11.3.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Analysed nuget/PowerPortalsPro.Mcp@13.0.0
Provenance Inconclusive
We could not complete the check, so nothing is claimed either way. This is a gap on our side, not a finding about the package.
| Result | Inconclusive |
|---|---|
| Ecosystem | nuget |
| Reason | Signature present, unverified |
Signer
| Signed as | Repository signature, names nuget.org |
|---|---|
| Subject | CN=NuGet.org Repository by Microsoft,O=NuGet.org Repository by Microsoft,L=Redmond,ST=Washington,C=US |
| Issuer | CN=DigiCert Trusted G4 Code Signing RSA4096 SHA384 2021 CA1,O=DigiCert\, Inc.,C=US |
| Valid from | 23 Feb 2024 |
| Valid until | 18 May 2027 |
| Service index | https://api.nuget.org/v3/index.json |
| Owners | PowerPortalsPro |
Background: How many MCP packages publish verified provenance →
Dependencies 0 packages
| Packages resolved | 0 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
Registry declarations For information only
What the registry and the package's own manifest say about this version. The publisher or the registry writes these, nothing here is verified, and none of it affects the score.
| Repository type | git |
|---|---|
| Commit | 0bb48589fecc335d2fd9892860d684eaa4307a0e |
| Project URL | https://github.com/orgs/Power-Portals-Pro |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
get_component_api ~213
Return the full API reference for a PowerPortalsPro component or type: every parameter and prop with its type, default, permitted values and description. This is the authoritative source — prefer it over recalling a parameter name, because the surface is large and changes between releases. Wide types are summarized; pass `filter` to search members by name or `section` to get one group in full.
| Name | Type | Req | Description |
|---|---|---|---|
| filter | string|null | – | Only include members whose name or description contains this text. Use it to find a specific parameter on a wide component. |
| name | string | yes | Component or type name, e.g. "MainGrid", "TextEdit", "IPowerPortalsProService". An id from search_docs also works. |
| section | string|null | – | Limit to one group: "parameters", "events", "properties", "methods" or "values". |
| stack | string|null | – | Which stack's version to return: "blazor" or "react". Omit to see whichever exist. |
No output schema declared.
No examples provided.
get_conventions ~92
Return the PowerPortalsPro golden rules and conventions for a stack — the same guidance shipped as AGENTS.md in every generated project. Read this before writing PowerPortalsPro code for the first time in a session: it covers data access, localization, security filtering and the mistakes that are easy to make and hard to diagnose.
| Name | Type | Req | Description |
|---|---|---|---|
| stack | string | yes | Which stack: "blazor" or "react". |
No output schema declared.
No examples provided.
get_deployment_plan ~193
The ordered steps to get this project running on Azure App Service, the plan tiers available with their real current prices, and the settings the portal will need. Needs no Azure sign-in, so it works before anything exists. Use it to answer 'how do I deploy this' and to tell the user what a given tier will cost before they commit to anything.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| region | string|null | – | Azure region to price, e.g. "eastus" or "westeurope". Defaults to the workspace's region, then eastus. |
No output schema declared.
No examples provided.
get_doc ~77
Return one documentation section in full, by the id from search_docs (e.g. "grids/main-grid#views"). Passing a page id without the #fragment returns the whole page, which is longer — prefer the specific section.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | Section id, or a bare page route to get every section of that page. |
No output schema declared.
No examples provided.
get_example ~179
Return a complete, working code sample verbatim from the PowerPortalsPro demo site. These compile and are current, so prefer adapting one over writing from scratch. Accepts a sample id from search_docs, or a component name to get that component's main example — as `id` or `name`, whichever is to hand.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string|null | – | The same as `name`: a sample id as search_docs prints it (e.g. "blazor:TextEditMainDemo"), or a component name. |
| name | string|null | – | Sample id (e.g. "blazor:TextEditMainDemo") or a component name (e.g. "TextEdit"). |
| stack | string|null | – | Which stack's sample to return: "blazor" or "react". Omit to get both when both exist. |
No output schema declared.
No examples provided.
get_page_recipe ~127
Return everything about one topic as a single coherent unit: the guide prose, the Blazor sample, the React sample and the API reference links. Prefer this over several separate calls when you are about to implement a feature — one complete working example beats three fragments you have to reassemble.
| Name | Type | Req | Description |
|---|---|---|---|
| stack | string|null | – | Which stack's samples to include: "blazor" or "react". Omit for both. |
| topic | string | yes | Topic, component name or page route, in English, e.g. "MainGrid", "SubGrid", "grids/main-grid". |
No output schema declared.
No examples provided.
get_record ~204
Read a single record by its id, from any table. Shows one column per line rather than a table, so a wide record stays readable — the shape you want when checking what a specific row actually contains. Reads as the connected service principal or user, NOT as a portal user, so none of the portal's own security applies. Read-only.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | string|null | – | Comma-separated columns to return. Omit for every column. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| id | string | yes | The record's id (GUID). |
| table | string | yes | Logical name of the table, e.g. "account". |
No output schema declared.
No examples provided.
get_setup_plan ~157
Explain what has to exist before a Power Portals Pro portal will run: creating the project from the template, importing the managed Dataverse solution, registering the Entra app the portal connects to Dataverse as, registering the Entra app people sign in with, provisioning an Azure Translator resource, and binding the folder to an environment. Says what each step creates, which permissions it needs, and which configuration keys it produces. Use this to answer 'how do I set up a new portal'; use get_setup_script to turn it into commands.
| Name | Type | Req | Description |
|---|---|---|---|
| steps | string|null | – | Which steps to explain, comma-separated, or omit for all of them. Ids: project, solution, dataverse-app, signin-app, translator, bind. |
No output schema declared.
No examples provided.
get_setup_script ~556
Generate a ready-to-run setup script for a new Power Portals Pro portal, with the supplied values filled in. Covers creating the project, registering both Entra apps (Dataverse connection and Microsoft sign-in), creating their secrets and writing them to user secrets, adding the Dataverse application user, provisioning an Azure Translator resource, and binding the folder. The script is written, NOT run — present it to the user to review and run themselves, because it creates real objects in their tenant, environment and subscription. It is safe to re-run and never prints a secret.
| Name | Type | Req | Description |
|---|---|---|---|
| dataverseRole | string|null | – | Security role for the Dataverse application user. Defaults to 'System Administrator', because the script runs before the managed solution is imported and the narrower 'Power Portals Pro Application U… |
| enableEnhancedAuthorization | boolean | – | Set true to opt into the Dataverse-native security model (enhanced authorization) instead of the default, where portal users are contacts and access is declared in Program.cs. When true, supply websi… |
| environmentUrl | string | yes | Dataverse environment URL, e.g. 'https://contoso.crm.dynamics.com'. |
| interactivity | string|null | – | Blazor render mode: 'Auto', 'Server' or 'WebAssembly'. Ignored for React. Defaults to Auto. |
| location | string|null | – | Azure region for the Translator resource. Defaults to 'westus', which is the only region that works without also editing Program.cs. |
| projectName | string | yes | Name of the project and its solution folder, e.g. 'ContosoPortal'. |
| resourceGroup | string|null | – | Azure resource group for the Translator resource. Defaults to '<project>-rg'. |
| shell | string|null | – | Shell to target: 'powershell' or 'bash'. Defaults to powershell on Windows, bash elsewhere. |
| stack | string|null | – | Which stack: 'blazor' or 'react'. Defaults to blazor. |
| steps | string|null | – | Which steps to include, comma-separated, or omit for all. Ids: project, solution, dataverse-app, signin-app, translator, bind. |
| translationProvider | string|null | – | Machine-translation provider: 'Azure', 'DeepL' or 'Google'. Only Azure can be scripted. |
| userAudience | string|null | – | Who signs in: 'External', 'Internal' or 'Both'. |
| websiteId | string|null | – | The powerpagesite record id, when enhanced authorization is on. |
No output schema declared.
No examples provided.
get_solution_export_status ~166
Check on an export that export_solution or push_solution handed back still running, and once it has finished, save the zip to the workspace's `solutions` folder. Exports of large solutions take minutes, so poll this rather than exporting again.
| Name | Type | Req | Description |
|---|---|---|---|
| asyncOperationId | string | yes | The async operation id the export returned. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| exportJobId | string | yes | The export job id the export returned. |
No output schema declared.
No examples provided.
get_solution_import_status ~175
Check how a solution import started by install_solution is going. Returns whether it is still running, the percentage complete where Dataverse reports it, and the outcome with Dataverse's own message once it finishes. Imports take minutes, so poll this rather than waiting on the install call.
| Name | Type | Req | Description |
|---|---|---|---|
| asyncOperationId | string | yes | The async operation id returned by install_solution. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| importJobId | string | yes | The import job id returned by install_solution. |
No output schema declared.
No examples provided.
get_upgrade_plan ~193
Plan an upgrade of this project from the PowerPortalsPro version it references to a newer one: which releases it crosses, every breaking change in them with its migration instructions, which files name a version that has to change (project files, package.json, and the server pin in .mcp.json), and the order to do it in. Call this before changing any version string — bumping the packages without the breaking changes produces build errors whose cause is several releases back. Writes nothing; install_solution upgrades the Dataverse side and the file edits are yours to make.
| Name | Type | Req | Description |
|---|---|---|---|
| fromVersion | string|null | – | Version the project is on now. Omit to read it from the project's PackageReferences, which is normally right. |
| toVersion | string|null | – | Version to upgrade to, e.g. "8.0" or "8.0.0.0". Omit for the newest published release. |
No output schema declared.
No examples provided.
grant_azure_maps_access ~353
Give the portal's identity — the one it connects to Dataverse as, read from this folder's settings, or the one named by `portalClientId` — the Azure Maps Data Reader role on an Azure Maps account, and nothing more: the portal hands every viewer of a map that identity's token. Also adds the portal's sites to the account's allowed origins — its web project's local addresses, the bound App Service's host names and any in `origins` — keeping the ones already there. The account defaults to the one the folder's PowerPortalsPro:Maps:AzureMaps:ClientId names. A new role can take a few minutes to take effect. The user is asked to confirm; the first call only returns the details, and the second passes the code it names as `confirm`. Safe to re-run.
| Name | Type | Req | Description |
|---|---|---|---|
| account | string|null | – | The account's name or client id. Defaults to the one the folder's PowerPortalsPro:Maps:AzureMaps:ClientId names. |
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| origins | array|null | – | More sites to allow, as origins such as https://portal.contoso.com, beside the ones found. |
| portalClientId | string|null | – | The client (application) id of the identity to grant, when it isn't the one in this folder's settings — the deployed portal's managed identity, say. |
| project | string|null | – | The portal's web project folder, relative to this folder, when it holds more than one. Defaults to the one found. |
No output schema declared.
No examples provided.
grant_powerbi_workspace_access ~249
Make the portal's identity — the one it connects to Dataverse as, read from this folder's settings, or the one named by `portalClientId` — a Member of a Power BI workspace, which it must be to issue embed tokens for the workspace's reports. Pass the workspace a report's semantic model is in, too, when that is another one. Optionally adds the identity to an Entra security group, for a tenant whose 'Service principals can call Fabric public APIs' setting is limited to that group. Safe to re-run.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| portalClientId | string|null | – | The client (application) id of the identity to grant, when it isn't the one in this folder's settings — the deployed portal's managed identity, say. |
| securityGroup | string|null | – | An Entra security group to add the identity to, by name or id: the group the tenant's service-principal setting is limited to. |
| workspace | string | yes | The workspace's name or id. |
No output schema declared.
No examples provided.
install_solution ~349
Download a Power Portals Pro managed solution and import it into the environment this folder is bound to. Installs PowerPortalsProCore by default, or PowerPortalsProLocalization, or PowerPortalsProEnhancedAuthorization (needs Power Pages installed); takes the latest release unless a version is given. This is how you provision the framework's tables and license check on a new environment, and how you upgrade an existing one — a managed upgrade keeps data and customizations. The user is asked to confirm first and is shown which environment will change; the first call only returns what will change, to show them, and the second passes the code it names as `confirm`. The import runs in the background: this returns a job id, and get_solution_import_status reports progress. Imports take minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| solution | string|null | – | Solution unique name: "PowerPortalsProCore" (default), "PowerPortalsProLocalization" or "PowerPortalsProEnhancedAuthorization". |
| version | string|null | – | Release version, e.g. "7.0.0.0" or "7.0". Omit for the latest. |
No output schema declared.
No examples provided.
link_environment_slot ~202
Link one of this folder's Dataverse environments to a deployment slot of its App Service, so the App Service tools given that environment — deploy_to_app_service above all — act on that slot. Then "publish to Azure" while working in UAT lands in the UAT slot instead of production. Pass slot "production" for the app itself, or "none" to remove the link. One environment per slot: linking a slot already linked to another environment moves the link. create_deployment_slot links the slot it creates, so this is for slots that already exist, and for production. Changes only this folder's .ppp/mcp.json.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string | yes | The environment to link: its name (e.g. "uat"), its position ("2") or its URL. |
| slot | string | yes | The slot: its name (e.g. "uat"), "production" for the app itself, or "none" to unlink. |
No output schema declared.
No examples provided.
list_app_registrations ~135
List the Entra app registrations in the signed-in tenant, with their client ids, redirect URIs, and client-secret and certificate expiry dates. Use it to find an existing registration before creating a duplicate, to get the client id for a configuration value, and to answer 'why did the portal stop starting' — an expired client secret is the usual reason and the expiry dates are right here. Secret values are never returned; Entra does not store them in retrievable form either.
| Name | Type | Req | Description |
|---|---|---|---|
| nameStartsWith | string|null | – | Only list registrations whose name starts with this. Omit to list the first 100. |
No output schema declared.
No examples provided.
list_app_services ~90
List the App Service web apps in the bound Azure subscription, with their host names and state. Use it to find the app a portal is deployed to when the user refers to it by a name you cannot map to a resource, or to confirm a name is free before creating one.
| Name | Type | Req | Description |
|---|---|---|---|
| resourceGroup | string|null | – | Limit the listing to one resource group. Omit to list the whole subscription. |
No output schema declared.
No examples provided.
list_choices ~165
List the options of a Dataverse choice column, with their integer values and labels. Needed whenever you filter or compare on a choice — the stored value is the integer, and it is environment-specific for custom option sets.
| Name | Type | Req | Description |
|---|---|---|---|
| column | string | yes | The choice column's logical name, e.g. "statuscode". |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| table | string | yes | The table's logical name, e.g. "incident". |
No output schema declared.
No examples provided.
list_components ~213
Browse what PowerPortalsPro ships: components, hooks, enums, interfaces and options classes. Use it to discover whether something exists before writing it yourself. The catalog is large, so narrow with stack, kind, package or filter. Framework plumbing — abstract bases, query-builder internals, extension containers — is left out unless you ask for it.
| Name | Type | Req | Description |
|---|---|---|---|
| filter | string|null | – | Only include types whose name or summary contains this text. |
| includeInternal | boolean | – | Also list framework-internal types. Only useful when tracing how the framework itself is built; do not write new code against them. |
| kind | string|null | – | Restrict to one kind: "component", "hook", "enum", "interface" or "class". |
| package | string|null | – | Restrict to one package, e.g. "react-fluent" or "Web.Blazor.FluentUI". Substring match. |
| stack | string|null | – | Restrict to one stack: "blazor" or "react". |
No output schema declared.
No examples provided.
list_deployment_slots ~143
List the App Service's deployment slots, production included, with each one's host, the Dataverse environment it actually runs against (its D365__Url) and the environment this folder links to it. Also says whether the environment settings are sticky — the thing that makes a swap safe — and whether the plan's tier allows slots at all. Read-only; use it before swap_slots, and whenever it is unclear which slot an environment deploys to.
| Name | Type | Req | Description |
|---|---|---|---|
| name | string|null | – | The web app name. Omit to use the one recorded in this workspace's binding. |
| resourceGroup | string|null | – | The resource group, when the name is ambiguous. |
No output schema declared.
No examples provided.
list_email_queues ~156
List the Dataverse queues that have an email address, which are the ones usable as the portal's D365:EmailSenderEmailAddress. Use it to find an existing no-reply address before creating another, and to check that a queue's outgoing delivery method is set to actually send — a queue with outgoing delivery None accepts the email and delivers nothing.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
No output schema declared.
No examples provided.
list_operations ~221
List the operations a portal can be allowed to run with AddOperationAccess (or a role's WithOperationAccess): the environment's custom APIs, by unique name, with how each is bound and whether it is a function. Pass `includeMessages` to list Dataverse's own messages and custom actions as well — there are hundreds, so pass `search` with it. Then call describe_operation for one's parameters and outputs.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| includeMessages | boolean | – | Also list Dataverse's own messages and custom actions, not only custom APIs. Default false. |
| search | string|null | – | Only operations whose name contains this text, e.g. "ppp_" for a publisher's. |
No output schema declared.
No examples provided.
list_portal_roles ~177
List the Portal Role records in the environment and the Portal Role Configuration rows that decide which of them newly registered users start with. Use it before writing an AddPortalRole call, so the code binds to a name that exists, and before creating a role, so an almost-identical duplicate isn't added. Shows each role's active state: an inactive role grants nothing and mints no claim. check_setup compares every role name the project's code uses with these records.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
No output schema declared.
No examples provided.
list_portal_websites ~154
List the Power Portals Pro Website records that license this environment's portals — the URL each one covers, whether a license key is set, and whether the record is active. Use it when every data endpoint returns 402, which is what a missing or inactive record for the request's host looks like. License key values are never returned.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
No output schema declared.
No examples provided.
list_powerbi_reports ~205
List Power BI content as the folder's Power BI account. Without `workspace`: every workspace the account can see, with whether it is on a capacity. With `workspace`: its reports, and for each report's semantic model whether it uses row-level security, its roles, and its tables and columns — what add_powerbi_rls_role and set_powerbi_report_access need — then its dashboards and their tiles, plus which reports, dashboards and tiles are registered for the portal in Dataverse.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| workspace | string|null | – | A workspace name or id. Omit to list the workspaces. |
No output schema declared.
No examples provided.
list_relationships ~205
List a Dataverse table's relationships by schema name. SubGrid takes a RelationshipName and ManyToManyLookupEdit takes an N:N one, and both must match exactly — call this rather than guessing the name from the table names.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| filter | string|null | – | Only include relationships whose name or related table contains this text. |
| kind | string|null | – | Restrict to "onetomany" (child records), "manytoone" (lookups on this table) or "manytomany". |
| table | string | yes | The table's logical name, e.g. "account". |
No output schema declared.
No examples provided.
list_security_roles ~162
List the Dataverse security roles available in the root business unit, so a role can be chosen by name before assigning it. Use it before create_dataverse_application_user or assign_application_user_role rather than guessing a name — role names vary between environments and an assignment silently does nothing if the name does not match.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| nameContains | string|null | – | Only list roles whose name contains this. |
No output schema declared.
No examples provided.
list_solutions ~193
List the solutions installed in this environment and the Power Portals Pro releases available to install, so you can see whether the environment is behind. The framework needs PowerPortalsProCore; PowerPortalsProLocalization is optional and only backs the translation-memory features; PowerPortalsProEnhancedAuthorization is optional and assigns Power Pages web roles to new users on portals using enhanced authorization (it requires Power Pages in the environment). Use this before install_solution, and when a portal fails in ways that suggest missing tables or a 402 from every data endpoint.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
No output schema declared.
No examples provided.
list_tables ~171
Find Dataverse tables in this project's environment by name. Returns logical names — the names you write in code — alongside display names. A search term is required: a real environment has over a thousand tables. Use this to confirm a table's logical name before writing it.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| search | string | yes | Text to match against the logical name, schema name or display name, e.g. "contact", "invoice", "ppp_". |
No output schema declared.
No examples provided.
list_user_secret_keys ~83
List the configuration keys in this project's user-secrets store — names only, never values — with the Key Vault secret name and App Service setting name each would take. Use it before push_secrets_to_key_vault to propose which keys belong in production; the user decides each one, so propose only the ones the deployed portal needs, not everything in the store.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_views ~165
List a Dataverse table's saved views WITH THEIR REAL GUIDs. MainGrid and SubGrid take view ids (DefaultViewId, ViewIds), and those ids exist only in this environment — they cannot be guessed or remembered. Always call this before writing a grid that binds to views, instead of leaving a placeholder.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| table | string | yes | The table's logical name, e.g. "contact". |
No output schema declared.
No examples provided.
publish_customizations ~221
Publish all pending customizations in the environment, so changes made in the maker portal become live. Reach for this when the portal is serving stale metadata — a column you just added not appearing, a renamed label still showing the old text, a new option-set value missing from a choice. It is the same action as 'Publish all customizations' in the maker portal, so it publishes EVERYTHING pending in the environment, not only your own changes: on a shared development environment that can make a colleague's half-finished work live. Not needed after install_solution — importing a managed solution publishes what it brings. Safe to re-run, and on a large environment it can take several minutes.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
No output schema declared.
No examples provided.
push_secrets_to_key_vault ~292
Copy secrets that already exist in this project's user secrets into the workspace's Key Vault, and point the App Service's settings at them as Key Vault references. Pass the keys to offer (list_user_secret_keys shows them); the user then approves EACH ONE separately, all unticked to start, and only the approved ones are copied — a user-secrets store holds more than production credentials, so never offer everything by default. Values are never returned. A key whose value the vault already holds adds no new version. Needs create_key_vault first; run check_deployment afterwards.
| Name | Type | Req | Description |
|---|---|---|---|
| appServiceName | string|null | – | The web app whose settings to point at the vault. Omit to use the one recorded in this workspace's binding. |
| confirm | string|null | – | Required when the client cannot show a form: the keys the user approved, comma-separated and spelled exactly as offered. Only those are copied. |
| keys | array | yes | The configuration keys to offer, e.g. ["D365:ClientSecret", "Authentication:Microsoft:ClientSecret"]. Each is offered to the user separately; there is no way to ask for all of them. |
| setAppSettings | boolean | – | Also set each key's App Service setting (D365__ClientSecret) to a Key Vault reference, replacing any literal value. Defaults to true. The app restarts when its settings change. |
No output schema declared.
No examples provided.
push_solution ~321
Take the solution recorded for one of this folder's environments to another: export it (managed or unmanaged, as recorded, with its version raised by one in the last part) and import it into the target. This is how changes built in dev reach test and production. With `file`, imports a zip export_solution already saved, without exporting again. The import runs in the background: this returns a job, and get_solution_import_status with the target as `environment` reports on it. A solution that depends on another — Power Portals Pro's, say — fails to import until that one is in the target too; install_solution installs Power Portals Pro's. An unmanaged import needs publish_customizations in the target afterwards. Needs System Customizer or System Administrator in both. The user is asked to confirm.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string|null | – | The environment to export from — its name, position or URL. Omit for the primary, which is usually where the solution is built. Ignored when `file` is given. |
| file | string|null | – | A solution zip to import instead of exporting now, e.g. one export_solution saved under `solutions/`. A path relative to the workspace root, or absolute. |
| to | string | yes | The environment to import into: its name (e.g. "test"), its position ("2") or its URL. |
No output schema declared.
No examples provided.
read_records ~355
Read records from any table in the environment. Either name a `table` for a straight page of it, or pass `fetchXml` for anything more — filters, joins, ordering, aggregates. The FetchXML a saved view carries (from list_views) can be run verbatim, which is how you see the rows a portal grid will actually show. Use this to find out what real data looks like: the option-set value a row really carries, whether a lookup is populated, whether the record your code just wrote came out right. Reads as the connected service principal or user, NOT as a portal user — none of the portal's table, column or row security applies, so this cannot tell you what a given portal user would see. Read-only: there is no tool that creates, changes or deletes a business record.
| Name | Type | Req | Description |
|---|---|---|---|
| columns | string|null | – | Comma-separated columns to return, e.g. "name,telephone1". Omit for every column. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| fetchXml | string|null | – | A FetchXML query to run verbatim. Takes precedence over `table`. |
| table | string|null | – | Logical name of the table, e.g. "contact". Omit when passing fetchXml. |
| top | integer | – | Maximum rows (1-250, default 20). Ignored when fetchXml sets its own count. |
No output schema declared.
No examples provided.
register_powerbi_report ~525
Register a Power BI report, dashboard or dashboard tile for the portal: a Portal Power BI Report row in Dataverse, under the key a PowerBIReport component names it by. Give `report` for a report; `dashboard` for a dashboard; `dashboard` and `tile` for one of its tiles. They are looked up in Power BI as the folder's Power BI account, so their ids are right. Updates the row when the key is registered already. Nobody can see it until set_powerbi_report_access says who may. With `embedMode: "user"` it is shown with each viewer's own Power BI access instead of the portal's.
| Name | Type | Req | Description |
|---|---|---|---|
| allowWithoutRowLevelSecurity | boolean|null | – | Allow it to be shown when its model has no row-level security, so every viewer sees every row. Leave unset to keep the current value (off for a new row). |
| dashboard | string|null | – | The dashboard's name or id, for a dashboard or one of its tiles. |
| embedMode | string|null | – | Whose access it's shown with: "app" — the portal's, with the row-level security roles the access rows give, so viewers need no Power BI license (a new row's default) — or "user" — each viewer's own,… |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| key | string | yes | The key components name it by, e.g. "account-sales". Unique per environment. |
| name | string|null | – | A name for makers to recognize it by. Defaults to the report's, dashboard's or tile's name. |
| report | string|null | – | The report's name or id, for a report. |
| tile | string|null | – | The tile's name as the dashboard shows it (its title and subtitle, e.g. "Won Revenue by Close Year"), its title alone when that is unique, or its id — for one tile of `dashboard`. |
| workspace | string | yes | The workspace's name or id. |
No output schema declared.
No examples provided.
remove_app_registration_certificate ~181
Remove a certificate from an app registration by thumbprint, so the registration stops accepting sign-ins signed with it — the last step of a rotation, once nothing uses the old certificate. list_app_registrations and add_app_registration_certificate show the thumbprints. The certificate itself stays in Key Vault. The user is asked to confirm.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | string|null | – | The registration's client id. Preferred over the display name, which is not unique. |
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| displayName | string|null | – | The registration's display name. Ignored when clientId is supplied. |
| thumbprint | string | yes | The certificate's SHA-1 thumbprint, as Entra shows it. |
No output schema declared.
No examples provided.
remove_application_user_column_profile ~230
Take a Dataverse application user out of a column security profile. Unless it holds System Administrator or another profile covering the same columns, creating portal users starts failing immediately and password sign-in can no longer read stored hashes. Only a direct membership can be removed; a profile held through a team is changed on the team. Needs System Administrator on the environment. The user is asked to confirm.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | string | yes | The Entra application (client) id. |
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| profileName | string | yes | The column security profile's exact name. |
No output schema declared.
No examples provided.
remove_application_user_role ~237
Take a security role away from a Dataverse application user. The reason to reach for this is narrowing an application user that was given System Administrator to get things working — assign the narrower role first, then remove the broad one, so there is no window where the portal can do nothing. Removing the only role a user holds stops every Dataverse call it makes. Needs System Administrator on the environment. The user is asked to confirm.
| Name | Type | Req | Description |
|---|---|---|---|
| clientId | string | yes | The Entra application (client) id. |
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| securityRole | string | yes | The security role's exact name. |
No output schema declared.
No examples provided.
remove_environment ~168
Remove one of this folder's Dataverse environments, so no tool can reach it from here. Nothing in Dataverse changes, and the saved sign-in is kept, but adding it back needs the user to run `login` in a terminal again. Removing the primary makes the next environment in the list the primary. The user is asked to confirm; the first call only returns what will change, to show them, and the second passes the code it names as `confirm`.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string | yes | The environment to remove: its name (e.g. "test"), its position ("2") or its URL. |
No output schema declared.
No examples provided.
remove_table_privileges_from_role ~423
Take privileges on one table away from a security role, or with `depth`, lower them to that depth instead. The undo for add_table_privileges_to_role: a grant made by mistake, a table the portal no longer serves, or access narrower than first granted. Every holder of the role loses the access at once — the application user included, so the portal's pages on that table fail with a privilege error if nothing else grants it. describe_role_table_privileges shows what the role holds first. Refuses a managed role, for the reason add_table_privileges_to_role does. Safe to re-run: privileges not held, or already at or below the depth, are left alone. The role is added to the solution recorded for the environment, so the removal is exported with it; with none recorded this refuses. Needs System Administrator on the environment. The user is asked to confirm.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| depth | string|null | – | Basic, Local, Deep or Global: lower each privilege to this depth rather than removing it. Leave out to remove the privileges entirely. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| privileges | string | yes | Comma-separated privileges: Create, Read, Write, Delete, Append, AppendTo, Assign, Share, or "All" for every privilege the table defines. No default — name what is to go. |
| securityRole | string | yes | The security role's exact name. list_security_roles shows what exists. |
| table | string | yes | The table's logical name, e.g. "account". |
No output schema declared.
No examples provided.
rename_environment ~140
Give one of this folder's Dataverse environments a new name — "dev", "test", "uat", "acme-prod", whatever the user calls it. The name is what the `environment` argument of every Dataverse tool accepts, and what each result's first line shows. Names are unique within the folder and cannot be a bare number, which would read as a position. Changes nothing in Dataverse and nothing about which environment is the primary.
| Name | Type | Req | Description |
|---|---|---|---|
| environment | string | yes | The environment to rename: its current name, its position ("2") or its URL. |
| name | string | yes | The new name, e.g. "test". |
No output schema declared.
No examples provided.
report_issue ~460
Draft a Power Portals Pro issue — a bug report, a feature request or a question — on the public feedback repository, https://github.com/Power-Portals-Pro/PowerPortalsPro-Feedback/issues. Returns a link that opens the repository's own issue form with the fields filled in, plus the versions this server can see (this server, the project's Power Portals Pro packages, the framework's solutions in Dataverse). Nothing is posted: the user opens the link, reviews it and submits it signed in to GitHub. Use it when the user wants to report a problem or ask for something, or when you have established that a problem is in the framework rather than in the project's own code — check the documentation and check_setup first, and ask the user before drafting. The repository is public: write in the framework's terms and leave out the customer's name, environment URLs, record data, email addresses, secrets and file paths. A draft naming an environment, a Power Pages site or a local path is refused.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string|null | – | Anything else worth knowing: a stack trace, what was already tried, a workaround. |
| description | string | yes | For a bug, what happened — the error's text included. For a feature, the problem it would solve. For a question, the question. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| expected | string|null | – | Bug only, required: what should have happened instead. |
| kind | string | yes | Which form: "bug", "feature" or "question". |
| proposal | string|null | – | Feature only, required: what the user would like to see. |
| steps | string|null | – | Bug only, required: numbered steps that make it happen, in terms anyone with the framework could follow. |
| title | string | yes | The issue's title: the symptom or the request in one line, naming the component involved. |
No output schema declared.
No examples provided.
restart_app_service ~297
Restart the App Service web app — to clear an app stuck after a failed deployment, or to reset a portal that has stopped responding. Anyone using the portal is disconnected for a few seconds. The user is asked to confirm first.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string|null | – | Which of this folder's Dataverse environments the call is for: its name (e.g. "uat"), its position ("2") or its URL. The slot linked to that environment is the one acted on, so when the user is worki… |
| name | string|null | – | The web app name. Omit to use the one recorded in this workspace's binding. |
| resourceGroup | string|null | – | The resource group, when the name is ambiguous. |
| slot | string|null | – | Which deployment slot of the app: its name (e.g. "uat"), or "production" for the app itself. Omit it to use the slot linked to the environment — see `environment`. A folder that links no environment… |
No output schema declared.
No examples provided.
search_docs ~252
Search PowerPortalsPro documentation, component API reference and code samples. Returns ranked results with an id and a short excerpt; pass an id to get_doc, get_component_api or get_example for the full content. Use this for open questions ("how do I filter a grid per user"). If you already know the component name, call get_component_api directly instead. Search in English: the documentation is English, so translate the user's question first if they asked in another language. Answer them in theirs — and note that component, parameter and column names are always English in code, whatever language the conversation is in.
| Name | Type | Req | Description |
|---|---|---|---|
| kind | string|null | – | Restrict to one kind of result: "doc", "type" or "sample". Omit for all three. |
| limit | integer | – | Maximum results (1-25, default 8). |
| query | string | yes | What to look for, in English. Component names, parameter names and plain questions all work. |
| stack | string|null | – | Restrict to one UI stack: "blazor" or "react". Omit to search both. Results for the wrong stack are actively harmful, so set this whenever you know which stack the project uses. |
No output schema declared.
No examples provided.
set_app_service_settings ~447
Add or update application settings on a web app, merging with what is already there rather than replacing it. Use the double-underscore form of a configuration key — D365:ClientId becomes D365__ClientId — because the colon form does not work on Linux App Service. Prefer a Key Vault reference (@Microsoft.KeyVault(SecretUri=...)) over a literal for anything secret. The user is asked to confirm and is shown which names are being set, never their values. The app restarts.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string|null | – | Which of this folder's Dataverse environments the call is for: its name (e.g. "uat"), its position ("2") or its URL. The slot linked to that environment is the one acted on, so when the user is worki… |
| name | string|null | – | The web app name. Omit to use the one recorded in this workspace's binding. |
| resourceGroup | string|null | – | The resource group, when the name is ambiguous. |
| settings | object | yes | The settings to set, as a JSON object of name to value, e.g. {"ASPNETCORE_ENVIRONMENT":"Production"}. |
| slot | string|null | – | Which deployment slot of the app: its name (e.g. "uat"), or "production" for the app itself. Omit it to use the slot linked to the environment — see `environment`. A folder that links no environment… |
| sticky | boolean | – | Also mark these settings as deployment slot settings, so each slot keeps its own value through a swap instead of the value moving with the build. Use it for anything that differs between environments… |
No output schema declared.
No examples provided.
set_environment_index ~270
Move one of this folder's Dataverse environments to a position in its list. Position 1 is the primary environment — the one every Dataverse tool uses when it is not given an `environment` argument — so moving an environment to 1 makes it the primary, and moving the primary elsewhere makes the new first entry the primary. When the move changes the primary the user is asked to confirm, because every later write that does not name an environment goes to the new one; the first call only returns what will change, to show them, and the second passes the code it names as `confirm`. Only use it when the user asks to reorder or to switch the primary — to act on another environment once, pass `environment` to that tool instead. dataverse_status lists the environments and their positions.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Only when the move changes the primary. Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| environment | string | yes | The environment to move: its name (e.g. "test"), its current position ("2") or its URL. |
| index | integer | yes | The position to move it to, starting at 1. Position 1 is the primary. |
No output schema declared.
No examples provided.
set_powerbi_capacity_state ~155
Pause or resume a Fabric capacity in the folder's Azure subscription. Paused, it costs nothing and every report on it stops rendering in the portal; resumed, it is billed again by the second. The user is asked to confirm; the first call only returns the details, and the second passes the code it names as `confirm`.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | string|null | – | Leave out on the first call, which changes nothing and returns the details to show the user. On the second, the code that call names. |
| name | string | yes | The capacity's name. |
| resourceGroup | string|null | – | The resource group. Defaults to the folder's bound one. |
| state | string | yes | paused or active. |
No output schema declared.
No examples provided.
set_powerbi_report_access ~225
Say who may see a registered Power BI report, replacing its access rows. Each entry lets in an audience — holders of a portal role, every signed-in user, anonymous visitors, or internal users signed in as Dataverse users — and gives them the model's row-level security roles it names. A viewer sees the report when any entry applies, with every role the entries that apply name. Power BI doesn't check role names, so each is checked against the model here; a model with row-level security needs every entry to name at least one.
| Name | Type | Req | Description |
|---|---|---|---|
| access | array | yes | Who may see it. An empty list lets nobody in. |
| environment | string|null | – | Which of this folder's Dataverse environments to use: its name (e.g. "test"), its position in the list ("2") or its URL. Omit it to use the primary environment, and only name another when the user as… |
| key | string | yes | The report's registration key. |
No output schema declared.
No examples provided.
How do I install the Power Portals Pro MCP server?
Power Portals Pro runs locally as a NuGet package, launched with dnx PowerPortalsPro.Mcp@13.0.0 --yes. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.
nuget · PowerPortalsPro.Mcp
claude mcp add power-portals-pro-powerportalspro-mcp -- dnx PowerPortalsPro.Mcp@13.0.0 --yes
What is the Power Portals Pro MCP server?
Power Portals Pro is an MCP server listed in the public MCP registry as io.github.Power-Portals-Pro/powerportalspro-mcp. Component API, code samples and Dataverse metadata for building Power Portals Pro portals. This page covers its NuGet package (PowerPortalsPro.Mcp).
Is the Power Portals Pro MCP server safe to use?
Power Portals Pro scores 80 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Power Portals Pro MCP server expose?
Power Portals Pro exposes 105 tools: add_app_registration_certificate, add_app_registration_federated_credential, add_app_registration_redirect_uri, add_app_registration_secret, add_powerbi_rls_role, and 100 more. Their descriptions and schemas cost roughly 28,369 tokens of context every time the server is loaded.
Is the Power Portals Pro MCP server still maintained?
Power Portals Pro is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.