notion-connect
Notion Connect
Meta-skill for complete Notion workspace integration.
Purpose
Enable natural language interaction with ANY Notion database. User says "query my Projects database" or "add a page to CRM" and it just works - no manual API calls, no remembering database IDs, no schema lookups.
Shared Resources
This skill uses notion-master shared library. Load references as needed:
| Resource | When to Load |
|---|---|
notion-master/scripts/check_notion_config.py |
Always first (pre-flight) |
notion-master/references/setup-guide.md |
If config check fails |
notion-master/references/error-handling.md |
On any API errors |
notion-master/references/api-reference.md |
For API details |
First-Time User Setup
If user has never used Notion integration before:
-
Run config check to detect setup state:
python 00-system/skills/notion-master/scripts/check_notion_config.py -
If exit code 2 (not configured), run the interactive setup wizard:
python 00-system/skills/notion-master/scripts/setup_notion.pyThe wizard will:
- Guide user to get/enter API key
- Save configuration to
.env - Get user's Notion ID (for export functionality)
- Save to
user-config.yaml - Auto-run database discovery
- Create
01-memory/integrations/notion-databases.yaml
-
After setup completes, user can immediately start querying databases
Setup triggers: "setup notion", "connect notion", "configure notion"
Workflow 0: Config Check (ALWAYS FIRST)
Every workflow MUST start with config validation:
python 00-system/skills/notion-master/scripts/check_notion_config.py
Exit code meanings:
- Exit 0: Fully configured (query, import, AND export all work)
- Exit 1: Partial config (query and import work, export needs user ID)
- Exit 2: Not configured (run setup wizard)
If exit code 2 (config incomplete):
- Tell user: "Notion integration needs to be set up first."
- Run:
python 00-system/skills/notion-master/scripts/setup_notion.py - Restart workflow after setup complete
If exit code 0 or 1: Continue to requested operation
Workflow 1: Discover Databases
Triggers: "connect notion", "sync notion", "discover databases", "what databases", "refresh notion"
Purpose: Find all accessible databases in user's Notion workspace and cache schemas.
Steps:
- Run config check (Workflow 0)
- Run discovery script:
python 00-system/skills/notion-master/scripts/discover_databases.py - Script outputs:
- Number of databases found
- Database names and IDs
- Creates/updates:
01-memory/integrations/notion-databases.yaml
- Show user summary of discovered databases
- Confirm context file saved
First-time flow: If notion-databases.yaml doesn't exist, discovery runs automatically.
Workflow 2: Query Database
Triggers: "query [database]", "find in [database]", "search [database]", "show [database]", "list [database]"
Purpose: Query any database by name with optional filters.
Steps:
- Run config check (Workflow 0)
- Load context: Read
01-memory/integrations/notion-databases.yaml- If file doesn't exist → Run Workflow 1 (Discover) first
- Match database name (fuzzy):
- User says "Projects" → matches "Client Projects", "My Projects", etc.
- If multiple matches → Show disambiguation prompt
- If no match → Suggest running discovery
- Run query:
python 00-system/skills/notion-master/scripts/search_skill_database.py --db <database_id> [--filter "..."] [--sort ...] [--limit N] - Format and display results using property types from cached schema
- Offer follow-up actions: "Want to add a page?" / "Query with different filters?"
Filter Syntax (load notion-master/references/filter-syntax.md if user needs help):
--filter "Status = Active"--filter "Priority = High"--filter "Tags contains Design"
Note: Currently supports single filter per query. Multiple filters (AND/OR) planned for future.
Workflow 3: Create Page
Triggers: "add to [database]", "create in [database]", "new [item] in [database]"
Purpose: Create a new page in any database with property validation.
Steps:
- Run config check (Workflow 0)
- Load context and match database (same as Workflow 2)
- Load schema for target database from context file
- Prompt user for required properties based on schema:
- Show property name + type + options (for select/multi-select)
- Validate input against property type
- Run create:
python 00-system/skills/notion-master/scripts/create_page.py --db <database_id> --properties '{"Title": "...", "Status": "..."}' - Confirm creation with page URL
- Offer: "Add another?" / "View in Notion?"
Workflow 4: Manage Database Schema
Triggers: "create database", "new database", "add property to [database]", "update [database] schema"
Purpose: Create new databases or modify existing database schemas.
Steps:
Create New Database
- Run config check (Workflow 0)
- Get parent page ID (where database will live)
- Define database name and properties:
python 00-system/skills/notion-master/scripts/manage_database.py create \ --parent <page_id> \ --title "Database Name" \ --properties '[{"name": "Name", "type": "title"}, {"name": "Status", "type": "select", "options": ["Todo", "Done"]}]' - Confirm creation with database URL
- Run discovery to update context:
python discover_databases.py
Update Schema (Add Property)
- Run config check
- Match database name (fuzzy) from context
- Run schema update:
python 00-system/skills/notion-master/scripts/manage_database.py update \ --db <database_id> \ --add-property '{"name": "Priority", "type": "select", "options": ["Low", "Medium", "High"]}' - Run discovery to refresh context
Supported Property Types for Creation:
title- Primary name field (required, one per database)rich_text- Multi-line textnumber- Numeric values (with optional precision)select- Single choice from optionsmulti_select- Multiple choices from optionsdate- Date/datetimecheckbox- Boolean true/falseurl,email,phone_number- Validated text fieldspeople- User assignmentrelation- Link to another database
Workflow 5: Update Page
Triggers: "update [page]", "edit [page]", "change [property] to [value]", "modify page"
Purpose: Modify properties of an existing page.
Steps:
- Run config check (Workflow 0)
- Identify page:
- By page ID if known
- By title search in database:
python search_skill_database.py --db <id> --filter "Name contains [search]"
- Show current properties
- Accept changes from user
- Run update:
python 00-system/skills/notion-master/scripts/manage_page.py update \ --page <page_id> \ --properties '{"Status": "Done", "Priority": "High"}' - Confirm changes with updated page details
Workflow 6: Get/Delete Page
Triggers: "get page [id]", "show page details", "delete page", "remove [page]"
Purpose: Retrieve full page details or delete a page.
Steps:
Get Page
- Run config check
- Run retrieval:
python 00-system/skills/notion-master/scripts/manage_page.py get --page <page_id> - Display all properties in formatted output
Delete Page (Archive)
- Run config check
- Confirm with user: "Are you sure you want to delete [page title]?"
- Run deletion:
python 00-system/skills/notion-master/scripts/manage_page.py delete --page <page_id> - Confirm page archived (Notion doesn't hard-delete, only archives)
Workflow 7: Manage Content/Blocks
Triggers: "append to [page]", "add section to [page]", "edit content of [page]", "list blocks", "delete block"
Purpose: Read, append, update, and delete content blocks within pages.
Steps:
List Page Content
- Run config check (Workflow 0)
- Get page blocks:
python 00-system/skills/notion-master/scripts/manage_blocks.py children --page <page_id> - Display block hierarchy with types and previews
Append Content
- Run config check
- Identify target page/block
- Build block content (simple or complex):
# Simple block python 00-system/skills/notion-master/scripts/manage_blocks.py append \ --page <page_id> --type paragraph --text "Your content here" # Multiple blocks python 00-system/skills/notion-master/scripts/manage_blocks.py append \ --page <page_id> --content '[{"type": "heading_1", ...}, {"type": "paragraph", ...}]' - Confirm appended blocks
Update Block
- Run config check
- Get block ID (from children list or user)
- Update block content:
python 00-system/skills/notion-master/scripts/manage_blocks.py update \ --block <block_id> --content '{"paragraph": {"rich_text": [...]}}' - Confirm update
Delete Block
- Run config check
- Confirm with user: "Delete block [preview]?"
- Delete block:
python 00-system/skills/notion-master/scripts/manage_blocks.py delete --block <block_id> --confirm
Supported Block Types (load notion-master/references/block-types.md for full list):
- Text:
paragraph,heading_1,heading_2,heading_3,quote,callout - Lists:
bulleted_list_item,numbered_list_item,to_do,toggle - Code:
code(with language),equation - Media:
image,video,file,bookmark - Structure:
divider,table_of_contents
Workflow 8: User Management
Triggers: "list users", "who can access", "get user", "find user"
Purpose: List workspace users and get user details for @mentions.
Steps:
List All Users
- Run config check (Workflow 0)
- List workspace users:
python 00-system/skills/notion-master/scripts/manage_users.py list --save - Display user list with IDs (for people properties and @mentions)
- Optionally save to
01-memory/integrations/notion-users.yaml
Get Current Bot
- Run config check
- Get bot info:
python 00-system/skills/notion-master/scripts/manage_users.py me - Display integration details
Workflow 9: Comments
Triggers: "add comment", "list comments", "comment on [page]", "reply to comment"
Purpose: Create and list comments on pages and discussions.
Steps:
List Comments
- Run config check (Workflow 0)
- Get page/block ID
- List comments:
python 00-system/skills/notion-master/scripts/manage_comments.py list --page <page_id> - Display comments with authors and timestamps
Create Comment
- Run config check
- Identify target page or discussion
- Get comment text from user
- Create comment:
# New comment on page python 00-system/skills/notion-master/scripts/manage_comments.py create \ --page <page_id> --text "Your comment here" # Reply to existing discussion python 00-system/skills/notion-master/scripts/manage_comments.py create \ --discussion <discussion_id> --text "Your reply here" - Confirm comment created
Workflow 10: Advanced Operations (Future)
Status: Planned for Phase 6
Sub-workflows:
- "upload file to [page]" → File upload flow (3-step process)
- "create data source" → Data source API (2025 feature)
Context File Format
Location: 01-memory/integrations/notion-databases.yaml
---
last_synced: 2025-12-10T23:00:00
sync_count: 3
databases:
- id: "abc123-def456"
name: "Client Projects"
parent: "Marketing" # For disambiguation
url: "https://notion.so/..."
properties:
- name: "Name"
type: "title"
- name: "Status"
type: "select"
options: ["Not Started", "In Progress", "Complete"]
- name: "Priority"
type: "select"
options: ["Low", "Medium", "High"]
- name: "Due Date"
type: "date"
- name: "Assignee"
type: "people"
- id: "ghi789-jkl012"
name: "Content Calendar"
parent: null
url: "https://notion.so/..."
properties:
- name: "Title"
type: "title"
- name: "Publish Date"
type: "date"
- name: "Channel"
type: "multi_select"
options: ["Blog", "Twitter", "LinkedIn"]
---
# Notion Databases Context
Auto-generated by notion-connect skill.
Run "refresh notion" to update.
Fuzzy Matching Logic
When user says a database name:
- Exact match: "Client Projects" → finds "Client Projects"
- Case-insensitive: "client projects" → finds "Client Projects"
- Partial match: "Projects" → finds "Client Projects", "Personal Projects"
- Word match: "calendar" → finds "Content Calendar", "Editorial Calendar"
Disambiguation prompt (if multiple matches):
Found 3 databases matching "Projects":
1. Client Projects (Marketing)
2. Personal Projects
3. Project Templates
Which one? (enter number or be more specific)
Error Handling
| Error | Action |
|---|---|
| No databases found | Check Notion integration has database access |
| Database not in context | Run discovery: "refresh notion" |
| Permission denied | Verify integration connected to database |
| Rate limited | Wait and retry with exponential backoff |
| Invalid property | Show valid options from cached schema |
Load notion-master/references/error-handling.md for detailed troubleshooting.
Examples
First-time setup:
User: "connect to notion"
AI: Running Notion discovery...
Found 5 databases: Client Projects, Content Calendar, CRM, Tasks, Meeting Notes
Saved to context. You can now query any database by name!
Query by name:
User: "query my Projects for active items"
AI: Querying "Client Projects"...
Found 12 active items:
1. Website Redesign (High priority, due Jan 15)
2. Q1 Marketing Plan (Medium priority, due Jan 30)
...
Create page:
User: "add a new task to my Tasks database"
AI: Creating in "Tasks" database.
Required properties:
- Task Name: [your input]
- Status: Not Started / In Progress / Complete
- Due Date: [optional, format: YYYY-MM-DD]
What's the task name?
Notion Connect v1.1 - Meta-skill for complete Notion workspace integration
Changelog:
- v1.1 (2025-12-11): Added first-time user setup section, improved exit code documentation
- v1.0 (2025-12-10): Initial release with 10 workflows
More from abdullahbeam/nexus-design-abdullah
mental-models
Load when user says "mental model", "think through this", "structured thinking", "help me decide", "analyze this problem", "first principles", "pre-mortem", "stakeholder mapping", "what framework should I use", or any specific model name. Provides 59 thinking frameworks for decision-making, problem decomposition, and strategic analysis.
64google-tasks
Manage Google Tasks and task lists. Load when user mentions 'google tasks', 'tasks', 'todo list', 'create task', 'complete task', or references task/todo management.
21google-sheets
Read and write Google Sheets data. Load when user mentions 'google sheets', 'spreadsheet', 'update sheet', 'read sheet', 'append to sheet', or references extracting data to update a tracking sheet.
20airtable-master
Shared resource library for Airtable integration skills. DO NOT load directly - provides common references (setup, API docs, error handling, field types) and scripts used by airtable-connect, airtable-query, and airtable-sync.
19google-integration
Complete Google Workspace integration (Gmail, Docs, Sheets, Calendar, Drive, Tasks, Slides). Load when user mentions 'google', 'gmail', 'email', 'google docs', 'google sheets', 'spreadsheet', 'google calendar', 'schedule meeting', 'calendar', 'google drive', 'upload file', 'download file', 'google tasks', 'todo', 'google slides', 'presentation', or any Google service operation.
18gmail
Read, send, and manage Gmail emails. Load when user mentions 'gmail', 'email', 'send email', 'check email', 'inbox', 'draft', or references sending/reading emails.
17