OneDrive文件管理服务器

一个开源的基于Model Context Protocol (MCP)的Microsoft OneDrive服务器,支持路径基础的文件操作(列表、读取、写入、删除、移动、创建文件夹),适用于需要管理OAuth令牌生命周期的应用程序。

  • by devops-consultants
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 devops-consultants/one-drive-mcp-server

使用说明

OneDrive MCP服务器

开源 模型上下文协议(MCP) 用于Microsoft OneDrive的服务器,使用 FastMCP 以及流式HTTP传输。

公开针对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:latest

Docker 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 <microsoft-oauth-token>

令牌必须具有 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": "<created path>"}

move_file(source, destination)

移动或重命名文件。

参数:

  • source (string)--当前文件路径
  • destination (string)--新文件路径

退货: {"path": "<new 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": "<error_code>", "message": "<human-readable description>"}
错误代码 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——请参阅 许可证 了解详情。