xtium-sharepoint-mcp
xtium-sharepoint-mcp
A local, read-only SharePoint connector for MCP desktop clients. It runs on the user's device, signs in as that user with the customer's own Entra public-client app, and calls Microsoft Graph directly. No XTIUM service sees tokens or file content.
This is the pilot for AIDATA-3958. The design is in ADR 0001.
Tools
Tool | Needs | What it returns |
| nothing | Sign-in state, granted scopes, available tools and a Graph identity check |
| nothing | Opens the browser for Microsoft sign-in |
| nothing | Deletes the local session and invalidates all handles |
|
| Metadata and opaque handles, with no excerpts or download links |
|
| Site details and document libraries, with root folder handles |
|
| Folder contents, with a paging cursor |
|
| Text from PDF, DOCX or plain-text files, within size caps |
Related MCP server: M365 MCP
Setup
1. Register the app (tenant admin, once)
Create an Entra app registration in the customer tenant with these settings:
Supported account types: this organisational directory only.
Platform: Mobile and desktop applications, with redirect URI
http://localhost.Allow public client flows: Yes. Do not create a secret or certificate.
API permissions: Microsoft Graph delegated
User.Read,Sites.Read.All,Files.Read.All,offline_access,openidandprofile. Grant admin consent if users cannot consent themselves.
Record the tenant ID and application (client) ID. Neither is a secret, but keep them out of tickets anyway; the customer owns them.
For a QA tenant, scripts/provision_test_app.py --tenant <id> --create --grant-consent does the
same steps and writes the IDs to local/test_app.json (gitignored).
2. Install
uv sync3. Add it to Claude Desktop
Preferred: Claude Desktop extension (MCPB). Users enter the tenant and client IDs in Claude’s UI; no JSON editing.
Get
dist/xtium-sharepoint-0.1.0.mcpbfrom this repo (or build it with.\scripts\pack_mcpb.ps1).Install
uvand make sure it is on the userPATH(Claude runsuv runfrom the bundle). Then fully quit and reopen Claude.In normal Claude Desktop (signed in with Claude.ai, not the Claude 3P / Agent Manager profile), open Settings → Extensions → Advanced settings → Install Extension… and pick the
.mcpb. You can also double-click it or drag it into Claude.Enter the Entra tenant ID and application (client) ID, then finish.
If Install is greyed out, your organization restricts extensions. An owner must add the file under Organization settings → Connectors → Desktop → Add custom extension, or turn the extension allowlist off. Searching the Directory will not find it: the plugin is not published, and this is a local MCPB, not a remote connector.
The .mcpb is unsigned, so Claude shows an “unsigned” warning. Directory listing (a plugin submission, not the remote MCP connector form) is described in docs/directory-submission.md. Full install notes are in docs/mcpb-install.md.
Developer fallback — edit Claude’s mcpServers JSON. For the MSIX build the file is %LOCALAPPDATA%\Claude-Data\claude_pzs8sxrjxfjjc\claude_desktop_config.json (the Roaming\Claude folder is not used). The Claude 3P profile has its own file under %LOCALAPPDATA%\Claude-3p\; do not use it for this connector.
{
"mcpServers": {
"xtium-sharepoint": {
"command": "C:\\path\\to\\xtium-sharepoint-mcp\\.venv\\Scripts\\xtium-sharepoint-mcp.exe",
"args": ["serve"],
"env": {
"XTIUM_SP_TENANT_ID": "<tenant id>",
"XTIUM_SP_CLIENT_ID": "<client id>"
}
}
}
}Claude Code and Cursor take the same command, args and env. Each host is verified separately; see the test packet.
4. Sign in
Ask the assistant to run sharepoint_sign_in, or run this first (developer install):
.venv\Scripts\xtium-sharepoint-mcp.exe sign-inThe search, site, folder and read tools appear only when the session holds the Graph scopes. If you signed in during a chat and the new tools do not show up, quit Claude completely (including the tray icon) and open a new chat.
Troubleshooting
sharepoint_*tools missing: runget_connection_statusin the same chat. Ifsigned_inis true andavailable_toolslists them, start a new chat after a full quit. If Claude only offerssharepoint_search,sharepoint_folder_searchorread_resource, those belong to Claude’s own Microsoft 365 connector, not this one.Wrong account or documents: Claude’s own Microsoft 365 connector uses your Claude sign-in. Only the XTIUM SharePoint (local) tools use the account you signed in with here, and
get_connection_statusdoes not return your user name.“Unable to connect to extension server”: if a previous sign-in is cached, startup refreshes the token before answering Claude, and Claude gives up after 120 seconds. Quit Claude, delete
token_cache.binin the data directory, reopen, and runsharepoint_sign_inagain.uvnot found: put%USERPROFILE%\.local\binon the userPATH, then fully quit and reopen Claude.
Optional settings
Variable | Default | Purpose |
|
| Use a smaller set, for example |
|
| Token cache, keys and audit log. For the Microsoft Store (MSIX) Claude, Windows redirects this to |
|
| Local audit retention, from 1 to 365 days |
Support
Disconnect: run
sharepoint_sign_outorxtium-sharepoint-mcp sign-out. To wipe everything, delete the data directory (seeXTIUM_SP_DATA_DIRabove; for the Microsoft Store Claude it is under%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Local\).Revoke a user: in Entra, revoke the user's sessions or remove the app's consent. The connector asks them to sign in again at the next token refresh (within about an hour).
Correlate an error: each error and each audit line carries the Graph
request-idand aclient-request-id. The audit log is at%LOCALAPPDATA%\xtium-sharepoint-mcp\audit\audit-YYYY-MM-DD.jsonland contains hashed identifiers only.
Privacy Policy
This connector is designed so XTIUM does not host SharePoint content or Microsoft tokens.
Topic | Practice |
Data collection | On the user’s device only: MSAL token cache (OS-encrypted), opaque file handles, and a local audit log of hashed identifiers and Graph correlation IDs. No document text is written to disk by the connector. |
Usage and storage | Graph calls run from the user’s machine to Microsoft. Extracted file text is returned once in the MCP response and is not retained by the connector. Default data directory: |
Third-party sharing | Microsoft Graph / Entra receive authentication and API traffic as with any Graph client. Anthropic/Claude receives only what the local MCP host sends in the conversation (tool results). XTIUM cloud services are not in the token or download path for this local connector. |
Data retention | Audit lines default to 30 days ( |
Contact | XTIUM SharePoint MCP maintainers — |
Customer Entra admins remain responsible for app consent, Conditional Access, and user revocation in their tenant.
Development
uv run pytest
uv run ruff check src tests
uv run python scripts/smoke_stdio.py # stdio round trip as a host would run it
uv run python scripts/smoke_stdio.py sharepoint_search '{"query":"budget"}'
.\scripts\pack_mcpb.ps1 # Claude Desktop / plugin MCPBThis server cannot be deployed
Maintenance
Related MCP Connectors
Permissioned access to Outlook, OneDrive and Teams via the user's own Microsoft account
Read, search, and publish files in your organization's Spaces using Microsoft work sign-in.
Egnyte's remote MCP server for secure AI access, search, upload and file management in your account.
Use a person's computer after they approve it there: files, Terminal, browser, local MCP.
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables searching and retrieving files from SharePoint and OneDrive within Microsoft 365, with local caching for efficiency.211-
- AlicenseAqualityBmaintenanceMCP server for Microsoft 365 via the Microsoft Graph API, providing read-only access to profile, calendar, email, Teams chats, OneDrive files, and meeting transcripts from any MCP client.1614 npm3MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with SharePoint Online and OneDrive content via Microsoft Graph, supporting device-code authentication for multi-account environments.1MIT
- AlicenseNot gradedqualityDmaintenanceRemote MCP server for Microsoft Graph with delegated OAuth support, enabling interaction with Microsoft 365 services like mail, calendar, OneDrive, SharePoint, Teams, and more via natural language.MIT