OneNote MCP Server
OneNote MCP Server lets AI assistants search/read local OneNote backups and read, create, append, update, and inspect live OneNote Desktop pages via Windows COM automation.
List local notebooks, sections, and all sections; summarize notebooks; read section text; full-text search across backup files with snippets.
List live notebooks, sections, and pages from the running OneNote desktop app, including persistent page IDs.
Create new rich-text OneNote pages, auto-creating sections when needed.
Append content to existing pages or replace existing page body content.
Read live pages as structured Markdown or raw OneNote XML.
Convert semantic HTML into native OneNote XML: headings, paragraphs, lists, nested sub-bullets, tables, code blocks, dividers, and inline bold/italic/underline/color styling.
Enforce consistent typography such as minimum body font size and styled headings.
Work without cloud API tokens, Microsoft Graph registrations, or Azure credentials by using local
.onebackup parsing and live COM automation.Requires Windows and OneNote Desktop; the UWP OneNote for Windows 10 is not supported.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OneNote MCP Serversearch my notes for meeting minutes"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Microsoft OneNote Model Context Protocol (MCP) Server
A high-performance, enterprise-grade Model Context Protocol (MCP) server providing AI coding assistants (Google Antigravity, Claude Code, Claude Desktop, Cursor) with full bi-directional integration into Microsoft OneNote Desktop on Windows.
Author: Umang Kathiyara (
@umangnine)
๐ Key Architecture & Capabilities
The server employs an intelligent dual-engine architecture requiring zero cloud API tokens, zero Microsoft Graph registrations, and zero Azure tenant credentials:
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ AI Assistant Client โ
โ (Antigravity / Claude) โ
โโโโโโโโโโโโโฌโโโโโโโโโโโโโ
โ MCP stdio
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโ
โ OneNote FastMCP Server โ
โ (server.py) โ
โโโโโโโฌโโโโโโโโโโโโโฌโโโโโโ
โ โ
Offline Reading Engine โ โ Live Real-time Engine
(Zero latency backups) โ โ (Active desktop automation)
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ
โ pyOneNote โ โ Windows COM (STA PS) โ
โ (.one binary parser) โ โ(OneNote.Application)โ
โโโโโโโโโโโโฌโโโโโโโโโโโโ โโโโโโโโโโโโฌโโโโโโโโโโโโ
โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโ
โ Local Backup Storage โ โ OneNote Desktop GUI โ
โ (%LOCALAPPDATA%\...) โ โ (Active Notebooks) โ
โโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโOffline Reading Engine (
pyOneNote):Parses local
.onebinary backup files in%LOCALAPPDATA%\Microsoft\OneNote\16.0\Backup\.Blazing-fast full-text search across all notebooks and sections without querying the UI.
Live Automation Engine (Windows COM
OneNote.Application):Automates the running OneNote desktop application in real-time.
Creates and updates pages with native OneNote XML DOM elements in < 1.0 second.
Rich Text & High-Fidelity Typography Engine:
Automatically converts semantic HTML (
h1-h6,p,ul/ol/li,pre/code,table,hr,br,span,b,i) into structured<one:OE>elements.Enforces minimum 12.0pt font size across body content to eliminate unstyled, squinty text.
Preserves true hierarchical sub-bullet indentation using native
<one:OEChildren>nesting.Renders native grid tables (
<one:Table bordersVisible="true">) with styled headers and automatic column width calculation.Generates clean, styled horizontal dividers (
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ) with vertical padding.
Resilient Process & Connection Governance:
Selectively cleans up headless background zombie processes (
MainWindowHandle == 0) while guarding visible desktop UI windows.Enforces Single-Threaded Apartment (STA) PowerShell execution.
Related MCP server: OneNote MCP Server
๐ Repository Structure
onenote-mcp/
โโโ server.py # Polished FastMCP OneNote server implementation
โโโ pyproject.toml # Modern Python project configuration
โโโ uv.lock # Deterministic dependency lockfile
โโโ .python-version # Target Python version (3.12)
โโโ .gitignore # Git exclusion rules
โโโ LICENSE # MIT open-source license
โโโ README.md # Comprehensive setup & operations guide
โโโ SETUP_PROMPT.md # One-shot setup prompt for AI coding assistants
โโโ setup_mcp.cmd # One-click automated setup launcher for Windows
โโโ test_connection.cmd # One-click environment diagnostic launcher
โโโ schemas/ # MCP tool JSON schema declarations
โ โโโ list_live_notebooks.json
โ โโโ list_live_pages.json
โ โโโ create_page.json
โ โโโ append_to_page.json
โ โโโ update_page_content.json
โ โโโ read_live_page.json
โ โโโ list_notebooks.json
โ โโโ list_sections.json
โ โโโ list_all_sections.json
โ โโโ read_section.json
โ โโโ search_notes.json
โ โโโ get_notebook_summary.json
โโโ scripts/ # Standalone PowerShell diagnostic & utility scripts
โ โโโ setup_mcp.ps1 # Automated setup script (venv, schemas, skills, diagnostics)
โ โโโ test_connection.ps1 # Diagnostic connection probe for COM and backup paths
โ โโโ read_onenote_page.ps1 # Standalone CLI reader for live OneNote pages
โโโ skills/ # Agent Skill package for AI assistants
โโโ onenote-mcp/
โโโ SKILL.md # Core skill workflow & formatting rules
โโโ references/
โ โโโ mcp-server-reference.md
โ โโโ onenote-xml-and-formatting.md
โ โโโ page-parsing-and-reading.md
โโโ scripts/
โโโ read_onenote_page.ps1๐ ๏ธ System Prerequisites
Operating System: Windows 10 or Windows 11 (64-bit).
Microsoft OneNote Desktop:
Microsoft 365, Office 2021, Office 2019, or Office 2016 desktop edition.
Note: The discontinued "OneNote for Windows 10" (UWP app from the Microsoft Store) does NOT provide the COM Automation API. The desktop version must be installed.
Python: Python 3.12+ installed (or
uv).OneNote Backups Enabled:
Open OneNote Desktop.
Navigate to: File โ Options โ Save & Backup.
Ensure the backup path points to
%LOCALAPPDATA%\Microsoft\OneNote\16.0\Backup(default).Click Back Up All Notebooks Now to initialize the backup cache for offline search.
๐ Setup & Installation on Windows
Option 1: Fast Setup using uv (Recommended)
uv provides lightning-fast, reproducible virtual environment setup:
# 1. Clone the repository
git clone https://github.com/umangnine/onenote-mcp.git
cd onenote-mcp
# 2. Sync virtual environment and dependencies in one step
uv syncOption 2: Standard Python pip Setup
# 1. Clone the repository
git clone https://github.com/umangnine/onenote-mcp.git
cd onenote-mcp
# 2. Create virtual environment
python -m venv .venv
# 3. Activate virtual environment
.\.venv\Scripts\Activate.ps1
# 4. Install dependencies
pip install "mcp[cli]" pyOneNote๐ค One-Shot AI Agent Setup Prompt (Fastest Setup)
If you use Google Antigravity, Claude Code, Cursor, or Windsurf, you can set up everything in one shot:
Clone this repository to any folder on your Windows machine:
git clone https://github.com/umangnine/onenote-mcp.git cd onenote-mcpOpen your AI coding assistant inside this directory.
Provide the ready-to-use prompt from
SETUP_PROMPT.md. Your AI agent will automatically create the virtual environment, install dependencies, register the MCP server, copy tool schemas and skills, and run the verification suite.
โก Automated One-Click Setup Script
Prefer running a script directly? We provide an automated setup script that handles environment creation, dependency synchronization, MCP registration, schema installation, and diagnostics:
# In PowerShell:
powershell -ExecutionPolicy Bypass -File .\scripts\setup_mcp.ps1
# Or simply double-click / run the Windows batch launcher:
.\setup_mcp.cmd๐งช Verifying the Environment
Verify your OneNote COM automation and backup discovery anytime using the diagnostics tool:
# Option A: PowerShell
powershell -ExecutionPolicy Bypass -File .\scripts\test_connection.ps1
# Option B: One-click launcher (bypasses PowerShell ExecutionPolicy restrictions)
.\test_connection.cmdExpected output:
============================================================
Microsoft OneNote MCP Environment Diagnostics Tool
============================================================
[OK] PowerShell Apartment State: STA (Required for OneNote COM)
[OK] OneNote desktop UI process is running (PID: 12345)
Testing OneNote COM API connection...
[OK] COM GetHierarchy succeeded! Found 3 active notebook(s).
- Notebook: Notes-2026
* Section: Update-Notes-26
* Section: Work-Notes
Checking OneNote local backup files...
[OK] Backup directory found: C:\Users\...\AppData\Local\Microsoft\OneNote\16.0\Backup
[OK] Discovered 35 backup (.one) file(s) for offline reading.
============================================================
Diagnostics Complete: Environment is 100% HEALTHY! ๐
============================================================โ๏ธ Manual Configuration for AI Clients
If you prefer to configure your AI assistant manually rather than using setup_mcp.cmd:
1. Google Antigravity IDE
Open %USERPROFILE%\.gemini\antigravity\mcp_config.json and register the onenote server (replace <path-to-repo> with your absolute directory, e.g. C:\\Projects\\onenote-mcp):
{
"mcpServers": {
"onenote": {
"command": "<path-to-repo>\\.venv\\Scripts\\python.exe",
"args": [
"<path-to-repo>\\server.py"
],
"env": {
"ONENOTE_BACKUP_DIR": "%LOCALAPPDATA%\\Microsoft\\OneNote\\16.0\\Backup"
}
}
}
}Tip: Copy all JSON files from .\schemas\ to %USERPROFILE%\.gemini\antigravity\mcp\onenote\ so the IDE eagerly exposes lazy schemas, and copy .\skills\onenote-mcp\ to %USERPROFILE%\.gemini\config\skills\onenote-mcp\.
2. Claude Code CLI
Inside your cloned repository directory, run:
claude mcp add --transport stdio onenote -- "$PWD\.venv\Scripts\python.exe" "$PWD\server.py"Verify status:
claude mcp list3. Claude Desktop / Cursor
Edit %APPDATA%\Claude\claude_desktop_config.json (or .cursor/mcp.json):
{
"mcpServers": {
"onenote": {
"command": "<path-to-repo>\\.venv\\Scripts\\python.exe",
"args": [
"<path-to-repo>\\server.py"
],
"env": {
"ONENOTE_BACKUP_DIR": "%LOCALAPPDATA%\\Microsoft\\OneNote\\16.0\\Backup"
}
}
}
}๐ MCP Tool Reference
Tool Name | Parameters | Engine | Purpose & Description |
| None | COM | Lists all notebooks and sections currently open and active in the OneNote desktop GUI. |
|
| COM | Lists all page titles and their persistent OneNote page IDs ( |
|
| COM | Creates a brand-new page with rich HTML formatting in < 1.0 second. Auto-creates the section if it doesn't exist. |
|
| COM | Appends an additional rich HTML outline block to the bottom of an existing page. |
|
| COM | Replaces the entire outline content of an existing page with new rich HTML. |
|
| COM | Reads a live page and converts headings, tables, and nested sub-bullets into structured Markdown. Set |
| None | Backup | Lists local notebook backup folders and section counts. |
|
| Backup | Lists sections in a backup notebook with their file sizes. |
| None | Backup | Recursively lists all notebooks and sections found in backup storage. |
|
| Backup | Extracts all plaintext from a section backup ( |
|
| Backup | Full-text keyword search across all local backup files with 160-character context snippets. |
|
| Backup | Returns section outlines with ~200-character content previews. |
๐จ HTML Formatting & Typography Standards
When sending content to create_page or append_to_page, use standard HTML tags. The server automatically maps them to Microsoft OneNote XML:
1. Supported Tags & Visual Mapping
HTML Element | OneNote XML Translation | Visual Output in OneNote |
|
| 24.0pt bold text in Navy ( |
|
| 18.0pt bold text in Blue ( |
|
| 14.0pt bold text in Slate ( |
|
| 12.0pt clean body text |
|
| Native OneNote bullet points |
| Nested | True hierarchical sub-bullet indentation |
|
| Formatted divider ( |
|
| Native OneNote grid table with border lines |
|
| Table header cell with soft blue background shading |
|
| Monospace code block in Consolas font with shaded background ( |
| CDATA inline styles | Bold, italic, underline, custom color styling |
2. Daily Work Report Architecture Template
For consistent engineering notes, sprint logs, and daily work reports:
<h2>๐ง Service Architecture - Backend/API</h2>
<p><span style="font-family:Consolas, monospace;font-size:9.5pt;color:#666666;">my-project ยท branch: main</span></p>
<p><b>2026-09-30 (Wednesday)</b></p>
<ul>
<li><b>Feature Area Title:</b>
<ul>
<li>Technical description bullet point 1</li>
<li>Technical description bullet point 2</li>
</ul>
</li>
<li><b>Impact:</b>
<ul>
<li>โ
Measurable outcome 1</li>
<li>โ
Measurable outcome 2</li>
</ul>
</li>
</ul>
<br /><hr /><br />
<h2>๐ฅ๏ธ Frontend Web Application</h2>
<p><span style="font-family:Consolas, monospace;font-size:9.5pt;color:#666666;">web-client ยท branch: main</span></p>
<p><b>2026-09-30 (Wednesday)</b></p>
<ul>
<li><b>UI Enhancements:</b>
<ul>
<li>Implemented responsive settings drawer</li>
</ul>
</li>
</ul>
<br /><hr /><br />
<h2>๐ Summary Metrics</h2>
<table bordersVisible="true">
<tr>
<th style="background-color:#EBF2FA;">Metric / Dimension</th>
<th style="background-color:#EBF2FA;">Value / Outcome</th>
</tr>
<tr><td><b>Working Day</b></td><td>Wednesday, 30 September, 2026</td></tr>
<tr><td><b>Total Commits</b></td><td>7</td></tr>
<tr><td><b>Key Deliverables</b></td><td>Dynamic labels, Storage permissions, Webhook protection</td></tr>
<tr><td><b>Repos Active</b></td><td>2</td></tr>
</table>
<p><i>Report generated with OneNote MCP</i></p>๐ง Troubleshooting & Recovery Discipline
1. OneNote Desktop Shows Safe Mode Prompt ("Start normally")
Symptom: OneNote hangs on startup or displays a modal asking to Start normally, Delete notebook cache, or Delete settings.
Cause: OneNote processes were forcefully killed (
Stop-Process -Force) while holding file locks.Remedy:
Click "Start normally" on the OneNote desktop window.
Never blindly kill all
ONENOTEprocesses. The server's built-in_cleanup_orphan_onenote()function selectively terminates only headless background instances (MainWindowHandle == 0), leaving visible user windows untouched.
2. COM Error 0x80042009 (UpdatePageContent failed)
Cause: Passing unescaped block HTML tags (
<div>,<p>,<table>) directly inside a single<one:T><![CDATA[...]]></one:T>.Remedy: The server's
_html_to_onenote_xmlparser automatically decomposes complex HTML into separate<one:OE>elements. Use standard semantic HTML tags and let the parser structure the XML.
3. KERNELBASE.dll Crash (0xc06d007e)
Cause: Inserting literal
<br/>tags inside OneNote CDATA text nodes.Remedy: In OneNote XML, line breaks between separate blocks must be represented as distinct
<one:OE>elements or spacers, never unescaped HTML tags in CDATA.
4. PowerShell Apartment State Error
Cause: PowerShell running in Multi-Threaded Apartment (MTA) mode.
Remedy: All COM calls must execute in Single-Threaded Apartment mode (
powershell.exe -STA ...). Bothserver.pyandscripts/read_onenote_page.ps1enforce-STAby default.
๐ License & Attribution
Project Lead & Author: Umang Kathiyara (
@umangnine)License: MIT License โ free and open-source for personal and commercial use.
Available Tools
12 toolsappend_to_pageA
Append content to an existing OneNote page.
The content is added as a new outline block at the bottom of the page.
Supports full rich HTML formatting (h1-h6, p, ul/ol/li, b, i, u, span, hr, br).
Args:
page_id: The page ID (from list_live_pages).
content: The content to append as HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| page_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose real behavior (content lands as a new outline block at the bottom of the page) and the supported HTML tag subset, which is valuable. It omits permissions/auth requirements, reversibility, failure modes, and whether appends are idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and placement semantics before the tag list, and the Args block is compact. The tag enumeration is slightly list-heavy but earns its place by defining valid input.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the two required params are covered. What's missing for a mutation tool is sibling differentiation and any behavioral/authorization caveats that the absent annotations leave unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must supply all parameter meaning, and it does document both: page_id with its source (list_live_pages) and content as an HTML string. It could add more on accepted HTML constraints or size limits, but it compensates well for the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (append) and resource (existing OneNote page), making it clear this adds content rather than reading or creating. It does not, however, differentiate itself from the sibling update_page_content, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by noting the page must already exist and pointing to list_live_pages as the source of the page ID, which is genuinely useful routing. It offers no explicit when-to-use vs. update_page_content or create_page, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_pageA
Create a new page in a OneNote notebook section.
The content is written as HTML with full rich-text support.
Supported tags: h1-h6 (headings with auto font sizing), p, ul/ol/li (lists
with bullets/numbers), b/strong (bold), i/em (italic), u (underline),
span (with style), a (links), hr (horizontal rule), br, table/tr/td/th.
Headings get automatic font sizes: h1=24pt, h2=18pt, h3=14pt, h4=13pt,
h5=12pt, h6=11pt. All body text is 11pt minimum.
Requires the OneNote desktop app to be installed.
Args:
notebook_name: Name of the notebook (from list_live_notebooks).
section_name: Name of the section within the notebook.
title: Title for the new page.
content: The page content as HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| content | Yes | ||
| section_name | Yes | ||
| notebook_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one meaningful environmental trait: the OneNote desktop app is required. However, it says nothing about failure modes (missing section/notebook), permissions, or whether a duplicate title is allowed, leaving key behavioral questions unanswered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in sentence one, followed by format documentation and prerequisites, with the Args block last. The tag list and font-size table are verbose but earn their place by defining valid content input; nothing is duplicated fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and the description covers the input contract plus the desktop-app prerequisite. For a no-annotation creation tool it is nearly complete, missing only error/duplicate handling behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: the Args block documents all four parameters, notes that notebook_name comes from list_live_notebooks, and defines content as HTML. section_name and title get only bare restatements, so it is strong but not exhaustive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource ('Create a new page in a OneNote notebook section'), and 'new page' naturally contrasts with siblings like append_to_page and update_page_content. It is clear without opening the schema, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: creating a new page versus appending to or updating one is left for the agent to infer from sibling names. The only routing hint is that notebook_name comes 'from list_live_notebooks', which is a parameter-sourcing note, not a when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notebook_summaryC
Get a summary of a notebook: its sections and a preview of each section's content.
Args:
notebook_name: The name of the notebook.
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions the tool 'gets' a summary, implying a read operation, but does not discuss auth requirements, side effects, or rate limits. The output schema exists but the description adds no behavioral context beyond the basic purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and front-loaded with the purpose. It includes an Args section but lacks additional guidance or behavioral notes. It is concise but omits useful information, balancing efficiency with completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a simple input (one parameter) and an output schema, so the description need not explain return values. However, it misses usage guidelines and behavioral transparency. The description is adequate for minimal understanding but incomplete for effective tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is notebook_name, and the description merely restates its name: 'The name of the notebook.' Schema description coverage is 0%, and the description adds no format, examples, or constraints beyond what the schema title already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get a summary of a notebook: its sections and a preview of each section's content.' It uses a specific verb and resource, and distinguishes from sibling tools like list_notebooks, list_sections, and read_section by specifying it returns a summary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It does not state when not to use it or mention alternative tools like read_section for full content. The usage context is implied but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_all_sectionsA
List ALL sections across ALL notebooks.
Useful for getting a complete overview of everything in your OneNote.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations present, so description bears full weight. It states the action but doesn't discuss potential pagination, performance, or whether it retrieves all data at once. Adequate for a simple read tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two focused sentences, no fluff. Perfectly concise for the simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no params, output schema present), the description covers the essential context. Could mention potential large payloads, but overall complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema coverage is trivial. Description adds value by clarifying the scope ('ALL notebooks'), ensuring the agent knows it's a global operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'List ALL sections across ALL notebooks' with a specific verb and resource. Distinguishes from sibling 'list_sections' by emphasizing the global scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a use case ('useful for getting a complete overview') but does not explicitly mention when to avoid or compare with similar tools like list_sections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_live_notebooksA
List notebooks from the running OneNote app (live, not backup files).
This uses the OneNote COM API and shows the notebooks currently open in the OneNote desktop app, including their sections. Use this to find where to create new pages.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses it uses the OneNote COM API and shows notebooks currently open in the desktop app, including sections. Without annotations, this provides adequate behavioral context, though it could mention that it only shows live notebooks, not cloud-only ones.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the main purpose in the first sentence, followed by a contextual sentence. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has zero parameters, an output schema exists (so return values are documented elsewhere), and the description includes relevant context about COM API and live notebooks, it is fully sufficient for the agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so schema description coverage is 100%. The description does not need to add parameter information, and it provides baseline value by clarifying the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists live notebooks from the running OneNote app, distinguishing them from backup files, and notes it includes sections. This provides a specific verb and resource, differentiating it from siblings like list_notebooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to find where to create new pages,' giving a clear use case. However, it does not mention when to use alternatives like list_notebooks or get_notebook_summary, nor does it state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_live_pagesB
List pages in a section from the running OneNote app.
Use this to find page IDs for appending content to existing pages.
Args:
notebook_name: Name of the notebook.
section_name: Name of the section.
| Name | Required | Description | Default |
|---|---|---|---|
| section_name | Yes | ||
| notebook_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It mentions 'from the running OneNote app,' which implies the app must be active, but it does not disclose whether the operation is read-only, what happens if the notebook or section doesn't exist, or any rate limits or destructive potential. The description lacks sufficient behavioral context for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short and includes a clear primary statement followed by a use case, which is good. However, the Args section is redundant because it merely restates parameter names without additional detail. Removing or enriching that section would improve conciseness. The structure is front-loaded but not optimal.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has only two required parameters, no enums, and no nested objects, the description provides the essential purpose and a use case. The presence of an output schema (not shown but signaled) means return values need not be explained. However, it lacks information about error handling, preconditions (e.g., app must be running), or confirmatory details, leaving gaps for a new agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage (no descriptions for parameters). The description lists the parameters in an Args block but simply repeats their names ('notebook_name: Name of the notebook.'), adding no semantic meaning or formatting details. Since the schema provides no descriptions and the description adds no value, the parameter semantics are weak.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List pages in a section'), the resource ('pages in a section'), and the context ('from the running OneNote app'). It also specifies a primary use case ('find page IDs for appending content to existing pages'), which helps differentiate it from sibling tools like list_sections or read_section.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises when to use this tool: 'Use this to find page IDs for appending content to existing pages.' While it does not provide explicit 'when not to use' guidance, the stated use case implies that for other purposes (e.g., reading page content), alternative tools like read_section or search_notes might be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_notebooksA
List all locally available OneNote notebooks.
Shows notebook names and how many sections each one has.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It correctly describes a read-only operation ('list all') and mentions it returns notebook names with section counts. However, it lacks details on permissions, side effects, or whether notebooks are cached or always up-to-date.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no redundant words, front-loaded with purpose and output summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with an output schema, the description adequately covers purpose, scope ('locally available'), and output format (names and section counts). No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0 parameters with 100% coverage, so baseline is 4. Description adds no parameter info, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it lists locally available OneNote notebooks and specifies the output (names and section counts). Distinguishes from sibling tool 'list_live_notebooks' by emphasizing 'locally available'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides no guidance on when to use this tool versus siblings like 'list_live_notebooks' or 'list_all_sections'. No explicit when-to-use or when-not-to-use conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sectionsC
List all sections in a specific notebook.
Args:
notebook_name: The name of the notebook (from list_notebooks).
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description does not disclose any behavioral traits like read-only, side effects, pagination, or permissions. It assumes a simple list but lacks any safety notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short with no fluff, front-loaded purpose, and structured Args section. However, it sacrifices completeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and an output schema, the description is adequate but lacks details on return behavior, order, or whether it lists all sections recursively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, but the description adds context for notebook_name: 'The name of the notebook (from list_notebooks)'. This helps the agent source the parameter but lacks format or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'list' and resource 'sections' scoped to a notebook. However, it does not distinguish from sibling tool 'list_all_sections', which may list sections across notebooks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. The argument hint 'from list_notebooks' implies a prerequisite but alternatives like list_all_sections are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_live_pageA
Read full text, tables, and hierarchical sub-bullets from a live OneNote page as Markdown or raw XML.
Args:
page_id: The persistent OneNote page ID (e.g. from list_live_pages).
notebook_name: Optional notebook name if page_id is not provided.
section_name: Optional section name if page_id is not provided.
page_title: Optional substring of the page title to search for if page_id is not provided.
raw_xml: If True, returns the raw OneNote page XML instead of Markdown.
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | No | ||
| raw_xml | No | ||
| page_title | No | ||
| section_name | No | ||
| notebook_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the two output modes (Markdown vs raw XML) and the scope of content read, but says nothing about authentication requirements, whether reading a live page has side effects or caching implications, or error behavior when an identifier fails to resolve. It is informative about output but thin on operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by a compact argument list. Every line earns its place with no filler or repetition, though the Args block is a slightly verbose way to carry parameter semantics that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value documentation is not required, and the description nonetheless states the output formats. All five parameters are covered, including fallback logic. The remaining gap is operational context (auth, failure modes) for a live-service read tool with no annotations, which keeps it short of a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does: all five parameters are documented with meaning, including that page_id is the persistent ID sourced from list_live_pages and that notebook_name/section_name/page_title are conditional fallbacks used only when page_id is absent. This conditional relationship between parameters is genuinely additive, though default values and the matching semantics of the page_title substring are not fully spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb (Read), a specific resource (a live OneNote page), and enumerates returned content (full text, tables, hierarchical sub-bullets) plus output formats (Markdown or raw XML). It clearly reads rather than mutates, distinguishing it from write siblings like create_page/update_page_content. It does not, however, explicitly differentiate itself from read_section or search_notes, which also retrieve content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is implicit: the page_id arg points to list_live_pages as the source, and the description explains the fallback path (notebook/section/page_title) when page_id is absent. That tells the agent how to locate a page but not when to prefer this tool over read_section or search_notes, and there are no exclusions or preconditions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_sectionA
Read all text content from a specific section of a notebook.
Args:
notebook_name: The name of the notebook.
section_name: The name of the section (from list_sections).
| Name | Required | Description | Default |
|---|---|---|---|
| section_name | Yes | ||
| notebook_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool reads content, implying non-destructive behavior, but does not disclose any side effects, permissions, rate limits, or data format specifics (e.g., markdown, plain text). The output schema exists but the description does not hint at return structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short (two lines for args, one line for purpose) and front-loaded. However, it includes 'Args:' which is redundant if the schema is present. Still, it is concise and well-structured for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with an output schema, the description is minimally complete: it explains inputs and basic function. It lacks pre/error conditions or comparative context with siblings. Given the low complexity and existence of output schema, the description is adequate but could be more informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameter descriptions, so the description adds significant value by explaining that 'section_name' should come from 'list_sections' and 'notebook_name' is the notebook name. This is helpful and compensates for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Read' and the resource 'all text content from a specific section of a notebook'. This distinguishes it from sibling tools like list_sections (list only) and search_notes (search across sections). The specificity is high.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool reads a section's text content, but provides no guidance on when to use it versus alternatives (e.g., list_sections for listing, search_notes for querying). It relies on the user to infer usage context from the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_notesA
Search for text across ALL notebooks and sections.
Searches through the text content of every section for the given query.
Returns matching sections with a snippet of the matched text.
Args:
query: The text to search for (case-insensitive).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses basic behavior (search all notebooks, returns snippets, case-insensitive) but lacks details on performance, limitations, or error conditions. Without annotations, the description carries full burden; it is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise: two sentences plus a parameter description. Every word is necessary and front-loaded with the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description adequately covers return behavior ('matching sections with a snippet'). Could mention pagination or max results, but not essential for a one-parameter search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It adds 'case-insensitive' detail beyond the schema property title 'Query', providing valuable usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verb 'search' and resource 'text across ALL notebooks and sections', clearly distinguishing from sibling tools that list or read specific items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States what it does ('searches through text content of every section') but does not explicitly mention when to avoid or suggest alternatives, though no obvious alternatives exist among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_page_contentB
Replace the body content of an existing OneNote page with new HTML formatting.
Args:
page_id: The persistent OneNote page ID (from list_live_pages).
content: The new page content as HTML.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| page_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does signal destructiveness by saying 'Replace the body content', which is the most important trait. However it does not disclose reversibility, required permissions, or what happens to existing formatting/elements not present in the new HTML.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action in the first sentence, then a compact Args block for the two parameters. No filler text; every line carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. For a destructive mutation tool with zero annotations, however, the description says nothing about permissions, irreversibility, or formatting side effects, leaving a real gap for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it partially does: page_id is documented as 'persistent OneNote page ID (from list_live_pages)' and content as HTML. This is more than the schema offers, but the HTML expectations (full vs fragment, escaping) remain unspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Replace the body content of an existing OneNote page') with the format (HTML), so the agent knows exactly what the tool does. It implicitly contrasts with the sibling append_to_page (replace vs append) but never names that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'Replace' implies this is the whole-body-overwrite option as opposed to append_to_page, but there is no explicit statement of when to choose one over the other. It also gives no prerequisites (e.g. page must exist, required permissions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
12 tool updates
v0.1.0- First observed
append_to_page - First observed
create_page - First observed
get_notebook_summary - First observed
list_all_sections - First observed
list_live_notebooks - First observed
list_live_pages - First observed
list_notebooks - First observed
list_sections - First observed
read_live_page - First observed
read_section - First observed
search_notes - First observed
update_page_content
TDQS
Scored across 12 tools
Most tools target distinct objects/actions, but there is overlap between local vs. live notebook/section/page listings, such as list_notebooks vs. list_live_notebooks and list_sections vs. list_all_sections. Descriptions clarify the live/local distinction, so an agent can usually choose correctly, but the boundaries are not perfectly crisp.
The set mostly follows a consistent snake_case verb_noun pattern (list_notebooks, read_section, create_page, update_page_content). Minor inconsistency comes from inserting 'live' in some names (read_live_page, list_live_pages, list_live_notebooks) while other local counterparts omit it.
Twelve tools is a well-scoped size for a OneNote server covering notebooks, sections, pages, reading, searching, and writing. Each tool has a plausible role, and the set is not bloated or too thin.
Core read/search/create/update page workflows are covered, but lifecycle operations are notably incomplete: there is no delete page/section/notebook, no rename or move/copy page, and no create notebook/section. These gaps will cause failures for common management requests.
Maintenance
Related MCP Connectors
Personal context for every AI: search, read, and write back to your private Markdown library.
Create, search, and update notes in an xNotepad AI notebook, with semantic search and AI Q&A.
Personal wiki and memory layer for AI assistants. Persistent, structured memory across sessions.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables Claude to read and write to local Microsoft OneNote notebooks by parsing backup files and utilizing the OneNote COM API. It allows for searching notes, creating pages, and appending content without requiring Azure registration or API keys.104-
- AlicenseDqualityCmaintenanceEnables AI assistants to securely interact with Microsoft OneNote data through the Microsoft Graph API. It supports comprehensive management tasks including searching page content, creating and editing notes, and automating productivity workflows like daily note creation.203MIT
- FlicenseAqualityFmaintenanceEnables AI agents to read, create, and analyze Microsoft OneNote notebooks, sections, and pages, including automatic image text extraction via Claude Vision.71-
- AlicenseNot gradedqualityAmaintenanceConnects to Microsoft OneNote desktop via COM API, exposing 27 tools for hierarchy, page CRUD, search, rich content, export, health checks, and more. Enables natural-language control of OneNote without API keys or embedded AI providers.MIT