一个基于 MCP (Model Context Protocol) 协议的 OneDrive 文件管理服务器,支持通过 AI 智能管理 OneDrive 云盘内容。
- MCP 协议支持: 完全兼容 MCP 2024-11-05 规范
- SSE 流式通信: 支持实时双向通信和进度跟踪
- OneDrive 集成: 完整的文件管理功能
- 现代化技术栈: Node.js + TypeScript + Express
- 企业级安全: OAuth 2.0 + JWT + 权限控制
- 云原生部署: 专为 Render.com 优化
list_files- 列出文件和文件夹read_file- 读取文件内容write_file- 写入或创建文件search_files- 搜索文件create_folder- 创建文件夹delete_file- 删除文件
- 文件列表和详情
- 文件上传和下载
- 文件搜索和过滤
- 批量操作支持
- 用户认证管理
- Node.js 18+
- OneDrive 应用注册
git clone <repository-url>
cd onedrive-mcp-servernpm install复制 .env.example 为 .env 并配置:
cp .env.example .env编辑 .env 文件:
# Microsoft Graph OAuth配置 (必须配置)
MICROSOFT_CLIENT_ID=your-azure-ad-app-client-id
MICROSOFT_CLIENT_SECRET=your-azure-ad-app-client-secret
MICROSOFT_REDIRECT_URI=http://localhost:3000/api/oauth/callback
MICROSOFT_TENANT_ID=common
# JWT配置
JWT_SECRET=your-strong-jwt-secret-here
JWT_REFRESH_SECRET=your-strong-refresh-secret-here
# 服务器配置
PORT=3000
NODE_ENV=development- 访问 Azure Portal
- 转到 "Azure Active Directory" > "应用注册"
- 点击 "新注册"
- 输入应用名称,选择支持的账户类型
- 在 "重定向 URI" 中添加
http://localhost:3000/api/oauth/callback - 注册完成后,记下应用程序(客户端) ID
- 转到 "证书和机密",创建新的客户端机密
- 将客户端ID和客户端机密配置到环境变量中
- 转到 "API权限",添加以下权限:
Files.ReadWriteUser.Readoffline_access(用于刷新令牌)
npm run buildnpm start本项目实现了双重令牌认证系统,确保安全性和灵活性:
- 客户端认证: 使用JWT令牌进行API访问控制
- OneDrive访问: 使用Microsoft Graph令牌访问OneDrive资源
- 自动刷新: 自动刷新过期的Microsoft Graph令牌
- 客户端请求授权URL:
GET /api/oauth/authorize - 用户在浏览器中完成Microsoft授权
- Microsoft重定向到回调URL:
GET /api/oauth/callback?code=... - 服务器使用授权码交换Microsoft Graph令牌
- 服务器生成JWT令牌返回给客户端
- 客户端使用JWT令牌访问API
// 1. 获取授权URL
const response = await fetch('/api/oauth/authorize');
const { authorizationUrl } = await response.json();
// 2. 用户完成授权后,使用返回的访问令牌
const tokenResponse = await fetch('/api/oauth/callback?code=...');
const { accessToken } = await tokenResponse.json();
// 3. 使用JWT访问API
const filesResponse = await fetch('/api/files', {
headers: {
'Authorization': `Bearer ${accessToken}`
}
});运行OAuth流程测试:
node test-oauth.jsWindows用户可以直接运行:
start-and-test.bat运行基础认证测试:
node test-auth.js- 建立SSE连接:
GET /mcp/sse - 发送初始化事件:
{
"type": "initialize",
"callId": "unique-id",
"data": {
"accessToken": "your-jwt-token"
}
}- 调用工具:
{
"type": "tools_call",
"callId": "unique-id",
"data": {
"tool": "list_files",
"arguments": {
"path": "/",
"limit": 10
}
}
}所有REST API都需要在请求头中包含JWT令牌:
Authorization: Bearer your-jwt-token
详细认证文档请参考 AUTH-README.md
# OneDrive App Configuration
ONEDRIVE_CLIENT_ID=your_client_id_here
ONEDRIVE_CLIENT_SECRET=your_client_secret_here
ONEDRIVE_REDIRECT_URI=http://localhost:3000/api/auth/callback
# JWT Configuration
JWT_SECRET=your_jwt_secret_here
JWT_EXPIRES_IN=7d
# Server Configuration
PORT=3000
NODE_ENV=development
# MCP Configuration
MCP_API_KEY_PREFIX=od_mcp_
MCP_MAX_CONNECTIONS=100
# Logging
LOG_LEVEL=info- 访问 Microsoft Azure Portal
- 创建新的应用注册
- 配置重定向 URI:
http://localhost:3000/api/auth/callback - 添加 API 权限:
Files.Read,Files.ReadWrite,User.Read - 获取 Client ID 和 Client Secret
npm run dev服务器将在 http://localhost:3000 启动
GET /mcp/sse
GET /api/auth/onedrive- 启动 OneDrive 认证GET /api/files- 获取文件列表POST /api/files- 上传文件GET /api/search- 搜索文件DELETE /api/files/:id- 删除文件
GET /health
GET /mcp/health
src/
├── server.ts # 服务器入口
├── types/ # TypeScript 类型定义
├── services/ # 业务逻辑服务
├── routes/ # API 路由
├── middleware/ # 中间件
└── utils/ # 工具函数
npm run dev # 开发模式
npm run build # 构建项目
npm run start # 生产模式
npm run test # 运行测试
npm run lint # 代码检查
npm run format # 代码格式化- 连接 GitHub 仓库
- 配置环境变量
- 设置构建命令:
npm run build - 设置启动命令:
npm run start
ONEDRIVE_CLIENT_ID=your_production_client_id
ONEDRIVE_CLIENT_SECRET=your_production_secret
ONEDRIVE_REDIRECT_URI=https://your-app.onrender.com/api/auth/callback
JWT_SECRET=your_secure_jwt_secret
NODE_ENV=production- OAuth 2.0 认证: 安全的第三方认证
- JWT Token: 无状态身份验证
- 请求限流: 防止 API 滥用
- CORS 配置: 跨域安全控制
- Helmet 安全头: 增强 HTTP 安全
- Winston 结构化日志
- 健康检查端点
- 连接状态监控
- 错误追踪和报告
欢迎提交 Issue 和 Pull Request!
MIT License