MCP server for editing Excel files stored in Microsoft SharePoint via Microsoft Graph API
Strong foundation with consistent naming (verb_noun pattern), clear descriptions (avg 80-120 chars), and complete input schemas across all 16 tools. All parameters are typed and described. However, output schemas are inferred from return types rather than explicitly documented in descriptions, and error handling lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite ReadOnly flags in code. Missing pagination for list_worksheets despite potentially large result sets.
Adds one row after the worksheet's used range.
Closes the Excel workbook session for the specified file if one exists.
Creates an empty .xlsx file in the root of the site's default drive.
Creates a persistent Excel workbook session for the specified file.
Creates a worksheet in an Excel workbook.
Downloads a file from the root of the site's default drive as base64.
Output schemas not documented in tool descriptions. Return types are inferred from C# method signatures (DriveSummary, WorksheetSummary, RangeSummary, etc.) but LLMs cannot see these types. Descriptions should explicitly state what fields are returned.
No error handling guidance in descriptions. Tools lack recovery hints (e.g., 'If file not found, use create_empty_excel_file first'). Errors will not guide LLM to next steps.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
Gets a single cell value from a worksheet.
Gets a drive item from the root of the site's default drive by path.
Gets all values from a worksheet range.
Gets the default document drive for a SharePoint site.
Gets the used range metadata for a worksheet.
Lists worksheets in an Excel workbook.
Renames a worksheet in an Excel workbook.
Sets a single cell value in a worksheet.
Sets values in a worksheet range, using start cell plus a two-dimensional JSON array.
Uploads a base64-encoded file to the root of the site's default drive.
list_worksheets lacks pagination. No limit, offset, or page parameters. If a workbook has many sheets, result could be large and waste context. Should cap at 50 and offer pagination.
Tool annotations missing. Code uses ReadOnly flags (e.g., [McpServerTool(Name = "...", ReadOnly = true)]) but these are not exposed as MCP tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLM cannot see which tools are safe to retry.
Parameter 'value' in set_cell_value accepts JsonElement with no format constraints. Description says 'JSON value' but does not specify allowed types (string, number, boolean, null, array, object). LLM may pass invalid structures.