Notion
Purpose
Operate Notion through Composio’s Notion toolkit on Rube MCP: search tools for current schemas, ensure ACTIVE Notion OAuth, then manage pages, databases, blocks, comments, and users per workflow below.
When to Use
- Create or update Notion pages and database rows.
- Query databases, append blocks, or manage comments.
- List users or resolve page/database IDs.
When NOT to Use
- Syncolab SKS Living Docs (authoritative platform docs) → syncolab-living-docs.
- Without Rube MCP or before Notion connection is ACTIVE.
Expected Outcome
- Every call preceded by
RUBE_SEARCH_TOOLS for live parameters.
- Page/database IDs from tool responses, not guessed from URLs alone.
- Summaries with Notion links/ids when returned by tools.
Inputs to Gather
- Page id, database id, or parent page for creates.
- Property payloads per database schema from search/get tools.
- Block content (Markdown) for append/update operations.
Workflow
- Confirm Rube MCP (
RUBE_SEARCH_TOOLS responds).
RUBE_MANAGE_CONNECTIONS with toolkit notion; complete OAuth if not ACTIVE.
RUBE_SEARCH_TOOLS for the Notion action; execute with schema-exact fields.
- Prefer list/search tools to resolve ids before destructive updates.
- Report results with ids and URLs from Composio responses.
Rube MCP and Notion toolkit
Automate Notion operations through Composio's Notion toolkit via Rube MCP.
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Notion connection via
RUBE_MANAGE_CONNECTIONS with toolkit notion
- Always call
RUBE_SEARCH_TOOLS first to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLS responds
- Call
RUBE_MANAGE_CONNECTIONS with toolkit notion
- If connection is not ACTIVE, follow the returned auth link to complete Notion OAuth
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Create and Manage Pages
When to use: User wants to create, update, or archive Notion pages
Tool sequence:
NOTION_SEARCH_NOTION_PAGE - Find parent page or existing page [Prerequisite]
NOTION_CREATE_NOTION_PAGE - Create a new page under a parent [Optional]
NOTION_RETRIEVE_PAGE - Get page metadata/properties [Optional]
NOTION_UPDATE_PAGE - Update page properties, title, icon, cover [Optional]
NOTION_ARCHIVE_NOTION_PAGE - Soft-delete (archive) a page [Optional]
Key parameters:
query: Search text for SEARCH_NOTION_PAGE
parent_id: Parent page or database ID
page_id: Page ID for retrieval/update/archive
properties: Page property values matching parent schema
Pitfalls:
- RETRIEVE_PAGE returns only metadata/properties, NOT body content; use FETCH_BLOCK_CONTENTS for page body
- ARCHIVE_NOTION_PAGE is a soft-delete (sets archived=true), not permanent deletion
- Broad searches can look incomplete unless has_more/next_cursor is fully paginated
2. Query and Manage Databases
When to use: User wants to query database rows, insert entries, or update records
Tool sequence:
NOTION_SEARCH_NOTION_PAGE - Find the database by name [Prerequisite]
NOTION_FETCH_DATABASE - Inspect schema and properties [Prerequisite]
NOTION_QUERY_DATABASE / NOTION_QUERY_DATABASE_WITH_FILTER - Query rows [Required]
NOTION_INSERT_ROW_DATABASE - Add new entries [Optional]
NOTION_UPDATE_ROW_DATABASE - Update existing entries [Optional]
Key parameters:
database_id: Database ID (from search or URL)
filter: Filter object matching Notion filter syntax
sorts: Array of sort objects
start_cursor: Pagination cursor from previous response
properties: Property values matching database schema for inserts/updates
Pitfalls:
- 404 object_not_found usually means wrong database_id or the database is not shared with the integration
- Results are paginated; ignoring has_more/next_cursor silently truncates reads
- Schema mismatches or missing required properties cause 400 validation_error
- Formula and read-only fields cannot be set via INSERT_ROW_DATABASE
- Property names in filters must match schema exactly (case-sensitive)
3. Manage Blocks and Page Content
When to use: User wants to read, append, or modify content blocks in a page
Tool sequence:
NOTION_FETCH_BLOCK_CONTENTS - Read child blocks of a page [Required]
NOTION_ADD_MULTIPLE_PAGE_CONTENT - Append blocks to a page [Optional]
NOTION_APPEND_TEXT_BLOCKS - Append text-only blocks [Optional]
NOTION_REPLACE_PAGE_CONTENT - Replace all page content [Optional]
NOTION_DELETE_BLOCK - Remove a specific block [Optional]
Key parameters:
block_id / page_id: Target page or block ID
content_blocks: Array of block objects (NOT child_blocks)
text: Plain text content for APPEND_TEXT_BLOCKS
Pitfalls:
- Use
content_blocks parameter, NOT child_blocks -- the latter fails validation
- ADD_MULTIPLE_PAGE_CONTENT fails on archived pages; unarchive via UPDATE_PAGE first
- Created blocks are in response.data.results; persist block IDs for later edits
- DELETE_BLOCK is archival (archived=true), not permanent deletion
4. Manage Database Schema
When to use: User wants to create databases or modify their structure
Tool sequence:
NOTION_FETCH_DATABASE - Inspect current schema [Prerequisite]
NOTION_CREATE_DATABASE - Create a new database [Optional]
NOTION_UPDATE_SCHEMA_DATABASE - Modify database properties [Optional]
Key parameters:
parent_id: Parent page ID for new databases
title: Database title
properties: Property definitions with types and options
database_id: Database ID for schema updates
Pitfalls:
- Cannot change property types via UPDATE_SCHEMA; must create new property and migrate data
- Formula, rollup, and relation properties have complex configuration requirements
5. Manage Users and Comments
When to use: User wants to list workspace users or manage comments on pages
Tool sequence:
NOTION_LIST_USERS - List all workspace users [Optional]
NOTION_GET_ABOUT_ME - Get current authenticated user [Optional]
NOTION_CREATE_COMMENT - Add a comment to a page [Optional]
NOTION_FETCH_COMMENTS - List comments on a page [Optional]
Key parameters:
page_id: Page ID for comments (also called discussion_id)
rich_text: Comment content as rich text array
Pitfalls:
- Comments are linked to pages, not individual blocks
- User IDs from LIST_USERS are needed for people-type property filters
Common Patterns
ID Resolution
Page/Database name -> ID:
1. Call NOTION_SEARCH_NOTION_PAGE with query=name
2. Paginate with has_more/next_cursor until found
3. Extract id from matching result
Database schema inspection:
1. Call NOTION_FETCH_DATABASE with database_id
2. Extract properties object for field names and types
3. Use exact property names in queries and inserts
Pagination
- Set
page_size for results per page (max 100)
- Check response for
has_more boolean
- Pass
start_cursor or next_cursor in next request
- Continue until
has_more is false
Notion Filter Syntax
Single filter:
{"property": "Status", "select": {"equals": "Done"}}
Compound filter:
{"and": [
{"property": "Status", "select": {"equals": "In Progress"}},
{"property": "Assignee", "people": {"contains": "user-id"}}
]}
Known Pitfalls
Integration Sharing:
- Pages and databases must be shared with the Notion integration to be accessible
- Title queries can return 0 when the item is not shared with the integration
Property Types:
- Property names are case-sensitive and must match schema exactly
- Formula, rollup, and created_time fields are read-only
- Select/multi-select values must match existing options unless creating new ones
Response Parsing:
- Response data may be nested under
data_preview or data.results
- Parse defensively with fallbacks for different nesting levels
Quick Reference
| Task |
Tool Slug |
Key Params |
| Search pages/databases |
NOTION_SEARCH_NOTION_PAGE |
query |
| Create page |
NOTION_CREATE_NOTION_PAGE |
parent_id, properties |
| Get page metadata |
NOTION_RETRIEVE_PAGE |
page_id |
| Update page |
NOTION_UPDATE_PAGE |
page_id, properties |
| Archive page |
NOTION_ARCHIVE_NOTION_PAGE |
page_id |
| Duplicate page |
NOTION_DUPLICATE_PAGE |
page_id |
| Get page blocks |
NOTION_FETCH_BLOCK_CONTENTS |
block_id |
| Append blocks |
NOTION_ADD_MULTIPLE_PAGE_CONTENT |
page_id, content_blocks |
| Append text |
NOTION_APPEND_TEXT_BLOCKS |
page_id, text |
| Replace content |
NOTION_REPLACE_PAGE_CONTENT |
page_id, content_blocks |
| Delete block |
NOTION_DELETE_BLOCK |
block_id |
| Query database |
NOTION_QUERY_DATABASE |
database_id, filter, sorts |
| Query with filter |
NOTION_QUERY_DATABASE_WITH_FILTER |
database_id, filter |
| Insert row |
NOTION_INSERT_ROW_DATABASE |
database_id, properties |
| Update row |
NOTION_UPDATE_ROW_DATABASE |
page_id, properties |
| Get database schema |
NOTION_FETCH_DATABASE |
database_id |
| Create database |
NOTION_CREATE_DATABASE |
parent_id, title, properties |
| Update schema |
NOTION_UPDATE_SCHEMA_DATABASE |
database_id, properties |
| List users |
NOTION_LIST_USERS |
(none) |
| Create comment |
NOTION_CREATE_COMMENT |
page_id, rich_text |
| List comments |
NOTION_FETCH_COMMENTS |
page_id |
Tool Availability Rules
| Access |
Behavior |
| Full tool access |
Execute workflows, verify outputs, report errors. |
| Read-only |
Inspect and plan; provide exact commands or dispatch request for writes. |
| No integration |
State limitation; do not fabricate API results. |
Related tool sets
Review / Decision / Execution Criteria
- Prefer smallest safe change; confirm destructive actions with the user.
- Use evidence from tool responses; cite IDs and links when present.
- Match integration-specific conventions (JQL, RFC3339, A1 notation, etc.).
Output Format
Report:
- What was requested and what was done.
- Key results (tables or bullets).
- Errors, blockers, or missing permissions.
- Suggested next steps.
Quality Bar
- Specific, actionable, and grounded in tool output.
- Concise unless the user asked for detail.
- Respect rate limits, pagination, and API semantics.
Safety and Boundaries
- Do not commit secrets, tokens, or PII into skills or user-visible logs.
- Do not fabricate validation, send, or write confirmations.
- Confirm destructive operations (delete, destroy, mass update) when appropriate.
Escalation / Dispatch Rules
- If the task spans multiple domains, use or suggest related skills via
relationships.skills.
- If write access is required but unavailable, dispatch or ask the user to enable tools.
References
- Legacy content migrated from
skills/old_skills.json (notion).
skills/skill.instruction.md, skills/meta.instructions.md
1---2name: notion3description: Automates Notion pages, databases, blocks, comments, and users via Rube MCP (Composio). Use after RUBE_SEARCH_TOOLS and an ACTIVE Notion connection with schema-driven tool slugs.4---56# Notion78## Purpose910Operate Notion through Composio’s Notion toolkit on Rube MCP: search tools for current schemas, ensure ACTIVE Notion OAuth, then manage pages, databases, blocks, comments, and users per workflow below.1112## When to Use1314- Create or update Notion pages and database rows.15- Query databases, append blocks, or manage comments.16- List users or resolve page/database IDs.1718## When NOT to Use1920- Syncolab SKS Living Docs (authoritative platform docs) → **syncolab-living-docs**.21- Without Rube MCP or before Notion connection is ACTIVE.2223## Expected Outcome2425- Every call preceded by `RUBE_SEARCH_TOOLS` for live parameters.26- Page/database IDs from tool responses, not guessed from URLs alone.27- Summaries with Notion links/ids when returned by tools.2829## Inputs to Gather3031- Page id, database id, or parent page for creates.32- Property payloads per database schema from search/get tools.33- Block content (Markdown) for append/update operations.3435## Workflow36371. Confirm Rube MCP (`RUBE_SEARCH_TOOLS` responds).382. `RUBE_MANAGE_CONNECTIONS` with toolkit `notion`; complete OAuth if not ACTIVE.393. `RUBE_SEARCH_TOOLS` for the Notion action; execute with schema-exact fields.404. Prefer list/search tools to resolve ids before destructive updates.415. Report results with ids and URLs from Composio responses.4243## Rube MCP and Notion toolkit4445Automate Notion operations through Composio's Notion toolkit via Rube MCP.4647## Prerequisites4849- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)50- Active Notion connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `notion`51- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas5253## Setup5455**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.5657581. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds592. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `notion`603. If connection is not ACTIVE, follow the returned auth link to complete Notion OAuth614. Confirm connection status shows ACTIVE before running any workflows6263## Core Workflows6465### 1. Create and Manage Pages6667**When to use**: User wants to create, update, or archive Notion pages6869**Tool sequence**:701. `NOTION_SEARCH_NOTION_PAGE` - Find parent page or existing page [Prerequisite]712. `NOTION_CREATE_NOTION_PAGE` - Create a new page under a parent [Optional]723. `NOTION_RETRIEVE_PAGE` - Get page metadata/properties [Optional]734. `NOTION_UPDATE_PAGE` - Update page properties, title, icon, cover [Optional]745. `NOTION_ARCHIVE_NOTION_PAGE` - Soft-delete (archive) a page [Optional]7576**Key parameters**:77- `query`: Search text for SEARCH_NOTION_PAGE78- `parent_id`: Parent page or database ID79- `page_id`: Page ID for retrieval/update/archive80- `properties`: Page property values matching parent schema8182**Pitfalls**:83- RETRIEVE_PAGE returns only metadata/properties, NOT body content; use FETCH_BLOCK_CONTENTS for page body84- ARCHIVE_NOTION_PAGE is a soft-delete (sets archived=true), not permanent deletion85- Broad searches can look incomplete unless has_more/next_cursor is fully paginated8687### 2. Query and Manage Databases8889**When to use**: User wants to query database rows, insert entries, or update records9091**Tool sequence**:921. `NOTION_SEARCH_NOTION_PAGE` - Find the database by name [Prerequisite]932. `NOTION_FETCH_DATABASE` - Inspect schema and properties [Prerequisite]943. `NOTION_QUERY_DATABASE` / `NOTION_QUERY_DATABASE_WITH_FILTER` - Query rows [Required]954. `NOTION_INSERT_ROW_DATABASE` - Add new entries [Optional]965. `NOTION_UPDATE_ROW_DATABASE` - Update existing entries [Optional]9798**Key parameters**:99- `database_id`: Database ID (from search or URL)100- `filter`: Filter object matching Notion filter syntax101- `sorts`: Array of sort objects102- `start_cursor`: Pagination cursor from previous response103- `properties`: Property values matching database schema for inserts/updates104105**Pitfalls**:106- 404 object_not_found usually means wrong database_id or the database is not shared with the integration107- Results are paginated; ignoring has_more/next_cursor silently truncates reads108- Schema mismatches or missing required properties cause 400 validation_error109- Formula and read-only fields cannot be set via INSERT_ROW_DATABASE110- Property names in filters must match schema exactly (case-sensitive)111112### 3. Manage Blocks and Page Content113114**When to use**: User wants to read, append, or modify content blocks in a page115116**Tool sequence**:1171. `NOTION_FETCH_BLOCK_CONTENTS` - Read child blocks of a page [Required]1182. `NOTION_ADD_MULTIPLE_PAGE_CONTENT` - Append blocks to a page [Optional]1193. `NOTION_APPEND_TEXT_BLOCKS` - Append text-only blocks [Optional]1204. `NOTION_REPLACE_PAGE_CONTENT` - Replace all page content [Optional]1215. `NOTION_DELETE_BLOCK` - Remove a specific block [Optional]122123**Key parameters**:124- `block_id` / `page_id`: Target page or block ID125- `content_blocks`: Array of block objects (NOT child_blocks)126- `text`: Plain text content for APPEND_TEXT_BLOCKS127128**Pitfalls**:129- Use `content_blocks` parameter, NOT `child_blocks` -- the latter fails validation130- ADD_MULTIPLE_PAGE_CONTENT fails on archived pages; unarchive via UPDATE_PAGE first131- Created blocks are in response.data.results; persist block IDs for later edits132- DELETE_BLOCK is archival (archived=true), not permanent deletion133134### 4. Manage Database Schema135136**When to use**: User wants to create databases or modify their structure137138**Tool sequence**:1391. `NOTION_FETCH_DATABASE` - Inspect current schema [Prerequisite]1402. `NOTION_CREATE_DATABASE` - Create a new database [Optional]1413. `NOTION_UPDATE_SCHEMA_DATABASE` - Modify database properties [Optional]142143**Key parameters**:144- `parent_id`: Parent page ID for new databases145- `title`: Database title146- `properties`: Property definitions with types and options147- `database_id`: Database ID for schema updates148149**Pitfalls**:150- Cannot change property types via UPDATE_SCHEMA; must create new property and migrate data151- Formula, rollup, and relation properties have complex configuration requirements152153### 5. Manage Users and Comments154155**When to use**: User wants to list workspace users or manage comments on pages156157**Tool sequence**:1581. `NOTION_LIST_USERS` - List all workspace users [Optional]1592. `NOTION_GET_ABOUT_ME` - Get current authenticated user [Optional]1603. `NOTION_CREATE_COMMENT` - Add a comment to a page [Optional]1614. `NOTION_FETCH_COMMENTS` - List comments on a page [Optional]162163**Key parameters**:164- `page_id`: Page ID for comments (also called `discussion_id`)165- `rich_text`: Comment content as rich text array166167**Pitfalls**:168- Comments are linked to pages, not individual blocks169- User IDs from LIST_USERS are needed for people-type property filters170171## Common Patterns172173### ID Resolution174175**Page/Database name -> ID**:176```1771. Call NOTION_SEARCH_NOTION_PAGE with query=name1782. Paginate with has_more/next_cursor until found1793. Extract id from matching result180```181182**Database schema inspection**:183```1841. Call NOTION_FETCH_DATABASE with database_id1852. Extract properties object for field names and types1863. Use exact property names in queries and inserts187```188189### Pagination190191- Set `page_size` for results per page (max 100)192- Check response for `has_more` boolean193- Pass `start_cursor` or `next_cursor` in next request194- Continue until `has_more` is false195196### Notion Filter Syntax197198**Single filter**:199```json200{"property": "Status", "select": {"equals": "Done"}}201```202203**Compound filter**:204```json205{"and": [206 {"property": "Status", "select": {"equals": "In Progress"}},207 {"property": "Assignee", "people": {"contains": "user-id"}}208]}209```210211## Known Pitfalls212213**Integration Sharing**:214- Pages and databases must be shared with the Notion integration to be accessible215- Title queries can return 0 when the item is not shared with the integration216217**Property Types**:218- Property names are case-sensitive and must match schema exactly219- Formula, rollup, and created_time fields are read-only220- Select/multi-select values must match existing options unless creating new ones221222**Response Parsing**:223- Response data may be nested under `data_preview` or `data.results`224- Parse defensively with fallbacks for different nesting levels225226## Quick Reference227228| Task | Tool Slug | Key Params |229|------|-----------|------------|230| Search pages/databases | NOTION_SEARCH_NOTION_PAGE | query |231| Create page | NOTION_CREATE_NOTION_PAGE | parent_id, properties |232| Get page metadata | NOTION_RETRIEVE_PAGE | page_id |233| Update page | NOTION_UPDATE_PAGE | page_id, properties |234| Archive page | NOTION_ARCHIVE_NOTION_PAGE | page_id |235| Duplicate page | NOTION_DUPLICATE_PAGE | page_id |236| Get page blocks | NOTION_FETCH_BLOCK_CONTENTS | block_id |237| Append blocks | NOTION_ADD_MULTIPLE_PAGE_CONTENT | page_id, content_blocks |238| Append text | NOTION_APPEND_TEXT_BLOCKS | page_id, text |239| Replace content | NOTION_REPLACE_PAGE_CONTENT | page_id, content_blocks |240| Delete block | NOTION_DELETE_BLOCK | block_id |241| Query database | NOTION_QUERY_DATABASE | database_id, filter, sorts |242| Query with filter | NOTION_QUERY_DATABASE_WITH_FILTER | database_id, filter |243| Insert row | NOTION_INSERT_ROW_DATABASE | database_id, properties |244| Update row | NOTION_UPDATE_ROW_DATABASE | page_id, properties |245| Get database schema | NOTION_FETCH_DATABASE | database_id |246| Create database | NOTION_CREATE_DATABASE | parent_id, title, properties |247| Update schema | NOTION_UPDATE_SCHEMA_DATABASE | database_id, properties |248| List users | NOTION_LIST_USERS | (none) |249| Create comment | NOTION_CREATE_COMMENT | page_id, rich_text |250| List comments | NOTION_FETCH_COMMENTS | page_id |251252## Tool Availability Rules253254| Access | Behavior |255|--------|----------|256| Full tool access | Execute workflows, verify outputs, report errors. |257| Read-only | Inspect and plan; provide exact commands or dispatch request for writes. |258| No integration | State limitation; do not fabricate API results. |259260### Related tool sets261262- `notion`263264- MCP: `rube`265266## Review / Decision / Execution Criteria267268- Prefer smallest safe change; confirm destructive actions with the user.269- Use evidence from tool responses; cite IDs and links when present.270- Match integration-specific conventions (JQL, RFC3339, A1 notation, etc.).271272## Output Format273274Report:2752761. What was requested and what was done.2772. Key results (tables or bullets).2783. Errors, blockers, or missing permissions.2794. Suggested next steps.280281## Quality Bar282283- Specific, actionable, and grounded in tool output.284- Concise unless the user asked for detail.285- Respect rate limits, pagination, and API semantics.286287## Safety and Boundaries288289- Do not commit secrets, tokens, or PII into skills or user-visible logs.290- Do not fabricate validation, send, or write confirmations.291- Confirm destructive operations (delete, destroy, mass update) when appropriate.292293## Escalation / Dispatch Rules294295- If the task spans multiple domains, use or suggest related skills via `relationships.skills`.296- If write access is required but unavailable, dispatch or ask the user to enable tools.297298## References299300- Legacy content migrated from `skills/old_skills.json` (`notion`).301- `skills/skill.instruction.md`, `skills/meta.instructions.md`