Observed since 20 Oct, 19:27 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
MCP server for Microsoft 365 / Office 365 SharePoint — full read-write access to sites, documents, pages, metadata, navigation, and permissions
MCP server for Microsoft 365 / SharePoint — 30+ tools for full read/write access
Available on GitHub · npm · Docker Hub · cristianb.cz
Full visual walkthrough: Setup Guide PDF — screenshots for every Azure setup step and all 3 installation methods.
365center-mcp is a Model Context Protocol (MCP) server that gives Claude — and any other MCP-compatible AI client — full read/write access to Microsoft 365 SharePoint sites.
It exposes 36 tools covering SharePoint sites, document libraries, documents, pages, metadata columns, navigation, and permissions. Claude can list sites, upload and download files, tag documents, create and publish pages, build navigation menus, manage permissions, and more — all through a single MCP connection.
Built for manufacturing companies managing factory documentation in SharePoint, but works with any Microsoft 365 tenant.
Typical use cases:
30+ tools across 7 categories. All tools use Microsoft Graph API or SharePoint REST API — no middlemen.
list_sites — List all SharePoint sites in the tenantget_site — Get site by URLget_site_by_id — Get site by IDcreate_site — Create a new Communication or Team sitelist_document_libraries — List document libraries. Returns driveId (for file operations) and listId (for metadata operations) — call this first when working with documents.list_documents — List documents with both driveItemId and listItemId. Optional fields: "minimal" returns only id/name/isFolder/size (~74% token savings for exploration).upload_document — Upload a file to SharePoint (auto session upload for files over 4 MB)upload_documents — Upload multiple files with optional metadata in one call (max 30 per call)download_document — Download files from SharePoint to a local pathsearch_documents — Search across documentsdelete_document — Delete a documentcreate_folder — Create foldersget_document_versions — Version history (audit trail)list_columns — List custom metadata columnscreate_choice_column — Create choice/dropdown columns (single or multi-select)create_text_column — Create text columnsdelete_column — Permanently delete a column from a list or document library (irreversible)get_document_metadata — Read document metadataset_document_metadata — Set metadata on documentslist_pages — List all pages. Optional includeItemId: true also returns numeric item IDs needed by canvas tools (requires delegated auth and siteUrl).create_page — Create empty pagecreate_page_with_content — Create page with sections and HTML contentadd_quick_links — Add Quick Links web partpublish_page — Publish a draft pagedelete_page — Delete a pageget_page_canvas_summary — Returns structured page overview (web part types, titles, filters, layout). ~400 B JSON vs ~15 KB raw HTML. Default tool for read-only canvas analysis.get_page_canvas_content — Read raw CanvasContent1 HTML. Use only when you need full HTML for structural edits via set_page_canvas_content.set_page_canvas_content — Write raw page content (structural edits: adding or removing web parts).patch_page_canvas_webpart — Surgically update web part properties (title, filter, layout, maxItems) without Claude handling the full canvas. Saves ~6 000 tokens per update vs get/set canvas pattern.copy_page — Copy a page as templateget_navigation — Read top navigation menuadd_navigation_link — Add link to navigationdelete_navigation_link — Remove link from navigationget_permissions — List SharePoint groups (Visitors, Members, Owners). Optional includeMembers: true returns members inside each group in a single call.get_group_members — List members of a groupadd_user_to_group — Add user to a groupremove_user_from_group — Remove user from a groupBefore installing 365center-mcp, you need the following.
You need a client that can connect to MCP servers. Any of these works:
Pick ONE installation method below, and install the matching runtime:
| If you want to use... | You need to install |
|---|---|
| Docker (Option 1, recommended) | Docker Desktop |
| npx (Option 2, easiest) | Node.js 18 or newer |
| Node.js from source (Option 3, for developers) | Node.js 18 or newer + Git |
You need a Microsoft 365 Business tenant — this is the account your company uses for Outlook, Teams, and SharePoint. 365center-mcp does not work with personal Microsoft accounts (outlook.com, hotmail.com) — only work/school accounts on a real M365 Business tenant.
Getting a tenant:
Your M365 tenant automatically includes Microsoft Entra ID (formerly Azure Active Directory). You do NOT need a separate Azure subscription — App Registrations are free and included with every M365 tenant.
You need all of these before continuing:
365center-mcp authenticates to Microsoft using an Azure App Registration in your tenant's Microsoft Entra ID. You create one app, grant it permissions, generate a client secret, and collect 4 values for the config. About 10 minutes the first time.
Full step-by-step instructions with screenshots are in the Setup Guide PDF — recommended for first-time users.
TL;DR for experienced Azure admins:
Sites.ReadWrite.All, Sites.FullControl.All, Sites.Manage.All, Files.ReadWrite.AllSites.ReadWrite.All, Sites.FullControl.All, offline_accessAllSites.FullControlYou will end up with 4 values you need for the config in the next step:
| Variable | Where to find it |
|---|---|
AZURE_TENANT_ID | App Registration → Overview → Directory (tenant) ID |
AZURE_CLIENT_ID | App Registration → Overview → Application (client) ID |
AZURE_CLIENT_SECRET | The Value from the client secret you created |
SHAREPOINT_DOMAIN | Your SharePoint domain without https://, e.g. contoso.sharepoint.com |
Need a Global Administrator (or Privileged Role Administrator) to grant admin consent. Ask your IT admin if you don't have this role.
Pick the option that matches your setup.
Requires: Docker Desktop running, Claude Desktop installed.
1. Quit Claude Desktop completely (quit from the menu bar, not just close the window). Editing the config while Claude Desktop is running means your changes won't be picked up until a full restart.
2. Pull the image:
docker pull crscristi28/365center-mcp:latest
Or use the Docker Desktop GUI: Docker Hub tab → search 365center-mcp → click the result by crscristi28 → Pull. No terminal needed. See the Setup Guide PDF for full steps.
3. Add to your Claude Desktop config.
Open claude_desktop_config.json:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.jsonAdd this (replace <your-server-name> with any name you like, e.g. sharepoint):
{
"mcpServers": {
"<your-server-name>": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "AZURE_TENANT_ID=your-tenant-id",
"-e", "AZURE_CLIENT_ID=your-client-id",
"-e", "AZURE_CLIENT_SECRET=your-client-secret",
"-e", "SHAREPOINT_DOMAIN=your-domain.sharepoint.com",
"-v", "/Users/YOUR_USERNAME/.365center-mcp:/home/mcp/.365center-mcp",
"crscristi28/365center-mcp:latest"
]
}
}
}
Replace the four your-* values with what you collected in Step 8 of the Azure setup. Replace YOUR_USERNAME with your actual macOS/Windows username.
On Windows, use C:\\Users\\YOUR_USERNAME\\.365center-mcp:/home/mcp/.365center-mcp as the volume mount.
4. Open Claude Desktop. The server will appear in the MCP menu with all 36 tools loaded.
Why the volume mount? The server caches delegated auth tokens in
~/.365center-mcp/token-cache.json. Without the volume, you would need to re-authenticate every time Docker restarts.
Requires: Node.js 18+, Claude Desktop installed.
This is the simplest method — you don't download anything yourself. Just edit your Claude Desktop config, and Claude Desktop will call npx automatically, which downloads 365center-mcp from npm the first time it runs. Add this to your config:
{
"mcpServers": {
"<your-server-name>": {
"command": "npx",
"args": ["-y", "365center-mcp"],
"env": {
"AZURE_TENANT_ID": "your-tenant-id",
"AZURE_CLIENT_ID": "your-client-id",
"AZURE_CLIENT_SECRET": "your-client-secret",
"SHAREPOINT_DOMAIN": "your-domain.sharepoint.com"
}
}
}
}
Restart Claude Desktop. The first start takes 15–30 seconds longer than usual — that is npx downloading 365center-mcp from npm. Subsequent starts are instant because the package is cached locally.
Note: The npx config has a different structure from the Docker config — env vars go in a separate
envobject, not as-eflags inargs. If you are switching from Docker to npx (or vice versa), replace the entire entry, don't just change thecommandfield.
Requires: Node.js 18+, Git, Claude Desktop installed. For developers who want to modify the code.
1. Clone and build:
git clone https://github.com/Crscristi28/365center-mcp.git
cd 365center-mcp/mcp-server
npm install
npm run build
This installs all runtime dependencies automatically:
@modelcontextprotocol/sdk — official MCP SDK@azure/identity — Azure authentication@microsoft/microsoft-graph-client — Microsoft Graph API clientdotenv — environment variable loading2. Create a .env file in mcp-server/ with your Azure credentials:
AZURE_TENANT_ID=your-tenant-id
AZURE_CLIENT_ID=your-client-id
AZURE_CLIENT_SECRET=your-client-secret
SHAREPOINT_DOMAIN=your-domain.sharepoint.com
3. Test it runs:
node dist/index.js
The server starts and waits for MCP messages on stdin. Press Ctrl+C to stop.
4. Add to Claude Desktop config:
{
"mcpServers": {
"<your-server-name>": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": {
"AZURE_TENANT_ID": "your-tenant-id",
"AZURE_CLIENT_ID": "your-client-id",
"AZURE_CLIENT_SECRET": "your-client-secret",
"SHAREPOINT_DOMAIN": "your-domain.sharepoint.com"
}
}
}
}
Replace /absolute/path/to/mcp-server/dist/index.js with the full path on your machine. Restart Claude Desktop.
Claude Code is Anthropic's CLI client. Instead of editing a JSON config, MCP servers are added with claude mcp add.
Easiest way — let Claude Code do it. Once Claude Code is installed, paste this into your Claude Code session (fill in your Azure values from Azure Setup Step 8):
Please install the 365center-mcp MCP server for me.
You can find it on npm as "365center-mcp" or at
github.com/Crscristi28/365center-mcp. Use the npx method.
My Azure credentials:
AZURE_TENANT_ID=...
AZURE_CLIENT_ID=...
AZURE_CLIENT_SECRET=...
SHAREPOINT_DOMAIN=...
Claude Code will run the right claude mcp add command for you. For the manual command and Docker / source variants, see the Setup Guide PDF.
Most tools work immediately with app-only authentication. But some features (navigation, permissions, Highlighted Content web part) require delegated authentication — meaning you need to sign in as a real user.
The first time you call one of these tools, Claude will show you a message like:
LOGIN REQUIRED: To sign in, use a web browser to open the page
https://microsoft.com/devicelogin and enter the code ABC123XYZ to authenticate.
What to do:
The login is cached in ~/.365center-mcp/token-cache.json with a refresh token, so you only have to do this once. The server automatically refreshes tokens in the background.
| Variable | Required | Description |
|---|---|---|
AZURE_TENANT_ID | Yes | Azure AD tenant ID (from App Registration Overview) |
AZURE_CLIENT_ID | Yes | Application (client) ID (from App Registration Overview) |
AZURE_CLIENT_SECRET | Yes | Client secret Value (from Certificates & secrets) |
SHAREPOINT_DOMAIN | Yes | Your SharePoint domain, e.g. contoso.sharepoint.com (no https://) |
Once connected, you can ask Claude things like:
Claude will call the appropriate tools automatically. You don't need to know the tool names.
Note on file uploads:
upload_documentreads files from the local filesystem where the MCP server runs. It works in Claude Desktop and Claude Code (server runs on your machine), but not in the claude.ai web app (no local file access).
Claude Desktop / Claude Code / any MCP client
│
│ stdio (stdin/stdout)
│
365center-mcp (MCP Server)
│
├── Microsoft Graph API (v1.0)
│ Sites, Documents, Pages, Metadata
│ Auth: App-only (Client Credentials)
│
└── SharePoint REST API
Navigation, Permissions, CanvasContent1
Auth: Delegated (Device Code Flow)
365center-mcp is built for enterprise environments where security matters.
~/.365center-mcp/token-cache.json with filesystem permissions.mcp) inside the container.365center-mcpWhen using create_page_with_content, these section layouts are available:
| Layout | Columns | Widths |
|---|---|---|
oneColumn | 1 | 12 |
twoColumns | 2 | 6 + 6 |
threeColumns | 3 | 4 + 4 + 4 |
oneThirdLeftColumn | 2 | 4 + 8 |
oneThirdRightColumn | 2 | 8 + 4 |
fullWidth | 1 | 12 |
The Graph API create_page_with_content tool supports these standard web parts:
| Web Part | Type ID |
|---|---|
| Bing Maps | e377ea37-9047-43b9-8cdb-a761be2f8e09 |
| Button | 0f087d7f-520e-42b7-89c0-496aaf979d58 |
| Call To Action | df8e44e7-edd5-46d5-90da-aca1539313b8 |
| Divider | 2161a1c6-db61-4731-b97c-3cdb303f7cbb |
| Document Embed | b7dd04e1-19ce-4b24-9132-b60a1c2b910d |
| Image | d1d91016-032f-456d-98a4-721247c305e8 |
| Image Gallery | af8be689-990e-492a-81f7-ba3e4cd3ed9c |
| Link Preview | 6410b3b6-d440-4663-8744-378976dc041e |
| Org Chart | e84a8ca2-f63c-4fb9-bc0b-d8eef5ccb22b |
| People | 7f718435-ee4d-431c-bdbf-9c4ff326f46e |
| Quick Links | c70391ea-0b10-4ee9-b2b4-006d3fcad0cd |
| Spacer | 8654b779-4886-46d4-8ffb-b5ed960ee986 |
| Title Area | cbe7b0a9-3504-44dd-a3a3-0e5cacd07788 |
| YouTube Embed | 544dd15b-cf3c-441b-96da-004d5a8cea1d |
For Highlighted Content and any other web part not in this list, use get_page_canvas_summary to inspect, patch_page_canvas_webpart to update properties, and get/set_page_canvas_content for structural edits.
You missed an API permission or admin consent was not granted. Go back to Azure Setup Step 5 and make sure Grant admin consent shows a green checkmark next to every permission.
Your AZURE_CLIENT_SECRET is wrong or expired. Go back to Azure Setup Step 7 and create a new secret. Make sure you copied the Value column, not the Secret ID.
You forgot to set SHAREPOINT_DOMAIN. It should be your SharePoint domain only, without https:// and without any path — e.g. contoso.sharepoint.com.
This is expected on first use of delegated auth. See First-time login (device code flow).
You declined the sign-in prompt in the browser, or signed in with the wrong account. Try again with an account that has access to the target SharePoint site.
Your refresh token expired or was revoked. Delete ~/.365center-mcp/token-cache.json and trigger the device code flow again by calling any tool that needs delegated auth.
You are probably looking at a Personal Microsoft account, not a work/school account. Device code flow requires a work/school account (M365 tenant).
You forgot the -v volume mount. Without it, the container has no place to persist the token cache. See Installation → Option 1.
%APPDATA%\Claude\logs (Windows)Issues and pull requests welcome at https://github.com/Crscristi28/365center-mcp.
When filing a bug, please include:
Note on pull requests: Because 365center-mcp is released under the Business Source License 1.1, all contributions must be reviewed before merging. By opening a pull request, you agree that your contribution may be distributed under the BSL 1.1 license and the future MIT conversion (on 2030-04-08). For larger changes, please open an issue to discuss the approach first.
Business Source License 1.1 — Free for internal use, testing, development, and non-commercial purposes. Commercial use that competes with 365center-mcp requires written permission. Automatically converts to MIT on 2030-04-08.
Cristian Bucioacă — cristianb.cz — info@cristianb.cz
Building Microsoft 365 automation and SharePoint solutions for manufacturing.
Download counts and popularity will appear here as the collector receives them.
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 19:27 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:f85ed40b7a2c1e9fc5c9fba7defe272828e35afa05e261a44bad20a0652aa885