7df-lab / notion
Search Notion and read/create/update pages and databases via Notion's official hosted MCP server. Tools are auto-discovered from the server at runtime.
Notion
Talk to Notion through its official hosted MCP server from the Python kernel.
Setup
Connect via /login → Services tab → Notion (OAuth in the browser)./mcp login notion does the same. Once connected, this skill is enabled
automatically. If a call raises NotEnabled, the user isn't logged in — walk
them through /login; don't ask them to set environment variables.
Usage
The tool set is defined by the server, not by this skill, so **discover before
you call** — don't assume tool names or argument names:
Notion's tools are named with hyphens (e.g. notion-search, notion-fetch),
which are not valid Python identifiers — so call them via call_tool:
import notion
# 1. Discover available tools (returns names + schemas)
for tool in await notion.list_tools():
print(tool["name"], "-", tool["description"])
# 2. Call by exact name; the second arg matches the tool's input schema
result = await notion.call_tool("notion-search", {"query": "roadmap"})
print(result)Tools whose names are valid identifiers can also be called asawait notion.<tool>(**args), and help(notion.<tool>) shows their schema oncelist_tools() has run.
Notes:
- Every call is
async— alwaysawait. Results are already-parsed Python (a
dictfor structured output, otherwise a
string). No need tojson.loadsthem.Run
list_tools()before relying onhelp()or assuming a tool exists — the
server's schema is the source of truth for names and arguments.The kernel import name is
notion. On a custom kernel Python that already
has the unrelated PyPInotionclient installed,import notionmay resolve
to that instead; use the default managed kernel venv to avoid the clash.