# mcp-dataverse

The most complete MCP server for Microsoft Dataverse. 81 production-ready tools for AI agents: OData & FetchXML queries, CRUD, metadata, solutions, audit, batch operations, schema write, record access and more. Device code, client credentials, and managed

- **Type:** MCP server
- **Trust:** 60/100 (B), scored on the package rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 0.7.10
- **Author:** Unknown
- **License:** MIT
- **npm:** mcp-dataverse
- **Source:** https://github.com/codeurali/mcp-dataverse
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

60/100 (B), scored on the package rubric
- Publisher verified: no
- Install scripts: nothing suspicious found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 0 days

## Security scan

- **Status:** clean
- **Scanned:** 2026-10-18T09:31:41.768Z
- **Version scanned:** 0.7.10
- **CVEs:** none found by OSV at scan time

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `dataverse_whoami` — Returns the current authenticated user context from Dataverse WhoAmI: userId, businessUnitId, organizationId, organizationName, and environmentUrl. Use this to 
- `dataverse_list_tables` — Lists all Dataverse tables. By default returns ONLY custom (non-system) tables. Set includeSystemTables=true to include all ~1700+ system tables.
- `dataverse_get_table_metadata` — Returns full schema metadata for a Dataverse table: all attribute (column) logical names, display names, data types, required levels, and lookup target entities
- `dataverse_get_relationships` — Returns all relationship definitions (1:N, N:1, N:N) for a Dataverse table, including relationship schema names, referenced/referencing entity names, and lookup
- `dataverse_list_global_option_sets` — Lists all global (shared) option sets defined in the Dataverse environment, returning their names and metadata IDs. Use this to discover available option sets b
- `dataverse_get_option_set` — Returns all option labels and their integer values for a named global option set. Use this to look up the numeric code for a picklist value before filtering rec
- `dataverse_get_entity_key` — Returns all alternate key definitions for a Dataverse table. Useful before using dataverse_upsert to know which fields serve as alternate keys, their index stat
- `dataverse_get_attribute_option_set` — Returns all option labels and integer values for a table-specific attribute (Picklist, MultiSelectPicklist, Status, or State field). Use to look up the numeric 
- `dataverse_update_entity` — Updates configuration flags on an existing Dataverse entity definition — enables or disables Notes (HasNotes), Change Tracking, and Audit. Requires System Custo
- `dataverse_set_table_icon`
- `dataverse_resolve_entity_name`
- `dataverse_query`
- `dataverse_execute_fetchxml`
- `dataverse_retrieve_multiple_with_paging`
- `dataverse_get` — Retrieves a single Dataverse record by its GUID. Use when you already know the exact record ID and want specific fields — faster and more precise than dataverse
- `dataverse_create`
- `dataverse_update` — Updates an existing Dataverse record using PATCH semantics — only the fields provided in data are changed, all other fields remain unchanged. Requires the recor
- `dataverse_delete` — Permanently deletes a Dataverse record by its GUID. This operation is irreversible — you MUST set confirm=true to proceed. Use dataverse_list_dependencies to ch
- `dataverse_upsert`
- `dataverse_assign` — Assigns a Dataverse record to a different user or team owner. Sets the ownerid lookup field using the OData bind syntax. WHEN TO USE: Changing the owner of a re
- `dataverse_associate` — Creates an association between two Dataverse records via a named N:N or 1:N relationship. Requires the relationship schema name obtainable from dataverse_get_re
- `dataverse_associate_bulk` — Associates one source record with multiple related records at once via a named relationship, executing all associations in parallel. Unlike dataverse_associate 
- `dataverse_disassociate` — Removes an existing association between two Dataverse records on a named relationship. For N:N relationships, provide relatedId and relatedEntitySetName to buil
- `dataverse_query_associations` — Reads existing N:N associations for a record by querying through a navigation property. Returns the related records — use to verify what's already linked before
- `dataverse_execute_action` — Executes a global (unbound) Dataverse action that is not tied to a specific record — for example WinOpportunity, SendEmail, or custom process actions. Use datav
- `dataverse_execute_function` — Executes a global (unbound) Dataverse OData function that is read-only and returns data without side effects — for example RetrieveTotalRecordCount or Initializ
- `dataverse_execute_bound_action` — Executes a Dataverse action bound to a specific record instance, passing the entity set name and record GUID as context (e.g., QualifyLead on a lead, or a custo
- `dataverse_retrieve_dependencies_for_delete` — Checks what solution components would block deletion of a specific component. Provide the Dataverse component type code (1=Entity, 2=Attribute, 26=SavedQuery, 2
- `dataverse_execute_bound_function`
- `dataverse_list_dependencies`
- `dataverse_batch_execute`
- `dataverse_change_detection`
- `dataverse_publish_customizations`
- `dataverse_impersonate`
- `dataverse_list_custom_actions`
- `dataverse_list_plugin_steps`
- `dataverse_set_workflow_state`
- `dataverse_list_connection_references`
- `dataverse_get_environment_variable`
- `dataverse_set_environment_variable`

## Install

**Verdict: review** — Installable, but 1 thing to check first: No publisher has proved control of this listing; it is indexed, not vouched for.
**Cautions** (coverage gaps and advisories — never blocking)
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Config** (claude-code):
```json
"{\n  \"mcpServers\": {\n    \"mcp-dataverse\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"-y\",\n        \"mcp-dataverse\"\n      ]\n    }\n  }\n}"
```

## Blast radius

Extensive to critical — no credential declaration found, from the publisher, the upstream registry, or the README. Known so far: deletes data; runs on your machine.
- Floor 37, ceiling 61 (tier: unknown)
- `unknown` means the floor and ceiling land in different bands — not measured enough to name one. It does not mean low.
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/mcp-dataverse
- Install plan: https://forgeregistry.com/api/v1/packages/mcp-dataverse/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/mcp-dataverse
- HTML page: https://forgeregistry.com/registry/mcp-dataverse
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
