onenote-mcp
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 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 Server
A stdio Model Context Protocol server for Microsoft OneNote. It uses Microsoft Graph delegated permissions and Microsoft device-code authentication.
Requirements
Node.js 20 or newer
A Microsoft account with OneNote access
An MCP client such as Codex
Related MCP server: OneNoteMCP
Install
Option 1: Add from the desktop GUI
Open the Codex desktop app, select Plugins, open Create, and select Add marketplace.

Select Add plugin marketplace and enter:
Source:
https://github.com/seanGSISG/onenote-mcp.gitGit ref:
mainSparse paths: leave blank

Select Add marketplace, return to Plugins, and select the Personal tab. If the new marketplace does not appear, completely restart the desktop app and return to Plugins.
Select Sean's OneNote Plugin and choose Install beside Microsoft OneNote.

Restart the desktop app again, open a new task, and ask:
Authenticate with OneNote.
Option 2: Let Codex configure it
Paste this into a Codex desktop task—no clone is required:
Read https://raw.githubusercontent.com/seanGSISG/onenote-mcp/main/AGENTS.md and follow it to install the complete OneNote plugin in the Codex desktop app.
Codex will add this repository as a plugin marketplace, install the complete OneNote plugin, verify its MCP server, and explain when a desktop-app restart or new task is required. Users do not need to clone the repository or edit MCP JSON or TOML files.
Option 3: Install for development
git clone https://github.com/seanGSISG/onenote-mcp.git
cd onenote-mcp
npm install
npm testThe MCP SDK is installed from npm. A separate SDK checkout and build are no longer required.
Advanced: MCP-only configuration
Add this to ~/.codex/config.toml, replacing the path with the absolute path to onenote-mcp.mjs:
[mcp_servers.onenote]
type = "stdio"
command = "node"
args = ["C:/absolute/path/to/onenote-mcp.mjs"]
enabled = true
startup_timeout_sec = 30Restart Codex after changing MCP configuration.
Authentication
Call
authenticationStatus.If unauthenticated, call
authenticate.Open the returned Microsoft device-login URL and enter the returned code. Use
force: trueto replace a stale or unwanted login.Call
authenticationStatusagain to confirm completion.
Authentication starts in the background, so the authenticate tool returns the device code immediately. The delegated access token is stored at ~/.onenote-mcp/access-token.json. Set ONENOTE_TOKEN_PATH to override that location, or supply GRAPH_ACCESS_TOKEN in the server environment. ONENOTE_CLIENT_ID and ONENOTE_TENANT_ID override the default public client and common tenant.
The server requests the delegated Notes.ReadWrite and User.Read scopes.
Tools
Tool | Purpose |
| Check authentication state and expiration |
| Start device-code authentication |
| List up to |
| Get one notebook by exact ID |
| List up to |
| List up to |
| Get page metadata and optionally its HTML |
| Create a titled XHTML page in an exact section |
| Search page titles |
All resource-specific operations use explicit IDs. The server never silently chooses the first notebook, section, or page.
Development
npm run check
npm test
npm auditThe test suite covers token migration and expiration, asynchronous device-code flow, Graph request construction and errors, XHTML title escaping, and a real MCP stdio handshake.
Available Tools
9 toolsauthenticateARead-only
Start Microsoft device-code authentication. Immediately returns the login URL and user code; authentication completes in the background.
Inputs: force.
authenticationStatusARead-onlyIdempotent
Check whether OneNote is authenticated and whether device-code authentication is pending.
Inputs: no named parameters.
createPageC
Create a OneNote page in an exact section using XHTML content.
Inputs: title (required), sectionId (required), contentHtml (required).
getNotebookARead-onlyIdempotent
Get a OneNote notebook by its exact resource ID.
Inputs: notebookId (required).
getPageARead-onlyIdempotent
Get a OneNote page by its exact resource ID, including HTML content by default.
Inputs: pageId (required), includeContent.
listNotebooksBRead-onlyIdempotent
List OneNote notebooks available to the signed-in user.
Inputs: maxResults.
listPagesCRead-onlyIdempotent
List OneNote page metadata, optionally limited to one section.
Inputs: sectionId, maxResults.
listSectionsARead-onlyIdempotent
List OneNote sections, optionally limited to one notebook.
Inputs: maxResults, notebookId.
searchPagesARead-onlyIdempotent
Search page titles across OneNote. Returns page metadata; use getPage to read a result.
Inputs: query (required), maxResults.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Each tool has a clear, distinct purpose: authentication, listing/getting notebooks/sections/pages, creating pages, and searching. No overlap or ambiguity.
Most tools follow a verb_noun pattern (e.g., listNotebooks, createPage). 'authenticationStatus' is a noun phrase but fits the context. Minor deviation is acceptable.
9 tools cover the core OneNote operations (auth, notebooks, sections, pages) without being excessive. Perfectly scoped for the domain.
Covers read and create operations for pages and notebooks, but lacks update and delete for pages and notebooks. Search is present. Notable gaps exist for full CRUD.
Related MCP Connectors
Create, search, and update notes in an xNotepad AI notebook, with semantic search and AI Q&A.
Save, search and edit your private notes by talking to your AI assistant.
Save and search your LostInNotes notes by meaning from any MCP client. OAuth sign-in or token.
Give Claude a second brain for your notes, tasks and contacts. OAuth; it can't delete anything.
1
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI language models to interact with Microsoft OneNote via a standardized interface, supporting notebook and page management through natural language.34 npm27MIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Microsoft OneNote via the Microsoft Graph API, allowing users to list notebooks and retrieve page content. It supports both personal and organization notebooks with credential caching for efficient authentication.34 npm3MIT
- 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.204MIT
- AlicenseNot gradedqualityDmaintenanceEnables natural language access to Microsoft OneNote notebooks, sections, and pages for reading and listing content.57MIT