OneNote MCP 服务器

OneNote MCP Server 是一个强大的模型上下文协议(MCP)服务器,使AI语言模型(如Claude)和其他AI助手能够安全地与您的Microsoft OneNote数据进行交互,支持读取、写入、搜索和全面编辑OneNote笔记本、分区和页面。

  • by eshlon
  • JavaScript
  • 本地部署
  • 14 星标
  • 更新于
在 GitHub 查看 eshlon/onenotemcp

使用说明

OneNote MCP服务器

OneNote MCP服务器是一个功能强大的模型上下文协议(MCP)服务器,它使Claude等AI语言模型(LLM)和其他AI助手能够安全地与您的Microsoft OneNote数据交互。它允许直接通过AI界面对OneNote笔记本、分区和页面进行阅读、写作、搜索和全面编辑。

此服务器为高级OneNote管理提供了一套丰富的工具,包括强大的文本提取、HTML内容处理和细粒度的页面操作。

特性

  • 身份验证: 用于Microsoft Graph API访问的安全设备代码流。
  • 读取操作:
    • 列出笔记本、分区和页面。
    • 按标题搜索页面。
    • 获取各种格式的页面内容(完整HTML、可读文本、摘要)。
  • 写入和编辑操作:
    • 使用自定义HTML或markdown内容创建新的OneNote页面。
    • 更新整个页面内容,保留或替换标题。
    • 使用可选的时间戳和分隔符将内容附加到现有页面。
    • 更新页面标题。
    • 查找和替换页面中的文本(区分大小写或不区分大小写)。
    • 在页面上添加格式化的笔记(如标注或待办事项)。
    • 将结构化表格从CSV数据插入页面。
  • 高级内容处理:
    • 复杂的HTML到可读文本提取。
    • 页面内容的Markdown到HTML转换。
  • 稳健的输入验证: 使用Zod定义和验证工具输入模式。

先决条件

  • Node.js: 建议使用18.x或更高版本。(从安装 nodejs.org)
  • npm: 通常与Node.js捆绑在一起。
  • Git: 用于克隆存储库。(从安装 git-scm.com)
  • Microsoft帐户: 具有OneNote访问权限的活动Microsoft帐户。
  • Azure应用程序注册(建议用于生产/共享):
    • 虽然服务器默认使用Microsoft Graph Explorer的公共客户端ID进行轻松测试,但用于常规或共享使用 强烈建议 创建自己的Azure应用程序注册。
    • 请确保您的应用程序注册具有以下委派的Microsoft Graph API权限: Notes.Read, Notes.ReadWrite, Notes.Create, User.Read.
    • 您需要从应用程序注册中获得“应用程序(客户端)ID”。

安装

  1. 克隆存储库:

    git clone https://github.com/[your-github-username]/onenote-ultimate-mcp-server.git
    cd onenote-ultimate-mcp-server
    

    (替换 [your-github-username]/onenote-ultimate-mcp-server 使用您的实际存储库URL)

  2. 安装依赖关系:

    npm install
    

配置

  1. Azure客户端ID: 此服务器需要Azure应用程序客户端ID才能与Microsoft Graph进行身份验证。

    • 建议用于生产/共享用途: 设置 AZURE_CLIENT_ID 将环境变量设置为您自己的Azure应用程序的“应用程序(客户端)ID”。
      export AZURE_CLIENT_ID="your-actual-azure-app-client-id" 
      
      (在Windows上,使用 set AZURE_CLIENT_ID=your-actual-azure-app-client-id)
    • 快速测试: 如果 AZURE_CLIENT_ID 如果未设置环境变量,服务器将默认使用Microsoft Graph Explorer的公共客户端ID。这适用于初始测试,但不建议长期或共享使用。
    • 或者,您可以修改 clientId 变量直接在 onenote-mcp.mjs,但优选使用环境变量。
  2. .gitignore: 该项目包括 .gitignore 文件。确保它至少包含以下内容,以防止提交敏感文件:

    node_modules/
    .DS_Store
    *.log
    .access-token.txt
    .env
    

    这 .access-token.txt 服务器将创建一个文件来存储您的身份验证令牌。

运行MCP服务器

配置后,从项目的根目录启动服务器:

node onenote-mcp.mjs

您应该看到控制台输出,指示服务器已启动并列出可用的工具类别。

连接到MCP客户端

您可以将此服务器连接到任何兼容MCP的客户端,如Claude Desktop或Cursor。

Claude桌面或光标示例:

  1. 打开MCP客户端的配置文件。

    • 克劳德桌面(macOS): ~/Library/Application Support/Claude/claude_desktop_config.json
    • 克劳德桌面(Windows): %APPDATA%\Claude\claude_desktop_config.json
    • 光标: 首选项->MCP选项卡。
  2. 添加或更新 mcpServers 配置:

    {
      "mcpServers": {
        "onenote": {
          "command": "node",
          "args": ["/full/path/to/your/onenote-ultimate-mcp-server/onenote-mcp.mjs"],
          "env": {
            // Recommended: Set AZURE_CLIENT_ID here if not set globally
            "AZURE_CLIENT_ID": "YOUR_AZURE_APP_CLIENT_ID_HERE" 
          }
        }
      }
    }
    
    • 替换 /full/path/to/your/onenote-ultimate-mcp-server/ 随着 绝对路径 到您克隆存储库的位置。
    • 替换 YOUR_AZURE_APP_CLIENT_ID_HERE 使用Azure应用程序的客户端ID,特别是如果您没有将其设置为系统范围的环境变量。
  3. 重新启动MCP客户端(克劳德桌面/光标)。

身份验证流程

第一次尝试通过AI助手或显式调用OneNote工具时 authenticate 工具:

  1. 调用 authenticate 工具: 您的AI助手将呼叫 authenticate 服务器上的工具。
  2. 设备代码提示: 服务器将输出一个URL(通常 https://microsoft.com/devicelogin)并为其添加用户代码 stderr。您的MCP客户端(例如Claude Desktop)应向您显示此信息。
  3. 浏览器身份验证: 在web浏览器中打开提供的URL并输入用户代码。
  4. 登录并授予权限: 使用具有OneNote访问权限的Microsoft帐户登录,并授予请求的权限。
  5. 已保存令牌: 浏览器身份验证成功后,服务器将自动接收访问令牌并将其保存到 .access-token.txt 文件在其目录中。
  6. 验证(可选但推荐): 调用 saveAccessToken 通过您的AI助手使用该工具。此工具实际上不会保存(因为它已经被后台进程保存),而是加载和验证令牌,确认身份验证成功并显示您的帐户信息。

保存的令牌将用于后续会话,直到过期,此时您可能需要重新进行身份验证。

可用的MCP工具

此服务器向您的AI助手公开以下工具:

身份验证:

  • authenticate:使用Microsoft Graph启动设备代码身份验证流程。
  • saveAccessToken:加载并验证本地保存的访问令牌。

正在读取OneNote数据:

  • listNotebooks:列出所有OneNote笔记本。
  • searchPages:在所有笔记本中按标题搜索页面。(Arg: query (可选字符串))
  • getPageContent:检索特定OneNote页的内容。(Args: pageId (字符串), format (枚举:“text”、“html”、“summary”,可选,默认值为“text”)
  • getPageByTitle:按页面标题查找页面并检索其内容。(Args: title (字符串), format (枚举:“text”、“html”、“summary”,可选,默认值为“text”)

编辑和创建OneNote页面:

  • createPage:在第一个可用分区中创建新的OneNote页。(Args: title (字符串), content (字符串-HTML或markdown)
  • updatePageContent:替换现有页面的全部内容。(Args: pageId (字符串), content (字符串), preserveTitle (布尔值,可选,默认值:true)
  • appendToPage:将新内容添加到现有页面的末尾。(Args: pageId (字符串), content (字符串), addTimestamp (布尔值,可选,默认值:true), addSeparator (布尔值,可选,默认值:true)
  • updatePageTitle:更改现有页面的标题。(Args: pageId (字符串), newTitle (字符串)
  • replaceTextInPage:查找并替换页面中的文本。(Args: pageId (字符串), findText (字符串), replaceText (字符串), caseSensitive (布尔值,可选,默认值:false)
  • addNoteToPage:向页面添加格式化的带时间戳的注释/评论。(Args: pageId (字符串), note (字符串), noteType (枚举:“note”、“todo”、“important”、“question”、可选,默认值:“notes”), position (枚举:“top”,“bottom”,可选,默认值:“bottle”)
  • addTableToPage:从CSV数据向页面添加格式化表。(Args: pageId (字符串), tableData (字符串-CSV), title (字符串,可选), position (枚举:“top”,“bottom”,可选,默认值:“bottle”)

与AI交互示例

一旦连接并通过身份验证,您可以要求您的AI助手执行以下任务:

  • “列出我的OneNote笔记本。”
  • “创建一个名为“会议创意”的新OneNote页面,内容为“头脑风暴新的营销策略”。”
  • “你能找到我关于‘凤凰计划’的OneNote页面并告诉我它的摘要吗?”
  • 将“与John Doe跟进”添加到ID为“此处为您的页面ID”的OneNote页面
  • 在我的OneNote页面“配方创意”中,将所有“糖”替换为“甜味剂”

故障排除

  • 身份验证问题:
    • 确保您的 AZURE_CLIENT_ID (如果已设置)正确,并且具有所需的API权限。
    • 如果设备代码流失败,请在其他浏览器或隐身/私人窗口中尝试。
    • 令牌到期:如果工具停止工作,您可能需要重新运行 authenticate 工具。
  • 服务器未启动:
    • 检查Node.js版本(node -v).
    • 确保安装了所有依赖项(npm install).
  • MCP客户端问题(例如,克劳德桌面、光标):
    • 验证 command 和 args (尤其是通往 onenote-mcp.mjs)客户端的MCP服务器配置是正确的。
    • 更改配置后重新启动MCP客户端。
    • 检查MCP客户端的日志和服务器的控制台输出是否有错误。

安全说明

  • 访问令牌安全: 这 .access-token.txt 文件包含一个令牌,该令牌根据定义的范围授予对OneNote数据的访问权限。保护此文件,就像保护任何敏感凭据一样。确保它包含在您的 .gitignore 文件。
  • Azure客户端ID: 如果您创建了自己的Azure应用程序注册,请确保其客户端机密(如果为其他流生成)的安全。对于此设备代码流,此脚本不使用客户端机密。
  • 权限: 此服务器请求 Notes.ReadWrite 和 Notes.Create 权限。请注意您授予的访问权限。

致谢

该项目是在灵感的启发下开发的,并采用了以下开源项目的模式:

  • onenote mcp 作者:danosb: 该项目为构建OneNote MCP服务器提供了早期灵感和参考,特别是关于身份验证和基本OneNote操作的初始概念。

  • azure onenote mcp服务器 祖贝德·亨德里克斯著: 使用设备代码凭据、令牌存储/检索策略的核心身份验证流程,以及将Microsoft Graph API调用包装为OneNote(如列出实体和创建页面)作为MCP工具的基本模式,都是由该项目提供或改编的。该项目根据MIT许可证获得许可。

广泛的编辑工具集、高级文本提取和HTML处理实用程序、Zod模式集成以及该服务器的整体精细结构都是原创贡献。

该服务器的开发也得到了人工智能语言模型的协助,包括Anthropic的Claude和谷歌的Gemini,用于代码生成、重构、调试和文档编制等任务。

我们感谢参考项目的作者和人工智能工具的开发人员对开源和开发社区的贡献。

许可证

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