fix(microsoft-dataverse): align integration with live API docs, add table metadata tool#5481
Conversation
…able metadata tool - trim environment URL/entity/record IDs across all tools via shared getDataverseBaseUrl - encodeURIComponent OData $select/$filter/$orderby/$expand values in list_records/get_record - fix $top being silently ignored when Prefer: odata.maxpagesize is also sent - add microsoft_dataverse_get_entity_metadata tool for table/column lookup (covered by existing user_impersonation scope, no new scopes)
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Shared URL normalization: Introduces Query / paging fixes: New capability: Reviewed by Cursor Bugbot for commit efdd643. Configure here. |
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit efdd643. Configure here.
Greptile SummaryThis PR consolidates Microsoft Dataverse URL normalization into a shared
Confidence Score: 5/5Safe to merge — the changes are narrowly scoped bug fixes and a well-contained new tool with no new auth scopes. All three categories of change (URL normalization, OData encoding, $top/$maxpagesize conflict resolution) are straightforward and their correctness can be verified by reading each call site. The new get_entity_metadata tool correctly handles the OData single-quote escaping corner case, removes the silent-catch on the success-path JSON parse, and stays within the existing OAuth scope. No files require special attention. Important Files Changed
Reviews (2): Last reviewed commit: "fix(microsoft-dataverse): fix function a..." | Re-trigger Greptile |
… surface JSON parse errors
…guard, restore file output back-compat - execute_function: support @p1/@p2 parameter alias query-string bindings for values with reserved characters, per Dataverse Web API function docs - upload-file route: reject files over Dataverse's 128MB single-request upload ceiling with a clear error instead of an opaque API failure - download_file: add canonical `file` output (type: 'file') so downloaded bytes get persisted through Sim's execution file storage like every other file-download tool, while keeping the pre-existing fileContent/fileName/fileSize/mimeType fields for backwards compatibility with existing workflows
|
Ran a final comprehensive validation pass with 5 independent parallel agents covering: core CRUD tools, advanced/action tools (associate/disassociate/execute_action/execute_function/fetchxml/bulk/metadata), file-handling conventions vs sibling integrations, backwards-compatibility diffing against origin/staging, and a fresh-eyes full block/registry re-audit. Found and fixed 3 more real issues in
Also confirmed: zero new OAuth scopes anywhere in this branch, zero backwards-incompatible removals (diffed every hunk against origin/staging), added missing |
|
@greptile please review the latest commit |
|
@cursor please review the latest commit |
|
Based on my review of commit ✅ Strengths1. execute_function: Parameter Alias SupportThe fix correctly handles OData function parameter aliases (
Minor suggestion: Consider adding a validation or example to the description showing the exact format users should follow. 2. Upload Route: Size GuardThe 128MB limit check is well-implemented:
3. download_file: Backwards CompatibilityExcellent approach maintaining both old and new outputs:
4. Block UI: Missing FieldsGood catch adding the missing
|
|
Thanks for the review — addressed the actionable items in `ae0cb90d3b`:
Appreciate the thorough pass — let me know if any of the above reasoning doesn't hold up. |



Summary
getDataverseBaseUrlutil (protects against copy-paste whitespace 404s)encodeURIComponentOData$select/$filter/$orderby/$expandvalues inlist_records/get_recordso filter values with&,#, quotes, etc. don't break the query string$topbeing silently ignored by Dataverse whenPrefer: odata.maxpagesizeis also sent — only send the maxpagesize preference when the caller hasn't set an explicit$topmicrosoft_dataverse_get_entity_metadatatool to look up a table's entity set name, primary key/name columns, and column definitions — closes the gap where every write/query tool requires knowing the entity set name and column logical names up front. Fully covered by the existinguser_impersonationscope, no new scopes addedType of Change
Testing
Tested manually; ran
bun run lintandbun run type-checkclean for thesimpackage.Checklist