mcp服务器共享点
    
与您的SharePoint对话——浏览网站、管理文档、搜索文件,所有这些都可以通过任何兼容MCP的AI助手使用自然语言完成。
使用Kotlin、Microsoft Graph SDK v6和官方MCP SDK构建。
亮点
- 🛠️ 涵盖整个文档生命周期的10个工具
- 🔄 指数回退自动重试(429/503)
- 📄 透明分页(自动跟随@odata.nextLink)
- 📤 大文件的分块上传(>4MB自动切换为可恢复)
- 🔍 来自Graph API的结构化错误消息
- 🤖 适用于Claude Desktop、Cursor和任何MCP客户端
- 📦 发布到Maven Central
快速开始
先决条件: JDK 21+,一个具有SharePoint权限的Azure AD应用程序注册。
# 1. Clone and build
git clone https://github.com/fidesit/mcp-server-sharepoint.git
cd mcp-server-sharepoint
./gradlew build
# 2. Configure (copy and fill in your Azure AD credentials)
cp .env.example .env
# 3. Run
java -jar build/libs/mcp-server-sharepoint-0.1.0.jar服务器使用MCP规范定义的JSON-RPC通过stdio(stdin/stdout)进行通信。将其连接到任何兼容MCP的客户端。
与MCP客户端一起使用
克劳德桌面版
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"sharepoint": {
"command": "java",
"args": ["-jar", "/absolute/path/to/mcp-server-sharepoint-0.1.0.jar"],
"env": {
"SHAREPOINT_TENANT_ID": "your-tenant-id",
"SHAREPOINT_CLIENT_ID": "your-client-id",
"SHAREPOINT_CLIENT_SECRET": "your-client-secret"
}
}
}
}光标
添加到光标MCP设置(.cursor/mcp.json):
{
"mcpServers": {
"sharepoint": {
"command": "java",
"args": ["-jar", "/absolute/path/to/mcp-server-sharepoint-0.1.0.jar"],
"env": {
"SHAREPOINT_TENANT_ID": "your-tenant-id",
"SHAREPOINT_CLIENT_ID": "your-client-id",
"SHAREPOINT_CLIENT_SECRET": "your-client-secret"
}
}
}
}克劳德代码
claude mcp add sharepoint -- java -jar /path/to/mcp-server-sharepoint-0.1.0.jar其他客户
任何支持stdio传输的MCP客户端都可以使用此服务器。将其指向带有所需环境变量的JAR。
可用工具
导航
| 工具 | 描述 | 必需参数 | 可选参数 |
|---|---|---|---|
sharepoint_list_sites | 列出或搜索可访问的SharePoint网站 | -- | search |
sharepoint_list_drives | 列出网站的文档库 | siteId | — |
sharepoint_list_files | 列出驱动器路径中的文件和文件夹 | driveId | path |
阅读和搜索
| 工具 | 描述 | 必需参数 | 可选参数 |
|---|---|---|---|
sharepoint_get_file_content | 将文件内容下载为UTF-8文本 | driveId, itemId | — |
sharepoint_search_files | 按文本查询在驱动器中搜索文件 | driveId, query | — |
编写和组织
| 工具 | 描述 | 必需参数 | 可选参数 |
|---|---|---|---|
sharepoint_upload_file | 上传文件(base64编码内容) | driveId, parentPath, fileName, content | — |
sharepoint_create_folder | 创建文件夹 | driveId, parentPath, folderName | — |
sharepoint_copy_item | 将项目复制到新位置 | driveId, itemId, destinationPath | — |
sharepoint_move_item | 将项目移动到新位置 | driveId, itemId, destinationPath | — |
sharepoint_delete_item | 删除文件或文件夹(永久) | driveId, itemId | — |
工作流示例
用户: 查找营销团队的SharePoint网站。 助理: *呼叫 sharepoint_list_sites(search="marketing")*
用户: 它有哪些文档库? 助理: *呼叫 sharepoint_list_drives(siteId="...")*
用户: 显示“报告”文件夹中的文件。 助理: *呼叫 sharepoint_list_files(driveId="...", path="Reports")*
用户: 阅读第四季度总结。 助理: *呼叫 sharepoint_get_file_content(driveId="...", itemId="...")*
配置
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
SHAREPOINT_TENANT_ID | 是 | -- | Azure AD租户ID |
SHAREPOINT_CLIENT_ID | 是 | -- | Azure AD应用程序(客户端)ID |
SHAREPOINT_CLIENT_SECRET | 是 | -- | Azure AD客户端机密 |
SHAREPOINT_SITE_URL | 否 | -- | 将操作限制到特定的SharePoint网站URL |
SHAREPOINT_MAX_UPLOAD_BYTES | 没有 | 0 | 上传文件大小的硬限制(以字节为单位)。0=无限制 |
SHAREPOINT_MAX_PAGINATION_RESULTS | 没有 | 500 | 分页列表操作的安全帽 |
Azure AD安装程序
- 首选 Azure门户 > 应用程序注册 > 新注册
- 命名它(例如。,
mcp-sharepoint-server),选择 单租户,注册 - 注意 应用程序(客户端)ID 和 目录(租户)ID
- 首选 证书和秘密 > 新客户机密 --复制机密值
- 首选 API权限 > 添加权限 > 微软图形 > 应用权限,添加:
- Sites.Read.All - Sites.ReadWrite.All - Files.ReadWrite.All
- 点击 授予管理员同意 (需要Azure AD管理员)
从源头构建
# Build and run unit tests
./gradlew build
# Run unit tests only
./gradlew test
# Run integration tests (requires SharePoint credentials in environment)
./gradlew integrationTest
# Build fat JAR only (skip tests)
./gradlew shadowJar胖JAR是在 build/libs/mcp-server-sharepoint-.jar.
项目结构
src/main/kotlin/com/utisha/mcp/sharepoint/
Main.kt # Entry point — stdio transport, env-based config
SharePointConfig.kt # Configuration with validation and env var parsing
SharePointGraphClient.kt # Microsoft Graph API client (all SharePoint operations)
SharePointMcpServer.kt # MCP tool definitions and request handling建筑
服务器分为三层:
- SharePointGraphClient --封装Microsoft Graph SDK v6(基于Kiota)。处理身份验证、分页、重试和分块上传。这是一个不依赖MCP的纯SharePoint客户端。
- SharePoint McpServer --注册10个MCP工具,并将传入的工具调用映射到
SharePointGraphClient方法。运输无关(接收McpServerTransportProvider).
- 主 --使用基于环境的配置将stdio传输连接到服务器。
关键行为:
- 自动重试 具有针对Graph API节流(429)和瞬时误差(503)的指数退避
- 透明分页 --列表操作如下
@odata.nextLink自动,上限为maxPaginationResults - 分块上传 --使用Graph的可恢复上传会话上传大于4MB的文件
- 结构化错误 -图形API
ODataError响应被提取为可读的消息
