Full Capabilities Reference
Version: 0.4.5 API Version: Dataverse Web API v9.2 Transport: stdio · HTTP/SSE
67 tools across 25 categories for full Dataverse lifecycle management.
For detailed input/output examples, see the Use Cases section.
Tool Summary
| # | Category | Count | Tools |
|---|---|---|---|
| 1 | Auth | 1 | whoami |
| 2 | Metadata | 8 | list_tables, get_table_metadata, get_relationships, list_global_option_sets, get_option_set, get_entity_key, get_attribute_option_set, update_entity |
| 3 | Query | 3 | query, execute_fetchxml, retrieve_multiple_with_paging |
| 4 | CRUD | 6 | get, create, update, delete, upsert, assign |
| 5 | Relations | 2 | associate, disassociate |
| 6 | Actions & Functions | 6 | execute_action, execute_function, execute_bound_action, execute_bound_function, list_dependencies, retrieve_dependencies_for_delete |
| 7 | Batch | 1 | batch_execute |
| 8 | Change Tracking | 1 | change_detection |
| 9 | Solutions | 3 | list_solutions, solution_components, publish_customizations |
| 10 | Impersonation | 1 | impersonate |
| 11 | Customization | 3 | list_custom_actions, list_plugin_steps, set_workflow_state |
| 12 | Environment | 3 | get_environment_variable, set_environment_variable, create_environment_variable |
| 13 | Trace | 2 | get_plugin_trace_logs, get_workflow_trace_logs |
| 14 | Search | 1 | search |
| 15 | Audit | 1 | get_audit_log |
| 16 | Quality | 1 | detect_duplicates |
| 17 | Annotations | 2 | get_annotations, create_annotation |
| 18 | Users | 2 | list_users, get_user_roles |
| 19 | RBAC | 4 | list_roles, assign_role_to_user, remove_role_from_user, assign_role_to_team |
| 20 | Views | 1 | list_views |
| 21 | Files | 2 | upload_file_column, download_file_column |
| 22 | Org | 2 | list_business_units, list_teams |
| 23 | Workflows | 2 | list_workflows, get_workflow |
| 24 | Assistance | 5 | suggest_tools, list_guides, get_guide, list_connection_references, list_tool_tags |
| 25 | Attributes | 4 | create_attribute, update_attribute, delete_attribute, create_lookup_attribute |
| Total | 67 |
All tool names are prefixed with dataverse_ (e.g., dataverse_query, dataverse_create).
Architecture Overview
MCP Dataverse Server (67 tools · 25 categories)
├── 🔑 Auth (1)
├── 📋 Metadata (8)
├── 🔍 Query (3)
├── ✏️ CRUD (6)
├── 🔗 Relations (2)
├── ⚡ Actions & Functions (6)
├── 📦 Batch (1)
├── 🔄 Change Tracking (1)
├── 🧩 Solutions (3)
├── 👤 Impersonation (1)
├── 🔧 Customization (3)
├── ⚙️ Environment (3)
├── 🔎 Trace (2)
├── 🔍 Search (1)
├── 📜 Audit (1)
├── ✅ Quality (1)
├── 📝 Annotations (2)
├── 👥 Users (2)
├── 🛡️ RBAC (4)
├── 👁️ Views (1)
├── 📁 Files (2)
├── 🏢 Org (2)
├── ⚙️ Workflows (2)
├── 🤖 Assistance (5)
└── 🏗️ Attributes (4)
All tool handlers validate inputs with Zod before calling the Dataverse Web API. Auth tokens are cached and refreshed proactively; transient errors (429, 503, 504) are retried with exponential backoff.
Key Features
Structured Outputs
Every tool returns a consistent structure:
{
"summary": "Human-readable summary of the result",
"data": { },
"suggestions": ["Next steps the AI agent can take"]
}
When an error has a well-known root cause, tools also include an errorCategory field to enable programmatic error handling:
| Value | Meaning |
|---|---|
ENV_LIMITATION | Feature not enabled or unavailable in this environment |
PERMISSIONS | Insufficient privileges for the operation |
SCHEMA_MISMATCH | Input conflicts with the table’s metadata schema |
Guardrails
- Destructive operations (
delete,update_entity) requireconfirm: true - Query guardrails warn about missing
$select, missing$filter, and large result sets - RBAC operations are idempotent — assigning an already-assigned role returns
"already_assigned"instead of an error
ETag Support
dataverse_update accepts an optional etag parameter for optimistic concurrency control. When provided, the update only succeeds if the record hasn’t been modified since the ETag was obtained.
Impersonation
Any tool can be executed on behalf of another user via dataverse_impersonate, using the MSCRMCallerId header. Requires prvActOnBehalfOfAnotherUser privilege.
Error Handling & Retry
| Status | Behavior | Attempts |
|---|---|---|
| 401 | Invalidate token, retry with fresh token | 1 |
| 429 / 503 / 504 | Exponential backoff (2^attempt × 1000 ms) | maxRetries (default 3) |
| Other | Throw immediately with actionable message | 0 |
Security
| Feature | Details |
|---|---|
| Token encryption | AES-256-GCM cached credentials at ~/.mcp-dataverse/ |
| OData injection | esc() utility for single-quote escaping |
| File column safety | columnName validated against /^[a-zA-Z0-9_]+$/ |
| Impersonation cleanup | MSCRMCallerId cleaned in finally block |
| No secrets in logs | PAT, tokens, and headers never appear in tool responses |
Limitations
| Area | Limitation |
|---|---|
| Transport | stdio (default) and HTTP. Server must be spawned or run as HTTP service. |
| Single environment | One Dataverse environment per server instance |
| No streaming | Responses are complete JSON; large result sets may exceed AI context limits |
$top max | dataverse_query caps at 5 000 per call; use retrieve_multiple_with_paging for more |
| Paging max | retrieve_multiple_with_paging caps at 50 000 records |
| Batch max | 1 000 operations per $batch request |
No $<Content-ID> | Cross-referencing created entities within a changeset not supported |
| Token expiry | Refresh tokens expire after ~90 days of inactivity |
For the complete technical reference with parameter tables, see CAPABILITIES.md on GitHub.