Skip to main content
Glama

OneNote for Claude

Talk to your OneNote notebooks. Search your notes, pull action items out of meeting minutes, or write a new page — without leaving the conversation.

Install · What you can ask · Privacy · Troubleshooting


You   What did I write about the Q3 roadmap?
Claude Found "Q3 Planning" in your Work notebook, updated July 12.
       You listed three priorities: ship the beta, hire a designer,
       and move billing off the legacy system...

You   Add a note that the beta slipped to September.
Claude Added to "Q3 Planning".

Install

Claude Desktop

  1. Download the latest release — the file ending in .mcpb

  2. Double-click it. Claude Desktop installs it.

  3. Ask Claude: "List my OneNote notebooks." A browser window opens to sign in to Microsoft.

That's it. No terminal, nothing else to install.

If double-clicking does nothing, open Claude Desktop → Settings → Extensions, and drag the file onto that window.

Cursor, Windsurf, VS Code, and others

Add this to your MCP settings:

{
  "mcpServers": {
    "onenote": {
      "command": "npx",
      "args": ["-y", "@joneericdelacruz/onenote-mcp"]
    }
  }
}

Restart the app, then ask it to list your notebooks.

Requires Node.js 20 or newer.

git clone https://github.com/JonEricDelaCruz/onenote-mcp.git
cd onenote-mcp
npm install
npm run setup

npm run setup signs you in and configures your AI app automatically — it finds the config file, backs it up, and adds this server without disturbing anything else you have configured.

Related MCP server: OneNote MCP Server

What you can ask

Anything you'd normally dig through OneNote for:

  • "Find my notes about the vendor contract."

  • "Summarize everything I wrote last week."

  • "Pull every action item out of my meeting notes and make me a checklist."

  • "Create a page in my Projects notebook with today's date and these next steps."

  • "What was the budget number in the Q3 planning page?"

Sections can be referred to by name"Ideas" or "Learn / Cooking" — so there's no need to look up IDs first.

getOutline

Start here. Every notebook, section group, and section in one call

listNotebooks

List your notebooks

listSections

Sections, including those inside section groups

listPages

Pages, optionally within one section

getPage

Read a page: text, tables, attached PDF text, and images on request

searchPages

Search by title, or by full text

createPage

Create a page

appendToPage

Add to an existing page

createSection

Create a section

deletePage

Delete a page (requires confirming the exact title)

authStatus / authenticate / signOut

Sign-in management (sign-out also wipes cached pages)

What it can read

In your notes

Readable?

Text, headings, lists

Yes

Tables

Yes, converted to Markdown

Attached PDFs with a text layer

Yes, downloaded and read

Screenshots and images

Yes, Claude reads them directly

Scanned PDFs and printouts

Yes, as page images Claude reads

Handwriting

Usually, if legible

How image text works. Microsoft runs OCR for OneNote's own search but doesn't expose that text through the API, so no Graph-based tool can fetch it.

Instead of bundling an OCR engine, this passes the image itself to Claude, which reads it directly. That handles layout, tables inside screenshots, and handwriting better than character-level OCR would.

Images are offered, not charged for. A screenshot costs roughly 1,300 to 4,000 tokens — often more than the page text it sits on — so reading every image on every page would tax the many questions that never needed one.

By default, images are only read when a page has too little text to answer from, which is exactly the case where the picture is the content: a clipped screenshot, a scanned receipt, a whiteboard photo. On a page with real writing, Claude is simply told the images exist:

[This page also has 3 images. They were not read... ask to read the images on this page.]

Then you decide. "Read the images on that page" pulls them in. "Read it without the images" skips them. Two per read by default, and the result always says how many more remain.

Prefer the old behaviour? Set When to read images to always in the extension settings — or never to keep images out entirely.

Since images go to your AI app the same way pasting one does, PRIVACY.md documents it explicitly.

Your privacy

Your notes never pass through anyone else's server. They go directly from Microsoft to your own computer. There is no hosted backend, no analytics, and no telemetry.

Pages you read are remembered on your own machine, so re-reading an unchanged page costs nothing. That cache sits in your private config folder, is scoped to your Microsoft account, is never transmitted anywhere, and is deleted when you sign out. cache status shows it, cache clear wipes it, and one setting turns it off. Full details.

Your sign-in stays on your machine. It's handled by Microsoft's official authentication library and stored in your user config folder, readable only by your account. Nobody — including the author of this tool — can see your notes or your credentials.

It asks for the minimum. By default it requests access only to your own notebooks — not notebooks shared with you, not group notebooks. You can make it read-only in the extension settings.

Deleting is protected. Claude has to state the page's exact title before a delete goes through, so it can't remove the wrong page by mistake.

  • Dependencies: four, all from official publishers — @modelcontextprotocol/server, @azure/msal-node, zod, open. Nothing in the tree runs an install script. CI fails on high or critical advisories and warns if an install script ever appears.

  • Network: the only hosts contacted are graph.microsoft.com and login.microsoftonline.com. Nothing else, ever.

  • Page content is untrusted. OneNote HTML is parsed by a small in-house parser (src/parse-html.mjs) that cannot execute scripts, fetch resources, or touch the network. Content is converted to text and never rendered.

  • Credentials: stored via MSAL's token cache at mode 0600 inside a 0700 directory, written atomically, outside the repository. onenote-cli signout removes it.

  • Sign-in: authorization code + PKCE over a loopback redirect — the flow Microsoft recommends for desktop apps. Device code flow is available but off by default, since new Microsoft tenants block it as of July 2026.

  • Releases: built by GitHub Actions from a tagged commit, published to npm with provenance, and checksummed. The build refuses to produce an artifact containing .env, credentials, or test files.

Full disclosure: PRIVACY.md explains every permission line by line, lists every network request the tool can make, and shows you how to verify each claim yourself.

Found something? Open an issue.

Settings

In Claude Desktop, open Settings → Extensions → OneNote for Claude. Everything is optional.

Setting

Default

What it does

Default section for new notes

blank

Pin a section so you needn't say where each time

When to read images

auto

auto reads them only when a page is mostly picture; always every time; never not at all

Remember pages between sessions

disk

Reuse already-read pages instead of re-downloading. memory keeps it session-only; off disables it

Allow Claude to change your notes

on

Turn off to make it read-only

Microsoft account type

common

Leave alone unless IT tells you otherwise

Microsoft application ID

blank

Only if your organization requires its own app registration

Permissions requested

own notebooks

Widen to reach shared and group notebooks

Copy .env.example to .env. All optional except where noted.

Variable

Default

Purpose

ONENOTE_CLIENT_ID

built in, if set by the maintainer

Microsoft application ID

ONENOTE_TENANT_ID

common

common, consumers, organizations, or a tenant GUID

ONENOTE_SCOPES

Notes.ReadWrite offline_access

Graph permissions

ONENOTE_ALLOW_WRITE

true

false disables all write tools

ONENOTE_DEFAULT_SECTION

unset

Section new pages go to when unspecified

ONENOTE_IMAGE_MODE

auto

auto, always, or never — when to send page images

ONENOTE_CACHE_MODE

disk

disk, memory, or off — remembering already-read pages

ONENOTE_TOKEN_CACHE

OS config dir

Where credentials are cached

ONENOTE_REDIRECT_PORT

random

Pin the sign-in callback port

ONENOTE_ALLOW_DEVICE_CODE

false

Use device code flow instead of a browser

ONENOTE_SKIP_DOTENV

unset

Ignore .env entirely, for predictable config

For a strictly read-only setup, set both:

ONENOTE_SCOPES=Notes.Read offline_access
ONENOTE_ALLOW_WRITE=false

The first makes Microsoft itself reject any write; the second disables the tools locally. Use both.

Troubleshooting

Start here:

npx @joneericdelacruz/onenote-mcp doctor

It checks every layer — Node version, configuration, credentials, whether Microsoft is reachable, and whether your AI app is wired up — and prints exactly what to fix.

Claude doesn't see the tools — Fully quit and reopen Claude Desktop (not just close the window). Then check Settings → Extensions to confirm it's enabled.

Sign-in window never appears — Run npx @joneericdelacruz/onenote-mcp auth in a terminal instead. It uses the same saved credentials, so signing in there also signs in the extension.

"Consent required" / AADSTS65001 — Approve the permission screen Microsoft shows. On a work or school account, your IT admin may need to approve it for you.

"Your administrator has configured..." / AADSTS50105 — Your workplace restricts which apps people can sign into. Ask IT to allow it, or supply your organization's own application ID in the settings.

It worked, now it says I'm not signed in — Your Microsoft session was revoked, usually by a password change or a new IT policy. Just sign in again.

Device code sign-in fails — Expected on most accounts now; Microsoft blocks that method by default for new tenants as of July 2026. Leave ONENOTE_ALLOW_DEVICE_CODE unset to use the browser instead.

Nothing here helpedOpen an issue and paste the output of doctor. It contains no secrets.

Development

npm test        # 183 tests, including end-to-end protocol tests
npm run check   # syntax check
npm run audit   # dependency advisories
npm run bundle  # build the .mcpb
npm run doctor  # diagnose a local install

test/server.test.mjs spawns the real server and speaks JSON-RPC to it, covering both the current 2026-07-28 stateless protocol and the older initialize handshake that today's clients still use.

onenote-mcp.mjs      MCP server: tool definitions and schemas
onenote-cli.mjs      CLI: setup, doctor, and direct commands
manifest.json        Claude Desktop extension metadata
src/config.mjs       Configuration and validation
src/auth.mjs         Microsoft sign-in, token cache, non-blocking auth
src/onenote.mjs      Graph client: pagination, retries, error mapping
src/parse-html.mjs   Self-contained HTML parser (replaces jsdom)
src/html.mjs         OneNote HTML to readable text
src/cache.mjs        Local, per-account cache of extracted page text
src/clients.mjs      Safe editing of AI app config files
scripts/             Bundle build

Credits

Built by Jon Eric Dela Cruz.

Originally inspired by azure-onenote-mcp-server by Zubeid Hendricks and the onenote-mcp fork by danosb. This version is a ground-up rewrite — new authentication, new protocol support, new tool design, and no shared runtime code — but it started from their work and stays MIT licensed in kind.

The earlier projects had accumulated problems that made them unusable by mid-2026:

  • Wouldn't install. The package pointed at a local SDK checkout that wasn't included; fetching it produced Unsupported URL Type "catalog:".

  • Sign-in couldn't complete. The device code was printed to a console no AI app displays, so users never saw it and the request timed out. Microsoft has since disabled that method by default anyway.

  • Tools took no arguments. They read a leftover placeholder parameter, so "list sections" ignored which notebook you meant and "create page" always wrote the same fixed placeholder text.

  • Sessions lasted an hour. A bare access token was saved with no way to renew it.

  • Only the first page of results was ever read, silently hiding notes.

  • Text came back scrambled — all headings, then all paragraphs, then all lists, regardless of original order.

Addressed upstream reports: #1, #2, #3, #5, #6.

License

MIT — see LICENSE.

Available Tools

13 tools
appendToPageAppend to pageA

Add content to the end (or start) of an existing page without replacing it.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage TITLE (e.g. "AI Search") or ID. Titles are matched case-insensitively; if several pages share one you get the list back to choose from. You do NOT need to look up an ID first.
isHtmlNo
contentYesContent to add. Plain text unless isHtml is true.
positionNoWhere to insert relative to existing body content. Defaults to append.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey non-read-only and non-destructive behavior; the description adds the useful 'without replacing it' qualifier but does not address what happens when the page does not exist, duplicate titles, or any external side effects. With openWorldHint=true, some world-modifying context is already implied by annotations, so the description carries only modest additional burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence captures the core operation, positional flexibility, and non-destructive guarantee without any filler. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter append tool with a detailed schema and safety annotations, the description is largely complete: an agent knows the operation, the target, and the placement options. The only notable omissions are the outcome/return value and error behavior (e.g., missing page), which are not covered by an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents page, content, and position with usable descriptions; the description's 'end (or start)' simply echoes position's enum. It adds no additional meaning for isHtml, the one parameter without a schema description, so it neither compensates for that gap nor goes beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('add content'), a clear resource ('existing page'), and a positional qualifier ('end (or start)'), which distinguishes it from createPage and deletePage. The phrase 'without replacing it' reinforces the append semantics so an agent can immediately tell this is a mutation of existing content, not a page-creation or deletion tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'existing page' makes clear this is for pages that already exist, and 'without replacing it' rules out replacement workflows. It does not explicitly name alternatives such as createPage for new pages, so it stops short of a full 5, but the context is unambiguous enough for an agent to route correctly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

authenticateSign in to MicrosoftA
Idempotent

Begin sign-in to the Microsoft account that owns the OneNote notebooks. Returns immediately with the instruction the user must follow (a browser is opened, or a device code is shown). It does NOT wait for the user to finish -- poll authStatus afterwards to confirm. Always show the user the returned URL and code verbatim.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations provide readOnlyHint=false, openWorldHint=true, and idempotentHint=true, but the description adds critical behavioral details: it returns immediately without waiting, opens a browser or shows a device code, and requires the agent to relay the URL/code verbatim. This exceeds annotation context and helps the agent manage user interaction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, followed by behavior and usage instruction. Every word earns its place; no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple initiation tool with no output schema, the description fully covers what the agent needs: return behavior, asynchronous nature, and user action required. It also links appropriately to sibling authStatus for follow-up, making the tool's context complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and the schema coverage is 100% (empty properties), so the description has no responsibility to document params. The baseline of 4 is appropriate since there is nothing to add.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Begin sign-in to the Microsoft account that owns the OneNote notebooks.' It clearly distinguishes the tool's role from siblings like authStatus (which checks status) and signOut (which ends sessions).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'poll authStatus afterwards to confirm' and instructs to 'Always show the user the returned URL and code verbatim,' providing clear usage guidance and implying that this tool is for initiation, not status checking. It also notes the tool returns immediately, so the agent knows not to wait.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

authStatusAuthentication statusA
Read-only

Report whether the user is signed in to Microsoft, which account is cached, and where the token cache lives. Safe to call at any time; never triggers a sign-in prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnly and openWorld annotations by guaranteeing it never triggers a sign-in prompt and by specifying exactly what information is returned. This is valuable behavioral context for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences with no wasted words. The first sentence states the purpose, the second provides safety guidance. Perfectly front-loaded and appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only status check with no parameters and no output schema. The description fully covers what it does, its safety, and its return content, so no additional context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline is 4. The description adds meaning by explaining what the tool reports, but there are no parameter semantics to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Report' and clearly states the resource (authentication status) and the exact details reported: whether signed in, which account is cached, and token cache location. This is distinct from sibling tools like authenticate and signOut.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'Safe to call at any time' and 'never triggers a sign-in prompt,' providing clear when-to-use and when-not-to-use guidance. However, it does not explicitly name alternative tools for signing in or out, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createPageCreate pageA

Create a new page. Pass the section by NAME — no lookup needed first. If a default section is configured, section can be omitted entirely.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesPage title.
isHtmlNoTreat content as an XHTML fragment instead of plain text.
contentYesPage body. Plain text unless isHtml is true.
sectionNoSection name, path, or ID. Optional if a default section is configured.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds context about section resolution (by name, no lookup) and default section behavior, but doesn't disclose return values or error conditions. This adds some value beyond annotations without being rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, and no redundant wording. Every sentence adds meaningful guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create operation with annotations and full schema coverage, the description covers the essential behavioral details (section by name, default omission). It doesn't explain return values or failure modes, but those are not expected given the presence of annotations and a relatively simple input schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers all parameters at 100%. The description adds value by specifying 'Pass the section by NAME' and that section can be omitted if a default is configured, clarifying the intended usage of the section parameter beyond the schema's 'name, path, or ID'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Create a new page' with a specific verb and resource, distinguishing it from sibling tools like createSection and appendToPage. It also adds clarifying details about section handling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides actionable guidance: pass section by NAME, no lookup needed, and omit if default exists. This tells the agent when and how to use the tool, though it doesn't explicitly contrast with appendToPage or other alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

createSectionCreate sectionB

Create a new section inside a notebook.

ParametersJSON Schema
NameRequiredDescriptionDefault
notebookIdYesNotebook ID or name.
displayNameYesName for the new section.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=false and destructiveHint=false, but the description adds no extra behavioral context beyond what is already known. It does not mention potential side effects, prerequisites like notebook existence, or uniqueness constraints, providing no added value over the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that is front-loaded and contains no redundant information. It effectively communicates the core action and resource.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter creation tool, the description is adequate but lacks important context such as what happens if the notebook ID is invalid, whether displayName must be unique, or what the response format is. Given the annotations and schema, it is minimally viable but not comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both parameters documented. The description adds little beyond what the schema already provides, only reinforcing that notebookId refers to the parent notebook. Baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Create' with a clear resource 'a new section inside a notebook', which precisely states the tool's function and differentiates it from sibling tools like createPage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives such as createPage or appendToPage. The description simply states the action without context or exclusions, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

deletePageDelete pageA
Destructive

Permanently delete a page. This cannot be undone -- confirm the page title with the user before calling.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage TITLE (e.g. "AI Search") or ID. Titles are matched case-insensitively; if several pages share one you get the list back to choose from. You do NOT need to look up an ID first.
confirmTitleYesThe exact current title of the page, as a safeguard. The call fails if it does not match.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the destructiveHint annotation, the description adds critical context: the operation is irreversible ('cannot be undone') and requires user confirmation. This goes beyond what annotations alone convey and directly informs the agent of the irreversible consequence and the necessary pre-call action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The core action is front-loaded ('Permanently delete a page'), followed by the critical warning and usage instruction. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 required params, no output schema), the description plus schema fully cover what an agent needs: the action, the irreversibility, the confirmation step, and parameter semantics. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both page and confirmTitle thoroughly explained including matching rules and fallback behavior. The description only references the confirmation requirement without adding parameter details, so it correctly relies on the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear verb ('delete') and resource ('page') with an explicit qualifier ('permanently'), distinguishing it from mutation siblings like createPage or appendToPage. The action is unambiguous and immediately conveys the tool's destructive nature.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The instruction to 'confirm the page title with the user before calling' provides a clear prerequisite for invocation. While it does not name alternative tools or explicitly state when not to use it, the context is obvious and the guideline is actionable. This is clear context with no exclusions, not explicit when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getOutlineGet the full OneNote outlineA
Read-only

START HERE for anything structural. Returns every notebook, section group, and section in ONE call, with IDs and readable paths like "Learn / Cooking". Use this instead of chaining listNotebooks then listSections — it is one request instead of several, and it correctly includes sections nested inside section groups.

ParametersJSON Schema
NameRequiredDescriptionDefault
includePageCountsNoAlso count pages per section. Slightly slower. Defaults to false.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true and openWorldHint=true, and the description adds useful behavioral context without contradicting them. It discloses that the call returns everything in ONE request, includes nested sections, and provides readable paths. However, it could further mention whether results are live or cached, though this is not strictly necessary given the simple read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long and highly front-loaded with the 'START HERE' directive. Every sentence adds value: what it returns, the format of output, and why it should be preferred over alternatives. No filler or repetition of annotations or schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and no output schema, the description is complete. It explains the tool's scope, output format (IDs and readable paths), and relationship to siblings. The annotations and schema cover safety and parameter details, so the description fills the remaining gaps effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of the parameter (includePageCounts with a description), so the baseline is 3. The description itself does not mention this parameter, but since the schema is fully self-explanatory, no additional semantic enhancement is needed. The description's focus on the overall behavior rather than parameter details is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description begins with 'START HERE for anything structural' and clearly states the tool returns every notebook, section group, and section in one call. It distinguishes itself from siblings such as listNotebooks and listSections by emphasizing it covers the full hierarchy in a single request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to use this tool: 'START HERE for anything structural' and 'Use this instead of chaining listNotebooks then listSections'. It explains the benefits (one request vs several, correctly includes nested sections), giving clear usage context without needing to consult alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

getPageGet page contentA
Read-only

Read one page. Returns readable text including tables (as Markdown), image captions, and the text of any attached PDFs. Pass format="html" for raw XHTML. If the result mentions an image or attachment whose text is unavailable, say so rather than treating the page as complete.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesPage TITLE (e.g. "AI Search") or ID. Titles are matched case-insensitively; if several pages share one you get the list back to choose from. You do NOT need to look up an ID first.
formatNo"text" for readable Markdown-ish text (default), "html" for raw OneNote XHTML.
sectionNoOptional: narrow to one section when several pages share a title.
maxImagesNoHow many images to attach. Defaults to 2, because images are expensive: a screenshot costs roughly 1,300-4,000 tokens, often more than the page text. The result says how many more exist; raise this only when the user needs them.
maxLengthNoTruncate content to this many characters. Defaults to 12000, which covers almost every real page. Raise it only if a page is reported as truncated and you need the rest.
includeIdsNoInclude OneNote element IDs, required for later PATCH operations.
includeImagesNoAttach the page images so you can READ them yourself, which is how text inside a screenshot becomes available at all (Microsoft does not expose its OCR). LEAVE THIS UNSET normally: images cost 1,300-4,000 tokens each, so by default they are only sent when a page has too little text to answer from, and merely announced otherwise. Set true when the user asks to see them, or when the answer is plainly inside a picture. Set false to skip them entirely.
readAttachmentsNoDownload embedded files and include their text. On by default. PDFs with a text layer are read in full; scanned PDFs and other file types are named but not opened. Set false to skip the download and read only the page itself.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already signals safety, and the description adds meaningful behavioral context beyond it: the readable-text composition, PDF handling, raw XHTML option, and the explicit instruction to acknowledge missing image/attachment text instead of presenting an incomplete page as complete. This genuinely helps the agent act correctly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each earning its place: the purpose, the return content, the format switch, and a behavioral caveat. It is front-loaded with the core action and avoids redundant restating of the name or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with no output schema, the description covers the essential return semantics and key behavioral caveats, while the rich input schema fills in parameters like maxImages, maxLength, includeIds, and readAttachments. It is complete enough for correct invocation, though naming sibling alternatives would make selection even safer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; all eight parameters are thoroughly documented in the schema itself. The main description only adds format='html', which is useful but not a significant semantic contribution beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a precise verb and resource: 'Read one page.' It then enumerates what the response contains — readable text, Markdown tables, image captions, and attached PDF text — which clearly differentiates it from list-style siblings like listPages and getOutline. The format option is also explicitly called out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context: use this when you need the content of a single page, and it explains format variants and how to handle unavailable image/attachment text. It does not explicitly name sibling alternatives or state when not to use it, so it stops short of full when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listNotebooksList notebooksA
Read-only

List notebooks only. Prefer getOutline — it returns notebooks AND their sections in the same single call.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return. Results are paginated internally.

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds the scope limitation 'only' (notebooks, not sections), which is useful context. However, it does not disclose return format, pagination behavior beyond what the schema states, or other behavioral traits. This is a reasonable score given the annotations cover the key aspects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose ('List notebooks only') and no filler. Every word contributes value, and the alternative recommendation is stated efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple list tool with one optional parameter, a rich schema, and informative annotations. The description clearly conveys scope and usage context, and the schema already explains pagination. There is no missing information that would hinder an agent from using the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for its single 'limit' parameter, including a description of its behavior. The tool description adds no additional parameter meaning, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'notebooks', and the word 'only' explicitly distinguishes it from sibling tools like listSections and listPages. It also points to getOutline as an alternative, further clarifying purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Prefer getOutline' and gives a concrete reason ('returns notebooks AND their sections in the same single call'), which serves as clear when-not-to-use guidance. It tells the agent to prefer getOutline when both notebooks and sections are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listPagesList pagesA
Read-only

List pages, most recently modified first. Pass a section NAME to scope to one section; omit it to list across all sections.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return. Results are paginated internally.
orderByNoSort order for results. Defaults to most recently modified first.
sectionNoSection name ("Ideas"), path ("Learn / Cooking"), or ID. Names are matched case-insensitively; if several match you get the list back to choose from.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true and openWorldHint=true, so the description's job is lighter. It adds useful behavioral context: default sort order ('most recently modified first') and the scoping rule for section, which are not fully captured by annotations. It does not contradict the annotations and avoids describing destructive effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. Every phrase earns its place by communicating ordering and scoping behavior in a compact form.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple list operation, the three optional parameters are well documented in the schema, and the description covers default ordering and scoping. However, it doesn't clarify the return shape or when to prefer searchPages, leaving a minor completeness gap in the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% parameter coverage, including descriptions for limit, orderBy, and section. The description adds a small clarification that omitting section lists across all sections, which is helpful but not a substantial addition beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List pages,' a specific verb+resource, and adds 'most recently modified first' to convey default ordering. It also clearly states the section scoping behavior, distinguishing it from sibling tools like listNotebooks and listSections, though it doesn't explicitly contrast with searchPages.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives conditional usage for the section parameter ('Pass a section NAME to scope...; omit it to list across all sections'), but it provides no guidance on when to choose listPages over searchPages, getPage, or other siblings. There are no exclusions or alternatives named, so usage context is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

listSectionsList sectionsA
Read-only

List sections, including those nested inside section groups. Prefer getOutline unless you specifically want a flat list.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return. Results are paginated internally.
notebookNoNotebook name or ID to scope to. Omit for all notebooks.

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already covers safety, so the description isn't burdened with that. It adds meaningful behavioral context by explaining that nested sections are included and that the result is a flat list rather than a hierarchical outline. It doesn't describe pagination details, but the schema already covers that via the limit parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no fluff, with the most critical information front-loaded. It states the core function first and then provides an actionable preference. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with two optional parameters and no output schema, the description is complete. It explains the tool's scope, the nested behavior, and how to choose between this and the sibling getOutline. The readOnlyHint annotation covers safety, so no further behavioral disclosure is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the parameters are fully documented in the schema. The description doesn't add any parameter-specific meaning beyond what's in the schema. The baseline of 3 is appropriate since the description provides no extra parametric insight yet doesn't need to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'List sections, including those nested inside section groups.' The verb 'List' and resource 'sections' are specific, and the nested-group detail adds precise scope. It also distinguishes from the sibling 'getOutline' by explicitly contrasting a flat list with an outline.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage guidance: 'Prefer getOutline unless you specifically want a flat list.' This tells the agent when to use this tool versus the main alternative, which is exactly what a usage guideline should do.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

searchPagesSearch pagesA
Read-only

Find pages by title (fast — one request). Set searchContent=true to also scan page bodies. OneNote provides no server-side full-text search, so that fetches candidate pages; it runs them in parallel and stops early once enough matches are found, but it is still much slower than a title search. Pass section to narrow it dramatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesText to search for.
sectionNoLimit the search to one section, given by name ("Ideas"), path ("Learn / Cooking"), or ID. Strongly recommended alongside searchContent, as it avoids fetching unrelated pages.
scanLimitNoMaximum pages to fetch when searchContent is true. Defaults to 30. Raise only if a search genuinely came back empty; each extra page costs time.
searchContentNoAlso search page body text, not just titles. Slower. Defaults to false.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint and openWorldHint annotations by explaining that OneNote has no server-side full-text search, so content search fetches candidate pages in parallel and stops early. It discloses the performance impact and the 'narrow by section' strategy, which are valuable behavioral insights not present in the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and fast path. Every clause adds relevant information: speed, searchContent behavior, technical limitation, parallel fetching, early stop, and section narrowing. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema, the description thoroughly covers input semantics, performance, and recommended usage. The only gap is the lack of detail about what the search results look like (e.g., page metadata), but overall it provides enough context for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 80% schema description coverage, the baseline is 3, but the description adds meaningful context: it explains why searchContent is slower, recommends section to narrow the search, and implies how scanLimit relates to early stopping. This adds value beyond the schema's raw parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool finds pages by title, with an optional content search. It uses a specific verb+resource construction ('Find pages by title') and differentiates from sibling tools like listPages and getPage by focusing on search behavior and performance trade-offs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear guidance on when to use the tool and how to configure it: title search is fast, content search is slower, and passing a section narrows the search dramatically. It does not explicitly name alternative tools for when not to use it, but the context is strong enough for an agent to decide appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

signOutSign outA
DestructiveIdempotent

Remove the cached Microsoft account, delete the local token cache file, and forget any page text remembered on this computer. The user must authenticate again afterwards.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although annotations already indicate a destructive, idempotent, non-read-only operation, the description adds crucial detail about exactly what gets destroyed: the local token cache file and remembered page text. It also discloses the consequence that the user must authenticate again.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences front-load every important behavior and consequence, with no filler or repetition. Every clause adds information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description fully covers what the operation does, what state it changes, and what the user will experience afterward. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is no parameter ambiguity. The schema is complete at 100% coverage and the description does not need to add parameter-level detail. The baseline 4 applies here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses specific verbs ('Remove', 'delete', 'forget') and names the exact resources affected: the cached Microsoft account, local token cache file, and remembered page text. This clearly distinguishes signOut from siblings like authenticate and authStatus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the tool's purpose obvious: use it to clear local authentication state and force re-authentication. It does not explicitly name alternatives or exclusions, but the context is clear enough within the sibling set.

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.

  1. 3 tool updatesv2.1.1
    • ChangedappendToPage3 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page TITLE (e.g. \"AI Search\") or ID. Titles are matched case-insensitively; if several pages share one you get the list back to choose from. You do NOT need to look up an ID first.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / pageId
        Removed value: -{
        -  "description": "Page ID from listPages or searchPages.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "pageId",
        -  "content"
        -]New value: +[
        +  "page",
        +  "content"
        +]
    • ChangeddeletePage3 fields changed
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page TITLE (e.g. \"AI Search\") or ID. Titles are matched case-insensitively; if several pages share one you get the list back to choose from. You do NOT need to look up an ID first.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / pageId
        Removed value: -{
        -  "description": "Page ID from listPages or searchPages.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "pageId",
        -  "confirmTitle"
        -]New value: +[
        +  "page",
        +  "confirmTitle"
        +]
    • ChangedgetPage7 fields changed
      • addedInput schema / properties / includeImages
        Added value: +{
        +  "description": "Attach the page images so you can READ them yourself, which is how text inside a screenshot becomes available at all (Microsoft does not expose its OCR). LEAVE THIS UNSET normally: images cost 1,300-4,000 tokens each, so by default they are only sent when a page has too little text to answer from, and merely announced otherwise. Set true when the user asks to see them, or when the answer is plainly inside a picture. Set false to skip them entirely.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / maxImages
        Added value: +{
        +  "description": "How many images to attach. Defaults to 2, because images are expensive: a screenshot costs roughly 1,300-4,000 tokens, often more than the page text. The result says how many more exist; raise this only when the user needs them.",
        +  "maximum": 10,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "description": "Page TITLE (e.g. \"AI Search\") or ID. Titles are matched case-insensitively; if several pages share one you get the list back to choose from. You do NOT need to look up an ID first.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • removedInput schema / properties / pageId
        Removed value: -{
        -  "description": "Page ID from listPages or searchPages.",
        -  "minLength": 1,
        -  "type": "string"
        -}
      • addedInput schema / properties / readAttachments
        Added value: +{
        +  "description": "Download embedded files and include their text. On by default. PDFs with a text layer are read in full; scanned PDFs and other file types are named but not opened. Set false to skip the download and read only the page itself.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / section
        Added value: +{
        +  "description": "Optional: narrow to one section when several pages share a title.",
        +  "minLength": 1,
        +  "type": "string"
        +}
      • changedInput schema / required
        Previous value: -[
        -  "pageId"
        -]New value: +[
        +  "page"
        +]
  2. 13 tool updatesv2.0.0
    • First observedappendToPage
    • First observedauthenticate
    • First observedauthStatus
    • First observedcreatePage
    • First observedcreateSection
    • First observeddeletePage
    • First observedgetOutline
    • First observedgetPage
    • First observedlistNotebooks
    • First observedlistPages
    • First observedlistSections
    • First observedsearchPages
    • First observedsignOut

TDQS

A4.1/5.0

Scored across 13 tools

Disambiguation5/5

Each tool maps to a distinct action: auth status/start/end, structural outline vs flat lists, and page/section operations are clearly separated. The descriptions for getOutline/listNotebooks/listSections explicitly clarify when each should be used, so an agent should not confuse them.

Naming Consistency4/5

The page and section tools consistently use camelCase verb+Resource (listPages, createPage, deletePage, appendToPage, createSection). The auth tools break that pattern slightly with authStatus, authenticate, and signOut, but the overall naming style remains predictable.

Tool Count5/5

Thirteen tools is well within the ideal range and covers authentication, structure discovery, and page/section operations without unnecessary bloat. The three auth tools are justified by the async sign-in flow, and even the slight overlap between getOutline and the list helpers serves different query needs.

Completeness4/5

Core workflows are covered: authenticate, discover structure, list/search/read/create/append/delete pages, and create sections. Missing full page content replacement and notebook/section deletion are workable gaps, but appendToPage and createSection handle the most common note-taking operations.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A pure-local Microsoft OneNote MCP server for Windows that controls the OneNote desktop app through the local OneNote COM API without needing Azure, Microsoft Graph, API keys, or OAuth.
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    A secure MCP server for Microsoft OneNote via the Graph API, enabling listing/reading notebooks, sections, and pages, with optional gated write tools. Read-only by default and deployable to Azure Container Apps.
    33 npm
    MIT