OneNote MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| XDG_CONFIG_HOME | No | Override the config directory. Tokens are stored at `<dir>/onenote-mcp/tokens.json`. | |
| ONENOTE_MCP_CLIENT_ID | No | Application (client) ID of your Microsoft Entra app registration. | |
| ONENOTE_MCP_HTTP_HOST | No | Bind address for the HTTP transport. Defaults to `127.0.0.1`. `--host` wins. | 127.0.0.1 |
| ONENOTE_MCP_HTTP_PORT | No | Listen port for the HTTP transport. Defaults to `3000`. `--port` wins. | 3000 |
| ONENOTE_MCP_TENANT_ID | No | Tenant ID. Defaults to `common`, which works for both personal and work accounts. | common |
| ONENOTE_MCP_HTTP_TOKEN | No | Shared bearer token for the HTTP transport. Required when `--transport http`. | |
| ONENOTE_MCP_TOKEN_CACHE | No | Verbatim `tokens.json` contents used to seed the cache on a headless host. Applied only in `--transport http` mode when no cached token exists yet. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_notebooksA | Lists all OneNote notebooks accessible to the signed-in user, including notebook IDs needed for other tools. |
| list_sectionsA | Lists OneNote sections, optionally scoped to a single notebook by ID. Section IDs are needed by create_page. |
| list_section_groupsC | Lists OneNote section groups (folders that contain sections and/or other section groups), optionally scoped to a single notebook. |
| search_pagesA | Searches OneNote pages by full-text query. Returns matching pages with IDs, titles, and parent section/notebook info. |
| read_pageA | Returns the full content and metadata for a single OneNote page. Defaults to HTML; pass format="markdown" for converted output. |
| create_notebookB | Creates a new top-level OneNote notebook with the given display name. |
| create_sectionA | Creates a new section inside the given notebook or section group. Exactly one of notebookId or sectionGroupId must be provided. |
| create_section_groupA | Creates a new section group inside the given notebook or another section group. Exactly one of notebookId or sectionGroupId must be provided. |
| create_pageA | Creates a new OneNote page in the given section. Accepts Markdown (default) or HTML; optional |
| update_pageA | Applies one or more edits to an existing OneNote page (append, prepend, insert, replace, delete). Targets are |
| delete_pageA | Permanently deletes a OneNote page by ID. There is no undo — confirm with the user before calling. |
| list_pagesA | Lists pages in a OneNote section, or across every section of a notebook, without needing a search term. Use it to browse what exists and get page IDs. Note: there is no account-wide page listing — Graph rejects it on accounts with many sections, so scope by section or notebook. |
| find_pagesA | Searches OneNote pages by text and returns matches with page IDs, titles, and where they live. Works section-scoped, notebook-scoped, or across the whole account. This is the working alternative to search_pages, which relies on a Graph search endpoint that rejects requests on this account. |
| get_notebook_treeA | Maps the OneNote structure: notebooks, the section groups inside them, and every section with its ID. Start here when you need section IDs for list_pages, create_page, or find_pages. |
| copy_pageA | Copies a page into another section, alongside its original. The source page is left untouched — this never moves or deletes anything. |
| auth_statusA | Reports which Microsoft account is signed in, the token cache location, and whether the cached token still works. Use it first when a OneNote call fails with an authentication error. |
| indexA | Maintains a local mirror of the OneNote structure (notebook/section/page names and IDs) so page lookup and search are instant instead of costing a Graph round trip each. Search and status are offline. Sync/rebuild hit Graph and can take minutes on a large account — prefer sync, and scope it with |
| resolve_pageA | Turns a human description of a page ("今日任务 / 香港", or a title alone) into a real page ID, served from the local index. Use this before reading or editing a page you named rather than identified. Stored IDs go stale when a page is moved, so this verifies against Graph on a miss and repairs the index. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 18 tools
Most tools target distinct resources and actions, but search_pages and find_pages are nearly identical in purpose, with find_pages described as a working alternative to a broken search endpoint. This creates a real selection hazard. Other pairs like list_sections and get_notebook_tree overlap somewhat but are differentiated by scope.
The overwhelming majority of tools follow a clear verb_noun snake_case pattern: list_notebooks, create_page, update_page, delete_page, copy_page. Minor deviations exist with auth_status and index, which are nouns rather than verb_noun actions, but the pattern remains predictable and readable.
18 tools is on the heavy side for a single-domain server and includes some redundancy, particularly search_pages/find_pages. The count is still within a usable range, but the set feels slightly bloated due to overlapping search functionality and support tools like index and resolve_page.
Page lifecycle coverage is solid: create, read, update, delete, list, search, and copy all exist. However, notebooks, sections, and section groups only support create/list, with no update, delete, or move operations, leaving noticeable structural management gaps. Search also has a redundant/broken path, which suggests incomplete cleanup of the tool surface.