NotionVFS exposes a Notion workspace as a filesystem. The Node SDK talks to the Notion REST API with an integration token; the Browser SDK talks to Notion’s MCP server with an OAuth client provider so secrets stay off the page.
Node
Browser
Mount mode
read, write (page edits via the MCP server in the browser SDK).
Acting on Notion
Acting on Notion (creating, editing and trashing pages, querying data sources, and every route that has no typed verb) goes through the ntn CLI when installed.Layout
2025-09-03 API generation a database is a container of data
sources, and both the column schema and the rows live on the data
source: data_source.json and rows.jsonl.
database.json is the container’s identity plus the data_sources stubs
that name the directories beneath it, and carries no properties.
The shape is identical to the Python connector:
data_source.json holds the typed column schema under properties, and
rows.jsonl holds every row, one JSON object per line: the row’s
page.json without the body, plus path, where that page.json is below
the data source directory. The rows are one file rather than a directory
each, because a query answers a hundred rows’ cells in one call while
every row directory costs calls of its own to enter.
A database row is itself a page: its page.json reports parent_type of
data_source_id, and its cell values ride in the same file under
properties. Row directories are not listed; open one by the path on
its line. For full rows.jsonl and page.json field details and
supported edits see the Python Notion docs.