Help us improve
Share bugs, ideas, or general feedback.
From shared-utils
This skill should be used when the user asks to "connect to Notion", "search Notion pages", "create Notion page", "read Notion database", "update Notion content", or mentions Notion workspace operations. Keywords: Notion, notes, database, workspace.
npx claudepluginhub n0rvyn/indie-toolkit --plugin shared-utilsHow this skill is triggered — by the user, by Claude, or both
Slash command
/shared-utils:notion-with-apiThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Connect to Notion workspace and perform authorized operations: search, read, create, update pages and databases.
Automates Notion pages, databases, blocks, comments, users via Composio toolkit and Rube MCP. Use after connecting Notion OAuth and searching tools for schemas.
Automates Notion pages, databases, blocks, comments, and users via Composio toolkit over Rube MCP. Requires active connection; sequences tools for create/query/update/archive.
Interact with Notion workspaces via official API CLI: manage pages, databases, blocks, users, comments, and search. For AI agents or developers automating Notion tasks.
Share bugs, ideas, or general feedback.
Connect to Notion workspace and perform authorized operations: search, read, create, update pages and databases.
Before first use, complete the setup:
.env file (install location depends on how the plugin was installed):
NOTION_TOKEN=your_internal_integration_secret
NOTION_WORKSPACE=Collector
NOTION_VERSION=2022-06-28
Default load paths (first match wins):
$NOTION_ENV_PATH if set${plugin_install_dir}/skills/notion-with-api/.env~/.claude/skills/notion-with-api/.env (legacy global-skill location; kept for back-compat)... → Connect to → Select your integrationpython3 ~/.claude/skills/notion/scripts/notion_api.py verify
python3 ~/.claude/skills/notion/scripts/notion_api.py search "keyword"
python3 ~/.claude/skills/notion/scripts/notion_api.py list-databases
IMPORTANT: Always run this first before creating database items to understand available properties and their types.
python3 ~/.claude/skills/notion/scripts/notion_api.py get-db-schema DATABASE_ID
Example output:
Database: Document Hub
ID: 2f4fd878-f624-8057-a70e-deaaf68d71ae
Properties:
- Doc name (title)
- Category (multi_select)
Options: Proposal, Customer research, Strategy doc, Planning
- Created by (created_by)
(auto-populated)
python3 ~/.claude/skills/notion/scripts/notion_api.py read-page PAGE_ID
Deletes all existing blocks, then appends new blocks from markdown. Page title is preserved.
# From file
python3 ~/.claude/skills/notion/scripts/notion_api.py update-page PAGE_ID --file /path/to/content.md
# From string
python3 ~/.claude/skills/notion/scripts/notion_api.py update-page PAGE_ID --content "## New content"
Leading # H1 lines are stripped (page title is separate from body content in Notion).
python3 ~/.claude/skills/notion/scripts/notion_api.py query-db DATABASE_ID
Use this when the parent is a page (not a database):
python3 ~/.claude/skills/notion/scripts/notion_api.py create-page PARENT_PAGE_ID "Page Title" "Page content"
Use this when creating an item in a database:
# From string
python3 ~/.claude/skills/notion/scripts/notion_api.py create-db-item DATABASE_ID "Item Title" \
--props '{"PropertyName": "value"}' \
--content "Optional page content"
# From file (overrides --content)
python3 ~/.claude/skills/notion/scripts/notion_api.py create-db-item DATABASE_ID "Item Title" \
--props '{"PropertyName": "value"}' \
--file /path/to/content.md
| Type | Example Value | Notes |
|---|---|---|
| title | "My Title" | Auto-detected from schema |
| rich_text | "Some text" | Plain text string |
| number | 42 or 3.14 | Numeric value |
| select | "Option Name" | Single option name |
| multi_select | "Opt1, Opt2" | Comma-separated options |
| date | "2026-01-26" or "today" | ISO date or "today" |
| checkbox | true or false | Boolean value |
| url | "https://..." | Full URL |
"user@example.com" | Email address | |
| phone_number | "+1234567890" | Phone number string |
Auto-populated properties (created_by, created_time, last_edited_by, last_edited_time) are set by Notion automatically.
Create document with category:
python3 ~/.claude/skills/notion/scripts/notion_api.py create-db-item \
2f4fd878-f624-8057-a70e-deaaf68d71ae \
"Q1 Marketing Plan" \
--props '{"Category": "Strategy doc"}' \
--content "This document outlines our Q1 marketing strategy."
Create todo item:
python3 ~/.claude/skills/notion/scripts/notion_api.py create-db-item \
2b0fd878-f624-8011-98c2-ed0babd6beb4 \
"Review pull requests" \
--props '{"Due Date": "2026-01-27", "Done": false}'
Create item with multiple categories:
python3 ~/.claude/skills/notion/scripts/notion_api.py create-db-item \
DATABASE_ID \
"Research Report" \
--props '{"Category": "Customer research, Strategy doc"}'
| Name | ID | Properties |
|---|---|---|
| Document Hub | 2f4fd878-f624-8057-a70e-deaaf68d71ae | Doc name, Category (multi_select) |
| To Do List DB | 2b0fd878-f624-8011-98c2-ed0babd6beb4 | Name, Due Date (date), Done (checkbox) |
| Code | Description | Solution |
|---|---|---|
| 401 | Invalid token | Check NOTION_TOKEN in .env |
| 403 | No permission | Add integration connection in Notion |
| 404 | Resource not found | Verify ID is correct AND integration is connected |
| 400 | Validation error | Check property names/types with get-db-schema |
verify to check tokensearch or list-databasesget-db-schema DATABASE_ID to see propertiescreate-db-item with correct property names| Endpoint | Method | Description |
|---|---|---|
/v1/users/me | GET | Get current user info |
/v1/search | POST | Search pages and databases |
/v1/pages/{id} | GET | Get page |
/v1/pages | POST | Create page |
/v1/databases/{id} | GET | Get database schema |
/v1/databases/{id}/query | POST | Query database |
Notion API: https://developers.notion.com/reference/introduction