tools/call over
POST /onenote/mcp. The connector reads Microsoft OneNote through Microsoft Graph
and is connected through OAuth with a Microsoft work or school account (see
Connect OneNote). Your organization needs access to
OneNote (a subscription, or a plan that covers it, see
What decides access), and your
user must hold a seat or plan licence (assigned under Team in the portal, see
Team).
Endpoint:
https://mcp.consile.ai/onenote/mcp. OneNote is its own named
connector with only its own tools. Tool names are namespaced onenote__<tool>
(e.g. onenote__list_notebooks); the bare names are used below for readability.
A bare name in a request returns Unknown tool.The connector is multi-instance: one instance is one connected Microsoft user and
everything that user can open in OneNote. An administrator adds further
connections (agreements, aftaler, in the portal), each served at its own
endpoint, e.g. https://mcp.consile.ai/onenote-2/mcp, with tools named
onenote-2__<tool>.tools/list returns the nine onenote__*
tools plus the unprefixed system tool connect_account. Without
access only connect_account is listed, and the initialize result includes
instructions explaining how to get access. A user without a seat still sees the
tools, but every call is refused. Every tool has a title and the annotations
readOnlyHint: true, destructiveHint: false and openWorldHint: false. A
successful result contains the payload twice: as JSON text in content and as the
same object in structuredContent. The examples below show that payload.
Authorization
The account is connected through Microsoft’s OAuth sign-in. Only work or school accounts can connect; Microsoft refuses a personal Microsoft account. The requested delegated Microsoft Graph permissions are:Notes.Read.All(every OneNote notebook the user can open: their own, and those on SharePoint sites and in Microsoft 365 groups they belong to)User.Read(the user’s name and email, used to name the agreement in the portal)offline_access(keeps the connection alive)
Shared conventions
Containers: siteId and groupId
OneNote content lives in three kinds of container: the connected user’s own notebooks, a SharePoint site’s notebooks (team notebooks) and a Microsoft 365 group’s notebooks. Every tool that addresses a notebook, section or page takes two optional arguments that pick the container. Leave both out for the user’s own notebooks.string
SharePoint site id in the
host,guid,guid form, at least one character. Reads that
site’s notebooks. The SharePoint connector returns
it (search_sites, or get_site with a notebook’s web link).string
Microsoft 365 group id, at least one character. Reads that group’s notebooks. A
team in Microsoft Teams has the same id as its group.
Pass either siteId or groupId, not both. An id from one container is not found in
another, so pass the same siteId or groupId on every call that follows from a
site’s or group’s listing (list_sections, list_pages, get_page,
get_page_preview).
The listing tools echo the container they read as container: "me",
"site:<siteId>" or "group:<groupId>".
search_pages and list_recent_pages take neither argument. Microsoft only supports
them on the user’s own notebooks.
Hierarchy and typical call order
Inside a container the hierarchy is notebook, then optional (and nestable) section groups, then sections, then pages. Only pages carry content.list_notebooks(orlist_recent_notebooksto find a shared notebook by name).list_sectionswith thenotebookId.list_pageswith thesectionId.get_page_previeworget_pagewith thepageId.
search_pages and list_recent_pages go straight to
pages.
Paging
list_pages, search_pages and list_recent_pages are paged. The other listings
return the whole list in one result.
integer
standard:"20"
Rows per page,
1 to 100.string
Opaque continuation token from a previous result’s
nextCursor. Omit it for the
first page and never construct or edit one. When cursor is set, the other
options are ignored and the query of the first call continues. Pass it back to the
same tool. A value that is not a continuation token is refused with
Invalid cursor for OneNote: pass the nextCursor from a previous page of the same tool.count, items and nextCursor (null when there are no more
rows). There is no total count.
Page rows
list_pages, search_pages and list_recent_pages return the same row shape:
object
id (the pageId), title, sectionId, sectionName, notebookId,
notebookName, level and order (the page’s indent level and position in its
section), webUrl (the page in OneNote on the web), createdDateTime and
lastModifiedDateTime. A missing value is null.list_notebooks
Lists OneNote notebooks: the user’s own by default, a SharePoint site’s withsiteId, or a Microsoft 365 group’s with groupId. Sorted by name.
string
string
array
Each item has
id (the notebookId), displayName, isDefault, isShared,
userRole (the user’s role as Microsoft reports it), webUrl, createdDateTime
and lastModifiedDateTime.list_recent_notebooks
Lists the notebooks the user opened most recently, across their own OneDrive and the SharePoint sites and groups they work in. Use it to find a shared notebook by name. It returns no ids: follow up withlist_notebooks on the site or group the notebook
lives on (resolve the siteId from the notebook’s web link with the SharePoint
connector), or without a container when it is the user’s own.
boolean
standard:"true"
Include the user’s own notebooks alongside the shared ones.
array
Each item has
displayName, lastAccessedTime, sourceService (where the
notebook lives, as Microsoft reports it) and webUrl.list_sections
Lists the sections of one notebook (withnotebookId), or every section in the
container when notebookId is left out. Each row names its notebook and section
group. Sorted by name.
string
Notebook id from
list_notebooks.string
string
array
Each item has
id (the sectionId), displayName, isDefault, notebookId,
notebookName, sectionGroupId, sectionGroupName (null when the section is
not in a section group), webUrl, createdDateTime and lastModifiedDateTime.container and notebookId (null when left out).
list_section_groups
Lists the section groups (folders of sections) directly under a notebook, or under another section group. Most notebooks have none.string
Notebook id from
list_notebooks.string
A section group id, to list the groups nested in it. Takes precedence over
notebookId.string
string
notebookId and sectionGroupId is required. Without either, the call is
refused with list_section_groups needs either notebookId or sectionGroupId.
array
Each item has
id, displayName, notebookId, parentSectionGroupId,
createdDateTime and lastModifiedDateTime.list_pages
Lists the pages of a section, most recently changed first. Paged.string
påkrævet
Section id from
list_sections.string
string
integer
standard:"20"
string
container and sectionId, followed by the page rows
and nextCursor.
search_pages
Full-text search in titles and content across all of the user’s own pages. It does not cover a site’s or a group’s notebooks (a Microsoft limitation); for those, uselist_sections and then list_pages. Paged.
string
påkrævet
Words to search for, 1 to 200 characters. Double quotes are removed before the
search.
integer
standard:"20"
string
query, followed by the page rows and
nextCursor.
Request
list_recent_pages
Lists the user’s own pages by most recent change across all their own notebooks, optionally only those changed since a given instant. It does not cover a site’s or a group’s notebooks; for those, uselist_pages per section. Paged.
string
Only pages changed at or after this instant. A full ISO 8601 instant with time and
time zone, e.g.
2026-10-01T00:00:00Z or 2026-10-01T08:00:00+02:00. A date
without time is refused.integer
standard:"20"
string
since (null when left out), followed by the
page rows and nextCursor.
Request
get_page
Reads one page: its metadata and its content as text (default) or as the raw HTML.string
påkrævet
Page id from
list_pages, search_pages or list_recent_pages.string
standard:"text"
text or html. Use html when tables or layout matter; the text form puts each
table row on one line, with the cells separated by tabs.string
Required when the page belongs to a site’s notebook.
string
Required when the page belongs to a group’s notebook.
string
text or html, as requested.string
The page content. In
text, tags are removed, paragraphs and list items become
line breaks, and images and attachments become short markers:
[billede: <alt text>] or [billede] for an image, [vedhæftet: <file name>] or
[vedhæftet fil] for an attachment. The markers are in Danish. Their bytes are
never returned.integer
The number of images and attachments on the page.
boolean
true when content was cut off: at 50,000 characters in text and 100,000
characters in html.Tool invocation failed.
get_page_preview
Reads a short text preview of a page without downloading its content: enough to decide whetherget_page is worth it.
string
påkrævet
string
string
string
The preview text Microsoft generates for the page (an empty string if none).
boolean
true when Microsoft also has a preview image for the page. The image itself is
not returned.pageId.
connect_account
connect_account is a system tool that the OneNote endpoint lists next to the nine
tools. It takes no arguments and its name has no onenote__ prefix. It returns
{ "connect_url": "…", "instructions": "…" }. The user opens connect_url in a
browser and is sent to Microsoft to sign in and approve access. The link expires
after 10 minutes. It only works for accounts that subscribe to OneNote and for
users who have accepted Consile’s terms in the portal. Use it to reconnect after
the access expired or was removed: completing the link connects the account again
with the new Microsoft sign-in.
Request
Errors
Tool failures come back as a normaltools/call result with isError: true and one
text block, not as a JSON-RPC error. The connector returns explanatory messages for
the common failures:
Limits
- Page size: default 20, maximum 100 rows for the paged tools.
- Page content: 50,000 characters as text, 100,000 as HTML (flagged with
contentTruncated); pages above 5 MB of HTML cannot be read. - Microsoft Graph limits how many requests can be made in a short time. Narrow the listing instead of paging through everything.
429 (JSON-RPC error -32029, Retry-After: 1)
instead of a tool result. See Errors & limits for
the current limits and the protocol-level errors shared by all connectors.