-
Notifications
You must be signed in to change notification settings - Fork 0
Tools Schema
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)
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 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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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_]*$)
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)
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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'). |
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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": ...}.
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