使用说明
OneNote MCP服务器
连接到的MCP服务器(SSE和流式HTTP) OneNote 通过Microsoft Graph并将工具公开给 列出你的笔记 和 阅读每个笔记的内容与官方共同建造 模型上下文协议(MCP)Python SDK 以及干净、分层的架构。
特性
- 运输: 流式HTTP (默认)和 上海证券交易所 (服务器发送的事件)
- 工具:
list_notes--列出所有OneNote笔记本list_note_sections--列出笔记本中的分区list_note_pages--列表页面(部分或全部)read_note_content--获取页面的HTML内容
- 认证:通过Azure身份的Microsoft Graph(委托或应用程序)
建筑
src/onenote_mcp/
├── domain/ # Models and ports (interfaces)
│ ├── models.py # Notebook, Section, Page
│ └── ports.py # OneNoteGateway
├── application/ # Use cases
│ └── use_cases.py # list_notebooks, list_sections, list_pages, get_note_content
├── infrastructure/ # Microsoft Graph
│ └── graph_client.py # GraphOneNoteGateway
├── server.py # MCP FastMCP app + tools
└── main.py # Entrypoint (SSE / Streamable HTTP)
- 领域:实体和网关接口;没有框架或图形细节。
- 应用:调用网关的用例。
- 基础设施:图形化网关的API实现。
- 服务器:使用用例和生命周期注入网关的MCP(FastMCP)工具。
需求
- Python≥3.10
- Azure应用程序注册 笔记。阅读 (委托)或 笔记。读。全部 (应用程序)
设置
1.克隆并安装
cd onenote
python3 -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
pip install -e .
这将以可编辑模式安装软件包,因此 onenote_mcp 就在你的路上。或者:
pip install -r requirements.txt
pip install -e .
或与 紫外线:
uv sync
2.Azure应用程序注册
- 在 Azure门户 → 应用程序注册 → 新注册 (例如“OneNote MCP”)。
- API权限 → 添加权限→ 微软图形 → 委派:
Notes.Read(或Notes.ReadWrite)User.Read
- 认证 → 添加平台 → 移动和桌面应用程序 →添加重定向类型(例如。
http://localhost:8400;必须匹配AZURE_REDIRECT_URI在.env) → Save.然后设置 允许公共客户端流 = 是. - 在
.env:setAZURE_CLIENT_ID;可选AZURE_TENANT_ID和AZURE_REDIRECT_URI(默认值http://localhost:8400). - 对于 应用 (仅限应用程序)改为身份验证:添加 应用 许可
Notes.Read.All,创建客户端密钥,并设置ONENOTE_USER_ID.
企业:管理员同意
在 工作或学校(组织) 租户,您的IT管理员可能需要 同意书 在访问OneNote之前,请先访问应用程序。如果你看到一个错误,比如 “需要管理员批准” 或 “需要访问组织中只有管理员才能授予的资源的权限”:
- 询问管理员 授予应用程序的同意(您的应用程序的 应用程序(客户端)ID 来自Azure)。
- 管理步骤 (Azure门户): 应用程序注册 → 选择应用程序→ API权限 → click 为<您的组织>授予管理员同意.
- 或者,管理员可以使用 企业应用程序 → 选择应用程序→ 权限 → 授予管理员同意.
在获得管理员同意后,再次登录(或再次运行MCP服务器);然后,该应用程序将有权代表您组织中的用户访问OneNote。
3.环境
cp .env.example .env
- 委托(浏览器登录):set
AZURE_CLIENT_ID(以及可选AZURE_TENANT_ID)从步骤2开始注册您的应用程序。首次运行将打开浏览器进行登录。 - 应用程序(仅限应用程序):set
AZURE_TENANT_ID,AZURE_CLIENT_ID,AZURE_CLIENT_SECRET,以及ONENOTE_USER_ID.
运行服务器
如果你得到 ModuleNotFoundError: No module named 'onenote_mcp',请先安装软件包: pip install -e .
SSE和流式HTTP 在同一服务器上运行(无需选择配置):
python -m onenote_mcp.main
# or after pip install -e .
onenote-mcp
自定义主机/端口:
PORT=3000 python -m onenote_mcp.main
HOST=0.0.0.0 PORT=8000 python -m onenote_mcp.main
连接客户端
这两种传输方式都可以在同一台服务器上使用。使用您的客户支持的任何一种。
流式HTTP --单个URL:
http://localhost:8000/mcp(或你的HOST/PORT)
{
"mcpServers": {
"onenote": {
"type": "streamable-http",
"url": "http://localhost:8000/mcp"
}
}
}
上海证券交易所 --连接到SSE端点;服务器将告诉客户端在哪里POST消息:
- 上海证券交易所
GET http://localhost:8000/sse - 信息:
POST http://localhost:8000/messages/(与?session_id=...从第一次SSE活动开始)
{
"mcpServers": {
"onenote": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}
工具参考
| 工具 | 说明 |
|---|---|
list_notes |
列出所有OneNote笔记本。可选: user_id (仅适用于应用程序)。 |
list_note_sections |
列出笔记本中的分区。必修的: notebook_id.可选: user_id. |
list_note_pages |
列表页面;可选的 section_id 限制在一个部分。可选: user_id. |
read_note_content |
获取页面的HTML内容。必修的: page_id.可选: user_id. |
使用来自的ID list_notes / list_note_sections / list_note_pages 作为下一个工具的输入。
测试
安装开发依赖项并运行测试(模拟OneNote网关,无Azure凭据):
pip install -e ".[dev]"
# or
pip install -r requirements-dev.txt
pytest tests/ -v
测试使用模拟网关并脱机运行。它们包括:
- 用例:
list_notebooks,list_sections,list_pages,get_note_content使用模拟数据 - 工具输出格式:工具响应的markdown/HTML形状
- 应用结构:组合应用程序挂载
/sse和/mcp路线
许可证
MIT。