Skip to content

Commit 69cceec

Browse files
author
Dev Agent Amelia
committed
docs: v0.4.5 — update CHANGELOG, README, capabilities, issues, getting-started
- CHANGELOG: add v0.4.3, v0.4.4, v0.4.5 entries (BUG-025/028/029/030/031/032/033/034/035) - package.json: bump version 0.4.2 → 0.4.5, tool count 63 → 67 - CAPABILITIES.md + docs/capabilities.md: version header 0.4.5 - README.md: 67 tools, v0.4 roadmap status → Released - docs/getting-started.md: 67 tools - docs/issues.md: ISSUE-01/04/05 marked Fixed in v0.4.0, date updated, search constraints row updated with activation guide (Dataverse Search now active) - dist/server.js: rebuilt
1 parent ded20a8 commit 69cceec

7 files changed

Lines changed: 50 additions & 19 deletions

File tree

CAPABILITIES.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# MCP Dataverse Server — Complete Capabilities Reference
22

3-
> **Version**: 0.4.2 | **API Version**: Dataverse Web API v9.2 | **Transport**: stdio · HTTP/SSE
3+
> **Version**: 0.4.5 | **API Version**: Dataverse Web API v9.2 | **Transport**: stdio · HTTP/SSE
44
55
67 tools across 25 categories for full Dataverse lifecycle: schema, CRUD, FetchXML, solutions, plugins, audit, files, users, teams, RBAC, attribute management, environment variables, workflows, and more.
66

CHANGELOG.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,37 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) — [Semantic V
55

66
---
77

8+
## [0.4.5] — 2026-03-06
9+
10+
### Fixed
11+
12+
- **BUG-033 — `dataverse_search`: `querytype` invalid as top-level parameter**: The `searchType: "full"` option was incorrectly sent as `body.querytype = "full"` (top-level). Per the Search API v2.0 spec, `querytype` belongs inside the serialized `options` string. `searchType: "full"` now maps to `body.options = '{"querytype":"lucene"}'`. `searchType: "simple"` (default) produces no `options` field.
13+
- **BUG-034 — `dataverse_search`: `select` invalid as top-level parameter**: The `select` parameter was sent as a top-level field in the request body, which is not recognized by the v2.0 API. Selected columns must be per entity (`selectColumns`). `select` is now embedded inside each object of the `entities` array as `selectColumns`.
14+
- **BUG-035 — `dataverse_search`: `entities` must be a JSON-serialized string**: The `entities` array was sent as a native JSON array. The Search API v2.0 requires `entities` to be a **JSON-serialized string** of entity objects (`"[{\"name\":\"account\",...}]"`), not a native array. Parameter is now serialized via `JSON.stringify(entityObjects)`.
15+
- **BONUS — `facets` and `orderby` serialized as JSON strings**: Per the v2.0 API spec (both parameters typed as `string`), `facets` and `orderby` are now passed as `JSON.stringify(...)` of their arrays, not as native arrays.
16+
17+
---
18+
19+
## [0.4.4] — 2026-03-06
20+
21+
### Fixed
22+
23+
- **BUG-029 — `isError` absent from `content[0].text` body**: All tool errors returned `result.isError = true` at the MCP envelope level, but the inner `content[0].text` JSON body did not include `isError`. AI agents that parse the text body would not detect the error and could try to use the result as valid data. `output.utils.ts` now consistently sets `isError: true` inside the serialized text body whenever `errorCategory` is present.
24+
- **BUG-032 — `dataverse_search`: `returntotalrecordcount` invalid in v2.0 payload**: The `returntotalrecordcount` parameter from the v1.0 API was still being sent in the v2.0 request body. The correct v2.0 parameter is `count` (boolean). Removed `returntotalrecordcount`; the v2.0 API already returns counts via `QueryContext.@Search.totalCount` in the response.
25+
26+
---
27+
28+
## [0.4.3] — 2026-03-06
29+
30+
### Fixed
31+
32+
- **BUG-025 — `dataverse_update_entity`: suggestions included non-modifiable attributes**: The suggestion list returned after a preflight failure or as guidance could include read-only system attributes. The suggestion generator now filters to modifiable attributes only.
33+
- **BUG-028 — `dataverse_delete_attribute`: raw exception on protected columns**: Deleting OOB (out-of-box) attributes or columns with active dependencies raised an unhandled exception. The tool now catches `0x80048405` (managed attribute) and `HAS_DEPENDENCIES` codes and returns a structured error with `errorCategory: "SCHEMA_MISMATCH"` and an actionable message.
34+
- **BUG-030 — `dataverse_update_entity`: missing preflight check**: Large metadata PATCH calls could fail mid-way if environment prerequisites were not met. A `hasSysAdmin` preflight check is now performed before executing any write.
35+
- **BUG-031 — `dataverse_search`: `searchMode` invalid as top-level parameter in v2.0**: The `searchMode` parameter (valid in v1.0) is not a recognized top-level parameter in the v2.0 API. Removed from the request body to eliminate `0x80048d19` deserialization errors.
36+
37+
---
38+
839
## [0.4.2] — 2026-03-07
940

1041
### Changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
**The most complete MCP server for Microsoft Dataverse.**
88

9-
63 tools · 4 resources · 10 guided workflows · Zero config auth
9+
67 tools · 4 resources · 10 guided workflows · Zero config auth
1010

1111
[![npm](https://img.shields.io/npm/v/mcp-dataverse)](https://www.npmjs.com/package/mcp-dataverse)
1212
[![npm downloads](https://img.shields.io/npm/dm/mcp-dataverse)](https://www.npmjs.com/package/mcp-dataverse)
@@ -125,8 +125,8 @@ MCP Dataverse is designed to be comprehensive, but most AI models work best with
125125

126126
| Version | Feature | Status |
127127
| ------- | ------- | ------ |
128-
| **v0.4** | HTTP transport + schema consistency + new auth methods | 🟢 In progress |
129-
| **v0.5** | MCP Prompts — workflow templates | 🔴 Planned |
128+
| **v0.4** | HTTP transport + attribute management + schema consistency | ✅ Released |
129+
| **v0.5** | Enterprise auth (Client Credentials, Managed Identity) + MCP Prompts | 🔴 Planned |
130130

131131
[→ Full Roadmap](https://codeurali.github.io/mcp-dataverse/roadmap)
132132

docs/capabilities.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ permalink: /capabilities
77

88
# Full Capabilities Reference
99

10-
> **Version**: 0.4.2 | **API Version**: Dataverse Web API v9.2 | **Transport**: stdio · HTTP/SSE
10+
> **Version**: 0.4.5 | **API Version**: Dataverse Web API v9.2 | **Transport**: stdio · HTTP/SSE
1111
1212
67 tools across 25 categories for full Dataverse lifecycle management.
1313

docs/getting-started.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ permalink: /getting-started
77

88
# Getting Started
99

10-
Quick start guide for MCP Dataverse — an MCP server exposing 63 AI-callable tools for Microsoft Dataverse.
10+
Quick start guide for MCP Dataverse — an MCP server exposing 67 AI-callable tools for Microsoft Dataverse.
1111

1212
## Prerequisites
1313

docs/issues.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ permalink: /issues
1111
Issues identified during the Web API compliance audit. Each issue references the affected tool and planned fix.
1212
{: .fs-5 .fw-300 }
1313

14-
Last updated: July 2025
14+
Last updated: March 2026
1515
{: .text-grey-dk-000 }
1616

1717
<details open markdown="block">
@@ -26,19 +26,19 @@ Last updated: July 2025
2626
## Active Issues
2727

2828
### ISSUE-01 — Missing `MSCRM.MergeLabels` header on metadata writes
29-
{: .text-red-300 }
29+
{: .text-grey-dk-000 }
3030

3131
| | |
3232
|:--|:--|
3333
| **Priority** | 🔴 High |
3434
| **Affected tools** | `dataverse_update_entity`, `dataverse_update_attribute` |
35-
| **Status** | 🔜 Fix planned (v0.4) |
35+
| **Status** | ✅ Fixed in v0.4.0 |
3636

3737
**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.
3838

3939
**Workaround:** After updating metadata, manually re-apply non-English labels via the Dataverse UI or a direct API call with the header set.
4040

41-
**Planned fix:** Add `MSCRM.MergeLabels: true` header to all metadata PATCH/PUT operations in the client layer.
41+
**Fix:** `MSCRM.MergeLabels: true` header added to all metadata PATCH/PUT operations in v0.4.0.
4242

4343
---
4444

@@ -75,38 +75,38 @@ Last updated: July 2025
7575
---
7676

7777
### ISSUE-04 — Batch requests use `\n` instead of `\r\n`
78-
{: .text-yellow-300 }
78+
{: .text-grey-dk-000 }
7979

8080
| | |
8181
|:--|:--|
8282
| **Priority** | 🟡 Medium-Low |
8383
| **Affected tools** | `dataverse_batch_execute` |
84-
| **Status** | 🔜 Fix planned (v0.4) |
84+
| **Status** | ✅ Fixed in v0.4.0 |
8585

8686
**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.
8787

8888
**Workaround:** None needed — Dataverse currently tolerates `\n`.
8989

90-
**Planned fix:** Replace `\n` with `\r\n` in batch body construction in `dataverse-client.batch.ts`.
90+
**Fix:** Batch request boundary now uses CRLF (`\r\n`) per RFC 2046 — resolved in v0.4.0.
9191

9292
---
9393

9494
### ISSUE-05 — `detect_duplicates` description is misleading
95-
{: .text-yellow-300 }
95+
{: .text-grey-dk-000 }
9696

9797
| | |
9898
|:--|:--|
9999
| **Priority** | 🟡 Medium |
100100
| **Affected tools** | `dataverse_detect_duplicates` |
101-
| **Status** | 🔜 Fix planned (v0.4) |
101+
| **Status** | ✅ Fixed in v0.4.0 |
102102

103103
**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.
104104

105105
**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.
106106

107107
**Workaround:** For authoritative duplicate detection, use the Dataverse UI or call `RetrieveDuplicates` directly via the Web API.
108108

109-
**Planned fix:** Update the tool description to accurately reflect the FetchXML-based approach. Optionally, add a separate tool that calls the real `RetrieveDuplicates` function.
109+
**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.
110110

111111
---
112112

@@ -177,7 +177,7 @@ These are not bugs — they are inherent limitations of the current implementati
177177
| Tool | Constraint | Reason |
178178
|:-----|:-----------|:-------|
179179
| `dataverse_update_entity` | Boolean flag updates may fail with `0x80060888` | Environment-level restriction on managed metadata |
180-
| `dataverse_search` | Returns a structured error with `errorCategory: "ENV_LIMITATION"` if Relevance Search is disabled or no entities are configured | Requires admin to enable org-wide Relevance Search and configure search entities |
180+
| `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. |
181181
| `dataverse_batch_execute` | No `$<Content-ID>` cross-referencing | Would require changeset dependency parser — out of scope for now |
182182
| `dataverse_execute_fetchxml` | No automatic pagination | FetchXML paging cookies must be handled manually |
183183
| `dataverse_retrieve_multiple_with_paging` | Max 50,000 records | Safety cap to prevent runaway queries |

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "mcp-dataverse",
3-
"version": "0.4.2",
4-
"description": "The most complete MCP server for Microsoft Dataverse. 63 production-ready tools for AI agents: OData & FetchXML queries, CRUD, metadata, solutions, audit, batch operations and more. Zero-config Microsoft device code auth. Works with VS Code Copilot, Claude, Cursor, Windsurf and all MCP clients.",
3+
"version": "0.4.5",
4+
"description": "The most complete MCP server for Microsoft Dataverse. 67 production-ready tools for AI agents: OData & FetchXML queries, CRUD, metadata, solutions, audit, batch operations and more. Zero-config Microsoft device code auth. Works with VS Code Copilot, Claude, Cursor, Windsurf and all MCP clients.",
55
"type": "module",
66
"main": "dist/server.js",
77
"bin": {

0 commit comments

Comments
 (0)