Purpose
Interact with Notion pages, databases, and workspace content via the hosted
Notion MCP server (https://mcp.notion.com/mcp).
Tooling
Use exec to run:
notion-cli <subcommand> [options]
Connection management
notion-cli status
notion-cli authorize-url
notion-cli exchange-code --code <code> [--redirect-uri <url>]
notion-cli refresh
notion-cli disconnect
MCP operations
notion-cli list-tools
notion-cli call-tool --name <tool> --arguments-json '<json-object>'
--arguments-json must be a JSON object; arrays or scalars are rejected. Use
list-tools first to discover the tool catalogue and each tool's
input_schema.
Auth
OAuth is handled by authd via Dynamic Client Registration + PKCE (S256). The
access token is stored at $JARVIS_HOME/user/auth/notion.json. Do not hand-edit
this file.
First-use setup flow
- Run
notion-cli status. - If status is
not_connected, runnotion-cli authorize-url. Whenconnect_urlis present, replace<connect_url>with the returned URL and share exactly this Markdown link:[Connect Notion](<connect_url>); do not paste the raw URL separately. Wait for the user to complete authorization. - After the user authorizes, the browser is redirected via the Muse relay back to this VM, and authd completes the code exchange automatically. The agent resumes once the token lands.
- Re-run
notion-cli status. When status flips toconnectedthe output also includes the discovered MCP tool catalogue.
For manual environments where the relay is not wired up, call
notion-cli exchange-code --code <auth-code> after receiving the code.
Operating Rules
- Run
notion-cli statusbefore any MCP work. If notconnected, complete the setup flow first. - Call
list-toolsbeforecall-toolunless you already know the tool name and its argument shape. Never guess tool names. arguments-jsonmust be a JSON object; wrap every argument appropriately.- Confirm user intent before tool calls that mutate Notion pages, databases, or blocks.
- Token refresh happens automatically on 401. If
call-toolkeeps failing withunauthorized, runnotion-cli refreshexplicitly or ask the user to re-authorize. - Read results preserve Notion's raw date fields and add semantic UTC and user-local forms for record creation/edit times and timed date properties. Date-only properties remain dates.