Known Issues
Issues identified during the Web API compliance audit. Each issue references the affected tool and planned fix.
Last updated: March 2026
Table of contents
- Active Issues
- ISSUE-01 — Missing
MSCRM.MergeLabelsheader on metadata writes - ISSUE-02 —
@odata.typeincluded inupdate_entityPATCH body - ISSUE-03 —
update_entityflag updates return0x80060888 - ISSUE-04 — Batch requests use
\ninstead of\r\n - ISSUE-05 —
detect_duplicatesdescription is misleading - ISSUE-06 —
searchURL uses relative path hack - ISSUE-07 —
executeFunctiononly supports string parameters - ISSUE-08 —
create_attributemissing common column types
- ISSUE-01 — Missing
- Constraints & Degraded Tools
Active Issues
ISSUE-01 — Missing MSCRM.MergeLabels header on metadata writes
| Priority | 🔴 High |
| Affected tools | dataverse_update_entity, dataverse_update_attribute |
| Status | ✅ Fixed in v0.4.0 |
Problem: PATCH /EntityDefinitions and PUT /EntityDefinitions(.../Attributes(...) calls do not include the MSCRM.MergeLabels: true header. In multi-language environments, this causes non-primary-language labels (DisplayName, Description) to be erased on every update.
Workaround: After updating metadata, manually re-apply non-English labels via the Dataverse UI or a direct API call with the header set.
Fix: MSCRM.MergeLabels: true header added to all metadata PATCH/PUT operations in v0.4.0.
ISSUE-02 — @odata.type included in update_entity PATCH body
| Priority | 🟡 Medium |
| Affected tools | dataverse_update_entity |
| Status | 🔜 Fix planned (v0.4) |
Problem: The update_entity tool includes @odata.type in the PATCH request body. For partial updates (PATCH), OData best practice is to omit @odata.type entirely — the server infers the type from the URL. Some environments accept it, others may reject it or behave unexpectedly.
Workaround: None needed in most environments — the current behavior generally works. If you encounter errors, use the Web API directly without the type annotation.
Planned fix: Strip @odata.type from PATCH payloads; only include it in POST (create) operations where it is required.
ISSUE-03 — update_entity flag updates return 0x80060888
| Priority | ⚪ Low |
| Affected tools | dataverse_update_entity |
| Status | ℹ️ Environment limitation — no fix needed |
Problem: Updating boolean flags like IsAuditEnabled, IsValidForQueue, IsConnectionsEnabled via PATCH /EntityDefinitions returns error 0x80060888 on certain Dataverse environments (typically sandboxes or environments with restricted managed solutions).
Explanation: This is a Dataverse environment restriction, not an MCP bug. The tool already handles this gracefully by catching the error and returning an actionable message. No code change required.
ISSUE-04 — Batch requests use \n instead of \r\n
| Priority | 🟡 Medium-Low |
| Affected tools | dataverse_batch_execute |
| Status | ✅ Fixed in v0.4.0 |
Problem: The batch request body uses Unix-style line endings (\n) instead of CRLF (\r\n) as required by RFC 2046 for MIME multipart messages. The Dataverse Web API currently accepts \n, but this violates the spec and may break with future API versions or stricter proxies.
Workaround: None needed — Dataverse currently tolerates \n.
Fix: Batch request boundary now uses CRLF (\r\n) per RFC 2046 — resolved in v0.4.0.
ISSUE-05 — detect_duplicates description is misleading
| Priority | 🟡 Medium |
| Affected tools | dataverse_detect_duplicates |
| Status | ✅ Fixed in v0.4.0 |
Problem: The tool description says “Uses Dataverse built-in duplicate detection rules”, but the actual implementation uses FetchXML with field-level OR matching. This is a functional approximation — it does not invoke the real RetrieveDuplicates function or respect published duplicate detection rules in the environment.
Impact: Results may differ from what the Dataverse duplicate detection UI would return. Custom duplicate rules (e.g., fuzzy matching, compound keys) are not honored.
Workaround: For authoritative duplicate detection, use the Dataverse UI or call RetrieveDuplicates directly via the Web API.
Fix: Tool description updated in v0.4.0 to accurately reflect the FetchXML field-OR matching approach. A future tool wrapping the real RetrieveDuplicates function remains in the ideas backlog.
ISSUE-06 — search URL uses relative path hack
| Priority | ⚪ Low |
| Affected tools | dataverse_search |
| Status | ✅ Fixed in v0.4.0 |
Problem: The search tool constructs the Relevance Search URL using a relative path (../../search/v1.0/query) instead of building the absolute URL from environmentUrl. This works because the OData base URL includes /api/data/v9.2/, but it’s fragile and relies on path traversal assumptions.
Workaround: None needed — the current approach works.
Fix: URL is now constructed directly from environmentUrl. Endpoint upgraded to v2.0 (/api/search/v2.0/query) in v0.4.2, providing improved error reporting and a structured errorCategory: "ENV_LIMITATION" response when Relevance Search is disabled or no entities are configured.
ISSUE-07 — executeFunction only supports string parameters
| Priority | ⚪ Low |
| Affected tools | dataverse_execute_function, dataverse_execute_bound_function |
| Status | ✅ Fixed in v0.4.0 |
Problem: All function parameters are wrapped in single quotes (string literals) in the URL. Functions that expect integers, GUIDs, or booleans as aliased parameters receive them as strings, which may cause type errors on some functions.
Example: WhoAmI() and simple functions work fine. Functions like RetrievePrincipalAccess(Target=@t,Principal=@p) that expect EntityReference parameters need proper aliasing with @ syntax and typed values.
Workaround: For functions requiring typed parameters, use dataverse_query with a manually constructed function URL.
Fix: Aliased parameter support with proper OData type annotations implemented in v0.4.0.
ISSUE-08 — create_attribute missing common column types
| Priority | 🟡 Medium |
| Affected tools | dataverse_create_attribute |
| Status | ✅ Fixed in v0.4.0 |
Problem: The create_attribute tool currently supports: String, Integer, Decimal, Boolean, DateTime, Money, Memo, Picklist, BigInt. The following important column types are not yet supported:
| Missing type | Impact |
|---|---|
| Lookup | Cannot create relationship columns — most critical gap |
| MultiSelectPicklist | Cannot create multi-value choice columns |
| Image | Cannot create image columns |
| AutoNumber | Cannot create auto-incrementing columns |
Workaround: Create these column types via the Dataverse UI (make.powerapps.com) or a direct Web API call.
Fix: Lookup, MultiSelectPicklist, Image, and AutoNumber column types added in v0.4.0.
Constraints & Degraded Tools
These are not bugs — they are inherent limitations of the current implementation or the Dataverse Web API:
| Tool | Constraint | Reason |
|---|---|---|
dataverse_update_entity | Boolean flag updates may fail with 0x80060888 | Environment-level restriction on managed metadata |
dataverse_search | Returns a structured error with errorCategory: "ENV_LIMITATION" if Relevance Search is disabled or no entities are configured for search | Enable via Power Platform Admin Center → Environments → [env] → Settings → Product → Features → Dataverse Search = On (requires System Administrator). Once enabled, allow 15–30 min for initial indexing. |
dataverse_batch_execute | No $<Content-ID> cross-referencing | Would require changeset dependency parser — out of scope for now |
dataverse_execute_fetchxml | No automatic pagination | FetchXML paging cookies must be handled manually |
dataverse_retrieve_multiple_with_paging | Max 50,000 records | Safety cap to prevent runaway queries |
dataverse_query | Max 5,000 per call | Use retrieve_multiple_with_paging for larger datasets |