A Model Context Protocol (MCP) server for Microsoft SharePoint. Browse sites, manage documents, and search files through AI assistants.
This SharePoint MCP server demonstrates solid definition quality with 10 well-structured tools. All tools have explicit descriptions (194-388 chars, within baseline range), input schemas with typed parameters, and clear use cases. Tool names follow verb_noun convention (list_, get_, upload_, create_, delete_, search_, copy_, move_) which is excellent for LLM disambiguation. However, there are notable gaps: (1) Output schemas are not documented, responses are returned as JSON but callers cannot see what fields/structure to expect; (2) Parameter descriptions lack specificity on format constraints (e.g., 'siteId' describes format as 'contoso.sharepoint.com,guid1,guid2' in description text but not as a formal pattern constraint); (3) No enum constraints visible despite several parameters that could benefit (e.g., parentPath could use validation); (4) Error handling descriptions are minimal, no guidance on retryability or recovery; (5) No pagination/limit parameters on list tools despite potential for large result sets. The tools are well-described at a user level but lack the machine-readable structure needed for robust agent composition.
Copy a file or folder to a new location within the same drive. The copy operation is asynchronous server-side — the response may indicate 'copy in progress'. Requires item ID from sharepoint_list_files and a destination folder path.
Create a new folder in a document library drive at the specified parent path. Use '/' as parentPath to create a folder at the root of the drive.
Permanently delete a file or folder by item ID. This action cannot be undone. Requires a drive ID and item ID from sharepoint_list_files. Deleting a folder also deletes all its contents.
Download file content as text (UTF-8). Suitable for text-based files only (e.g., .txt, .csv, .json, .md). Requires a drive ID and item ID from sharepoint_list_files. For binary files (images, PDFs), this will return garbled content.
List document libraries (drives) for a SharePoint site. Requires a site ID from sharepoint_list_sites. Most sites have a default 'Documents' drive. Use the returned drive ID for file operations.
Output schemas are not documented. Tools return JSON responses (via toJson() and graphClient methods) but callers cannot see what fields/structure to expect. This forces LLMs to infer output structure or make assumptions about what data is available for downstream tool calls.
List tools (sharepoint_list_sites, sharepoint_list_drives, sharepoint_list_files, sharepoint_search_files) lack pagination parameters (limit, offset, cursor). No indication of result limits or how to handle large datasets. This risks context window overflow and violates the pattern of capping results at 20-50 items.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 57 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 49 | - | v1 |
List files and folders in a document library drive. Requires a drive ID from sharepoint_list_drives. Optionally specify a folder path to list contents of a specific folder. Returns file metadata including item IDs needed for download, delete, move, and copy operations.
List or search SharePoint sites accessible by the configured Azure AD application. This is typically the FIRST tool to call — use the returned site ID for subsequent operations. Without a search query, returns all accessible sites. Example: search for 'marketing' to find the marketing team site.
Move a file or folder to a new location within the same drive. Requires item ID from sharepoint_list_files and a destination folder path.
Search for files within a document library drive using a text query. Searches file names and content. Returns matching files with their item IDs. Requires a drive ID from sharepoint_list_drives.
Upload a file to a document library drive. Content must be base64-encoded. Automatically uses chunked resumable upload for files larger than ~4MB. If a file with the same name exists, it will be overwritten.
Error handling is not documented. No guidance on retryability, error categories, or recovery steps. For example, 'Invalid folder path' or 'File already exists' errors would not include actionable next steps for the LLM.
Destructive operations (sharepoint_delete_item) lack confirmation/dry-run support. The tool immediately deletes without any verification step, creating risk of accidental data loss when LLMs make mistakes.
Parameter descriptions use informal examples ('contoso.sharepoint.com,guid1,guid2') in text rather than formal JSON Schema constraints (pattern, format, enum). LLMs cannot reliably parse informal constraints and may generate invalid values.
Tool descriptions do not state whether operations are idempotent or have side effects. For example, sharepoint_copy_item says 'copy operation is asynchronous server-side' but does not clarify if repeated calls with same params produce duplicate copies or are idempotent.
Tools returning file/folder metadata do not document what fields are included (item ID, name, size, created date, modified date, etc.). This makes it hard for LLMs to plan which data they can extract from responses.