Notion
Search a Notion workspace, query its databases, read pages as markdown, and create or update pages, rows, content and comments.
Connect a Notion workspace with an internal integration token to work its pages and databases: search by title, translate a database id into its data sources, read a data source's property schema, query rows with Notion's own filters and sorts, read a page's properties and its content as markdown, and write back - create rows and subpages, set property values, append and edit content blocks, trash and restore pages, and comment. Access is share-scoped: the integration sees only what a person has connected it to in Notion, and an unshared workspace looks like an empty one, so Check Notion connection reports what is actually visible.
Connect
| Credential field | Required | Where it comes from |
|---|---|---|
Internal integration token (INTEGRATION_TOKEN) | Yes | From the integration's Configuration tab in Notion (ntn_…). Its Capabilities and the pages shared with it are the permission ceiling. |
Tools
| Tool | Access | What it does |
|---|---|---|
Check Notion connection (yekar.notion.me) | Read | Verify the Notion connection and report what it can actually see: the integration's identity, its workspace, and whether ANY page or database has been shared with it. Run this first when Notion tools return nothing - a Notion integration starts with access to nothing at all, and that state looks exactly like an empty workspace. |
Search Notion (yekar.notion.search) | Read | Find pages and data sources by TITLE. Notion's search does not look inside page content - a phrase in a document's body will not match - and it only ever returns what has been shared with this integration. Use it to locate an id, then read the page or query the data source. |
Get database (yekar.notion.get-database) | Read | Read a database and list its DATA SOURCES. This is the id-translation step: a Notion URL gives you a database id, but rows are queried, created and filtered against a data source id, which is what this returns. Start here whenever you have an id copied from Notion. |
Get data source (yekar.notion.get-data-source) | Read | Read a data source's property schema: every property's name, type and (for select, status and multi-select) its allowed options. This is the discovery step before querying with property filters or writing a row - property names and options are per-workspace and cannot be guessed. |
Query data source (yekar.notion.query-data-source) | Read | List a data source's rows (each row is a Notion page), optionally filtered and sorted by its properties. Returns one page of rows plus a cursor - Notion reports no total count for any list, so this cannot tell you how many rows match. Get the property names, types and options from Get data source first. |
Get page (yekar.notion.get-page) | Read | Read a page's PROPERTIES - its title, and for a database row every column value. This does not return the page's content: the text, headings and lists written on the page are blocks, and Get page content reads those. |
Get page content (yekar.notion.get-page-content) | Read | Read a page's written content - its text, headings, lists, to-dos, quotes, callouts and code - as markdown. This is what is ON the page, as opposed to Get page, which reads its properties. Long or deeply nested pages are read up to a budget and the response says exactly where it stopped and how to continue. |
List blocks (yekar.notion.get-block-children) | Read | List a page's or block's direct children with their block ids, types and a short text preview - one level deep, no recursion. Use this when you need a specific block's ID in order to edit or delete it; to READ a page, use Get page content, which renders the whole tree as markdown. |
List comments (yekar.notion.list-comments) | Read | Read the comments on a page or block. Comments in the same thread share a discussion id - pass that id to Add comment to reply in the thread rather than starting a new one. Requires the integration's read-comments capability. |
List users (yekar.notion.list-users) | Read | List the workspace's members and bots with their user ids - the ids a person-typed property needs when you set an assignee or owner. Requires the integration's read-user-information capability. |
Create page (yekar.notion.create-page) | Write | Create a Notion page - either a ROW in a data source (with its property values) or a SUBPAGE under an existing page - optionally with initial content. Creating is not idempotent: calling this twice makes two pages, so check with Query data source before retrying. |
Update page properties (yekar.notion.update-page-properties) | Write | Set property values on an existing page (a database row). Only the properties you name change; the rest and the page's content are untouched. Values are absolute, so running the same update twice leaves the same result. |
Append blocks (yekar.notion.append-blocks) | Write | Add content to the end of a page (or inside a block): paragraphs, headings, bulleted and numbered list items, to-dos, toggles, quotes, callouts, code blocks and dividers. Text is written verbatim - inline markdown is not parsed. Appending accumulates: running the same call twice writes the content twice. |
Update block (yekar.notion.update-block) | Write | Replace one block's text with new text, keeping its type and position. The value is absolute, so repeating the call leaves the same result. A block's type cannot be changed - delete it and append a new one instead. |
Delete block (yekar.notion.delete-block) | Write | Move a block to the trash, removing it (and anything nested inside it) from the page. Notion's delete is a trash move, not an erase - a person can restore it from the page's history. Deleting an already-deleted block is an error, so this is not safe to repeat blindly. |
Trash or restore page (yekar.notion.archive-page) | Write | Move a page to the trash, or restore one from it. Trashing hides the page from the workspace and from database views without erasing it - a person can restore it in Notion, and this tool can too. The state is absolute, so repeating the call is harmless. |
Add comment (yekar.notion.create-comment) | Write | Comment on a page, or reply in an existing comment thread. The comment is posted by the integration, not by a person, and everyone with access to the page can see it. Comments accumulate - posting the same text twice leaves two comments. |
Notes
- In Notion open Settings → Connections → "Develop or manage integrations" → New integration, pick the workspace, name it (e.g. "Yekar.AI") and copy the Internal Integration Secret (ntn_…).
- On the integration's Capabilities tab tick what Yekar.AI may do - read content, update content, insert content, read and insert comments, read user information. That selection is the ceiling for every tool, and a missing capability surfaces as a refusal naming it.
- Then SHARE with it: open each page or database in Notion → ⋯ → Connections → add the integration. This is the step everyone misses. Anything you do not share is invisible - searches return nothing and its id reports as not found, with no error to tell you why. Sharing a parent page shares everything under it.
- Actions are attributed to the integration, not to you: pages it creates and comments it posts show the integration as their author, and it acts with exactly what you shared, not with your own Notion permissions.
- Paste the token here. Add one credential per workspace - a production and a test workspace can live on the same connection.