{"_id":"365center-mcp","_rev":"8-0eb29f75a8d0478c49790bc7ed77aeda","name":"365center-mcp","dist-tags":{"latest":"1.4.0"},"versions":{"1.0.0":{"name":"365center-mcp","version":"1.0.0","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"url":"https://cristianb.cz","name":"Cristian Bucioacă","email":"info@cristianb.cz"},"license":"BUSL-1.1","_id":"365center-mcp@1.0.0","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"homepage":"https://github.com/Crscristi28/365center-mcp#readme","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"bin":{"365center-mcp":"dist/index.js"},"dist":{"shasum":"5e97586bb0903ba114ce4f896a25f63210945788","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.0.0.tgz","fileCount":21,"integrity":"sha512-LVnXVkPLx4+AO4ULPpXChcLFM7bP5+a9JLtmIGEKdW33ylYhgb7lOol/kvhh8T94O2h/Ze4ZOsOGQE8VOBoMRA==","signatures":[{"sig":"MEUCIEZ1PCzOE/20vb0ktrLpqCwgnwT837CZHLKj2VJbtmbgAiEA5M2RpfCf+OS8AxoTkZM9FEW/oo+3QFqIhvLjqfx8ppA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":66182},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"ebc3b7237a891f3abe85307bcac525fb336dc543","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"repository":{"url":"git+https://github.com/Crscristi28/365center-mcp.git","type":"git"},"_npmVersion":"11.6.2","description":"MCP server for Microsoft 365 / Office 365 SharePoint — 32 tools for full read-write access to sites, documents, pages, metadata, navigation, and permissions","directories":{},"_nodeVersion":"24.13.0","dependencies":{"dotenv":"^16.5.0","@azure/identity":"^4.9.1","@modelcontextprotocol/sdk":"^1.12.1","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.2"},"_npmOperationalInternal":{"tmp":"tmp/365center-mcp_1.0.0_1775771638271_0.7235203286730816","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"365center-mcp","version":"1.1.0","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"url":"https://cristianb.cz","name":"Cristian Bucioacă","email":"info@cristianb.cz"},"license":"BUSL-1.1","_id":"365center-mcp@1.1.0","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"homepage":"https://github.com/Crscristi28/365center-mcp#readme","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"bin":{"365center-mcp":"dist/index.js"},"dist":{"shasum":"f3060ef71db10718a4b5fec97f4b60917da2ae65","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.1.0.tgz","fileCount":21,"integrity":"sha512-+q3ZHNJRWe7Nm2gF0KZp+HczaGy+WMqG9gMCBuYpVuVgctAhqd3HgvZ8V47TdQM51Fl9BdaRpWxpRm/cPzcBdg==","signatures":[{"sig":"MEUCIAPWH7vM+JymwzxKEa05QXdKRDWRdkfpuFhgbILeHBMkAiEAncRNm5rDNiNSBXCJmI6wSbWesxZQzr1/8uBMaG0S0nQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82578},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"ce4202354d57b392ece34d86dbb7a2d6a138364a","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"repository":{"url":"git+https://github.com/Crscristi28/365center-mcp.git","type":"git"},"_npmVersion":"10.8.2","description":"MCP server for Microsoft 365 / Office 365 SharePoint — 32 tools for full read-write access to sites, documents, pages, metadata, navigation, and permissions","directories":{},"_nodeVersion":"20.20.2","dependencies":{"dotenv":"^16.5.0","@azure/identity":"^4.9.1","@modelcontextprotocol/sdk":"^1.12.1","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.2"},"_npmOperationalInternal":{"tmp":"tmp/365center-mcp_1.1.0_1775944515233_0.5174311394156732","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"365center-mcp","version":"1.1.1","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"url":"https://cristianb.cz","name":"Cristian Bucioacă","email":"info@cristianb.cz"},"license":"BUSL-1.1","_id":"365center-mcp@1.1.1","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"homepage":"https://github.com/Crscristi28/365center-mcp#readme","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"bin":{"365center-mcp":"dist/index.js"},"dist":{"shasum":"1b4d3ce8fbebf6b8619e9b3c5d91506f4bca6ba6","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.1.1.tgz","fileCount":21,"integrity":"sha512-qmRc3GenS+c4NwX31JCWK45S7TPRMUy7VPSC8jvD9g4EG/paq5x589r2CBQPV2rNBSujEA6l0N3ULFwRAfCiZA==","signatures":[{"sig":"MEQCIBhCvAQv1jhIsia0Hd46iNWUZvBAlKbDQB3zRWRL3Wl7AiAEe3IoeLBjO2KZMEp/WfnfAlpeAxC8md/WO4Tkj0j5tQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":82578},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"c2660b1aa3c76edbfa960253efe84aef3a04d681","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"repository":{"url":"git+https://github.com/Crscristi28/365center-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for Microsoft 365 / Office 365 SharePoint — 32 tools for full read-write access to sites, documents, pages, metadata, navigation, and permissions","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^16.5.0","@azure/identity":"^4.9.1","@modelcontextprotocol/sdk":"^1.12.1","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.2"},"_npmOperationalInternal":{"tmp":"tmp/365center-mcp_1.1.1_1775946751139_0.6324477835470912","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"365center-mcp","version":"1.2.0","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"url":"https://cristianb.cz","name":"Cristian Bucioacă","email":"info@cristianb.cz"},"license":"BUSL-1.1","_id":"365center-mcp@1.2.0","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"homepage":"https://github.com/Crscristi28/365center-mcp#readme","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"bin":{"365center-mcp":"dist/index.js"},"dist":{"shasum":"cee9a5808d4d937ac512104265f3125ad6430c0a","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.2.0.tgz","fileCount":23,"integrity":"sha512-515gZeRIy4rXc2xTs3HtH38KyaPjOJvgH0OKaroBSi0+C7u/WLHcLklQby+/SE3/HFyYb+AXTYaAkSJfehJrPQ==","signatures":[{"sig":"MEQCIFJaTyHo84iAFLXOyrDfhNJ/pdZLdTNeEtXZuR+6yTjCAiB+BRMVtN1Ox8b1Z1cQeCP2OqcRUmwCumP5ctaB4tLoQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":90424},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"668c611cb3de910a671522c5c42032bea109d4d8","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"repository":{"url":"git+https://github.com/Crscristi28/365center-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for Microsoft 365 / Office 365 SharePoint — 32 tools for full read-write access to sites, documents, pages, metadata, navigation, and permissions","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^16.5.0","@azure/identity":"^4.9.1","@modelcontextprotocol/sdk":"^1.12.1","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.2"},"_npmOperationalInternal":{"tmp":"tmp/365center-mcp_1.2.0_1776008458988_0.5405035646122898","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"365center-mcp","version":"1.2.1","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"url":"https://cristianb.cz","name":"Cristian Bucioacă","email":"info@cristianb.cz"},"license":"BUSL-1.1","_id":"365center-mcp@1.2.1","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"homepage":"https://github.com/Crscristi28/365center-mcp#readme","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"bin":{"365center-mcp":"dist/index.js"},"dist":{"shasum":"33fc4b6d1f9c011cb0d19fb80c748af9fffea3df","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.2.1.tgz","fileCount":23,"integrity":"sha512-F1vJQRI1x8+eqn5ihg/ED0RaartjhNmPB8U97oUF0xlZOWhEHlzmBCIfo2dKqRAErO7iYFs6Y+il06ZFPtRJbA==","signatures":[{"sig":"MEYCIQCgkZNB1TFEvJvGR2yrs6RmspeZq5TqT1E/XsfPUFuKKgIhAKELXybRN7+D5RlcsqO37vlTrihKLUY6A0CzhcPTIVFr","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91117},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"ca7a6c3d9b174e0d7b94951bcdada7f8b0000ad9","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"repository":{"url":"git+https://github.com/Crscristi28/365center-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for Microsoft 365 / Office 365 SharePoint — 32 tools for full read-write access to sites, documents, pages, metadata, navigation, and permissions","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^16.5.0","@azure/identity":"^4.9.1","@modelcontextprotocol/sdk":"^1.12.1","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.2"},"_npmOperationalInternal":{"tmp":"tmp/365center-mcp_1.2.1_1776024338261_0.4367688747701919","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"365center-mcp","version":"1.2.2","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"url":"https://cristianb.cz","name":"Cristian Bucioacă","email":"info@cristianb.cz"},"license":"BUSL-1.1","_id":"365center-mcp@1.2.2","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"homepage":"https://github.com/Crscristi28/365center-mcp#readme","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"bin":{"365center-mcp":"dist/index.js"},"dist":{"shasum":"923257f0e54f84f6aebfc3405cae053a5ee0038d","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.2.2.tgz","fileCount":23,"integrity":"sha512-6PYCYgegX+JGQZQ8M3ZOuUBetgaSTFpmVjrnI7o6J6CkxgGf+Wgo4KTnUzFXUuvqZvk8EC7ZcKMMdPg89wWIQg==","signatures":[{"sig":"MEUCIQC+v8kZV/OnxOj1x7apq6UY6/As8FZB+k0b2lr2sg7DYQIgPHvpQjjaePo/38zH0GYxgkbRmTRrypsR2JVZpr5avxs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92377},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"8328422a4f6718e65bf2c056491e74cf193f44c9","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"repository":{"url":"git+https://github.com/Crscristi28/365center-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for Microsoft 365 / Office 365 SharePoint — full read-write access to sites, documents, pages, metadata, navigation, and permissions","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^16.5.0","@azure/identity":"^4.9.1","@modelcontextprotocol/sdk":"^1.12.1","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.2"},"_npmOperationalInternal":{"tmp":"tmp/365center-mcp_1.2.2_1776114715267_0.3039829775050642","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"365center-mcp","version":"1.3.0","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"url":"https://cristianb.cz","name":"Cristian Bucioacă","email":"info@cristianb.cz"},"license":"BUSL-1.1","_id":"365center-mcp@1.3.0","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"homepage":"https://github.com/Crscristi28/365center-mcp#readme","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"bin":{"365center-mcp":"dist/index.js"},"dist":{"shasum":"ec86f107e91573f36bcc0418ca4dad7ef85c3424","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.3.0.tgz","fileCount":23,"integrity":"sha512-t0YNM8twJXliqioYxqAyMjLeAd3eFgJInAGKG3SZhIHm7XxNMYjiMFl5WvTkUcIzIEwCKPhFivHwGbDUjMg/7w==","signatures":[{"sig":"MEYCIQDEOzhr4vhEdz6cpuiLMi7CZyc8LEyLG9vHfoMgqtLKwwIhAMeG0lTlCB1rkfZUIMIlX1giF1eGBndVyKbGSKsYKCyZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114098},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"5b17045165fa0db493b514f7e47c29a8efe3018e","scripts":{"dev":"tsc && node dist/index.js","build":"tsc","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"repository":{"url":"git+https://github.com/Crscristi28/365center-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for Microsoft 365 / Office 365 SharePoint — full read-write access to sites, documents, pages, metadata, navigation, and permissions","directories":{},"_nodeVersion":"24.14.1","dependencies":{"dotenv":"^16.5.0","@azure/identity":"^4.9.1","@modelcontextprotocol/sdk":"^1.12.1","@microsoft/microsoft-graph-client":"^3.0.7"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.8.3","@types/node":"^22.15.2"},"_npmOperationalInternal":{"tmp":"tmp/365center-mcp_1.3.0_1776199469506_0.3653929734118868","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"365center-mcp","version":"1.4.0","description":"MCP server for Microsoft 365 / Office 365 SharePoint — full read-write access to sites, documents, pages, metadata, navigation, and permissions","type":"module","main":"dist/index.js","bin":{"365center-mcp":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsc && node dist/index.js","prepublishOnly":"npm run build"},"keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"author":{"name":"Cristian Bucioacă","email":"info@cristianb.cz","url":"https://cristianb.cz"},"license":"BUSL-1.1","repository":{"type":"git","url":"git+https://github.com/Crscristi28/365center-mcp.git"},"homepage":"https://github.com/Crscristi28/365center-mcp#readme","dependencies":{"@azure/identity":"^4.9.1","@microsoft/microsoft-graph-client":"^3.0.7","@modelcontextprotocol/sdk":"^1.12.1","@napi-rs/keyring":"^1.2.0","dotenv":"^16.5.0"},"devDependencies":{"@types/node":"^22.15.2","typescript":"^5.8.3"},"gitHead":"9faa1153f68ab86911623c67628450d37593f882","types":"./dist/index.d.ts","_id":"365center-mcp@1.4.0","bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-nDllARnW7mPpe2Ca1hqeYOKqmTaJu137+RHVoeY/Oo7heHfIkXdNxDt9M0ULos9NDLW9uvyrgElImhylaa1Qxg==","shasum":"714ca4ae64fbf9d3ccbf6ec83aa91a46b0227bc9","tarball":"https://registry.npmjs.org/365center-mcp/-/365center-mcp-1.4.0.tgz","fileCount":23,"unpackedSize":118994,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDvIUCBB1B3k1dVlL9K34hOJ8L4x1eqg+y5y4Hl6eqFuAiA41NlLqDZhSX3QljcZ31yatWZp/Aoy6C9xFIYDVLfMJw=="}]},"_npmUser":{"name":"crscristi28","email":"cbucioaca@icloud.com"},"directories":{},"maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/365center-mcp_1.4.0_1776598364915_0.39388818856229935"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-09T21:53:58.189Z","modified":"2026-04-19T11:32:45.184Z","1.0.0":"2026-04-09T21:53:58.414Z","1.1.0":"2026-04-11T21:55:15.376Z","1.1.1":"2026-04-11T22:32:31.298Z","1.2.0":"2026-04-12T15:40:59.155Z","1.2.1":"2026-04-12T20:05:38.390Z","1.2.2":"2026-04-13T21:11:55.402Z","1.3.0":"2026-04-14T20:44:29.649Z","1.4.0":"2026-04-19T11:32:45.067Z"},"bugs":{"url":"https://github.com/Crscristi28/365center-mcp/issues"},"author":{"name":"Cristian Bucioacă","email":"info@cristianb.cz","url":"https://cristianb.cz"},"license":"BUSL-1.1","homepage":"https://github.com/Crscristi28/365center-mcp#readme","keywords":["mcp","sharepoint","microsoft-365","office-365","graph-api","claude","ai","document-management","enterprise","sharepoint-rest-api","mcp-server"],"repository":{"type":"git","url":"git+https://github.com/Crscristi28/365center-mcp.git"},"description":"MCP server for Microsoft 365 / Office 365 SharePoint — full read-write access to sites, documents, pages, metadata, navigation, and permissions","maintainers":[{"name":"crscristi28","email":"cbucioaca@icloud.com"}],"readme":"# 365center-mcp\n\n**MCP server for Microsoft 365 / SharePoint — 30+ tools for full read/write access**\n\nAvailable on [GitHub](https://github.com/Crscristi28/365center-mcp) · [npm](https://www.npmjs.com/package/365center-mcp) · [Docker Hub](https://hub.docker.com/r/crscristi28/365center-mcp) · [cristianb.cz](https://cristianb.cz)\n\n[![npm version](https://img.shields.io/npm/v/365center-mcp.svg)](https://www.npmjs.com/package/365center-mcp)\n[![Docker Pulls](https://img.shields.io/docker/pulls/crscristi28/365center-mcp.svg)](https://hub.docker.com/r/crscristi28/365center-mcp)\n[![License](https://img.shields.io/badge/license-BUSL--1.1-blue.svg)](https://github.com/Crscristi28/365center-mcp/blob/main/LICENSE)\n[![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen.svg)](https://nodejs.org)\n\nFull visual walkthrough: **[Setup Guide PDF](https://github.com/Crscristi28/365center-mcp/blob/main/SETUP-GUIDE.pdf)** — screenshots for every Azure setup step and all 3 installation methods.\n\n---\n\n## Table of Contents\n\n- [What is this?](#what-is-this)\n- [Features](#features)\n- [Prerequisites](#prerequisites)\n- [Azure Setup (step-by-step)](#azure-setup-step-by-step)\n- [Installation](#installation)\n  - [Option 1: Docker (recommended)](#option-1-docker-recommended)\n  - [Option 2: npx (easiest)](#option-2-npx-easiest)\n  - [Option 3: Node.js from source](#option-3-nodejs-from-source)\n  - [Using Claude Code instead of Claude Desktop](#using-claude-code-instead-of-claude-desktop)\n- [First-time login (device code flow)](#first-time-login-device-code-flow)\n- [Configuration](#configuration)\n- [Usage examples](#usage-examples)\n- [Architecture](#architecture)\n- [Security](#security)\n- [Supported Page Layouts](#supported-page-layouts)\n- [Supported Web Parts](#supported-web-parts)\n- [Troubleshooting](#troubleshooting)\n- [Contributing](#contributing)\n- [License](#license)\n- [Author](#author)\n\n---\n\n## What is this?\n\n`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.\n\nIt 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.\n\nBuilt for manufacturing companies managing factory documentation in SharePoint, but works with any Microsoft 365 tenant.\n\n**Typical use cases:**\n- Automate SharePoint document workflows with Claude\n- Build and maintain intranet sites conversationally\n- Manage metadata, tagging, and permissions at scale\n- Replace manual document copying across folders with metadata-driven pages\n\n---\n\n## Features\n\n**30+ tools** across 7 categories. All tools use Microsoft Graph API or SharePoint REST API — no middlemen.\n\n### Sites (4 tools)\n- `list_sites` — List all SharePoint sites in the tenant\n- `get_site` — Get site by URL\n- `get_site_by_id` — Get site by ID\n- `create_site` — Create a new Communication or Team site\n\n### Documents (9 tools)\n- `list_document_libraries` — List document libraries. Returns `driveId` (for file operations) and `listId` (for metadata operations) — call this first when working with documents.\n- `list_documents` — List documents with both driveItemId and listItemId. Optional `fields: \"minimal\"` returns only id/name/isFolder/size (~74% token savings for exploration).\n- `upload_document` — Upload a file to SharePoint (auto session upload for files over 4 MB)\n- `upload_documents` — Upload multiple files with optional metadata in one call (max 30 per call)\n- `download_document` — Download files from SharePoint to a local path\n- `search_documents` — Search across documents\n- `delete_document` — Delete a document\n- `create_folder` — Create folders\n- `get_document_versions` — Version history (audit trail)\n\n### Metadata (6 tools)\n- `list_columns` — List custom metadata columns\n- `create_choice_column` — Create choice/dropdown columns (single or multi-select)\n- `create_text_column` — Create text columns\n- `delete_column` — Permanently delete a column from a list or document library (irreversible)\n- `get_document_metadata` — Read document metadata\n- `set_document_metadata` — Set metadata on documents\n\n### Pages — Graph API (6 tools)\n- `list_pages` — List all pages. Optional `includeItemId: true` also returns numeric item IDs needed by canvas tools (requires delegated auth and siteUrl).\n- `create_page` — Create empty page\n- `create_page_with_content` — Create page with sections and HTML content\n- `add_quick_links` — Add Quick Links web part\n- `publish_page` — Publish a draft page\n- `delete_page` — Delete a page\n\n### Pages — SharePoint REST API (5 tools)\n- `get_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.\n- `get_page_canvas_content` — Read raw CanvasContent1 HTML. Use only when you need full HTML for structural edits via set_page_canvas_content.\n- `set_page_canvas_content` — Write raw page content (structural edits: adding or removing web parts).\n- `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.\n- `copy_page` — Copy a page as template\n\n### Navigation (3 tools)\n- `get_navigation` — Read top navigation menu\n- `add_navigation_link` — Add link to navigation\n- `delete_navigation_link` — Remove link from navigation\n\n### Permissions (4 tools)\n- `get_permissions` — List SharePoint groups (Visitors, Members, Owners). Optional `includeMembers: true` returns members inside each group in a single call.\n- `get_group_members` — List members of a group\n- `add_user_to_group` — Add user to a group\n- `remove_user_from_group` — Remove user from a group\n\n---\n\n## Prerequisites\n\nBefore installing `365center-mcp`, you need the following.\n\n### 1. An MCP client\n\nYou need a client that can connect to MCP servers. Any of these works:\n\n- **Claude Desktop** (Mac / Windows) — download from https://claude.ai/download\n- **Claude Code** (CLI) — install from https://docs.claude.com/claude-code\n- Any other MCP-compatible client\n\n### 2. One of these runtimes (choose based on your install method)\n\nPick ONE installation method below, and install the matching runtime:\n\n| If you want to use... | You need to install |\n|---|---|\n| **Docker** (Option 1, recommended) | [Docker Desktop](https://www.docker.com/products/docker-desktop) |\n| **npx** (Option 2, easiest) | [Node.js 18 or newer](https://nodejs.org) |\n| **Node.js from source** (Option 3, for developers) | [Node.js 18 or newer](https://nodejs.org) + [Git](https://git-scm.com/downloads) |\n\n### 3. A Microsoft 365 tenant with admin access\n\nYou 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.\n\n**Getting a tenant:**\n- **Most likely case:** Your company already has one. Ask your IT admin.\n- **If you don't have one:** Sign up for any Microsoft 365 Business plan that includes SharePoint (Business Basic, Business Standard, or Business Premium) at https://www.microsoft.com/microsoft-365/business/compare-all-plans. Microsoft offers a 1-month free trial on these plans, but a credit card is required and the trial automatically converts to a paid subscription if not cancelled.\n- **Microsoft 365 Developer Program** (free tenant, 25 licenses) is an option only if you have an active Visual Studio Professional or Enterprise subscription — as of 2025, it is no longer open to personal accounts.\n\nYour 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.\n\n**You need all of these before continuing:**\n\n- Microsoft 365 tenant with SharePoint Online included in the plan\n- **Global Administrator** or **Privileged Role Administrator** role on the tenant (required to grant admin consent in Azure)\n- At least one SharePoint site you want to manage\n- Access to https://portal.azure.com using the same M365 credentials\n\n---\n\n## Azure Setup\n\n`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.\n\n**Full step-by-step instructions with screenshots are in the [Setup Guide PDF](SETUP-GUIDE.pdf)** — recommended for first-time users.\n\n**TL;DR for experienced Azure admins:**\n\n1. [portal.azure.com](https://portal.azure.com) → **Microsoft Entra ID** → **App registrations** → **New registration** → single tenant, no redirect URI\n2. **API permissions** — add and grant admin consent for:\n   - **Microsoft Graph (Application):** `Sites.ReadWrite.All`, `Sites.FullControl.All`, `Sites.Manage.All`, `Files.ReadWrite.All`\n   - **Microsoft Graph (Delegated):** `Sites.ReadWrite.All`, `Sites.FullControl.All`, `offline_access`\n   - **SharePoint (Delegated):** `AllSites.FullControl`\n3. **Authentication** → **Allow public client flows: Yes** (required for device code flow)\n4. **Certificates & secrets** → **New client secret** → copy the **Value** column immediately\n\nYou will end up with 4 values you need for the config in the next step:\n\n| Variable | Where to find it |\n|---|---|\n| `AZURE_TENANT_ID` | App Registration → Overview → Directory (tenant) ID |\n| `AZURE_CLIENT_ID` | App Registration → Overview → Application (client) ID |\n| `AZURE_CLIENT_SECRET` | The **Value** from the client secret you created |\n| `SHAREPOINT_DOMAIN` | Your SharePoint domain without `https://`, e.g. `contoso.sharepoint.com` |\n\n> **Need a Global Administrator** (or Privileged Role Administrator) to grant admin consent. Ask your IT admin if you don't have this role.\n\n---\n\n## Installation\n\nPick the option that matches your setup.\n\n### Option 1: Docker (recommended)\n\n**Requires:** Docker Desktop running, Claude Desktop installed.\n\n**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.\n\n**2. Pull the image:**\n\n```bash\ndocker pull crscristi28/365center-mcp:latest\n```\n\nOr 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](SETUP-GUIDE.pdf) for full steps.\n\n**3. Add to your Claude Desktop config.**\n\nOpen `claude_desktop_config.json`:\n- **Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\nAdd this (replace `<your-server-name>` with any name you like, e.g. `sharepoint`):\n\n```json\n{\n  \"mcpServers\": {\n    \"<your-server-name>\": {\n      \"command\": \"docker\",\n      \"args\": [\n        \"run\", \"-i\", \"--rm\",\n        \"-e\", \"AZURE_TENANT_ID=your-tenant-id\",\n        \"-e\", \"AZURE_CLIENT_ID=your-client-id\",\n        \"-e\", \"AZURE_CLIENT_SECRET=your-client-secret\",\n        \"-e\", \"SHAREPOINT_DOMAIN=your-domain.sharepoint.com\",\n        \"-v\", \"/Users/YOUR_USERNAME/.365center-mcp:/home/mcp/.365center-mcp\",\n        \"crscristi28/365center-mcp:latest\"\n      ]\n    }\n  }\n}\n```\n\nReplace the four `your-*` values with what you collected in Step 8 of the Azure setup. Replace `YOUR_USERNAME` with your actual macOS/Windows username.\n\nOn Windows, use `C:\\\\Users\\\\YOUR_USERNAME\\\\.365center-mcp:/home/mcp/.365center-mcp` as the volume mount.\n\n**4. Open Claude Desktop.** The server will appear in the MCP menu with all 36 tools loaded.\n\n> **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.\n\n### Option 2: npx (easiest)\n\n**Requires:** Node.js 18+, Claude Desktop installed.\n\nThis 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:\n\n```json\n{\n  \"mcpServers\": {\n    \"<your-server-name>\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"365center-mcp\"],\n      \"env\": {\n        \"AZURE_TENANT_ID\": \"your-tenant-id\",\n        \"AZURE_CLIENT_ID\": \"your-client-id\",\n        \"AZURE_CLIENT_SECRET\": \"your-client-secret\",\n        \"SHAREPOINT_DOMAIN\": \"your-domain.sharepoint.com\"\n      }\n    }\n  }\n}\n```\n\nRestart 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.\n\n> **Note:** The npx config has a different structure from the Docker config — env vars go in a separate `env` object, not as `-e` flags in `args`. If you are switching from Docker to npx (or vice versa), replace the entire entry, don't just change the `command` field.\n\n### Option 3: Node.js from source\n\n**Requires:** Node.js 18+, Git, Claude Desktop installed. For developers who want to modify the code.\n\n**1. Clone and build:**\n\n```bash\ngit clone https://github.com/Crscristi28/365center-mcp.git\ncd 365center-mcp/mcp-server\nnpm install\nnpm run build\n```\n\nThis installs all runtime dependencies automatically:\n- `@modelcontextprotocol/sdk` — official MCP SDK\n- `@azure/identity` — Azure authentication\n- `@microsoft/microsoft-graph-client` — Microsoft Graph API client\n- `dotenv` — environment variable loading\n\n**2. Create a `.env` file** in `mcp-server/` with your Azure credentials:\n\n```\nAZURE_TENANT_ID=your-tenant-id\nAZURE_CLIENT_ID=your-client-id\nAZURE_CLIENT_SECRET=your-client-secret\nSHAREPOINT_DOMAIN=your-domain.sharepoint.com\n```\n\n**3. Test it runs:**\n\n```bash\nnode dist/index.js\n```\n\nThe server starts and waits for MCP messages on stdin. Press Ctrl+C to stop.\n\n**4. Add to Claude Desktop config:**\n\n```json\n{\n  \"mcpServers\": {\n    \"<your-server-name>\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/mcp-server/dist/index.js\"],\n      \"env\": {\n        \"AZURE_TENANT_ID\": \"your-tenant-id\",\n        \"AZURE_CLIENT_ID\": \"your-client-id\",\n        \"AZURE_CLIENT_SECRET\": \"your-client-secret\",\n        \"SHAREPOINT_DOMAIN\": \"your-domain.sharepoint.com\"\n      }\n    }\n  }\n}\n```\n\nReplace `/absolute/path/to/mcp-server/dist/index.js` with the full path on your machine. Restart Claude Desktop.\n\n### Using Claude Code instead of Claude Desktop\n\nClaude Code is Anthropic's CLI client. Instead of editing a JSON config, MCP servers are added with `claude mcp add`.\n\n**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):\n\n```\nPlease install the 365center-mcp MCP server for me.\nYou can find it on npm as \"365center-mcp\" or at\ngithub.com/Crscristi28/365center-mcp. Use the npx method.\n\nMy Azure credentials:\nAZURE_TENANT_ID=...\nAZURE_CLIENT_ID=...\nAZURE_CLIENT_SECRET=...\nSHAREPOINT_DOMAIN=...\n```\n\nClaude Code will run the right `claude mcp add` command for you. For the manual command and Docker / source variants, see the [Setup Guide PDF](SETUP-GUIDE.pdf).\n\n---\n\n## First-time login (device code flow)\n\nMost 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.\n\nThe first time you call one of these tools, Claude will show you a message like:\n\n```\nLOGIN REQUIRED: To sign in, use a web browser to open the page\nhttps://microsoft.com/devicelogin and enter the code ABC123XYZ to authenticate.\n```\n\n**What to do:**\n\n1. Open https://microsoft.com/devicelogin in any browser\n2. Enter the code shown in the message\n3. Sign in with your Microsoft 365 account\n4. Close the browser tab\n5. Ask Claude to try the same action again — it will succeed\n\nThe 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.\n\n---\n\n## Configuration\n\n| Variable | Required | Description |\n|---|---|---|\n| `AZURE_TENANT_ID` | Yes | Azure AD tenant ID (from App Registration Overview) |\n| `AZURE_CLIENT_ID` | Yes | Application (client) ID (from App Registration Overview) |\n| `AZURE_CLIENT_SECRET` | Yes | Client secret **Value** (from Certificates & secrets) |\n| `SHAREPOINT_DOMAIN` | Yes | Your SharePoint domain, e.g. `contoso.sharepoint.com` (no `https://`) |\n\n---\n\n## Usage examples\n\nOnce connected, you can ask Claude things like:\n\n- *\"List all SharePoint sites in my tenant\"*\n- *\"Upload this file to the Documents library on the DocCenter site, and tag it with Oblast=Production and WS=WS1\"*\n- *\"Create a new page called 'Production Line 1' with three sections and add Quick Links to the related work stations\"*\n- *\"Who has access to the Finance site? Add alice@contoso.com as a Member\"*\n- *\"Search all documents containing 'safety procedure' and list their version history\"*\n- *\"Add a Highlighted Content web part to the Home page showing documents tagged with WS1\"*\n\nClaude will call the appropriate tools automatically. You don't need to know the tool names.\n\n> **Note on file uploads:** `upload_document` reads 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).\n\n---\n\n## Architecture\n\n```\nClaude Desktop / Claude Code / any MCP client\n        │\n        │  stdio (stdin/stdout)\n        │\n  365center-mcp (MCP Server)\n        │\n        ├── Microsoft Graph API (v1.0)\n        │     Sites, Documents, Pages, Metadata\n        │     Auth: App-only (Client Credentials)\n        │\n        └── SharePoint REST API\n              Navigation, Permissions, CanvasContent1\n              Auth: Delegated (Device Code Flow)\n```\n\n- **Graph API** uses app-only auth — no user interaction, works in headless environments\n- **REST API** uses delegated auth — one-time device code login, then automatic token refresh\n- Both auth flows share the same Azure App Registration\n\n---\n\n## Security\n\n`365center-mcp` is built for enterprise environments where security matters.\n\n- **No data leaves your tenant** — all API calls go directly from the server to Microsoft. No third-party servers, no telemetry, no analytics.\n- **Azure AD authentication** — uses your own App Registration with OAuth 2.0. Credentials never stored in the codebase.\n- **Principle of least privilege** — app-only auth for most operations, delegated auth only where required.\n- **Device Code Flow** — delegated auth uses Microsoft's standard device code flow (same as Azure CLI and GitHub CLI). No localhost servers, no open ports, no redirect URIs.\n- **Local token storage** — refresh tokens stored in `~/.365center-mcp/token-cache.json` with filesystem permissions.\n- **Docker isolation** — runs as non-root user (`mcp`) inside the container.\n- **No secrets in the Docker image** — credentials passed as environment variables at runtime.\n- **stdio transport only** — no HTTP server, no open ports, no network attack surface.\n- **Auditable source** — BUSL-1.1 license, source fully available for review.\n\n### Recommended production deployment\n\n1. Create a dedicated App Registration for `365center-mcp`\n2. Grant only the permissions your workflows actually need\n3. Use Docker with a mounted volume for token persistence\n4. Store credentials in a secret manager (Azure Key Vault, HashiCorp Vault, 1Password, etc.)\n5. Restrict the App Registration to specific SharePoint sites when possible (via Sites.Selected)\n\n---\n\n## Supported Page Layouts\n\nWhen using `create_page_with_content`, these section layouts are available:\n\n| Layout | Columns | Widths |\n|---|---|---|\n| `oneColumn` | 1 | 12 |\n| `twoColumns` | 2 | 6 + 6 |\n| `threeColumns` | 3 | 4 + 4 + 4 |\n| `oneThirdLeftColumn` | 2 | 4 + 8 |\n| `oneThirdRightColumn` | 2 | 8 + 4 |\n| `fullWidth` | 1 | 12 |\n\n---\n\n## Supported Web Parts\n\nThe Graph API `create_page_with_content` tool supports these standard web parts:\n\n| Web Part | Type ID |\n|---|---|\n| Bing Maps | `e377ea37-9047-43b9-8cdb-a761be2f8e09` |\n| Button | `0f087d7f-520e-42b7-89c0-496aaf979d58` |\n| Call To Action | `df8e44e7-edd5-46d5-90da-aca1539313b8` |\n| Divider | `2161a1c6-db61-4731-b97c-3cdb303f7cbb` |\n| Document Embed | `b7dd04e1-19ce-4b24-9132-b60a1c2b910d` |\n| Image | `d1d91016-032f-456d-98a4-721247c305e8` |\n| Image Gallery | `af8be689-990e-492a-81f7-ba3e4cd3ed9c` |\n| Link Preview | `6410b3b6-d440-4663-8744-378976dc041e` |\n| Org Chart | `e84a8ca2-f63c-4fb9-bc0b-d8eef5ccb22b` |\n| People | `7f718435-ee4d-431c-bdbf-9c4ff326f46e` |\n| Quick Links | `c70391ea-0b10-4ee9-b2b4-006d3fcad0cd` |\n| Spacer | `8654b779-4886-46d4-8ffb-b5ed960ee986` |\n| Title Area | `cbe7b0a9-3504-44dd-a3a3-0e5cacd07788` |\n| YouTube Embed | `544dd15b-cf3c-441b-96da-004d5a8cea1d` |\n\nFor **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.\n\n---\n\n## Troubleshooting\n\n### \"Insufficient privileges to complete the operation\"\nYou 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.\n\n### \"AADSTS7000215: Invalid client secret provided\"\nYour `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**.\n\n### \"SHAREPOINT_DOMAIN environment variable is required\"\nYou forgot to set `SHAREPOINT_DOMAIN`. It should be your SharePoint domain only, without `https://` and without any path — e.g. `contoso.sharepoint.com`.\n\n### \"LOGIN REQUIRED: To sign in, use a web browser...\"\nThis is expected on first use of delegated auth. See [First-time login (device code flow)](#first-time-login-device-code-flow).\n\n### \"Device code auth failed: authorization_declined\"\nYou 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.\n\n### \"Token refresh failed\"\nYour 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.\n\n### \"Allow public client flows\" is not available\nYou are probably looking at a Personal Microsoft account, not a work/school account. Device code flow requires a work/school account (M365 tenant).\n\n### Docker: tokens lost on every restart\nYou forgot the `-v` volume mount. Without it, the container has no place to persist the token cache. See **Installation → Option 1**.\n\n### Claude Desktop doesn't see the server\n- Check your JSON syntax — a missing comma or bracket silently breaks the config\n- Restart Claude Desktop fully (quit from the menu, not just close the window)\n- Check Claude Desktop logs: **Help → View logs** (Mac) or `%APPDATA%\\Claude\\logs` (Windows)\n\n---\n\n## Contributing\n\nIssues and pull requests welcome at https://github.com/Crscristi28/365center-mcp.\n\nWhen filing a bug, please include:\n- Installation method (Docker / npx / source)\n- Node.js version (if applicable)\n- The exact error message\n- Whether it happens on the first call or after working for a while\n\n**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.\n\n---\n\n## License\n\n[Business Source License 1.1](LICENSE) — 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**.\n\n---\n\n## Links\n\n- **GitHub:** https://github.com/Crscristi28/365center-mcp\n- **npm:** https://www.npmjs.com/package/365center-mcp\n- **Docker Hub:** https://hub.docker.com/r/crscristi28/365center-mcp\n- **Website:** https://cristianb.cz\n\n---\n\n## Author\n\n**Cristian Bucioacă** — [cristianb.cz](https://cristianb.cz) — [info@cristianb.cz](mailto:info@cristianb.cz)\n\nBuilding Microsoft 365 automation and SharePoint solutions for manufacturing.\n","readmeFilename":"README.md"}