Skip to content

Tools Solutions

Ryan James edited this page Aug 17, 2026 · 2 revisions

Solutions tools

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)

Tool-Index · Home

Every tool returns JSON. Errors return {"error": true, "message": "..."}. Write tools require DATAVERSE_ALLOW_WRITE=true; delete tools require DATAVERSE_ALLOW_DELETE=true.


dataverse_add_component_to_solution

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": ...}.


dataverse_analyze_dependencies

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": ...}.


dataverse_clone_solution_as_patch

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": ...}.


dataverse_create_publisher

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": ...}.


dataverse_create_solution

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": ...}.


dataverse_delete_and_promote_solution

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": ...}.


dataverse_export_solution

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": ...}.


dataverse_get_import_job

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": ...}.


dataverse_get_import_job_results

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)

dataverse_get_solution

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": ...}.


dataverse_get_solution_history

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": ...}.


dataverse_import_solution

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": ...}.


dataverse_list_import_jobs

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": ...}.


dataverse_list_solution_components

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": ...}.


dataverse_list_solution_histories

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": ...}.


dataverse_list_solutions

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": ...}.


dataverse_remove_component_from_solution

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": ...}.


dataverse_stage_and_upgrade_solution

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": ...}.


dataverse_update_publisher

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": ...}.


dataverse_update_solution

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": ...}.


dataverse_update_solution_version

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": ...}.


Clone this wiki locally