OneDrive MCP服务器
公开针对Microsoft Graph API的基于路径的文件操作(列出、读取、写入、删除、移动、创建文件夹)。设计用于与管理OAuth令牌生命周期的应用程序一起进行容器化部署。
特性
- 可流式HTTP传输 --MCP端点位于
/mcp,与容器化MCP客户端兼容 - 无状态承载令牌身份验证 --每个会话的令牌通过
Authorization标头,服务器中没有OAuth流 - 基于路径的界面 --代理使用人类可读的路径,如
/Documents/report.md - 乐观并发 --基于ETag的安全并行写入冲突检测
- 多会话支持 --具有独立令牌的并发代理
- 文本和二进制 --文本文件为UTF-8,二进制文件为base64
- 上传会话 --大于4MB的文件自动分块上传
- 费率限制处理 --自动重试
Retry-After支持
快速开始
码头工人
docker pull ghcr.io/devops-consultants/one-drive-mcp-server:latest
docker run -p 8080:8080 ghcr.io/devops-consultants/one-drive-mcp-server:latestDocker Compose
docker-compose up本地开发
pip install -e ".[dev]"
python -m onedrive_mcp.server环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT | 8080 | 服务器侦听端口 |
HOST | 0.0.0.0 | 服务器绑定地址 |
MAX_FILE_SIZE | 26214400 (25MB) | 读取操作的最大文件大小(字节) |
端点
| 端点 | 方法 | 描述 |
|---|---|---|
/mcp | POST | MCP可流式HTTP端点 |
/health | GET | 健康检查--返回 {"status": "ok"} |
认证
服务器需要Microsoft OAuth访问令牌 Authorization 每个MCP会话的标题:
Authorization: Bearer 令牌必须具有 Files.ReadWrite.All 范围。服务器 从不存储或刷新令牌 --调用应用程序负责获取和刷新令牌。
工具
与配套的Google Drive MCP服务器具有相同名称和模式的七个工具:
list_files(path)
列出目录中的文件和文件夹。
参数:
path(字符串,默认值:"/")--列表的目录路径
退货: 条目数组,每个条目都有 name, path, type (“文件”/“文件夹”), size, modified, etag
read_file(path)
读取文件的内容和元数据。
参数:
path(string)--文件路径
退货: content, etag, mime_type, size, binary (布尔值)
文本文件(mime类型以开头 text/,加 application/json, application/xml, application/yaml)以UTF-8字符串形式返回 binary: false。所有其他文件都使用base64编码 binary: true.
write_file(path, content, etag?)
创建或更新文件。
参数:
path(string)--文件路径content(string)--文件内容etag(字符串,可选)--ETag用于冲突检测
退货: path, etag 新 size
当 etag 如果提供了,服务器会发送 If-Match 头球如果不匹配,则返回 conflict 当前ETag出现错误。
delete_file(path)
删除文件。
参数:
path(string)--文件路径
退货: {"success": true}
file_info(path)
在不下载内容的情况下获取文件/文件夹元数据。
参数:
path(string)--文件或文件夹的路径
退货: name, path, type, size, modified, etag, mime_type
create_folder(path)
创建一个文件夹(包括中间文件夹)。
参数:
path(string)--要创建的文件夹路径
退货: {"path": ""}
move_file(source, destination)
移动或重命名文件。
参数:
source(string)--当前文件路径destination(string)--新文件路径
退货: {"path": ""}
图形API路径语法
Microsoft Graph API本机支持基于路径的文件访问,使其比Google Drive更简单:
| 用户路径 | 图形API URL |
|---|---|
/ (根) | GET /me/drive/root |
/Documents | GET /me/drive/root:/Documents: |
/Documents/report.md | GET /me/drive/root:/Documents/report.md: |
/Documents/report.md (内容) | GET /me/drive/root:/Documents/report.md:/content |
/Documents (儿童) | GET /me/drive/root:/Documents:/children |
不需要路径到ID的解析-Graph API将路径转换为服务器端的项ID。
OneDrive特定行为
- Etag格式:Microsoft使用
@odata.etag在格式中"{guid},{version}"这些是不透明的字符串——按原样存储和传递它们。 - 上传会话:大于4MB的文件使用Graph API上传会话机制上传,该机制以约3.75MB的块上传。
- 节流:Microsoft Graph强制执行速率限制。服务器会自动重试HTTP 429响应,遵守
Retry-After头球 - 路径编码:Graph API内部处理URL编码。带有空格和特殊字符的路径自然工作。
- 文件夹创建:用途
@microsoft.graph.conflictBehavior: "fail"要检测现有文件夹,请制作create_folder幂等性。
错误响应
所有错误都遵循一致的格式:
{"error": "", "message": ""}| 错误代码 | HTTP状态 | 描述 |
|---|---|---|
not_found | 404 | 文件或文件夹不存在 |
permission_denied | 403 | 用户无法访问资源 |
auth_expired | 401 | OAuth令牌已过期或无效 |
rate_limited | 429 | 超出Microsoft Graph速率限制 |
conflict | 412 | ETag不匹配(自上次读取以来文件已修改) |
file_too_large | -- | 文件超出配置的最大大小 |
api_error | 各种 | 其他图形API错误 |
许可证
Apache许可证2.0——请参阅 许可证 了解详情。
