onenote-mcp
This server lets an AI assistant sign in to Microsoft OneNote and browse, read, search, and create notebook content through the Microsoft Graph API.
Authenticate with Microsoft via the device code flow (
authenticate), or supply an existing Graph access token (saveAccessToken)Browse notebooks — list all notebooks (
listNotebooks) and get details for one (getNotebook)Explore structure — list sections in a notebook (
listSections) and pages in a section (listPages)Read pages — fetch a page's full HTML content, including text, formatting, and embedded elements (
getPage)Create pages in a notebook with a title and optional HTML content (
createPage)Search pages across all notebooks by query (
searchPages)Generate a notebook table of contents covering all sections and pages (
getNotebookTOC)
Note: the README advertises 19 tools + 1 prompt, but this schema exposes 10 tools (authentication, browsing, reading, creating, searching, and TOC).
Can be run as a Tauri desktop app for a native experience
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 list all my notebooks"
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.
onenote-mcp
Your OneNote notebooks, readable and writable by both you and your AI assistant.
What this wraps
Microsoft OneNote via the Microsoft Graph API — notebooks, sections, and full page content, headless (no screen automation). See docs/WRAPPEE.md for official links, community, and disambiguation from similarly-named projects.
Related MCP server: OneNote MCP Server
Preview
Dashboard | AI Command chat |
|
|
Live backend status, tool surface, activity | Chat with your notes through a local LLM |
Two doors
MCP server, for AI agents — 26 tools + 1 prompt over stdio or streamable HTTP (
:10907/mcp): list/explore notebooks, read page HTML, create pages, title + full-text search, notebook TOC cards. Any MCP client (Claude Desktop, Cursor, Copilot) can browse and edit your notes.Webapp, for humans — dashboard (
:10906) with notebook tree browser, rendered page viewer, search with filter/sort/pagination/CSV export, AI chat over your notes, skills, logging, settings. No prompt engineering required.
What You Can Do
Browse notebooks → sections → pages; read full page content rendered
Search titles instantly; build a local full-text index for body search
Create pages from plain text (paragraphs from blank lines)
Back up everything to Markdown files, any time
Ask the chat about your notes (local LLM via backend proxy, nothing leaks)
Run headless, as a Tauri desktop app, or from a
.mcpbbundle
Install
Installation guide: INSTALL.md - a Windows app, a one-line add-on for Claude Desktop, or a config snippet for Cursor, VS Code and Claude Code.
Example Prompts
"Show me my OneNote notebooks"
"Find pages mentioning quarterly planning"
"Create a page in My Notebook titled Shopping with a bullet list"
Documentation
Doc | Contents |
All install methods, prerequisites | |
Microsoft account + app setup, pitfalls | |
OneNote links, community, disambiguation | |
System, auth chain, scope recipe, ports | |
Env vars, config options | |
All 26 tools + prompt | |
The 401 odyssey: evidence, verdicts | |
Contributing, local setup | |
Common issues, diagnostics |
Requirements
Windows 10/11 (primary), macOS/Linux for server-only use
A Microsoft account (free; your notes stay yours)
Claude Desktop or any MCP client (agents door); a browser (humans door)
Python 3.10+ via
uv, Node.js (source installs only — see INSTALL.md)
License
MIT - see the LICENSE file for details.
Available Tools
19 toolsauthenticateA
Start the Microsoft authentication flow using device code.
This tool initiates the OAuth 2.0 device code flow for Microsoft Graph API. The user will be provided with a URL and code to complete authentication in their browser.
Return Format
Confirmation string: "✅ Authentication successful" or "❌ ..." on failure.
Examples
authenticate()
Inputs: no named parameters. Returns: result
onenote_append_pageA
Append plain text to the end of a OneNote page.
Return Format
Confirmation string: "✅ Appended to page <id>".
Examples
onenote_append_page(page_id="0-PG123...", content="Follow-up note\n\nSecond paragraph")
Inputs: content (required), page_id (required). Returns: result
onenote_create_pageA
Create a new page in a OneNote notebook.
Return Format
Confirmation string: "✅ Page '' created successfully with ID: <id>".
Examples
onenote_create_page(notebook_id="0-ABC123...", title="Meeting Notes", content="Notes...")
Inputs: title (required), notebook_id (required), content. Returns: result
onenote_exportA
Back up notebooks to Markdown files (one per page + index).
Writes to data/exports//, runs in the background - check onenote_export_status.
Return Format
Markdown string confirming started/already-running.
Examples
onenote_export() onenote_export(notebook_id="0-ABC123...")
Inputs: notebook_id. Returns: result
onenote_export_statusA
Show Markdown backup progress (files written, output dir).
Return Format
Markdown string with state, pages done/total, file count, output dir.
Examples
onenote_export_status()
Inputs: no named parameters. Returns: result
onenote_get_notebookB
Get details of a specific OneNote notebook.
Return Format
Markdown string with notebook name, ID, sections URL, and section groups URL.
Examples
onenote_get_notebook(notebook_id="0-ABC123...")
Inputs: notebook_id (required). Returns: result
onenote_get_notebook_tocA
Generate a table of contents for a OneNote notebook.
Creates a comprehensive overview of all sections and pages, useful for navigation.
Return Format
Markdown string: "📚 Table of Contents: " with stats and per-section page lists.
Examples
onenote_get_notebook_toc(notebook_id="0-ABC123...")
Inputs: notebook_id (required). Returns: result
onenote_get_pageA
Get the complete HTML content of a OneNote page.
Retrieves the full page content including text, formatting, and embedded elements.
Return Format
Markdown string: "📄 Page Content:" with title, ID, timestamps, and the raw HTML body.
Examples
onenote_get_page(page_id="0-PG123...")
Inputs: page_id (required). Returns: result
onenote_helpA
List the available OneNote MCP tools and when to use each.
Return Format
Markdown string enumerating the 19 tools with one-line usage notes.
Examples
onenote_help()
Inputs: no named parameters. Returns: result
onenote_index_startA
Build (or refresh) the local full-text search index.
Walks all notebooks and indexes page bodies into SQLite FTS5 (skips unchanged pages). Runs in the background - check onenote_index_status.
Return Format
Markdown string confirming started/already-running.
Examples
onenote_index_start()
Inputs: no named parameters. Returns: result
onenote_index_statusA
Show full-text index build progress and coverage.
Return Format
Markdown string with state, pages done/total, indexed page count.
Examples
onenote_index_status()
Inputs: no named parameters. Returns: result
onenote_list_notebooksA
List all Microsoft OneNote notebooks accessible to the signed-in account.
Return Format
Markdown string: "📓 Your OneNote Notebooks:" followed by numbered notebooks with ID.
Examples
onenote_list_notebooks()
Inputs: no named parameters. Returns: result
onenote_list_pagesB
List all pages in a OneNote section.
Return Format
Markdown string: "📄 Pages in section:" with numbered pages, created and modified dates.
Examples
onenote_list_pages(section_id="0-SEC123...")
Inputs: section_id (required). Returns: result
onenote_list_sectionsA
List all sections in a OneNote notebook.
Return Format
Markdown string: "📂 Sections in notebook:" with numbered sections and their page URLs.
Examples
onenote_list_sections(notebook_id="0-ABC123...")
Inputs: notebook_id (required). Returns: result
onenote_recentA
List recently modified pages across all notebooks.
The domain-inbox answer to "what changed": TOC walk, newest first.
Return Format
Markdown string with dated page entries (title, notebook/section, id).
Examples
onenote_recent() onenote_recent(days=30)
Inputs: days. Returns: result
onenote_save_access_tokenA
Save a Microsoft Graph access token for later use.
Persists the token to the local token file so subsequent tools can call the Graph API.
Return Format
A confirmation string: "✅ Access token saved successfully" or "❌ ..." on failure.
Examples
onenote_save_access_token(token="eyJhbGciOi...") # paste a token from az login / Graph explorer
Inputs: token (required). Returns: result
onenote_search_pagesA
Search for pages across all OneNote notebooks.
Two modes: 'title' matches page titles via TOC walk (always available); 'fulltext' queries the local FTS index over page bodies (build it first).
Return Format
Markdown string: "🔍 Search Results for '':" with numbered matching pages.
Examples
onenote_search_pages(query="quarterly report") onenote_search_pages(query="hiking checklist", mode="fulltext")
Inputs: query (required), mode. Returns: result
show_notebooks_cardB
Show the user's OneNote notebooks as a rich in-chat card.
Return Format
ToolResult: PrefabApp card with one row per notebook, plus a plain-text markdown fallback for hosts that do not render apps.
Examples
show_notebooks_card()
Inputs: no named parameters.
shutdown_serverA
Shut down the onenote-mcp server gracefully.
Use when the user or an agent explicitly asks to stop the server process.
Return Format
Confirmation string: "✅ Server shutting down...".
Examples
shutdown_server()
Inputs: no named parameters. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 19 tools
Most tools have a clearly distinct resource and action, but there is some overlap: onenote_list_notebooks and show_notebooks_card present the same notebook data in different formats, and onenote_get_notebook_toc overlaps with list_sections/list_pages navigation. The background export/index pairs are kept distinct by their status tools, so ambiguity is limited.
The majority of tools use an onenote_ prefix with verb_noun naming, but authenticate, shutdown_server, and show_notebooks_card lack that prefix, and onenote_recent is not a verb_noun form. This creates mixed conventions that reduce predictability.
With 19 tools the server is slightly heavy for a OneNote integration, but the extra tools cover necessary background export/index status checks plus auth, help, shutdown, and card presentation. The core read/create/search/export surface is reasonably scoped.
The toolset covers reading notebooks, sections, and pages, plus page creation, appending, search, export, and indexing. However, it lacks delete and update/replace operations for pages, sections, or notebooks, and there is no way to create a notebook or section, which are notable lifecycle gaps.
Maintenance
Related MCP Connectors
One MCP server for the services your AI needs: memory, files, Microsoft 365, kanban and more.
Google Keep-style notes app with an MCP server for AI agents to read/write notes.
Markdown-based note-taking with a hosted MCP server. Your notes serve you and your AI.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Related MCP Servers
- AlicenseNot gradedqualityNot gradedmaintenanceAn MCP server that enables AI assistants to programmatically browse and interact with OneNote notebooks shared via web links through browser automation.36 npm4MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI language models like Claude to interact with Microsoft OneNote, allowing access to notebooks, creating pages, searching notes, and analyzing content directly through the AI interface.39 npm135MIT
- AlicenseNot gradedqualityBmaintenanceA local MCP server that lets AI assistants read and edit OneNote pages on Windows via COM automation, without cloud authentication.2MIT
- AlicenseAqualityCmaintenanceMCP server that connects AI tools to Microsoft OneNote for Business via the Microsoft Graph API, enabling listing, creating, and updating notebooks, sections, and pages.6MIT

