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-mcplist 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 — 19 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
Quick Install
just bootstrap # deps (Windows: winget installs in docs/DEVELOPMENT.md)
just serve # backend :10907 + webapp :10906, browser opens itselfFirst run: open the Notebooks page → Sign in with Microsoft (free app registration, personal accounts OK) — once. The backend renews the session itself every hour, so you stay signed in for ~90 days without touching anything. Full paths: INSTALL.md, docs/ONBOARDING.md.
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 19 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()
| 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?
With no annotations, the description carries the full burden, and it does disclose useful behavior: an interactive OAuth device-code flow where the user receives a URL and code to finish in a browser. However, it omits whether the call blocks waiting for the user, whether/how the resulting token is stored (relevant given the onenote_save_access_token sibling), and any scope or expiry details.
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 core action is front-loaded in the first sentence, followed by a brief mechanism explanation and a compact return-format note. The section headers and near-empty example add minor padding, but the content is well-organized and short.
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 authentication trigger, the description covers purpose, mechanism, user interaction, and outcome, and an output schema already exists so return values need not be detailed. It is largely complete, with only the token-storage and blocking behavior left implicit.
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 tool takes zero parameters, so there are no parameter semantics to explain; the baseline for a 0-param tool applies. Nothing in the description is needed to disambiguate inputs since the schema is empty.
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: 'Start the Microsoft authentication flow using device code,' and clarifies the mechanism (OAuth 2.0 device code flow for Microsoft Graph API). It does not, however, distinguish itself from the sibling onenote_save_access_token, leaving the boundary between auth initiation and token persistence unstated.
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 by the name and the flow description, and it conveys that the user will need a browser to complete it. But there is no explicit statement of when to call this versus alternatives (e.g., onenote_save_access_token), nor any prerequisites or when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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")
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | Plain text to append (blank lines = paragraphs) | |
| page_id | Yes | The ID of the page to append to |
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 burden. It does usefully disclose that only plain text is accepted and gives the exact confirmation string returned, but it omits failure behavior, whether existing page content is preserved, and any auth/permission requirements for a mutation 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?
Front-loads the purpose in one sentence, then adds a compact return-format line and a worked example. The sections are short and each earns its place, though the Return Format block partially duplicates the existing output schema.
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 two-parameter append tool with a 100%-described schema and an output schema, the description is sufficient to call it correctly. Missing only edge-case behavior for a mutation operation (invalid page_id, permission failures), which is minor here.
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 100% with both parameters described, so the schema already does the heavy lifting. The example reinforces the newline-as-paragraph convention, but that is also stated in the schema, so the description adds little beyond it.
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 (OneNote page end), and the verb itself contrasts with the sibling onenote_create_page without needing to name it. It does not explicitly differentiate from onenote_get_page or onenote_export, so it falls just short of a 5.
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 by the verb 'append' versus sibling create/get tools, but there is no explicit statement of when to prefer this over onenote_create_page or what preconditions exist (e.g., page must already exist). Implied guidance only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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...")
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | The title of the new page | |
| content | No | Optional HTML content for the page | |
| notebook_id | Yes | The ID of the notebook to create the page in |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With empty annotations, the description must carry the behavioral burden. It discloses the return format via an example, which is useful, but doesn't mention permissions, whether creation is idempotent, or what happens on failure. The example adds some clarity but leaves gaps.
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 front-loaded with the core action, followed by a concise return format section and an example. No superfluous text, though the example could be slightly tighter.
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 three parameters, full schema coverage, and an output schema, the description is adequate. It includes an example call and return format, but lacks explicit guidance on when to use this tool versus alternatives, which is a minor omission for a straightforward creation tool.
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 100%, so the schema already documents all parameters. The example shows the parameters in use, but the description does not add semantic meaning beyond the 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?
The description states a specific verb and resource ('Create a new page in a OneNote notebook'), clearly distinguishing it from siblings like onenote_append_page or onenote_list_pages.
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 usage context is implied by the name and siblings (e.g., use this to create, not append), but there are no explicit when-to-use vs. alternatives or prerequisites stated in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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...")
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | No | Notebook ID, or empty for all notebooks |
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 disclosure burden and does well: it names the write destination (data/exports/<timestamp>/), discloses asynchronous/background execution, and notes the 'already-running' response state implying idempotency guard. It omits prerequisites such as auth requirements, overwrite behavior on repeat runs, and any size limits, keeping it out of the top band.
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, then organized under Return Format and Examples headers; the async pointer to onenote_export_status is placed early where it matters. The explicit Return Format section is somewhat redundant given an output schema exists, but it is brief and not wasteful.
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?
Covers the essential facts an agent needs: what is produced, where it lands, that it is asynchronous, and which sibling reports progress. Because an output schema exists the return-value explanation is not strictly required, and minor gaps (auth, overwrite semantics) are low-risk for a background read/export operation.
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 100% ('Notebook ID, or empty for all notebooks'), so the schema already documents the single parameter. The description adds only an example call showing notebook_id usage, which is marginal value beyond the schema—baseline 3 applies.
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 ('Back up notebooks to Markdown files') plus the exact output shape ('one per page + index'), which cleanly separates it from siblings like onenote_index_start or onenote_get_page. An agent can identify the tool's function without opening the schema.
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?
Gives clear operational context: it runs in the background and directs the agent to call onenote_export_status to follow up, which is the key routing decision. It does not explicitly state when not to use it or distinguish it from onenote_index_start, so it stops short of a full when/when-not statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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()
| 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 are provided, so the description carries the full burden. It discloses return format (Markdown string with state, pages done/total, file count, output dir), which is helpful behavioral context. However, it does not describe whether this is a safe read-only operation, potential side effects, or error conditions, leaving gaps for a monitoring 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?
The description is front-loaded with the primary purpose and then efficiently structured with sections for return format and examples. It is brief and every sentence adds value, though the examples section is redundant given the zero-parameter schema.
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's complexity (zero parameters, output schema exists), the description is largely complete by stating the return format and purpose. However, it lacks guidance on when to use this tool versus similar status tools (e.g., onenote_index_status), which would enhance completeness for an agent navigating multiple status tools.
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 tool takes zero parameters, so the schema description coverage is 100% and the description does not need to document any inputs. The baseline score for zero parameters is 4, as the description correctly omits parameter details, focusing instead on output semantics.
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 a specific purpose: 'Show Markdown backup progress,' specifying files written and output directory. However, it does not differentiate from sibling tools like onenote_index_status, which is also a status tool, leaving some ambiguity about when to use one versus the other.
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 during an export operation but provides no explicit guidance on when to call this tool, such as prerequisites (e.g., must be called after starting an export) or timing. No alternatives or exclusions are mentioned, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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...")
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | Yes | The ID of the notebook to retrieve |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries the full burden. It does disclose the return format (markdown with name, ID, sections URL, section groups URL), which is genuine behavioral context, but it says nothing about auth requirements, error behavior for invalid IDs, or read-only semantics.
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?
Short and front-loaded: one-line purpose followed by return format and an example. Headers are used cleanly and nothing is padded, though the sections are almost trivially small.
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 one-parameter read tool with a full output schema, the definition covers purpose, return shape and an example. Missing only sibling differentiation and any note on auth or failure modes, which is a minor gap at this complexity.
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 100% and the single parameter is fully documented in the schema, so the baseline is 3. The example call reinforces the notebook_id argument but adds no format or source guidance beyond the 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 and resource ('Get details of a specific OneNote notebook'), which is unambiguous. However it does not distinguish itself from close siblings such as onenote_get_notebook_toc or onenote_list_notebooks, so the agent must infer the boundary.
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 when-to-use guidance and no mention of alternatives. With siblings like onenote_get_notebook_toc and onenote_list_notebooks present, the description should say when to pick this one; it gives only a bare example call.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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...")
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | Yes | The ID of the notebook |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries the full behavioral burden. It discloses the output format (a Markdown string with stats and per-section page lists), which is useful, but says nothing about read-only safety, authentication requirements, or size/rate limits. Given a mutation-free retrieval tool, this partial disclosure is adequate but incomplete.
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 front-loaded with the core purpose and uses clear headers for return format and examples. It is slightly longer than needed for a single-parameter read tool, but every section is scannable and relevant.
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, yet the description still summarizes the Markdown return shape, which is helpful. Combined with the example, an agent has enough to call it correctly; only usage routing against siblings is thin.
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 is one required parameter with 100% schema description coverage, so the schema already documents notebook_id. The example call shows the expected ID format, adding marginal value, but nothing beyond what the structured fields provide. Baseline 3 applies.
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 states a specific verb and resource ('Generate a table of contents for a OneNote notebook') and clarifies scope by saying it covers 'all sections and pages', which separates it from onenote_get_notebook and the per-level list tools. It stops short of explicitly naming which sibling to prefer, but the aggregation scope is clear.
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?
'Useful for navigation' implies when the tool is helpful, but there is no explicit when-to-use versus onenote_get_notebook, onenote_list_sections, or onenote_list_pages. The agent must infer the choice from the aggregation scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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...")
| Name | Required | Description | Default |
|---|---|---|---|
| page_id | Yes | The ID of the page to retrieve |
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 burden. It does disclose the return shape (Markdown string with title, ID, timestamps, raw HTML body), which is useful behavioral framing, but it says nothing about authentication requirements, rate limits, error cases, or how large pages are handled. It's a safe read implied by 'Get', but the disclosure is thin for an annotation-free 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?
Front-loaded with the core purpose, and the following sections are short and skimmable. The header scaffolding (Return Format, Examples) is slightly heavy for a one-parameter tool, and 'complete HTML content' / 'full page content' repeat the same idea, but there is little true waste.
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 is simple: one required, fully documented parameter, an output schema covering the return value, and an unambiguous read action. The description covers what an agent needs to invoke it; only edge behavior (large pages, auth failures) is unaddressed, which is a minor gap.
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 100% for the single page_id parameter, so the schema already documents its meaning; baseline is 3. The example ('onenote_get_page(page_id="0-PG123...")') hints at the ID format, but no meaning is added beyond what the schema states.
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 states a specific verb and resource ('Get the complete HTML content of a OneNote page') and clarifies that the full body, not a snippet, is returned. It is clearly distinct from list/search siblings in spirit, but never names an alternative to route the agent explicitly, so it stops short of a 5.
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 only implied by the word 'complete' (i.e., use this when you need the actual page body rather than a listing or search hit). There is no explicit statement of when to prefer this over onenote_search_pages, onenote_list_pages, or onenote_export, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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()
| 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 are present, but this is a parameterless read-only discovery call, so the behavioral surface is minimal. The description discloses the return format explicitly (a Markdown string enumerating 19 tools with one-line usage notes), which is the key thing an agent needs to know.
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-loads the purpose, then uses headed sections (Return Format, Examples) for scannability. The Examples block is nearly content-free ('onenote_help()'), but overall it is tight and well-structured.
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 strictly required, yet the description still summarizes the return format. For a trivial parameterless help tool, nothing an agent needs in order to call it is missing.
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 tool takes zero parameters, so the baseline of 4 applies. There is nothing for the description to clarify beyond 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 clear verb+resource: 'List the available OneNote MCP tools and when to use each.' It is unambiguous and clearly distinct from the action-oriented siblings (list_pages, create_page, export, etc.), which an agent cannot confuse with a discovery/help tool.
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 explains that the tool documents when to use each of the 19 other tools, but never states when the agent itself should call this help tool (e.g., on ambiguous requests or at session start). Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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()
| 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, so the description carries the burden. It discloses key behavior: it walks all notebooks, skips unchanged pages, and runs asynchronously in the background. It does not state cost, rate limits, or what happens if an index already exists and is partially rebuilt, but the async and skip-unchanged details are valuable and non-obvious.
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 purpose, then mechanism and async behavior, then a brief return-format note and an example. Every sentence adds information; nothing is wasted.
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 description covers the tool's purpose, scope, indexing strategy, background execution, and follow-up status tool, which is everything needed for a zero-parameter tool. The return format note is redundant with the output schema but harmless; the async and skip-unchanged details are the critical context an agent needs.
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?
Zero parameters, so 4 is the correct baseline.
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?
Specific verb (build/refresh) and resource (local full-text search index), plus mechanism (SQLite FTS5) and scope (walks all notebooks, indexes page bodies). It clearly distinguishes itself from the sibling onenote_search_pages, which queries the index rather than building it.
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 when to build (fresh index) and how to follow up: 'Runs in the background - check onenote_index_status.' It implies usage (build before searching) without an explicit when-not, but the pairing with onenote_index_status gives a clear operational context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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()
| 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 are present, so the description carries the burden. It does disclose the return shape ('state, pages done/total, indexed page count') and the operation is obviously read-only, but it says nothing about how long a build takes, what states are possible, or error behavior. Adequate but thin for a zero-annotation 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?
The purpose is front-loaded in the first line, followed by a compact return-format note and a trivial example. It is well organized with no wasted prose, though the header scaffolding is slightly heavy for a one-line operation.
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 no-parameter, no-annotation status query this is nearly complete. Since an output schema exists, the return-format block is somewhat redundant, and the lack of guidance on polling cadence or how it relates to onenote_index_start is the only real gap.
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 tool takes zero parameters, which is the baseline-4 case per the rubric; there is nothing to document and the schema is fully covered. The description adds no parameter meaning because none is 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?
The description names a specific verb and resource: 'Show full-text index build progress and coverage.' An agent can tell this is a status/monitoring tool. It does not, however, distinguish itself from the sibling onenote_index_start, which it is clearly paired with.
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 only implied — an agent infers this is called to monitor an in-progress index build, most likely after onenote_index_start. There is no explicit when-to-use, when-not-to-use, or pointer to the start/tool pairing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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()
| 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?
Annotations are empty, so the description carries the full burden. It does disclose the return shape (a Markdown string with a header line and numbered notebooks including IDs), which is real behavioral information. It says nothing about authentication prerequisites despite an authenticate/onenote_save_access_token sibling pair, nor about truncation or result limits for accounts with many notebooks.
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?
Very short and front-loaded: the purpose sentence comes first, followed by a compact Return Format section and a single example call. Section headers make it scannable and no sentence is wasted.
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 zero parameters and an output schema present, the description's job is small, and it covers purpose plus return format adequately. The gaps are the missing authentication precondition and the absence of any routing hint relative to the many sibling listing tools.
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 tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool is 4. The schema coverage figure of 100% is trivially satisfied by an empty property set.
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: 'List all Microsoft OneNote notebooks accessible to the signed-in account.' The scope (signed-in account) is precise. However, it never distinguishes itself from siblings that also enumerate OneNote content, such as onenote_list_sections, onenote_list_pages, or show_notebooks_card, so an agent must infer the hierarchy.
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?
There is no when-to-use guidance and no mention of alternatives. An agent facing onenote_recent, onenote_search_pages, onenote_get_notebook and show_notebooks_card must guess which entry point to call. The only clue is the unavoidable inference that listing notebooks is the top of the hierarchy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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...")
| Name | Required | Description | Default |
|---|---|---|---|
| section_id | Yes | The ID of the section |
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 full behavioral burden. It does describe the return shape (numbered pages with created/modified dates), which is useful, but says nothing about pagination limits, behavior on an invalid or empty section, or whether this is a pure read. Some value added, key traits undisclosed.
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 sentence is front-loaded and terse, and the example is compact. The Return Format block is somewhat redundant given an output schema exists, but it is short and the overall structure is easy to scan.
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 return-format section is largely redundant, and the description omits what matters for a listing tool: result limits, pagination, and ordering. It is adequate to call the tool correctly but leaves meaningful operational questions unanswered.
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 100% for the single section_id parameter, so the schema already does the documenting; baseline 3 applies. The example value '0-SEC123...' adds a mild hint about ID format, but no new semantic meaning beyond the 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 and resource with scope: 'List all pages in a OneNote section.' An agent can tell this lists pages rather than sections or notebooks. However, it never distinguishes itself from siblings like onenote_search_pages or onenote_get_page, which overlap on the same resource.
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 gives no when-to-use guidance, no prerequisites (e.g. must the section be indexed or authenticated first?), and names no alternatives. The presence of onenote_search_pages as a sibling makes the missing routing guidance a real gap, since an agent must guess between listing and searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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...")
| Name | Required | Description | Default |
|---|---|---|---|
| notebook_id | Yes | The ID of the notebook |
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 discloses the return shape (a Markdown string with numbered sections and page URLs) and gives an example call, which is useful, but it is silent on auth requirements, error behavior, and whether results are paginated or complete.
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 one-sentence purpose followed by clearly labeled Return Format and Examples sections. Short, well-organized, and every block earns its place.
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 single-parameter read tool with an output schema, the definition covers purpose, return shape, and an example, which is nearly sufficient. Missing only auth/prerequisite context and routing against the similar TOC sibling.
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 100% with a single required notebook_id parameter, so the schema already documents it. The example shows a sample ID format ("0-ABC123..."), which adds minor value, but no new semantics beyond the 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 and resource: "List all sections in a OneNote notebook." An agent can distinguish it from onenote_list_pages and onenote_list_notebooks by resource. However, it does not explicitly differentiate from the sibling onenote_get_notebook_toc, which likely also returns section info.
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 by the name and the scope (sections within a notebook) but never stated as when-to-use. No guidance about prerequisites such as authentication or what to do if the notebook ID is unknown, and no exclusions against the similar TOC tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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)
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Lookback window in days (1-90) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are empty, so the description carries the full burden. It usefully discloses the traversal method (TOC walk), ordering (newest first), and return shape (markdown with dated entries including title/notebook/section/id). However, it omits auth requirements, rate limits, and any failure/empty-result behavior.
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 one-line purpose followed by clearly labeled Return Format and Examples sections; every line is short and scannable. The 'domain-inbox answer to "what changed"' framing is slightly jargon-y but not wasteful.
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?
Only one optional parameter, fully documented, and an output schema is present. The description covers purpose, ordering, and invocation examples sufficiently; the remaining gap is the absence of any mention of upstream auth or sibling selection guidance.
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 100% — the `days` parameter already documents type, default 7, and the 1-90 range. The examples (`onenote_recent()` vs `onenote_recent(days=30)`) demonstrate the parameter in practice but add no semantic detail beyond what the schema states, so baseline 3 applies.
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 (list) and a scoped resource (recently modified pages across all notebooks), plus ordering ('newest first'). Distinguishes itself in scope from onenote_list_pages and onenote_search_pages, though it doesn't name them 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 phrase 'The domain-inbox answer to "what changed"' implies a recency-monitoring use case, but it never states when to prefer this over onenote_search_pages or onenote_list_pages, nor any exclusions. Usage is implied, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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
| Name | Required | Description | Default |
|---|---|---|---|
| token | Yes | The Microsoft Graph access token to save |
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 does disclose the key side effect (writing to a local token file that subsequent tools depend on), which is genuinely useful. It omits whether an existing token is overwritten, where the file lives, and that a credential is being stored in plaintext locally — meaningful gaps for a credential-persistence operation.
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?
Content is front-loaded with the core action first, followed by return format and an example. The headed sections are easy to scan, though the '## Return Format' section is somewhat redundant given an output schema exists, adding bulk to a single-parameter 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?
For a one-parameter persistence tool with an output schema present, the description covers what it does, the side effect, and the expected response, which is enough to invoke it correctly. The remaining risk area — overwrite behavior and credential-storage implications — is not addressed, so it falls short of fully complete.
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?
Only one parameter, and schema description coverage is 100%, so the schema already documents 'token' fully. The description adds light context via the example (truncated JWT format, source from az login/Graph explorer), but no format or validation rules beyond what the schema states. Baseline 3 applies.
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 gives a specific verb+resource ('Save a Microsoft Graph access token') and explains the consequence ('Persists the token to the local token file so subsequent tools can call the Graph API'), so the purpose is unambiguous. It does not differentiate itself from the sibling 'authenticate', which appears to serve a related credential concern.
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 example comment ('paste a token from az login / Graph explorer') implies the precondition that the agent already possesses a token, which is useful implied guidance. However, there is no explicit when-to-use versus the sibling 'authenticate', no statement of when this should be skipped, and no note on whether it overwrites an existing token.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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")
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search mode: 'title' (always available) or 'fulltext' (needs the index; see onenote_index_start) | title |
| query | Yes | Search query string |
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 real behavioral traits: 'title' is always available while 'fulltext' requires a pre-built index. It also documents the return format. It omits auth requirements and any index staleness/rate-limit caveats, so not a 5.
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-loads purpose, then modes, then return format and examples; every block is useful. The section headers and example repetition add slight bulk but nothing is truly wasted.
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 two parameters and an existing output schema, the definition covers mode availability, the index prerequisite, and an example invocation. Return-value explanation is arguably redundant with the output schema but harmless; overall it is complete enough to call 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?
Schema description coverage is 100%, so the mode and query parameters are already documented in the schema, making 3 the baseline. The description's mode explanation largely restates the schema's mode description without adding format or syntax detail beyond it.
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 (search) and resource (pages) with scope ('across all OneNote notebooks'), which is clearer than a bare name restatement. It does not explicitly differentiate itself from siblings like onenote_list_pages or onenote_recent, so it stops short of a 5.
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?
Explicitly explains the two modes and the condition that gates 'fulltext' ('build it first', referencing onenote_index_start), which is genuine when-to-use guidance. It stops short of stating when to prefer this over list_pages or recent, so no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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()
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does disclose the return shape (card with one row per notebook, plus a markdown fallback) which is useful behavioral context, but it says nothing about auth requirements, rate limits, or whether this is a read-only operation.
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 one-line purpose followed by short Return Format and Examples sections. The sections are slightly redundant for such a trivial tool but nothing is wasted.
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-param read tool with no output schema, the description covers purpose, return format, and example. It is adequate but incomplete: no auth prerequisite or alternative-tool routing, which matters given the many overlapping OneNote siblings.
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?
Zero parameters, so baseline 4 applies. The description correctly shows an empty-argument invocation example, reinforcing that the tool takes no input.
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 (show) and resource (notebooks) with the rendering mode (in-chat card). It is distinguishable from onenote_list_notebooks only implicitly via 'card', which may not be enough for an agent to disambiguate the two siblings without reading both schemas.
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 when-to-use guidance is provided. It never explains when a card view is preferable to onenote_list_notebooks, which is the obvious alternative for the same data, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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()
| 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?
Annotations are empty, so the description carries the full burden. 'Gracefully' hints at a clean shutdown, but it does not disclose whether this is irreversible, what happens to in-flight operations, whether tokens/session state are cleared, or any effect on running indexing jobs — meaningful gaps for a destructive, terminal operation.
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, then cleanly sectioned for usage, return format, and example. The markdown headers are slightly heavy for a zero-parameter tool but nothing is wasted or ambiguous.
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-param tool with an output schema, the definition gives the agent everything needed to select and invoke it. The 'Return Format' block partially duplicates the output schema, but the usage condition and call example round it out adequately.
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 tool takes zero parameters, so the baseline of 4 applies; there is nothing for the description to disambiguate and it correctly shows the no-argument call form in the example.
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 ('shut down') and resource ('the onenote-mcp server'), with the manner ('gracefully') included. It is immediately distinguishable from every sibling (list/export/create/search tools) without opening the schema.
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?
Explicitly names the trigger condition: when the user or an agent explicitly asks to stop the server process. That is a clear usage context, though no exclusion or alternative is offered (arguably none exists for a single shutdown tool).
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.
27 tool updates
v1.0.4- Removed
createPage - Removed
getNotebook - Removed
getNotebookTOC - Removed
getPage - Removed
listNotebooks - Removed
listPages - Removed
listSections - Added
onenote_append_page - Added
onenote_create_page - Added
onenote_export - Added
onenote_export_status - Added
onenote_get_notebook - Added
onenote_get_notebook_toc - Added
onenote_get_page - Added
onenote_help - Added
onenote_index_start - Added
onenote_index_status - Added
onenote_list_notebooks - Added
onenote_list_pages - Added
onenote_list_sections - Added
onenote_recent - Added
onenote_save_access_token - Added
onenote_search_pages - Removed
saveAccessToken - Removed
searchPages - Added
show_notebooks_card - Added
shutdown_server
10 tool updates
v1.0.0- First observed
authenticate - First observed
createPage - First observed
getNotebook - First observed
getNotebookTOC - First observed
getPage - First observed
listNotebooks - First observed
listPages - First observed
listSections - First observed
saveAccessToken - First observed
searchPages
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
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.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
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.16 npm4MIT
- AlicenseNot gradedqualityCmaintenanceA 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.14 npm124MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server that lets AI assistants read and edit OneNote pages on Windows via COM automation, without cloud authentication.1MIT
- 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

