Convert a page to a skill
notion-convert-page-to-skill
Marks a Notion page as a Notion Skill without changing its content. Pass the page’s full Notion URL. The page must be in the connected workspace, and you must have permission to edit it.
Download a Notion Skill
notion-download-skill
Downloads a complete Notion Skill. Pass the Skill page’s id. The response contains id, version_id, and a signed url for a tar.gz archive with SKILL.md and supporting files and folders. The URL expires after one hour. For a Skill without supporting files, the response has markdown, the full SKILL.md text with its frontmatter, instead of url. Unavailable in eval mode and workspace-owned MCP connections.
Upload a Notion Skill
notion-upload-skill
Imports an Agent Skills standard directory into an existing page in a Skills database. Uploading takes three steps:
- Call the tool with
action: "prepare", the targetpage_id, and the exactcontent_lengthandchecksum_crc32of thetar.gzarchive.checksum_crc32is the archive’s big-endian CRC32 encoded as Base64, such asAAAAAA==, not as hex or an integer. - Send the raw archive bytes in a
PUTrequest to the returnedupload_url, with every header inupload_headers. - Call the tool with
action: "complete", the samepage_id, and the returnedupload_token.
SKILL.md with name and description in its YAML frontmatter, either at the root or in one folder named after the Skill. Other frontmatter fields are ignored. Completing the upload replaces the page’s title, Description, body, and Files. SKILL.md becomes the page content, and the other files and folders are added to Files with their nested paths. Folders from earlier uploads aren’t deleted. To upload a new Skill, create a page in a Skills database first.
Archives are limited to 20 MiB compressed, 25 MiB expanded, and 1,000 files and folders. SKILL.md can be at most 200,000 UTF-8 bytes. Other limits apply to folder depth and to path and file extension lengths. An upload that breaks any limit is rejected with a validation_error. Paths must be unique without regard to case. Links and special files are rejected. Upload URLs and tokens expire after ten minutes. Uploading never runs the Skill’s instructions or scripts. Requires the read content, insert content, and update content capabilities. Unavailable in eval mode.
Manage enabled Skills
notion-get-enabled-skills lists the Notion Skills the user has enabled for MCP clients. It takes no arguments. Each entry has the Skill page’s id, a name, and a description of when to use it when one exists. Fetch a Skill’s id to read it. The list holds at most 30 Skills and has no cursor, so a user with more enabled Skills doesn’t see all of them. Long names and descriptions are shortened.
notion-update-enabled-skills enables or disables Skills by page URL. Pass up to 50 URLs in add_skill_urls or remove_skill_urls. surfaces picks which settings change: mcp, notion_ai, or both. It defaults to both. The tool changes only the current user’s settings.
Both tools are available only to connections a user authorized with OAuth.
Search personal memories
notion-memory-search
Searches the memories that the user’s connected agents saved in earlier sessions, such as context, preferences, corrections, and decisions. Pass words or a short phrase as query, up to 500 characters. limit defaults to 10 and can be at most 50. Each result has an id, title, url, and snippet.
The tool returns the best matches, not every memory. To list, count, or filter memories, fetch the id memory with notion-fetch and query its data source with notion-query-data-sources. Read the notion://docs/memory MCP resource once before you first search or save memories in a conversation.
Work with Custom Agent sessions
Usenotion-search-agents to find a Custom Agent by name or description,
or to browse the user’s favorite agents and the workspace’s newest agents.
It returns the Custom Agent URL needed to start a session. Then use these
tools to find sessions, start a session, send follow-up messages, wait for
a reply, stop a run, and read session events:
notion-query-sessionsnotion-search-sessionsnotion-spawn-sessionnotion-get-session-statusnotion-wait-sessionnotion-stop-sessionnotion-send-message-to-sessionnotion-list-session-eventsnotion-read-session-event
notion-search-sessions returns no matches and a warning when the
workspace’s search index is missing or not ready. Use
notion-query-sessions to list sessions while search is unavailable.
notion-query-sessions can return an empty page with a cursor. The same is
true for notion-search-agents when it is called without a query. Keep
following the cursor until the response stops returning one. A
notion-search-agents call with a query returns one page without a cursor.
Session tools return a session_url in the form
session://<spaceId>/<sessionId>. Pass it back unchanged. The tools also
accept the shorthand session://<sessionId> and thread://<sessionId>,
which resolve in the connected workspace. A full URL whose workspace ID
differs from the connected workspace returns HTTP 400 validation_error.
Malformed URLs and URLs for a resource other than a session also return
HTTP 400 validation_error. A valid session URL in the connected workspace
returns HTTP 404 object_not_found if the session is missing, inaccessible,
or unsupported.
notion-send-message-to-session returns a conflict error when the session
already has a run in progress. Wait for that run to finish with
notion-wait-session, then send the message.
Plan eligibility and tool discovery are separate. When Notion MCP advertises
these tools, calling them requires Notion AI access and access to Custom
Agents. Without that access, calls return a prompt with a recovery link. When
a direct upgrade is available,
current_tool_access reports the tools as
upgrade_required with an upgrade_url. When Notion routes the user through
a plan landing page instead, it reports them as plan_required with a
landing_page_url and landing_page_action. If the workspace has a billing
restriction, such as an unpaid invoice, calls return a permission error that
asks a workspace owner to manage billing, and current_tool_access reports
the tools as not_enabled.A connection that lacks the “View sessions and interact with agents”
capability does not advertise these tools or include them in
current_tool_access. Disconnect and reconnect Notion, or enable the
capability in the integration’s settings and re-authorize.