OneDrive文件管理服务

一个基于Spring Boot和Spring AI的OneDrive文件管理服务,支持文件搜索、文件夹导航和AI代理集成。

  • by karthik20
  • Java
  • 本地部署
  • 更新于
在 GitHub 查看 karthik20/onedrive-mcp-server-spring

使用说明

OneDrive MCP服务器

模型上下文协议(MCP)服务器实现,使AI代理能够搜索和导航Microsoft OneDrive中的文件和文件夹。内置Spring Boot和Spring AI。

特性

  • 🔍 使用可选文件夹筛选在OneDrive中搜索文件
  • 📁 搜索和导航文件夹结构
  • 🔗 获取指向文件和文件夹的直接web URL
  • 🤖 用于AI代理集成的MCP兼容接口
  • 🔒 使用Microsoft Graph API进行安全访问

先决条件

  • Java 21或更高版本
  • Maven 3.6+
  • Docker(可选,用于容器化部署)
  • Microsoft OneDrive帐户和访问令牌

获取Microsoft OneDrive访问令牌

您可以通过两种方式获得访问令牌:

选项1:使用Microsoft图形资源管理器(快速方法)

  1. 访问 Microsoft图形资源管理器
  2. 使用您的Microsoft帐户登录
  3. 转到“访问令牌”选项卡
  4. 确保您启用了以下权限:
    • 文件夹。阅读
    • 文件夹。读。全部
  5. 从令牌字段复制访问令牌

注意:此令牌是临时的,将在几个小时后过期。它适合测试,但不建议用于生产。

选项2:注册自己的应用程序(建议用于生产)

  1. 在 微软Azure门户:

    • 点击“新注册”
    • 为您的应用程序命名
    • 对于“支持的帐户类型”,选择“任何组织目录中的帐户和个人Microsoft帐户”
    • 对于“重定向URI”,选择“公共客户端/本地(移动和桌面)”,然后输入“https://login.microsoftonline.com/common/oauth2/nativeclient"
    • 点击“注册”
  2. 从您注册的应用程序中记下这些值:

    • 应用程序(客户端)ID
    • 重定向URI
  3. 配置API权限:

    • 转到“API权限”
    • 点击“添加权限”
    • 选择“Microsoft Graph”
    • 选择“委派权限”
    • 添加以下权限:
      • 文件夹。阅读
      • 文件夹。读。全部
  4. 获取您的访问令牌:

    • 在浏览器中访问此URL(替换your_CLIENT_ID):
    https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=YOUR_CLIENT_ID&scope=files.read&response_type=token&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient
    
    • 使用您的Microsoft帐户登录
    • 身份验证后,您将被重定向到包含您的访问令牌的URL
    • 从URL参数复制访问令牌值 access_token=

此令牌的有效期为几个小时,需要定期刷新。对于生产使用,实现适当的OAuth2令牌刷新流。

配置

  1. 设置你的OneDrive访问令牌:

应用程序希望通过以下方式提供访问令牌 MICROSOFT_ONEDRIVE_ACCESS_TOKEN 环境变量,在中引用 application.yaml:

onedrive:
    access-token: ${MICROSOFT_ONEDRIVE_ACCESS_TOKEN}
  1. VS代码MCP配置:

您可以使用本地JAR文件或Docker在VS Code中配置MCP服务器。创建或更新 .vscode/mcp.json 在VS Code工作区中:

选项1:使用本地JAR

{
    "servers": {
        "onedrive-mcpserver": {
            "type": "stdio",
            "command": "java",
            "args": [
                "-jar",
                "~/onedrive-mcp-server/target/onedrive-mcp-server-0.0.1.jar"
            ],
            "env": {
                "MICROSOFT_ONEDRIVE_ACCESS_TOKEN": "<INSERT TOKEN HERE>"
            }
        }
    }
}

选项2:使用Docker

{
    "servers": {
        "onedrive-mcpserver-docker": {
            "type": "stdio",
            "command": "docker",
            "args": [
                "run",
                "--rm",
                "-i",
                "-e",
                "MICROSOFT_ONEDRIVE_ACCESS_TOKEN",
                "karthik20/onedrive-mcp-server:0.0.1"
            ],
            "env": {
                "MICROSOFT_ONEDRIVE_ACCESS_TOKEN": "<INSERT TOKEN HERE>"
            }
        }
    }
}

替换 <INSERT TOKEN HERE> 使用您的Microsoft OneDrive访问令牌。对于本地JAR选项,请确保更新JAR路径以匹配您的本地设置。

建立和运行

地方发展

  1. 构建项目:
mvn clean package
  1. 运行服务器:
java -jar target/onedrive-mcp-server-0.0.1.jar

Docker部署

  1. 构建Docker镜像:
mvn spring-boot:build-image

这将创建一个名为的图像: karthik20/onedrive-mcp-server:0.0.1

  1. 运行容器:
docker run -p 8080:8080 -e ONEDRIVE_ACCESS_TOKEN=your-token karthik20/onedrive-mcp-server:0.0.1

使用MCP客户端进行测试

GitHub Copilot

  1. 在VS代码中安装GitHub Copilot
  2. 配置您的AI设置以使用MCP服务器:
{
    "mcp.server.url": "http://localhost:8080"
}

克劳德桌面

  1. 打开克劳德桌面设置
  2. 使用URL添加新的MCP服务器: http://localhost:8080
  3. 使用内置文件浏览器访问OneDrive文件

可用的MCP工具

1.搜索文件

使用可选文件夹筛选在OneDrive中搜索文件:

public String searchFiles(String fileName, String folder)

2.搜索文件夹

导航和搜索文件夹结构:

public String searchFolderPath(String folderName)

3.列出文件夹内容

列出特定文件夹路径下的所有文件和文件夹:

public String listFolderContents(String folderPath)

返回文件和文件夹信息的JSON数组,包括名称、web URL和路径。文件夹路径可以像“文档/账单”一样嵌套。

测试

运行测试套件:

mvn test

构建于

  • 弹簧靴3.4.4
  • 春季AI 1.0.0-M7
  • Microsoft Graph API
  • JUnit5和Mockito

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。