Access OneNote via Microsoft Graph API with managed OAuth authentication. Manage notebooks, sections, and pages; read and update page content as HTML; and navigate the OneNote hierarchy.
This skill uses ClawLink for hosted connection flows and credentials so you do not need to configure OneNote API access yourself.
Step 1: InstallStep 2: Pair AccountStep 3: Connect OneNote
_App-specific connection GIF coming soon_Run the install command in OpenClawSign in and approve the deviceOpen the dashboard and connect OneNote
text
┌─────────────────┐ ┌──────────────┐ ┌──────────────────┐
│ OpenClaw │────▶│ ClawLink │────▶│ Microsoft Graph │
│ (User Chat) │ │ (OAuth) │ │ (OneNote API) │
└─────────────────┘ └──────────────┘ └──────────────────┘
│ │ │
│ 1. Install Plugin │ │
│ 2. Pair Device │ │
│ 3. Connect OneNote │ │
│ │ 4. Secure Token │
│ │ 5. Proxy Requests │
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ SKILL │ │ Dashboard│ │ OneNote │
│ File │ │ Auth │ │ Notebooks│
└──────────┘ └──────────┘ └──────────┘
Install the verified ClawLink plugin from ClawHub. After the user confirms, complete the full setup so ClawLink tools are visible in the next OpenClaw chat.
bash
openclaw plugins install clawhub:clawlink-plugin
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart
Then tell the user: "OpenClaw has been restarted. Send /new as a standalone message to start a fresh chat, then ask for OneNote again."
bash
# List user's notebooks
clawlink_call_tool --tool "onenote_list_user_notebooks" --params '{"user_id": "me"}'
# List sections in a notebook
clawlink_call_tool --tool "onenote_list_user_notebook_sections" --params '{"user_id": "me", "notebook_id": "NOTEBOOK_ID"}'
# Get page content
clawlink_call_tool --tool "onenote_get_me_section_page_content" --params '{"section_id": "SECTION_ID", "page_id": "PAGE_ID"}'
All OneNote tool calls are authenticated automatically by ClawLink using the user's connected Microsoft account.
No API key is required in chat. ClawLink stores the OAuth token securely and injects it into every Microsoft Graph request on the user's behalf.
clawlink_begin_pairing if it is not configured yet.clawlink_list_integrations to verify the connection is active.bash
clawlink_list_integrations
Response: Returns all connected integrations. Look for onenote in the list.
bash
clawlink_list_tools --integration onenote
Response: Returns the live tool catalog for OneNote.
If OneNote tools are missing or the connection shows an error:
clawlink_list_integrations to verifyclawlink_list_tools --integration onenoteToolDescriptionModeonenote_list_user_notebooksList all notebooks for a userReadonenote_get_user_notebookGet notebook properties by IDReadonenote_get_notebook_from_web_urlGet notebook from SharePoint or OneNote URLReadonenote_create_me_notebooksCreate a new notebook for the signed-in userWriteonenote_copy_onenote_site_notebookCopy a SharePoint site notebookWriteonenote_copy_onenote_group_notebookCopy a Microsoft 365 group notebookWrite
ToolDescriptionModeonenote_list_user_notebook_sectionsList sections in a user's notebookReadonenote_get_site_sectionsGet a SharePoint site section by IDReadonenote_get_group_sectionsGet a Microsoft 365 group section by IDReadonenote_create_site_notebooks_sectionsCreate a section in a SharePoint notebookWriteonenote_create_me_sections_pagesCreate a page in a user's sectionWriteonenote_create_user_notebooks_sectionsCreate a section in a user's notebookWriteonenote_update_me_sectionsRename a sectionWriteonenote_update_site_notebooks_sectionsUpdate a SharePoint sectionWriteonenote_update_user_notebooks_sectionsUpdate a user's sectionWriteonenote_copy_section_to_notebook2Copy a section to another notebookWriteonenote_copy_section_to_notebook_for_user2Copy a section to a user's notebookWrite
ToolDescriptionModeonenote_list_me_onenote_sections_pages4List pages in a user's sectionReadonenote_get_me_section_page_contentGet HTML content of a user's pageReadonenote_get_onenote_user_page_contentGet HTML content of a user's page by IDReadonenote_list_site_pages_contentGet HTML content of a SharePoint site pageReadonenote_get_site_pages_previewGet text preview of a SharePoint pageReadonenote_create_me_sections_pagesCreate a new page in a sectionWriteonenote_create_site_notebooks_sectionsCreate a page in a SharePoint site sectionWriteonenote_update_me_page_contentUpdate page content via HTML patch commandsWriteonenote_update_onenote_page_contentUpdate a group page's contentWriteonenote_update_site_pages_contentUpdate a SharePoint page's contentWriteonenote_delete_onenote_group_sections_pages2Delete a page from a group notebookWriteonenote_delete_site_pagesDelete a SharePoint site pageWriteonenote_delete_user_onenote_sections_pagesDelete a page from a user's sectionWriteonenote_delete_user_pagesDelete a user's OneNote pageWriteonenote_delete_onenote_group_section_group_page_contentDelete page content from a section groupWrite
ToolDescriptionModeonenote_list_group_notebook_section_groupsList section groups in a group notebookReadonenote_get_notebook_section_groupGet a section group from a group notebookReadonenote_list_onenote_group_section_groups_section_groups2List nested section groupsReadonenote_list_group_section_groups_sectionsList sections in a section groupReadonenote_count_notebooks_section_groups_sectionsCount sections in a section groupReadonenote_create_onenote_group_notebooks_section_groupsCreate a section group in a group notebookWriteonenote_create_group_section_groups_sectionsCreate a section in a section groupWriteonenote_update_site_section_groups_sectionsUpdate a section in a section groupWrite
ToolDescriptionModeonenote_get_onenote_group_operationsCheck status of a group async operationReadonenote_get_onenote_site_operationsCheck status of a SharePoint async operationRead
bash
clawlink_call_tool --tool "onenote_list_user_notebooks" \
--params '{
"user_id": "me"
}'
bash
clawlink_call_tool --tool "onenote_get_me_section_page_content" \
--params '{
"section_id": "SECTION_ID",
"page_id": "PAGE_ID"
}'
bash
clawlink_call_tool --tool "onenote_create_me_sections_pages" \
--params '{
"section_id": "SECTION_ID",
"html": "<html><head><title>New Page</title></head><body><p>Page content here.</p></body></html>"
}'
bash
clawlink_call_tool --tool "onenote_update_me_page_content" \
--params '{
"page_id": "PAGE_ID",
"commands": [
{
"action": "append",
"target": "body",
"content": "<p>New paragraph added via API.</p>"
}
]
}'
clawlink_list_integrations to confirm OneNote is connected.clawlink_list_tools --integration onenote to see the live catalog.clawlink_search_tools with a short query and integration onenote.text
┌─────────────────────────────────────────────────────────────┐
│ READ OPERATIONS (Safe) │
│ list → get → search → describe → call │
│ │
│ Example: List notebooks → Read sections → Show results │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ WRITE OPERATIONS (Require Confirmation) │
│ list → get → describe → preview → confirm → call │
│ │
│ Example: Describe tool → Preview changes → User approves │
│ → Execute update │
└─────────────────────────────────────────────────────────────┘
clawlink_describe_tool first.whenToUse, askBefore, safeDefaults, examples, and followups to shape the call.clawlink_preview_tool first.clawlink_call_tool. Pass confirmation only after the preview matches the user's intent.html, head, and body tags.?*/:<>|&#''%~.?*\/:<>|&'".displayName property can be updated on sections — other properties are read-only.Status / ErrorMeaningTool not foundThe tool name does not exist in the current catalog. Verify with clawlink_list_tools --integration onenote.Missing connectionOneNote is not connected. Direct the user to https://claw-link.dev/dashboard?add=onenote.notFoundNotebook, section, or page does not exist. Check the ID.InvalidArgumentInvalid parameter or missing required field. Review the tool schema with clawlink_describe_tool.Operation pendingAsync operation still in progress. Poll the Operation-Location endpoint.Write rejectedUser did not confirm a write action. Always confirm before executing writes.
Check that the ClawLink plugin is installed: bash
openclaw plugins list
If the plugin is installed but tools are missing, tell the user to send /new as a standalone message to reload the catalog.
If a fresh chat does not help, run: bash
openclaw config set tools.alsoAllow '["clawlink-plugin"]' --strict-json
openclaw gateway restart
After restart, tell the user to send /new again and retry.
onenote.clawlink_describe_tool to verify parameter names and types before calling.clawlink_preview_tool first.Powered by ClawLink — an integration hub for OpenClaw
