Skip to content

Tools Apps

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

Apps tools

This page is generated from the code by scripts/gen_wiki_tools.py — do not edit by hand.

10 tools · category token apps · enable with DATAVERSE_TOOLS=apps (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_app_components

Write · non-idempotent · category apps

Add components (tables, forms, views, charts, BPFs) to a model-driven app.

Note: Publishes automatically — no separate publish needed.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app to add components to. (min_len=36, max_len=36)
components list[AppComponentSpec] yes Components to add. Each has type and either id (GUID) or logical_name (for tables). Use dataverse_get_app to see current components before adding. (min_len=1)

Returns {"added": ..., "app_id": ..., "component_count": ..., "published": ...}.


dataverse_assign_app_role

Delete · idempotent · category apps

Associate or disassociate a Dataverse security role with a model-driven app.

Note: The remove path (action='remove') issues a DELETE and additionally requires DATAVERSE_ALLOW_DELETE=true.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app. (min_len=36, max_len=36)
role_id str yes GUID of the security role to associate or disassociate. (min_len=36, max_len=36)
action str yes 'add' to grant the role access to the app; 'remove' to revoke it.

Returns {"action": ..., "app_id": ..., "role_id": ..., "success": ...}.


dataverse_create_app

Write · non-idempotent · category apps

Create a new model-driven app (AppModule) in a Dataverse environment.

Note: Always provide tables: an app without a sitemap fails validation and cannot be published.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
name str yes Display name of the app (e.g. 'My Operations App'). (min_len=1, max_len=100)
unique_name str yes Unique name for the app. Dataverse auto-prepends the publisher prefix (e.g. 'new_'). Use only English letters, digits, and underscores. (min_len=1, max_len=100)
description str | None no None Optional description for the app.
tables list[str] | None no None Logical names of tables to add as entity components and include in the auto-generated sitemap (e.g. ['account', 'contact']). Strongly recommended — apps without a sitemap fail validation and cannot be published.
run_validate bool no True Run ValidateApp after creating. If validation errors exist, publish is skipped unless publish_anyway=true.
publish bool no True Publish the app after creation (and successful validation).
publish_anyway bool no False Publish even when validation errors are present. Use with caution.

Returns {"created": ..., "app_id": ..., "name": ..., "sitemap_id": ..., "components_added": ..., "failed_tables": ..., "validation": ..., "published": ...} or {"created": ..., "app_id": ..., "name": ..., "sitemap_id": ..., "components_added": ..., "failed_tables": ..., "validation": ..., "published": ..., "message": ...}.


dataverse_get_app

Read · idempotent · category apps

Get a model-driven app's properties and its current component list.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app (appmoduleid) to retrieve. (min_len=36, max_len=36)

Returns {"app_id": ..., "app_id_unique": ..., "name": ..., "unique_name": ..., "description": ..., "is_published": ..., "state": ..., "client_type": ..., "components": ..., "component_count": ...}.


dataverse_list_apps

Read · idempotent · category apps

List model-driven apps (AppModule records) in a Dataverse environment.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
include_unpublished bool no False When true, uses RetrieveUnpublishedMultiple to include apps that have not yet been published. Defaults to false (published apps only).
top int no 50 Maximum number of records to return. (ge=1, le=5000)

Returns {"apps": ..., "count": ..., "has_more": ...}.


dataverse_publish_app

Write · idempotent · category apps

Publish a model-driven app to make it visible to users.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app to publish. (min_len=36, max_len=36)

Returns {"published": ..., "app_id": ...}.


dataverse_remove_app_components

Write · idempotent · category apps

Remove components from a model-driven app.

Note: Publishes automatically — no separate publish needed.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app to remove components from. (min_len=36, max_len=36)
components list[AppComponentSpec] yes Components to remove. Use object_id values from dataverse_get_app. Each has type and either id (GUID) or logical_name (for tables). (min_len=1)

Returns {"removed": ..., "app_id": ..., "component_count": ..., "published": ...}.


dataverse_set_app_sitemap

Write · idempotent · category apps

Create or replace the navigation sitemap for a model-driven app.

Note: Publishes automatically — no separate publish needed.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app whose sitemap to create or update. (min_len=36, max_len=36)
tables list[str] | None no None Flat list of table logical names — auto-generates one Area with one Group. Mutually exclusive with areas. Example: ['account', 'contact', 'opportunity'].
areas list[dict] | None no None Structured sitemap as a list of area dicts. Each area: {title: str, id?: str, groups: [{title: str, id?: str, subareas: [{entity?: str, url?: str, title?: str, id?: str}]}]}. Mutually exclusive with tables.
area_title str no 'Main' Title for the auto-generated area (only used when tables is provided).
group_title str no 'Workspace' Title for the auto-generated group (only used when tables is provided).

Returns {"updated": ..., "app_id": ..., "sitemap_id": ..., "sitemap_created": ..., "published": ..., "sitemapxml_backup": ...}.


dataverse_update_app

Write · idempotent · category apps

Update a model-driven app's name or description.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app to update. (min_len=36, max_len=36)
name str | None no None New display name for the app. (min_len=1, max_len=100)
description str | None no None New description for the app.

dataverse_validate_app

Read · idempotent · category apps

Validate a model-driven app and return all errors and warnings.

Note: An app with validation errors cannot be published.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
app_id str yes GUID of the app to validate. (min_len=36, max_len=36)

Clone this wiki locally