SharePoint MCP服务器

一个生产级的Model Context Protocol (MCP)服务器,用于连接AI代理与Microsoft SharePoint,实现文件读取、文件夹管理以及组织知识推理。

  • by ravikant1918
  • Python
  • 本地部署
  • 12 星标
  • 更新于
在 GitHub 查看 ravikant1918/sharepoint-mcp

使用说明

🗂️ sharepoint mcp

MCP服务器为您的AI代理提供了Microsoft SharePoint的大脑

A生产级 模型上下文协议(MCP)服务器 为了 微软SharePoint.
连接 克劳德桌面版, VS代码副本, 光标, 继续,或任何与MCP兼容的AI代理
访问您的SharePoint——读取文件、管理文件夹,并对组织的知识进行推理。

📚 文档 · 🗺️ 路线图 · 🐛 漏洞 · 💡 特性


📑 目录


🧠 为什么选择sharepoint mcp?

大多数AI代理只知道他们的训练数据中有什么。
sharepoint mcp 给你的代理人 实时访问 根据您组织的实际情况。

没有sharepoint mcp 有sharepoint mcp
🤷 特工猜测或产生幻觉 特工读取实际文件
📋 您手动复制粘贴内容 代理自动获取文件
🔒 知识锁定在SharePoint中 知识流入您的AI工作流程
🐌 静态、一次性回答 代理原因、重写并保存

🚀 你的代理人能做什么

📖 理解任何文档

You: "Summarise the Q3 report in the Finance folder"
Agent: → Get_Document_Content("Finance", "Q3_Report.pdf")
       → Reads full extracted text
       → Returns a sharp, accurate summary

✏️ Read → 理由→ Write

You: "Translate the proposal to French and save it"
Agent: → Get_Document_Content → translate → Upload_Document

🗂️ 浏览您的库

You: "What files are in the Legal/Contracts folder?"
Agent: → List_SharePoint_Documents("Legal/Contracts")

📊 支持的文件格式

📄 格式 🤖 代理人得到什么
PDF 每页的全文
字 .docx .doc 完整的文档内容
Excel .xlsx .xls 所有工作表均为结构化文本
文本、JSON、Markdown、HTML、YAML、Python 原始内容原样
图像、ZIP、二进制文件 文件类型+Base64

✨ 特性

功能 描述
🔀 双重API支持 选择Office365 REST或Microsoft Graph API
📁 文件夹管理 列出、创建、删除、获取完整的递归树
📄 文档管理 上传、下载、更新、删除、搜索、阅读内容
🏷️ 元数据管理 读取并更新SharePoint列表项字段
🔍 智能解析 自动检测PDF/Word/Excel/文本
🔎 KQL搜索 语义文件查找的本地SharePoint KQL搜索
📂 灵活的库范围 作用域到子文件夹或访问整个库根目录
🔁 自动重试 SharePoint 429/503节流的指数回退
🚀 双重运输 stdio 用于桌面· http 适用于Docker/remote
🪵 结构化日志记录 JSON在生产中·彩色控制台在开发中
🐳 Docker就绪 单一命令: docker compose up -d
🛡️ 非根容器 在Docker中以无特权用户身份运行
🩺 健康检查 现场直播 /health 具有真实SharePoint检查的端点
🤖 CI/CD 在Python 3.10·3.11·3.12·3.13上测试

⚡ 快速入门

1.️⃣ 安装

pip install sharepoint-mcp

或来源:

git clone https://github.com/ravikant1918/sharepoint-mcp.git
cd sharepoint-mcp && pip install -e .

2.️⃣ 配置

cp .env.example .env
# Open .env and fill in your Azure AD credentials
SHP_ID_APP=your-azure-app-client-id
SHP_ID_APP_SECRET=your-azure-app-secret
SHP_TENANT_ID=your-tenant-id
SHP_SITE_URL=https://your-tenant.sharepoint.com/sites/your-site
SHP_API_TYPE=office365   # or "graph" / "graphql" for Microsoft Graph API

🔑 Azure AD新手? 跟随 分步指南→
🔀 选择您的API:SharePoint MCP同时支持这两种功能 Office365 REST API (默认)和 Microsoft Graph API。参见 API配置指南→

可选:范围到子文件夹

默认情况下,服务器访问您的 整个文档库根。要将操作限制到特定子文件夹,请执行以下操作:

# Only operate within this subfolder (omit for full library access)
SHP_DOC_LIBRARY=mcp_server

# Library name (only needed if your org renamed "Shared Documents")
# Graph API auto-detects the default drive — this is only for Office365 REST API
# SHP_LIBRARY_NAME=Shared Documents

3.️⃣ 跑

# 🔍 Interactive testing with MCP Inspector
npx @modelcontextprotocol/inspector -- sharepoint-mcp

# ▶️ Run directly
sharepoint-mcp

🐳 码头工人

部署远程或云使用的最快方法。

📋 使用场景

场景A:从DockerHub中提取最新版本(推荐)

将此用于最新稳定版本的生产部署:

# Step 1: Clone repository
git clone https://github.com/ravikant1918/sharepoint-mcp.git
cd sharepoint-mcp

# Step 2: Create .env file with your SharePoint credentials
cp .env.example .env
# Edit .env and fill in:
# SHP_ID_APP=your-app-id
# SHP_ID_APP_SECRET=your-secret
# SHP_TENANT_ID=your-tenant-id
# SHP_SITE_URL=https://yourcompany.sharepoint.com/sites/yoursite

# Step 3: Start container (pulls from DockerHub automatically)
docker compose up -d

# Step 4: Verify it's running
docker compose ps
curl http://localhost:8000/health

# View logs
docker compose logs -f

# Stop container
docker compose down

发生了什么: 拉 ravikant1918/sharepoint-mcp:latest 来自DockerHub的自动架构检测(Intel/ARM)。


场景B:使用特定版本

锁定到特定版本以进行稳定性或测试:

# Step 1: Set version via environment variable
SHAREPOINT_MCP_VERSION=v1.0.1 docker compose up -d

# Or add to .env file
echo "SHAREPOINT_MCP_VERSION=v1.0.1" >> .env
docker compose up -d

发生了什么: 拉 ravikant1918/sharepoint-mcp:v1.0.1 而不是 latest.


场景C:从源代码本地构建

将其用于开发或进行本地代码更改时:

# Step 1: Clone and setup
git clone https://github.com/ravikant1918/sharepoint-mcp.git
cd sharepoint-mcp
cp .env.example .env
# Edit .env with your credentials

# Step 2: Build from local Dockerfile and start
docker compose up -d --build

# Step 3: Rebuild after code changes
docker compose down
docker compose up -d --build

发生了什么: 从本地构建图像 Dockerfile,标签为 ravikant1918/sharepoint-mcp:latest,并启动容器。


场景D:使用自定义图像/分叉

如果你已经分叉了仓库并发布到你自己的DockerHub:

# Use your custom image
SHAREPOINT_MCP_IMAGE=myusername/sharepoint-mcp \
SHAREPOINT_MCP_VERSION=dev \
docker compose up -d

# Or add to .env
echo "SHAREPOINT_MCP_IMAGE=myusername/sharepoint-mcp" >> .env
echo "SHAREPOINT_MCP_VERSION=dev" >> .env
docker compose up -d

发生了什么: 从您的自定义注册表/存储库中提取。


🔧 常用命令

# Start in detached mode
docker compose up -d

# Start with live logs
docker compose up

# View logs
docker compose logs -f

# Stop container
docker compose down

# Restart container
docker compose restart

# Pull latest image
docker compose pull

# Rebuild and restart
docker compose up -d --build

# Remove everything (including volumes)
docker compose down -v

使用Podman? 只需更换 docker 随着 podman --完全兼容。

Docker环境变量

变量 默认值 描述
TRANSPORT http stdio 或 http
HTTP_HOST 0.0.0.0 绑定地址
HTTP_PORT 8000 港口
LOG_FORMAT json json 或 console

🔌 运输方式

模式 最适合 设置
stdio Claude桌面、光标、MCP检查器 TRANSPORT=stdio (默认)
http Docker、远程代理、VS代码副本、REST客户端 TRANSPORT=http

🔗 集成

🤖 克劳德桌面版

添加 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "sharepoint": {
      "command": "sharepoint-mcp",
      "env": {
        "SHP_ID_APP": "your-app-id",
        "SHP_ID_APP_SECRET": "your-app-secret",
        "SHP_SITE_URL": "https://your-tenant.sharepoint.com/sites/your-site",
        "SHP_TENANT_ID": "your-tenant-id",
        "SHP_DOC_LIBRARY": "my-subfolder"
      }
    }
  }
}

💡 省略 SHP_DOC_LIBRARY 访问完整的库根目录。如果您的组织使用Office365 REST API并重命名了默认库,请同时设置 SHP_LIBRARY_NAME.

💻 VS代码副本(代理模式)

  1. 通过Docker启动服务器或 TRANSPORT=http sharepoint-mcp
  2. 创建 .vscode/mcp.json 在您的工作空间中:
{
  "servers": {
    "sharepoint": {
      "url": "http://localhost:8000/mcp/",
      "type": "http"
    }
  }
}
  1. 打开Copilot聊天→ 切换到 代理模式 → 您的14个SharePoint工具可用。

⚠️ 尾随斜线很重要 --URL必须以结尾 /mcp/ (不是 /mcp).

⌨️ 光标/继续

添加到MCP配置中(使用stdio传输):

{
  "mcpServers": {
    "sharepoint": {
      "command": "sharepoint-mcp",
      "env": {
        "SHP_ID_APP": "your-app-id",
        "SHP_ID_APP_SECRET": "your-app-secret",
        "SHP_SITE_URL": "https://your-tenant.sharepoint.com/sites/your-site",
        "SHP_TENANT_ID": "your-tenant-id"
      }
    }
  }
}

🛠️ 全部14个工具

📁 文件夹管理

工具 它做什么
List_SharePoint_Folders 📋 列出目录中的所有子文件夹
Get_SharePoint_Tree 🌳 获取完整的递归文件夹+文件树
Create_Folder ➕ 创建新文件夹
Delete_Folder 🗑️ 删除空文件夹

📄 文档管理

工具 它做什么
List_SharePoint_Documents 📋 列出所有包含元数据的文件
Search_SharePoint 🔎 使用KQL查询搜索文档
Get_Document_Content 📖 读取并解析文件内容(PDF/Word/Excel/text)
Upload_Document ⬆️ 以字符串或Base64格式上传文件
Upload_Document_From_Path 📂 直接上传本地文件
Update_Document ✏️ 覆盖现有文件内容
Delete_Document 🗑️ 永久删除文件
Download_Document ⬇️ 将文件下载到本地文件系统

🏷️ 元数据管理

工具 它做什么
Get_File_Metadata 🔍 获取所有SharePoint列表项字段
Update_File_Metadata ✏️ 更新元数据字段

⚙️ 完整配置参考

变量 必填 默认 描述
SHP_ID_APP ✅ Azure AD应用程序客户端ID
SHP_ID_APP_SECRET ✅ Azure AD客户端机密
SHP_TENANT_ID ✅ Microsoft租户ID
SHP_SITE_URL ✅ SharePoint网站URL
SHP_API_TYPE office365 office365, graph,或 graphql
SHP_LIBRARY_NAME Shared Documents 库名称(仅限Office365 REST;图形自动检测)
SHP_DOC_LIBRARY (空=库满) 子文件夹范围(例如。 mcp_server).空=整个库
SHP_MAX_DEPTH 15 最大树深
SHP_MAX_FOLDERS_PER_LEVEL 100 每批文件夹
SHP_LEVEL_DELAY 0.5 树级别之间的延迟
TRANSPORT stdio stdio 或 http
HTTP_HOST 0.0.0.0 HTTP绑定主机
HTTP_PORT 8000 HTTP端口
LOG_LEVEL INFO DEBUG INFO WARNING ERROR
LOG_FORMAT console console 或 json

⚠️ 局限性

限制 详细信息
单点 每个服务器实例连接到一个SharePoint站点(计划在v2.0中连接多个站点)
同步客户端 使用同步SharePoint REST API调用(计划用于v1.3的异步客户端)
不共享 尚无法创建共享链接(计划用于v1.1)
大文件 在内容提取过程中,非常大的文件可能会达到内存限制
费率限制 SharePoint限制(429/503)通过自动重试处理,但持续的批量操作可能很慢

🔧 故障排除

身份验证错误

问题: Missing or invalid SharePoint credentials
解决方案: 验证是否设置了所有4个必需的环境变量:

echo $SHP_ID_APP $SHP_ID_APP_SECRET $SHP_TENANT_ID $SHP_SITE_URL

连接问题(HTTP传输)

问题: 代理无法连接到MCP服务器
解决方案:

  1. 确保服务器正在运行: curl http://localhost:8000/mcp/
  2. 检查URL是否以结尾 /mcp/ (需要尾部斜线)
  3. 验证端口是否未被防火墙阻止

Docker容器不健康

问题: podman ps / docker ps 显示 (unhealthy)
解决方案: 检查容器日志是否有错误:

docker logs sharepoint-mcp

调试日志

通过设置启用详细输出 LOG_LEVEL=DEBUG:

LOG_LEVEL=DEBUG sharepoint-mcp

对于Docker,添加到您的 .env 文件或 docker-compose.yml:

LOG_LEVEL=DEBUG
LOG_FORMAT=console

权限错误

问题: Access denied 来自SharePoint
解决方案:

  1. 验证Azure AD应用程序是否具有所需的API权限
  2. 确保已获得管理员同意(如果您的组织要求)
  3. 确认 SHP_SITE_URL 指向您的应用程序可以访问的网站

🧪 发展

git clone https://github.com/ravikant1918/sharepoint-mcp.git
cd sharepoint-mcp
pip install -e ".[dev]"

make test      # run all tests
make inspect   # 🔍 launch MCP Inspector
make check     # quick import sanity check
make clean     # 🧹 remove caches

📚 文档

📄 文件 📝 说明
⚡ 入门指南 完整设置指南
⚙️ 配置 所有环境变量
🛠️ 工具参考 详细的工具参数
🏛️ 建筑 设计和层次图
🔑 Azure安装程序 Azure AD应用程序注册指南
🗺️ 路线图 计划功能
📅 更新日志 版本历史

🤝 贡献

欢迎投稿!请阅读 docs/contributing.md 和我们的 行为准则.

  1. 🍴 分叉回购
  2. 🌿 创建分支: git checkout -b feat/my-tool
  3. ✅ 添加测试: make test
  4. 📬 打开拉取请求

🔒 安全

发现漏洞?请 不要 公开问题。
通过以下方式私下报告 GitHub安全公告 或查看 安全.md.


麻省理工学院许可证©2026 拉维·康特

⭐ 如果这个项目对你有帮助,请在GitHub上加星!