Buildwithclaude notion-automation
Automate Notion tasks via Rube MCP (Composio): pages, databases, blocks, comments, users. Always search tools first for current schemas.
git clone https://github.com/davepoon/buildwithclaude
T=$(mktemp -d) && git clone --depth=1 https://github.com/davepoon/buildwithclaude "$T" && mkdir -p ~/.claude/skills && cp -r "$T/plugins/all-skills/skills/notion-automation" ~/.claude/skills/davepoon-buildwithclaude-notion-automation && rm -rf "$T"
plugins/all-skills/skills/notion-automation/SKILL.mdNotion Automation via Rube MCP
Automate Notion operations through Composio's Notion toolkit via Rube MCP.
Toolkit docs: composio.dev/toolkits/notion
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Notion connection via
with toolkitRUBE_MANAGE_CONNECTIONSnotion - Always call
first to get current tool schemasRUBE_SEARCH_TOOLS
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
respondsRUBE_SEARCH_TOOLS - Call
with toolkitRUBE_MANAGE_CONNECTIONSnotion - 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:
- Find parent page or existing page [Prerequisite]NOTION_SEARCH_NOTION_PAGE
- Create a new page under a parent [Optional]NOTION_CREATE_NOTION_PAGE
- Get page metadata/properties [Optional]NOTION_RETRIEVE_PAGE
- Update page properties, title, icon, cover [Optional]NOTION_UPDATE_PAGE
- Soft-delete (archive) a page [Optional]NOTION_ARCHIVE_NOTION_PAGE
Key parameters:
: Search text for SEARCH_NOTION_PAGEquery
: Parent page or database IDparent_id
: Page ID for retrieval/update/archivepage_id
: Page property values matching parent schemaproperties
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:
- Find the database by name [Prerequisite]NOTION_SEARCH_NOTION_PAGE
- Inspect schema and properties [Prerequisite]NOTION_FETCH_DATABASE
/NOTION_QUERY_DATABASE
- Query rows [Required]NOTION_QUERY_DATABASE_WITH_FILTER
- Add new entries [Optional]NOTION_INSERT_ROW_DATABASE
- Update existing entries [Optional]NOTION_UPDATE_ROW_DATABASE
Key parameters:
: Database ID (from search or URL)database_id
: Filter object matching Notion filter syntaxfilter
: Array of sort objectssorts
: Pagination cursor from previous responsestart_cursor
: Property values matching database schema for inserts/updatesproperties
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:
- Read child blocks of a page [Required]NOTION_FETCH_BLOCK_CONTENTS
- Append blocks to a page [Optional]NOTION_ADD_MULTIPLE_PAGE_CONTENT
- Append text-only blocks [Optional]NOTION_APPEND_TEXT_BLOCKS
- Replace all page content [Optional]NOTION_REPLACE_PAGE_CONTENT
- Remove a specific block [Optional]NOTION_DELETE_BLOCK
Key parameters:
/block_id
: Target page or block IDpage_id
: Array of block objects (NOT child_blocks)content_blocks
: Plain text content for APPEND_TEXT_BLOCKStext
Pitfalls:
- Use
parameter, NOTcontent_blocks
-- the latter fails validationchild_blocks - 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:
- Inspect current schema [Prerequisite]NOTION_FETCH_DATABASE
- Create a new database [Optional]NOTION_CREATE_DATABASE
- Modify database properties [Optional]NOTION_UPDATE_SCHEMA_DATABASE
Key parameters:
: Parent page ID for new databasesparent_id
: Database titletitle
: Property definitions with types and optionsproperties
: Database ID for schema updatesdatabase_id
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:
- List all workspace users [Optional]NOTION_LIST_USERS
- Get current authenticated user [Optional]NOTION_GET_ABOUT_ME
- Add a comment to a page [Optional]NOTION_CREATE_COMMENT
- List comments on a page [Optional]NOTION_FETCH_COMMENTS
Key parameters:
: Page ID for comments (also calledpage_id
)discussion_id
: Comment content as rich text arrayrich_text
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
for results per page (max 100)page_size - Check response for
booleanhas_more - Pass
orstart_cursor
in next requestnext_cursor - Continue until
is falsehas_more
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
ordata_previewdata.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 |
Powered by Composio