Skip to content

Tools Schema

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

Schema tools

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

35 tools · category token schema · enable with DATAVERSE_TOOLS=schema (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_choice_option

Write · non-idempotent · category schema

Add a new option to a global or local (column-specific) choice.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
option_set_name str | None no None Logical name of the global choice to add the option to (e.g., 'cr123_mychoice'). Provide this OR entity_logical_name + attribute_logical_name for a local choice — not both.
entity_logical_name str | None no None Logical name of the table that owns the local choice column. Required when adding to a local (column-specific) choice.
attribute_logical_name str | None no None Logical name of the local choice column. Required when entity_logical_name is provided.
label str yes Display label for the new option. (min_len=1)
value int | None no None Integer code for the new option. If omitted, Dataverse assigns one automatically. Custom option values typically start at 100000000.

Returns {"created": ..., "value": ..., "label": ...}.


dataverse_check_relationship_eligibility

Read · idempotent · category schema

Pre-validate whether a table supports a specific relationship role before creating a relationship.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
table_logical_name str yes Logical name of the table to check (e.g., 'account', 'contact'). Use lowercase. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
check_type str yes The eligibility check to perform. 'referenced' — can this table be the primary (one) side of a 1:N? 'referencing' — can this table be the related (many) side of a 1:N? 'many_to_many' — can this table participate in an N:N?

Returns {"table_logical_name": ..., "check_type": ..., "eligible": ...}.


dataverse_create_alternate_key

Write · non-idempotent · category schema

Create an alternate key on a Dataverse table.

Note: Key creation triggers an asynchronous SQL index build.

Note: Wait until EntityKeyIndexStatus='Active' before using the key for upserts.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
table_logical_name str yes Logical name of the table on which to create the alternate key (e.g., 'account'). (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
schema_name str yes Schema name for the new alternate key (e.g., 'new_AccountCode'). Must include the publisher prefix. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
display_name str yes Display label for the alternate key (English, language code 1033). (min_len=1)
key_attributes list[str] yes Ordered list of attribute logical names that form the key (e.g., ['accountnumber'] or ['cr123_code', 'cr123_region']). All attributes must already exist on the table. (min_len=1)
solution_unique_name str | None no None Optional solution unique name to associate the key with a solution (sets the MSCRM.SolutionUniqueName request header). (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"created": ..., "table_logical_name": ..., "schema_name": ..., "logical_name": ..., "key_attributes": ..., "entity_key_index_status": ..., "async_job_id": ..., "metadata_id": ..., "location": ..., "note": ...}.


dataverse_create_choice

Write · non-idempotent · category schema

Create a new GLOBAL choice (option set) that can be reused across multiple columns.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
name str yes Logical name for the global choice with publisher prefix (e.g., 'cr123_mychoice'). Used to reference the choice in columns. (min_len=3)
display_name str yes Display name for the global choice shown in the UI. (min_len=1)
options list[ChoiceOptionItem] yes Initial list of options. Each option requires 'value' (int) and 'label' (str). Example: [{'value': 100000000, 'label': 'Option A'}]. (min_len=1)

Returns {"created": ..., "name": ..., "entity_id": ...}.


dataverse_create_column

Write · non-idempotent · category schema

Add a new typed column (attribute) to a Dataverse table.

Note: Memo columns default MaxLength to 2000 and omit IsValidForAdvancedFind (Dataverse rejects it for Memo type).

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
table_logical_name str yes Logical name of the table to add the column to (e.g., 'account', 'cr123_widget'). (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
schema_name str yes Schema name for the new column. Must include the publisher prefix (e.g., 'cr123_Description', 'new_Priority'). The logical name is derived as the lowercase version of this value. (min_len=3, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
attribute_type str yes Column type. One of: String, Memo, Integer, Decimal, DateTime, Boolean, Lookup, Picklist, MultiSelectPicklist.
display_name str yes Display label for the column shown in the UI. (min_len=1)
required_level str | None no 'None' Whether the column is required. One of: 'None' (optional), 'Recommended', 'ApplicationRequired' (required). Defaults to 'None'.
type_specific_properties dict | None no None Optional dict of type-specific properties merged into the attribute definition body. Examples: String → {'MaxLength': 100}; Integer → {'MinValue': 0, 'MaxValue': 100000}; Decimal → {'Precision': 2}; DateTime → {'Format': 'DateOnly'}.
boolean_true_label str | None no 'Yes' Display label for the True option of a Boolean column. Only used when attribute_type is 'Boolean'. Defaults to 'Yes'.
boolean_false_label str | None no 'No' Display label for the False option of a Boolean column. Only used when attribute_type is 'Boolean'. Defaults to 'No'.
global_choice_name str | None no None Logical name of an existing global choice (option set) to bind this column to. Only used when attribute_type is 'Picklist' or 'MultiSelectPicklist'. When set, the column references the global choice instead of having a local option set. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"created": ..., "table_logical_name": ..., "schema_name": ..., "entity_id": ...}.


dataverse_create_many_to_many_relationship

Write · non-idempotent · category schema

Create an N:N relationship and its intersect (junction) table between two tables.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
schema_name str yes Schema name for the relationship (e.g., 'cr123_account_contact'). Must include a publisher prefix. (min_len=3, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
entity1_logical_name str yes Logical name of the first entity in the many-to-many relationship. (min_len=1)
entity2_logical_name str yes Logical name of the second entity in the many-to-many relationship. (min_len=1)
intersect_entity_name str yes Name for the junction (intersect) table that Dataverse creates to store the relationship links (e.g., 'cr123_account_contact'). (min_len=1)

Returns {"created": ..., "schema_name": ..., "entity_id": ...}.


dataverse_create_multi_table_lookup

Write · non-idempotent · category schema

Create a polymorphic (multi-table) lookup column that can reference multiple tables.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
lookup_schema_name str yes Schema name for the polymorphic lookup column (e.g., 'cr123_Customer'). Must include a publisher prefix. (min_len=3)
lookup_display_name str yes Display label for the polymorphic lookup column. (min_len=1)
owning_entity str yes Logical name of the table that will own the lookup column (e.g., 'cr123_order'). (min_len=1)
target_entities list[str] yes List of table logical names the lookup can reference (e.g., ['account', 'contact']). Must contain at least one entry. (min_len=1)

Returns {"created": ..., "lookup_schema_name": ..., "result": ...}.


dataverse_create_one_to_many_relationship

Write · non-idempotent · category schema

Create a 1:N relationship between two tables and its lookup column on the referencing side.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
schema_name str yes Schema name for the relationship (e.g., 'cr123_account_contacts'). Must include a publisher prefix. (min_len=3, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
referenced_entity str yes Logical name of the 'one' (referenced/parent) side table (e.g., 'account'). (min_len=1)
referencing_entity str yes Logical name of the 'many' (referencing/child) side table (e.g., 'contact'). A lookup column is created on this table. (min_len=1)
lookup_schema_name str yes Schema name for the lookup column created on the referencing entity (e.g., 'cr123_AccountId'). Must include a publisher prefix. (min_len=3)
lookup_display_name str yes Display label for the lookup column. (min_len=1)

Returns {"created": ..., "schema_name": ..., "entity_id": ...}.


dataverse_create_table

Write · non-idempotent · category schema

Create a new custom table (entity) in the 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').
solution_unique_name str | None no None Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
display_name str yes Singular display name for the table (e.g., 'Widget'). Shown in the UI as the record label. (min_len=1)
display_collection_name str yes Plural display name for the table (e.g., 'Widgets'). Used in navigation and list views. (min_len=1)
schema_name str yes Schema name for the table. Must include a publisher prefix followed by an underscore and a PascalCase name (e.g., 'cr123_Widget', 'new_MyTable'). The logical name will be derived as the lowercase version of this value. (min_len=3, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
ownership_type str no 'UserOwned' Ownership model for the table. 'UserOwned' — records are owned by a user or team (default). 'OrganizationOwned' — records are owned by the organization.
primary_name_attribute_schema_name str yes Schema name for the required primary name text column (e.g., 'cr123_Name'). Must use the same publisher prefix as schema_name. (min_len=3)
description str | None no None Optional description for the table.

Returns {"created": ..., "schema_name": ..., "logical_name": ..., "location": ...}.


dataverse_delete_alternate_key

Delete · idempotent · category schema

Delete an alternate key from a Dataverse table by its logical name.

Note: Any upsert operations that reference this key will fail after deletion.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
table_logical_name str yes Logical name of the table that owns the alternate key (e.g., 'account'). (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
key_logical_name str yes Logical name of the alternate key to delete (e.g., 'new_accountcode'). Use dataverse_list_alternate_keys to discover the logical name. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"deleted": ..., "table_logical_name": ..., "key_logical_name": ...}.


dataverse_delete_choice

Delete · non-idempotent · category schema

Delete a GLOBAL choice (option set) by logical name.

Note: Deleting a global choice still referenced by a column will fail; remove those columns first.

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 Logical name of the global choice to delete (e.g., 'cr123_mychoice'). Confirm no columns reference it first via dataverse_get_choice. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"deleted": ..., "name": ...}.


dataverse_delete_choice_option

Delete · non-idempotent · category schema

Remove a specific option value from a global or local choice.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
option_set_name str | None no None Logical name of the global choice (e.g., 'cr123_mychoice'). Provide this OR entity_logical_name + attribute_logical_name.
entity_logical_name str | None no None Logical name of the table for a local choice column.
attribute_logical_name str | None no None Logical name of the local choice column.
value int yes Integer code of the option to remove.

Returns {"deleted": ..., "value": ...}.


dataverse_delete_column

Delete · non-idempotent · category schema

Permanently delete a custom column and all its data from a table — irreversible.

Note: Only custom, unmanaged columns can be deleted.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
table_logical_name str yes Logical name of the table that owns the column. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
column_logical_name str yes Logical name of the column to delete (e.g., 'cr123_description'). Only custom columns can be deleted. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"deleted": ..., "table_logical_name": ..., "column_logical_name": ...}.


dataverse_delete_relationship

Delete · non-idempotent · category schema

Delete a custom relationship by MetadataId — permanent; deletes the associated lookup column for 1:N.

Note: Only custom, unmanaged relationships can be deleted.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
metadata_id str yes MetadataId GUID of the relationship to delete. Obtain via dataverse_get_relationship. (min_len=36)

Returns {"deleted": ..., "metadata_id": ...}.


dataverse_delete_table

Delete · non-idempotent · category schema

Permanently delete a custom table and all its records — irreversible.

Note: Only custom, unmanaged tables (IsCustomEntity=true, IsManaged=false) can be deleted.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
table_logical_name str yes Logical name of the custom table to delete (e.g., 'cr123_widget'). Use lowercase. Only custom tables (IsCustomEntity=true) can be deleted. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"deleted": ..., "table_logical_name": ...}.


dataverse_get_choice

Read · idempotent · category schema

Get one GLOBAL choice (option set) — all option values, codes, and labels — by name or MetadataId.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
name str | None no None Logical name of the global choice (e.g., 'incident_prioritycode', 'new_my_globalchoice'). Use lowercase. Either name or metadata_id must be provided. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
metadata_id str | None no None GUID MetadataId of the global choice definition. Either name or metadata_id must be provided.

Returns {"choice": ...}.


dataverse_get_column

Read · idempotent · category schema

Get full metadata for a single column on a Dataverse table, including type-specific properties.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
table_logical_name str yes Logical name of the table (e.g., 'account', 'contact'). Use lowercase. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
column_logical_name str yes Logical name of the column (e.g., 'name', 'telephone1', 'new_customfield'). Use lowercase. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"column": ...}.


dataverse_get_relationship

Read · idempotent · category schema

Get full metadata for a single relationship by schema name — cascade configuration and navigation properties.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
schema_name str yes Schema name of the relationship (e.g., 'account_contacts', 'contact_customer_accounts'). Schema names are case-sensitive and their exact casing/format depends on how the relationship was defined. Always match the SchemaName value exactly. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"relationship": ...}.


dataverse_get_table_metadata

Read · idempotent · category schema

Get schema details for a single Dataverse table by logical name.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
table_name str yes Logical name of the table (e.g., 'account', 'contact', 'new_customtable'). Use lowercase logical names. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"table": ...}.


dataverse_get_valid_relationship_entities

Read · idempotent · category schema

List WHICH tables may take part in a relationship — the enumeration, before you pick a target.

Note: table_logical_name DOES NOT NARROW THE ANSWER. It is optional for the two 1:N roles and Dataverse does validate it server-side (an unknown table is HTTP 400 [0x80041102] "not found in the MetadataCache"), but supplying it was measured live to return a BYTE-IDENTICAL list to omitting it, for every table tried.

Note: A nonexistent table name is an HTTP error, not an empty list.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
role Literal['referenced', 'referencing', 'many_to_many'] yes See note below.
table_logical_name str | None no None See note below.
top int no 250 Maximum number of table names to return. These functions have no server-side paging and the answers are large — measured live at 575 names for role='referenced', 305 for 'many_to_many' and 166 for 'referencing' — so results are trimmed client-side; total_count and has_more always describe the full set Dataverse returned. (ge=1, le=5000)
  • role — Which side of a relationship to enumerate. Every role answers the ENVIRONMENT-WIDE question — which tables are eligible for that role at all. 'referenced' — tables that can be the primary (one) side of a 1:N, i.e. valid targets for a lookup. 'referencing' — tables that can be the related (many) side of a 1:N, i.e. tables that can hold a lookup. 'many_to_many' — tables that can participate in an N:N; takes no table_logical_name.
  • table_logical_name — Optional logical name of a table (lowercase, e.g. 'account'). IT DOES NOT NARROW THE ANSWER: measured live, supplying it returns the same list as omitting it. Dataverse does validate the name server-side (an unknown table is an HTTP 400), so pass it only to prove the table exists; use dataverse_check_relationship_eligibility to ask about one table. MUST be omitted when role='many_to_many' — that function accepts no parameter, so a value here is rejected rather than silently ignored. An empty string is NOT the same as omitting the field and is rejected. (min_len=1, max_len=50, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

dataverse_is_component_customizable

Read · idempotent · category schema

Check whether a solution component can be customized BEFORE trying to edit it.

Note: DO NOT ASSUME SYSTEM COMPONENTS ANSWER false. Core out-of-the-box tables report true (systemuser, component type 1, was verified as true) because the platform permits customizations such as adding columns even though the base asset itself is managed.

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 check. This is the component's own id, NOT a solution id: the MetadataId of a table (from dataverse_get_table_metadata) or of a column (from dataverse_get_column), the MetadataId of a relationship or global choice, or the record id of a form, view, web resource or canvas app.
component_type int yes See note below.
  • component_type — Integer component type code saying what component_id refers to. This is the same code set dataverse_analyze_dependencies takes — use that tool's documentation for the full list. 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, le=100000)

dataverse_list_alternate_keys

Read · idempotent · category schema

List alternate keys (EntityKeyMetadata) defined on a Dataverse table.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
table_logical_name str yes Logical name of the table whose alternate keys to list (e.g., 'account', 'contact'). (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
top int no 50 Maximum number of alternate keys to return. (ge=1, le=5000)

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


dataverse_list_choice_column_options

Read · idempotent · category schema

Get option values and labels for a Picklist or MultiSelectPicklist column's LOCAL option set.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
table_logical_name str yes Logical name of the table (e.g., 'account', 'lead'). Use lowercase. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
column_logical_name str yes Logical name of the Picklist or MultiSelectPicklist column (e.g., 'statuscode', 'new_category'). Use lowercase. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)

Returns {"options": ..., "count": ...}.


dataverse_list_choices

Read · idempotent · category schema

List GLOBAL choice (option set) definitions in the Dataverse environment.

Note: Option values and labels are not returned here — use dataverse_get_choice to retrieve the full option set for a specific choice.

Note: $filter is not supported by this endpoint; top is applied client-side.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
select list[str] | None no None Metadata properties to return (PascalCase). Defaults to MetadataId, Name, DisplayName, OptionSetType, IsGlobal, IsManaged. Note: 'Options' is not selectable on the list endpoint — use dataverse_get_choice to retrieve the full option values and labels for a specific choice. Example: ['Name', 'DisplayName', 'OptionSetType']
top int | None no 50 Maximum number of choices to return (1–500). (ge=1, le=500)

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


dataverse_list_columns

Read · idempotent · category schema

List column (attribute) definitions for a Dataverse table.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
table_logical_name str yes Logical name of the table whose columns to list (e.g., 'account', 'contact', 'new_customtable'). Use lowercase. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
attribute_type str | None no None Filter columns by AttributeType. Common values: 'String', 'Integer', 'Decimal', 'Double', 'Boolean', 'DateTime', 'Lookup', 'Picklist', 'MultiSelectPicklist', 'Memo', 'Money', 'Uniqueidentifier', 'File', 'Image'. Case-sensitive (use PascalCase).
select list[str] | None no None Metadata properties to return (PascalCase). Defaults to LogicalName, SchemaName, AttributeType, DisplayName, RequiredLevel, IsValidForRead, IsValidForCreate, IsValidForUpdate. Example: ['LogicalName', 'AttributeType', 'MaxLength']

Returns {"columns": ..., "count": ...}.


dataverse_list_languages

Read · idempotent · category schema

List an environment's language codes (LCIDs) — which are usable, which are merely installed.

Note: A LocalizedLabel for a language that is installed but NOT provisioned is rejected or silently dropped, so never assume 1033 (English) is provisioned — verify it.

Note: THE THREE CALLS FAIL INDEPENDENTLY. A function that is unavailable or privilege-gated is reported in partial_errors and the others' data is still returned, so ALWAYS read partial_errors before concluding a language is absent — a missing key means "not answered", never "empty".

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').

dataverse_list_relationships

Read · idempotent · category schema

List relationship definitions for a table (OneToMany, ManyToOne, ManyToMany) or the whole environment.

Note: Navigation property names from the results are required for OData $expand queries and for dataverse_associate_records.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
table_logical_name str | None no None Logical name of the table to scope the query to (e.g., 'account', 'contact'). If omitted, all relationships in the environment are returned. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
relationship_type str | None no None Filter by relationship type. Accepted values: 'OneToMany', 'ManyToOne', 'ManyToMany'. If omitted and table_logical_name is set, all three types are returned. Ignored when table_logical_name is omitted.
top int no 50 Maximum number of relationships to return (1–500). (ge=1, le=500)

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


dataverse_list_tables

Read · idempotent · category schema

List tables (entities) in the Dataverse environment with their logical names and display names.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
consistency_strong bool no False When True, adds the 'Consistency: Strong' request header, bypassing Dataverse's 30-second metadata cache. Use immediately after creating or updating metadata to ensure the latest schema is returned. Incurs a performance penalty; omit in normal read scenarios.
filter str | None no None OData $filter for table metadata. Examples: "IsCustomEntity eq true", "IsManaged eq false"
select list[str] | None no None Metadata properties to return. Defaults to LogicalName, SchemaName, DisplayName, IsCustomEntity, IsManaged
top int no 50 Maximum number of records to return. (ge=1, le=5000)

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


dataverse_publish_customizations

Write · idempotent · category schema

Publish Dataverse schema customizations to make changes visible in model-driven apps.

Param Type Req Default Notes
dataverse_url str yes Required Dataverse organization URL for this request (e.g., 'https://yourorg.crm.dynamics.com').
entities list[str] no [] Logical names of tables to publish (e.g., ['account', 'contact']). Provide this to publish only specific tables and their components.
option_sets list[str] no [] Logical names of global choices to publish (e.g., ['cr123_mychoice']). Provide this to publish only specific global choices.
relationships list[str] no [] Schema names of relationships to publish (e.g., ['cr123_account_contacts']). Provide this to publish only specific relationships.
web_resource_ids list[str] no [] GUIDs of web resources to publish (e.g., ['a1b2c3d4-...')]. Use instead of publish_all to publish only specific web resources — much faster than PublishAllXml.
publish_all bool no False When True, publishes ALL unpublished customizations in the environment using PublishAllXml. This may take several minutes for large environments. Ignores all other parameters when True.

Returns {"published": ..., "action": ..., "parameter_xml": ...} or {"published": ..., "action": ...}.


dataverse_reorder_choice_options

Write · idempotent · category schema

Reorder all options of a global or local choice by supplying the full ordered list of values.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
option_set_name str | None no None Logical name of the global choice (e.g., 'cr123_mychoice'). Provide this OR entity_logical_name + attribute_logical_name.
entity_logical_name str | None no None Logical name of the table for a local choice column.
attribute_logical_name str | None no None Logical name of the local choice column.
values list[int] yes Ordered list of all integer option codes in the desired display order. Must include every existing option value. (min_len=1)

Returns {"reordered": ..., "values": ...}.


dataverse_update_choice

Write · idempotent · category schema

Update a global choice's metadata — the metadata API requires a full PUT, not a partial update.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
metadata_id str yes MetadataId GUID of the global choice to update. Obtain via dataverse_get_choice. (min_len=36)
full_definition dict yes Complete OptionSetMetadata JSON obtained from dataverse_get_choice. Apply your changes before passing here. The Dataverse metadata API requires a full PUT. To update individual option labels, use dataverse_update_choice_option instead.

Returns {"updated": ..., "metadata_id": ...}.


dataverse_update_choice_option

Write · idempotent · category schema

Update the display label of an existing option in a global or local choice.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
option_set_name str | None no None Logical name of the global choice (e.g., 'cr123_mychoice'). Provide this OR entity_logical_name + attribute_logical_name.
entity_logical_name str | None no None Logical name of the table for a local choice column.
attribute_logical_name str | None no None Logical name of the local choice column.
value int yes Integer code of the option to update.
label str yes New display label for the option. (min_len=1)
merge_labels bool no False When True, preserves labels for other languages and only updates the provided label. When False (default), replaces all language labels.

Returns {"updated": ..., "value": ..., "label": ...}.


dataverse_update_column

Write · idempotent · category schema

Update a column's metadata — the metadata API requires a full PUT, not a partial update.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
table_logical_name str yes Logical name of the table that owns the column. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
column_logical_name str yes Logical name of the column to update (e.g., 'cr123_description'). Fetch the current definition first with dataverse_get_column. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
full_definition dict yes Complete attribute definition JSON obtained from dataverse_get_column. Apply your changes to this object before passing it here. The Dataverse metadata API requires a full PUT — partial updates are not supported.

Returns {"updated": ..., "table_logical_name": ..., "column_logical_name": ...}.


dataverse_update_relationship

Write · idempotent · category schema

Update a relationship's cascade behavior or configuration — the metadata API requires a full PUT.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
metadata_id str yes MetadataId GUID of the relationship to update. Obtain via dataverse_get_relationship. (min_len=36)
full_definition dict yes Complete relationship definition JSON obtained from dataverse_get_relationship. Apply your changes before passing here. The Dataverse metadata API requires a full PUT.

Returns {"updated": ..., "metadata_id": ...}.


dataverse_update_table

Write · idempotent · category schema

Update a table's display name or description via a full PUT replacement.

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 Unique name of an unmanaged solution to associate this metadata change with (e.g., 'MySolution'). When provided, Dataverse automatically adds the created or updated component to that solution. Leave unset to create components outside of any solution. (pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
table_logical_name str yes Logical name of the table to update (e.g., 'account', 'cr123_widget'). Use lowercase. (min_len=1, pattern=^[a-zA-Z_][a-zA-Z0-9_]*$)
display_name str | None no None New singular display name for the table.
description str | None no None New description for the table.

Returns {"updated": ..., "table_logical_name": ...}.


Clone this wiki locally