-
Notifications
You must be signed in to change notification settings - Fork 0
Tools Solutions
This page is generated from the code by scripts/gen_wiki_tools.py — do not edit by hand.
21 tools · category token solutions · enable with DATAVERSE_TOOLS=solutions (unset enables every category)
Every tool returns JSON. Errors return {"error": true, "message": "..."}. Write tools require DATAVERSE_ALLOW_WRITE=true; delete tools require DATAVERSE_ALLOW_DELETE=true.
Write · non-idempotent · category solutions
Add an existing component to a Dataverse solution via AddSolutionComponent.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str | None |
no | None |
Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| solution_id | str | None |
no | None |
Solution GUID. Provide either this or solution_unique_name, not both. |
| component_id | str |
yes | — | GUID of the component to add (min_len=1) |
| component_type | int |
yes | — | Dataverse solution component type code |
| add_required_components | bool |
no | False |
Whether Dataverse should include required dependencies |
| do_not_include_subcomponents | bool |
no | False |
Whether Dataverse should skip adding subcomponents |
Returns {"added": ..., "solution_unique_name": ..., "solution_id": ..., "component_id": ..., "component_type": ...}.
Read · idempotent · category solutions
Analyze dependencies for a Dataverse solution component.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| component_id | str |
yes | — | GUID of the solution component to analyze (e.g., an entity metadata id, attribute metadata id). (min_len=36) |
| component_type | int |
yes | — | Integer component type code. Common values: 1=Entity, 2=Attribute, 3=Relationship, 9=OptionSet, 20=SecurityRole, 26=SavedQuery, 29=Workflow, 60=SystemForm, 61=WebResource, 62=SiteMap, 91=PluginAssembly, 92=SDKMessageProcessingStep, 300=CanvasApp. See https://learn.microsoft.com/power-apps/developer/data-platform/reference/entities/solutioncomponent. (ge=1) |
| direction | Literal['blocking_delete', 'dependents', 'required'] |
no | 'blocking_delete' |
Which dependency direction to retrieve: 'blocking_delete' — components that block deletion of this component; 'dependents' — all components that depend on this component; 'required' — all components this component requires. |
Returns {"component": ..., "direction": ..., "function": ..., "count": ..., "dependencies": ...}.
Write · non-idempotent · category solutions
Clone a solution as a patch via the unbound CloneAsPatch action.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str | None |
no | None |
Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| solution_id | str | None |
no | None |
Solution GUID. Provide either this or solution_unique_name, not both. |
| display_name | str |
yes | — | Display name for the new patch solution. (min_len=1) |
| version_number | str |
yes | — | Version string for the patch (e.g., '1.0.0.2'). Must share the parent solution's major.minor version and be greater. (min_len=1) |
Returns {"cloned": ..., "patch_solution_id": ..., "parent_solution_unique_name": ..., "version_number": ...}.
Write · non-idempotent · category solutions
Create a Dataverse publisher that owns the customization prefix for solutions.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| uniquename | str |
yes | — | Unique name for the publisher (e.g., 'contoso'). Use lowercase logical-name style characters. (min_len=1) |
| display_name | str |
yes | — | Friendly display name for the publisher (min_len=1) |
| customization_prefix | str |
yes | — | Customization prefix for publisher-owned components (e.g., 'new'). (min_len=1) |
| option_value_prefix | int |
yes | — | Customization option value prefix (e.g., 10000) (ge=1, le=2147483647) |
Returns {"created": ..., "uniquename": ..., "display_name": ..., "location": ...}.
Write · non-idempotent · category solutions
Create a new Dataverse solution scoped to a publisher.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str |
yes | — | Unique name for the solution (e.g., 'contoso_core') (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| display_name | str |
yes | — | Friendly display name for the solution (min_len=1) |
| publisher_id | str |
yes | — | GUID of the publisher that owns this solution (min_len=1) |
| version | str |
yes | — | Solution version string (typically major.minor.build.revision) (min_len=1) |
| description | str | None |
no | None |
Optional solution description |
Returns {"created": ..., "solution_unique_name": ..., "version": ..., "location": ...}.
Delete · non-idempotent · category solutions
Apply a solution upgrade by promoting the holding _Upgrade solution and deleting obsolete components via DeleteAndPromote.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str |
yes | — | Unique name of the solution to promote (e.g., 'MyCustomApp'). This must be the base solution name — not the 'Upgrade' holding variant. The holding solution (created by hold_for_upgrade=true) must already exist. (min_len=1, pattern=^[a-zA-Z][a-zA-Z0-9_]*$) |
Returns {"upgraded": ..., "solution_id": ..., "solution_unique_name": ..., "message": ...}.
Read · idempotent · category solutions
Export a Dataverse solution as a base64-encoded zip.
Note: Large solutions (>~3 MB base64) must be saved to disk via output_path — supply a local filesystem path and the server writes the decoded .zip there, returning metadata only (no base64 in the response).
Note: This tool is read-only for the org (no mutations); writing a local .zip when output_path is set is local I/O only and does not require DATAVERSE_ALLOW_WRITE.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_name | str |
yes | — | Unique name of the solution to export (e.g., 'MyCustomApp'). Use lowercase logical name — not the display name. (min_len=1) |
| managed | bool |
no | False |
When True, export as a managed solution. When False (default), export as unmanaged. |
| output_path | str | None |
no | None |
See note below. |
| export_general_settings | bool | None |
no | None |
Export general environment settings. Omitted from request when None. |
| export_customization_settings | bool | None |
no | None |
Export customization settings. Omitted from request when None. |
| export_email_tracking_settings | bool | None |
no | None |
Export email tracking settings. Omitted from request when None. |
| export_auto_numbering_settings | bool | None |
no | None |
Export auto-numbering settings. Omitted from request when None. |
| export_calendar_settings | bool | None |
no | None |
Export calendar settings. Omitted from request when None. |
| export_relationship_roles | bool | None |
no | None |
Export relationship roles. Omitted from request when None. |
| export_isv_config | bool | None |
no | None |
Export ISV configuration. Omitted from request when None. |
| export_sales | bool | None |
no | None |
Export sales settings. Omitted from request when None. |
| export_marketing_settings | bool | None |
no | None |
Export marketing settings. Omitted from request when None. |
| export_outlook_synchronization_settings | bool | None |
no | None |
Export Outlook synchronization settings. Omitted from request when None. |
- output_path — Local filesystem path to write the exported solution .zip to (e.g., '/tmp/MySolution.zip' or 'C:\exports\MySolution.zip'). When provided, the zip is decoded and written to disk (parent directories are created if missing); the response contains metadata only (no base64 payload). When omitted, the base64 payload is returned inline if it is under ~3 MB; otherwise a structured error asks you to supply output_path. If the server sets DATAVERSE_FILE_BASE_DIR, the resolved path must stay inside that directory — '..' traversal or an absolute path elsewhere is rejected with an error and nothing is written. When that variable is unset the path is not confined.
Returns {"solution_file_base64": ..., "size_bytes": ..., "solution": ..., "managed": ...} or {"written": ..., "path": ..., "size_bytes": ..., "solution": ..., "managed": ...}.
Read · idempotent · category solutions
Retrieve a single importjob record by its GUID to check import progress.
Note: Error code 0x8004F037 (image-column dependency failures) and other component-level errors from the deletion phase appear in this XML.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| import_job_id | str |
yes | — | GUID of the importjob to retrieve. This is the client-supplied ImportJobId GUID returned by dataverse_import_solution. (min_len=36) |
| include_data | bool |
no | False |
When True, the response includes the result XML from the 'data' column. The data column can be very large — use only to inspect failure details. |
Returns {"record": ..., "completed": ..., "progress": ...}.
Read · idempotent · category solutions
Answer "WHY did this solution import fail?" — the readable import results.
Note: The meaning lives in the CELL VALUES, so to find out why an import failed you must read the TEXT of the document, not its tags. The same format came back for a completed job and a still-running one.
Note: It is deliberately descriptive only: no node is labelled an error, a warning or a failure, because the document's schema is undocumented and a wrong "the import succeeded" verdict is worse than none.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| import_job_id | str |
yes | — | GUID of the import job whose formatted results to read — the importjobid primary key, which is the same client-supplied ImportJobId that dataverse_import_solution and dataverse_stage_and_upgrade_solution return as import_job_id. Use dataverse_list_import_jobs to find recent import jobs (most recent first), or dataverse_get_import_job to check one job's progress before reading its results. |
| max_chars | int |
no | 20000 |
See note below. |
- max_chars — Maximum number of characters of the results document to return inline. RetrieveFormattedImportJobResults has no server-side paging — it returns the whole document in one string — so the slice is taken here. results_length always reports the FULL character count Dataverse returned regardless of trimming, and truncated says whether anything was cut, so the true size is never hidden. Any document summary is likewise computed over the WHOLE document, not just the returned slice. Raise this (max 2,000,000) to read more. (ge=1000, le=2000000)
Read · idempotent · category solutions
Retrieve a single Dataverse solution by its unique name or GUID.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str | None |
no | None |
The unique name of the solution (e.g., 'MyCustomApp'). Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| solution_id | str | None |
no | None |
The GUID of the solution (e.g., 'a1b2c3d4-...'). Provide either this or solution_unique_name, not both. |
| select | list[str] | None |
no | None |
Columns to return. Defaults to all standard solution columns. |
Returns {"record": ...}.
Read · idempotent · category solutions
Retrieve a single solution history record by its GUID.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_history_id | str |
yes | — | GUID of the msdyn_solutionhistory record to retrieve (e.g., 'a1b2c3d4-1234-5678-abcd-ef0123456789'). (min_len=36) |
| select | list[str] | None |
no | None |
Columns to return. Defaults to a standard solution history projection. |
Returns {"record": ...}.
Write · non-idempotent · category solutions
Import a Dataverse solution asynchronously via ImportSolutionAsync.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| customization_file | str | None |
no | None |
Base64-encoded solution .zip content to import inline. Provide this XOR input_path — not both and not neither. Rejected if the base64 string exceeds ~3 MB; use input_path instead. |
| input_path | str | None |
no | None |
See note below. |
| overwrite_unmanaged_customizations | bool |
no | True |
When True, overwrite existing unmanaged customizations with those in the solution being imported. |
| publish_workflows | bool |
no | True |
When True, publish workflows (cloud flows) included in the solution. |
| hold_for_upgrade | bool |
no | False |
When True, hold the solution as a holding solution for staged upgrade. Maps to HoldingSolution in the ImportSolutionAsync request. |
| skip_product_update_dependencies | bool |
no | False |
When True, skip enforcing product update dependencies during import. |
| import_job_id | str | None |
no | None |
Client-supplied GUID to use as the importjob primary key. When omitted, one is generated automatically. Use this value to poll dataverse_get_import_job for progress. |
- input_path — Local filesystem path to the solution .zip to import (e.g., '/tmp/MySolution.zip'). The server reads the file and base64-encodes it before posting. Provide this XOR customization_file — not both and not neither. If the server sets DATAVERSE_FILE_BASE_DIR, the resolved path must stay inside that directory — '..' traversal or an absolute path elsewhere is rejected with an error and nothing is read. When that variable is unset the path is not confined.
Returns {"accepted": ..., "import_job_id": ..., "async_operation_id": ..., "import_job_key": ..., "message": ...}.
Read · idempotent · category solutions
List importjob records, optionally filtered by solution unique name.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_name | str | None |
no | None |
Optional solution unique name to filter results by (e.g., 'MyCustomApp'). Maps to an OData filter on the solutionname column. |
| top | int |
no | 50 |
Maximum number of import job records to return. (ge=1, le=5000) |
| select | list[str] | None |
no | None |
Columns to return. Defaults to a projection that excludes the large 'data' XML column. Specify explicitly to override. |
Returns {"records": ..., "count": ..., "has_more": ...}.
Read · idempotent · category solutions
List components within a Dataverse solution, with human-readable type names.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_id | str |
yes | — | The GUID of the solution whose components to list (min_len=1) |
| component_type | int | None |
no | None |
Filter by component type code. Common values: 1=Entity, 2=Attribute, 3=Relationship, 9=OptionSet, 10=EntityRelationship, 26=View, 29=Workflow, 60=SystemForm, 61=WebResource, 300=CanvasApp, 371=Connector |
| top | int |
no | 50 |
Maximum number of components to return (ge=1, le=5000) |
Returns {"records": ..., "count": ..., "has_more": ...}.
Read · idempotent · category solutions
List solution history records from msdyn_solutionhistories.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_id | str | None |
no | None |
Optional GUID of the solution to filter history records by. Provide either this or solution_unique_name, not both. |
| solution_unique_name | str | None |
no | None |
Optional unique name of the solution to filter history records by (e.g., 'MyCustomApp'). Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| select | list[str] | None |
no | None |
Columns to return. Defaults to a standard solution history projection. |
| top | int |
no | 50 |
Maximum number of solution history records to return. (ge=1, le=5000) |
Returns {"records": ..., "count": ..., "has_more": ...}.
Read · idempotent · category solutions
List solutions in the Dataverse environment with name, version, and managed status.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| filter | str | None |
no | None |
OData $filter expression to narrow results. Use lowercase logical names (e.g., "ismanaged eq true", "uniquename eq 'MyApp'") |
| select | list[str] | None |
no | None |
Columns to return. Defaults to solutionid, uniquename, friendlyname, version, ismanaged, installedon, modifiedon |
| top | int |
no | 50 |
Maximum number of solutions to return (ge=1, le=5000) |
Returns {"records": ..., "count": ..., "has_more": ...}.
Delete · idempotent · category solutions
Remove a component from a Dataverse solution via RemoveSolutionComponent.
Note: Removes the component from the solution only — does not delete the component.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str | None |
no | None |
Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| solution_id | str | None |
no | None |
Solution GUID. Provide either this or solution_unique_name, not both. |
| component_id | str |
yes | — | GUID of the underlying component to remove (RemoveSolutionComponent ComponentId) (min_len=1) |
| component_type | int |
yes | — | Dataverse solution component type code |
Returns {"removed": ..., "solution_unique_name": ..., "solution_id": ..., "component_id": ..., "component_type": ...}.
Delete · non-idempotent · category solutions
Perform a single-step true solution upgrade via StageAndUpgradeAsync.
Note: Stages the new solution version as a holding solution, deletes components that are no longer present in the new version (DeleteComponents phase), and promotes the result — all in one async operation.
Note: Component-level deletion errors (e.g., 0x8004F037 image-column dependency failures) surface in the importjob 'data' XML when include_data=true.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| customization_file | str | None |
no | None |
Base64-encoded solution .zip content to stage and upgrade inline. Provide this XOR input_path — not both and not neither. Rejected if the base64 string exceeds ~3 MB; use input_path instead. |
| input_path | str | None |
no | None |
See note below. |
| overwrite_unmanaged_customizations | bool |
no | True |
When True, overwrite existing unmanaged customizations with those in the solution being upgraded. |
| publish_workflows | bool |
no | True |
When True, publish workflows (cloud flows) included in the solution. |
| skip_product_update_dependencies | bool |
no | False |
When True, skip enforcing product update dependencies during the upgrade. |
- input_path — Local filesystem path to the solution .zip to stage and upgrade (e.g., '/tmp/MySolution.zip'). The server reads the file and base64-encodes it before posting. Provide this XOR customization_file — not both and not neither. If the server sets DATAVERSE_FILE_BASE_DIR, the resolved path must stay inside that directory — '..' traversal or an absolute path elsewhere is rejected with an error and nothing is read. When that variable is unset the path is not confined.
Returns {"accepted": ..., "import_job_id": ..., "async_operation_id": ..., "import_job_key": ..., "message": ...}.
Write · idempotent · category solutions
Update a Dataverse publisher's display name, customization prefix, or option value prefix.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| publisher_id | str |
yes | — | GUID of the publisher to update (min_len=1) |
| display_name | str | None |
no | None |
Updated friendly display name |
| customization_prefix | str | None |
no | None |
Updated customization prefix |
| option_value_prefix | int | None |
no | None |
Updated customization option value prefix (ge=1, le=2147483647) |
Returns {"updated": ..., "publisher_id": ...}.
Write · idempotent · category solutions
Update a Dataverse solution's display name, description, or publisher.
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str | None |
no | None |
Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| solution_id | str | None |
no | None |
Solution GUID. Provide either this or solution_unique_name, not both. |
| display_name | str | None |
no | None |
Updated friendly display name |
| description | str | None |
no | None |
Updated solution description |
| publisher_id | str | None |
no | None |
Updated publisher GUID |
Returns {"updated": ..., "solution_id": ..., "solution_unique_name": ...}.
Write · idempotent · category solutions
Update a Dataverse solution's version string only (e.g., '1.0.0.1' → '1.0.0.2').
| Param | Type | Req | Default | Notes |
|---|---|---|---|---|
| dataverse_url | str |
yes | — | Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com'). |
| solution_unique_name | str | None |
no | None |
Solution unique name. Provide either this or solution_id, not both. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$) |
| solution_id | str | None |
no | None |
Solution GUID. Provide either this or solution_unique_name, not both. |
| version | str |
yes | — | New solution version string (min_len=1) |
Returns {"updated": ..., "solution_id": ..., "solution_unique_name": ..., "version": ...}.
dataverse-mcp 3.9.1 — Repository · PyPI · Issues · Changelog · MIT
Get started
Configure
Tools
- Tool-Index
- Tools-Core
- Tools-Schema
- Tools-Solutions
- Tools-Plugins
- Tools-Security
- Tools-Custom-APIs
- Tools-Apps
- Tools-Variables
- Tools-Flows
- Tools-Views
- Tools-Forms
- Tools-Connections
- Tools-Web-Resources
- Tools-Jobs
Understand