OneNote MCP服务器

一个通过OAuth认证的Microsoft OneNote模型上下文协议(MCP)服务器,提供对笔记本、分区和页面的完整读写访问。

  • by jacob-hartmann
  • TypeScript
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 jacob-hartmann/onenote-mcp

使用说明

OneNote MCP服务器

A. 模型上下文协议(MCP) Microsoft OneNote服务器,通过OAuth进行身份验证。通过16个工具、5个资源和3个提示模板提供对笔记本、分区和页面的完全读/写访问。

快速开始

先决条件

  • Node.js v22或更高版本
  • 启用OAuth的Microsoft Entra应用程序注册
  • 应用程序注册的客户端ID和客户端密码

步骤1:注册OAuth应用程序

  1. 在Azure门户中打开Microsoft Entra应用程序注册
  2. 创建(或选择)应用程序
  3. 添加重定向URI: http://localhost:3000/callback
  4. 创建客户端密钥
  5. 复制 应用程序(客户端)ID 和 客户端密钥

步骤2:配置MCP客户端

克劳德桌面(推荐)

添加到您的 claude_desktop_config.json:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
窗户: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "onenote": {
      "command": "npx",
      "args": ["-y", "onenote-mcp"],
      "env": {
        "ONENOTE_OAUTH_CLIENT_ID": "your-client-id",
        "ONENOTE_OAUTH_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

克劳德代码(CLI)

{
  "mcpServers": {
    "onenote": {
      "command": "npx",
      "args": ["-y", "onenote-mcp"],
      "env": {
        "ONENOTE_OAUTH_CLIENT_ID": "your-client-id",
        "ONENOTE_OAUTH_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

光标

{
  "mcpServers": {
    "onenote": {
      "command": "npx",
      "args": ["-y", "onenote-mcp"],
      "env": {
        "ONENOTE_OAUTH_CLIENT_ID": "your-client-id",
        "ONENOTE_OAUTH_CLIENT_SECRET": "your-client-secret"
      }
    }
  }
}

步骤3:首次授权

首次使用时,服务器将:

  1. 将OAuth授权URL打印到stderr
  2. 等待您在浏览器中打开URL
  3. 在本地主机接收回调
  4. 在本地缓存令牌以供重用和刷新

运输模式

此服务器使用 工作室 运输独家。

工具

服务器公开了16个与OneNote交互的工具:

工具 说明
list-notebooks 列出经过身份验证的用户可访问的所有笔记本
get-notebook 获取特定笔记本的详细信息
list-section-groups 列出笔记本中或所有笔记本中的分区组
get-section-group 获取特定节组的详细信息,包括其节
list-sections 列出笔记本、分区组或所有笔记本中的分区
get-section 获取特定部分的详细信息
create-section 在笔记本或分区组中创建新分区
list-pages 在特定部分列出页面
get-page 获取特定页面的元数据(标题、时间戳、父信息)
get-page-content 获取页面的完整HTML内容
get-page-preview 获取页面的简短文本预览(最多300个字符)
create-page 在包含HTML内容的部分中创建新页面
update-page 使用JSON补丁命令更新页面内容
delete-page 永久删除页面
search-pages 按关键字在标题和内容之间搜索页面
get-notebook-hierarchy 在一次通话中获取完整的笔记本/分区组/分区树

资源

服务器公开5个资源用于直接数据访问:

资源 URI 描述
notebooks-list onenote://notebooks 所有笔记本列表
notebook onenote://notebooks/{notebookId} 一个特定的笔记本及其分区和分区组
notebook-sections onenote://notebooks/{notebookId}/sections 特定笔记本中的章节
section-pages onenote://sections/{sectionId}/pages 特定部分中的页面
page-content onenote://pages/{pageId} 特定页面的HTML内容

提示

服务器包括3个常见工作流的提示模板:

提示 描述
summarize-page 获取并总结特定OneNote页面的内容
search-notes 在OneNote笔记中指导搜索工作流程
create-note 指导在正确的笔记本和分区中创建新页面

配置参考

变量 必填 默认 描述
ONENOTE_OAUTH_CLIENT_ID 是* - OAuth客户端ID
ONENOTE_OAUTH_CLIENT_SECRET 是* - OAuth客户端密钥
ONENOTE_ACCESS_TOKEN 否 - 手动令牌覆盖(绕过OAuth)
ONENOTE_OAUTH_TENANT 没有 common OAuth租户选择器
ONENOTE_OAUTH_REDIRECT_URI 没有 http://localhost:3000/callback OAuth回调URI
ONENOTE_OAUTH_SCOPES 没有 offline_access openid profile User.Read Notes.ReadWrite 空格分隔的OAuth作用域
ONENOTE_TOKEN_STORE_PATH 否 平台默认 令牌缓存文件路径
ONENOTE_OAUTH_AUTHORITY_BASE_URL 没有 https://login.microsoftonline.com OAuth权限库覆盖
ONENOTE_GRAPH_BASE_URL 没有 https://graph.microsoft.com/v1.0 图形API基础覆盖

*除非满足以下条件,否则必须 ONENOTE_ACCESS_TOKEN 已设置。

特性

  • 16个MCP工具,用于完整的OneNote读/写访问(笔记本、分区、页面)
  • 5个MCP资源,用于通过URI模板直接访问数据
  • 3个用于常见工作流的MCP提示模板(汇总、搜索、创建)
  • 带有自动令牌刷新的OAuth授权代码流
  • 具有特定于平台的默认位置的安全令牌缓存
  • 具有错误处理和分页功能的Microsoft Graph API客户端
  • 安全强化(CodeQL、依赖性审查、记分卡、SBOM)
  • 具有自动发布和npm可信发布的CI/CD

发展

设置

# Clone the repo
git clone https://github.com/jacob-hartmann/onenote-mcp.git
cd onenote-mcp

# Use Node.js 22
# (macOS/Linux nvm): nvm install && nvm use
# (Windows nvm-windows): nvm install 22 && nvm use 22

# Install dependencies
pnpm install

# Copy env template
cp .env.example .env

本地运行

# Development mode (auto-reload)
pnpm dev

# Production build
pnpm build

# Production run
pnpm start

调试

# Run from source
pnpm inspect

# Run from built output
pnpm inspect:dist

贡献

看 贡献.md.

安全

看 安全.md.

支持

看 支持.md.

许可证

麻省理工学院©雅各布·哈特曼