microsoft / microsoft/Dataverse-MCP
[BUG] update_table requires newDisplayName despite documenting it as optional, silently renaming tables
Nobody has claimed this yet.
- Dominant language
- No language data
- Stars
- 65
- Forks
- 13
- PR merge metrics
- No merged PRs in 30d
Description
Summary
The newDisplayName parameter on update_table is documented as optional — "New display name for the table. If not provided, the display name will not be changed." — but the server rejects any call that omits it. Because the value is applied when supplied, a caller who only wants to add a column is forced to also send a table display name, and any caller that does not already know the current value will silently rename the table. There is no read path through the MCP server to recover the current display name.
Environment
| Server | Dataverse remote MCP server (via local proxy) |
| Client | MCP client, tools invoked directly |
| Base language / locale | 1043 (nl-NL) — not believed relevant to this issue |
| Date | 2026-09-08 |
Steps to reproduce
- Call
update_tablewith only the required parameters per the tool schema (tablename,item), omittingnewDisplayName:
{
"tablename": "account",
"item": [
{ "name": "Claude", "type": "string", "maxLength": 100, "required": false }
]
}
- Observe the failure.
Expected result
Per the documented contract, the column is added and the table's display name is left unchanged.
Actual result
Required field 'newDisplayName' is missing for RequestName='McpUpdateTable'
Why this is more than a documentation defect
To add one column, the caller must supply a table display name that the server then writes. An LLM-driven client — the intended consumer of this server — will guess it. On a core table such as account, a wrong guess relabels the table across the entire application UI, and the caller receives a success response.
The current display name is also not retrievable through the server:
describe('tables/account')returns the collection name, columns and description, but not the display name.- The
entitymetadata table rejects queries:Service type is not defined for the Component: Entity. - It was recoverable only incidentally, via
search('account')at a raised result limit, which returnedtables/account- Organisatie. At the default limit the correct table did not appear in the results at all.
Suggested fix
Either:
- Honour the documented contract — make
newDisplayNamegenuinely optional, and leave the display name untouched when it is absent. (Preferred; this is what the tool description already promises.) - Or, if it must remain required, stop applying it when unchanged and expose the current display name through
describe('tables/{name}')so a caller can read it before writing. Update the tool description to state that the parameter is required and that it overwrites.
Option 1 is the safe fix: a tool whose only documented purpose in the call is "add a column" should not be able to rename the table as a side effect.
Related
Found alongside a separate, more severe defect in the same tool: update_table hardcodes LCID 1033, which blocks all metadata writes in non-English environments. Filed separately.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at the update_table tool entry point and its request handling, then compare the implementation with the documented optional newDisplayName behavior. Reproduce the omission case and verify that adding a column succeeds without changing the existing display name, including the nl-NL scenario described.
Written by the indexing model from the issue text.
Assessment
- Domain
- api, backend
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 64/100