返回市场
onedrive-mcp-服务器-spring

onedrive-mcp-服务器-spring

作者:karthik200 星标更新:2025-04-20

项目介绍

OneDrive MCP Server

这是一个基于模型上下文协议(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 Graph Explorer(快速方法)

  1. 访问Microsoft Graph Explorer
  2. 使用您的Microsoft账户登录
  3. 转到“访问令牌”标签页
  4. 确保启用了以下权限:
    • Files.Read
    • Files.Read.All
  5. 从令牌字段复制访问令牌

注意:此令牌是临时的,将在几小时后过期。适合测试但不推荐用于生产环境。

方案2:注册您自己的应用(推荐用于生产环境)

  1. Microsoft Azure门户中注册您的应用:

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

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

    • 转到“API权限”
    • 点击“添加权限”
    • 选择“Microsoft Graph”
    • 选择“委派权限”
    • 添加以下权限:
      • Files.Read
      • Files.Read.All
  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 Code MCP配置:

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

方案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",
                "karthik2_20/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 Code中安装GitHub Copilot
  2. 配置您的AI设置以使用MCP服务器:
{
    "mcp.server.url": "http://localhost:8080"
}

Claude Desktop

  1. 打开Claude Desktop设置
  2. 添加一个新的MCP服务器,URL为: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和路径。文件夹路径可以嵌套如'Documents/Bills'。

测试

运行测试套件:

mvn test

使用的技术

  • Spring Boot 3.4.4
  • Spring AI 1.0.0-M7
  • Microsoft Graph API
  • JUnit 5 & Mockito

许可证

本项目采用MIT许可证 - 查看LICENSE文件了解详情。