Skip to main content
Glama
LosslessFunction

Dataverse MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
LOG_LEVELNoOptional: Log level (debug, info, warn, error; default: info)
MAX_RETRIESNoOptional: Maximum number of retries (default: 3)
DATAVERSE_URLYesThe URL of your Dataverse environment (e.g., https://yourorg.crm.dynamics.com)
AZURE_CLIENT_IDNoOptional: Your own Azure App Registration client ID
AZURE_TENANT_IDNoOptional: Your Azure AD tenant ID
TOKEN_CACHE_PATHNoOptional: Path to token cache file (default: ./.token-cache.json)
REQUEST_TIMEOUT_MSNoOptional: HTTP request timeout in milliseconds (default: 30000)
METADATA_CACHE_TTL_MSNoOptional: Metadata cache TTL in milliseconds (default: 300000)

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
whoamiA

Show the currently signed-in Microsoft account. Use this to verify authentication status before running Dataverse operations.

sign_outA

Sign out and clear the cached Microsoft credentials. The next Dataverse operation will trigger a fresh login.

get_recordA

Fetch a single Dataverse record by its GUID. Use 'select' to limit returned fields and 'expand' to include related records.

query_recordsA

Query records from a Dataverse table using OData. Supports $filter, $select, $orderby, $top, $expand, and pagination. When the result has hasNextPage=true, pass the returned nextLink to fetch subsequent pages.

execute_fetchxmlA

Execute a FetchXML query against Dataverse. FetchXML supports aggregate functions, linked entities, and grouping that cannot be expressed in OData. Use this for complex reporting or analytical queries.

create_recordA

Create a single record in a Dataverse table. Returns the new record's GUID. Use describe_table first to discover correct field names and types.

update_recordA

Update specific fields on an existing Dataverse record (PATCH semantics — only provided fields are changed). Fails with an error if the record does not exist.

upsert_recordA

Create or update a Dataverse record with a known GUID (PUT semantics). Use mode='createOrUpdate' to create if not exists, update if exists. 'createOnly' fails if the record exists. 'updateOnly' fails if it does not exist.

delete_recordA

Delete a single Dataverse record by its GUID. This is irreversible.

associate_recordsA

Create a relationship link between two Dataverse records via a navigation property. Use isSingleValued=true for lookup (N:1) properties; false for collection (1:N) navigation.

disassociate_recordsA

Remove a relationship link between two Dataverse records. For collection navigation properties, provide relatedRecordId to remove a specific link. For single-valued (lookup) navigation, omit relatedRecordId.

bulk_create_recordsA

Create multiple records in a single OData $batch operation. Up to 1000 records per call (processed in chunks of 100). Tracks per-record success/failure — partial success is supported.

bulk_update_recordsA

Update multiple records in a single OData $batch operation. Up to 1000 records per call (processed in chunks of 100). Each item requires a recordId and a data object (PATCH semantics — only provided fields change). Tracks per-record success/failure — partial success is supported.

bulk_delete_recordsA

Delete multiple records in a single OData $batch operation. Up to 1000 GUIDs per call. Tracks per-record success/failure — partial success is supported.

batch_transactionA

Execute multiple Dataverse write operations atomically in a single batch. If ANY operation fails, ALL are rolled back — all-or-nothing semantics. Supports mixed operations: create, update, delete, upsert across different tables.

execute_actionA

Execute a Dataverse unbound or bound action. Examples: WinOpportunity, SendEmail, custom workflow actions. For bound actions, provide boundTableName and boundRecordId.

describe_tableA

Fetch the full metadata schema for a Dataverse table: all columns (names, types, required level, create/update validity), plus all 1:N, N:1, and N:N relationships. ALWAYS call this before creating or updating records to discover correct field names and types. For Lookup fields, the response includes 'targets' (the entity the lookup points to) — use the target's entitySetName with @odata.bind syntax to set the value: { "fieldname@odata.bind": "/entitysetname(guid)" }. Results are cached for 5 minutes.

list_tablesA

List all available Dataverse tables (entities). Use customOnly=true to see only custom tables. Use nameContains to search by name substring. Results are cached for 5 minutes.

get_option_set_valuesA

Fetch all option values (integer code + label) for a Dataverse choice column or global option set. Use tableName + attributeName for a local choice/picklist/status/state column. Use optionSetName for a global option set shared across tables. Returns every option with its numeric value and display label — use these values when filtering or writing records.

refresh_metadata_cacheA

Invalidate cached table metadata so the next call to describe_table or list_tables fetches fresh data. Use this after schema changes (new fields, new relationships) in your Dataverse environment.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LosslessFunction/dataverse-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server