Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add avizmarlon/agent-skills --skill notion-apigit clone --depth 1 https://github.com/avizmarlon/agent-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/avizmarlon/agent-skills/notion-api)<a href="https://agentmods.dev/skills/avizmarlon/agent-skills/notion-api"><img src="https://agentmods.dev/badge/skills/avizmarlon/agent-skills/notion-api/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/avizmarlon/agent-skills/notion-api"><img src="https://agentmods.dev/badge/skills/avizmarlon/agent-skills/notion-api.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00079 | $0.02406 |
| Opus 5.5 | $0.00032 | $0.00962 |
| Sonnet 5.5 | $0.00016 | $0.00481 |
| Haiku 4.5 | $0.00008 | $0.00241 |
Grade A, and why
notion-api scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
- Avoid external dependencies — use Python stdlib only (e.g., `urllib`, `json`, `time`) How it starts
The opening of the file, as written. The whole thing — 281 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Notion REST API — Direct wrapper for batch operations
When working with Notion programmatically, use the REST API (not the MCP) for any batch-shaped work. MCP implementations (like notion-search) typically have hard limitations (25-result caps, no real pagination) that make batch operations tedious. The REST API handles 100+ rows in seconds with auto-pagination.
When to use REST API vs MCP
| Operation | Use |
|---|---|
| Read 1 page, update 1 page, search for a page | MCP OK |
| Add a comment, create a single inline note | MCP OK |
| Query an entire database (any size), with filters and pagination | REST API |
| Batch update N pages (rename, retag, restructure) | REST API |
| Audit/scan/inventory a database | REST API |
| Replicate page body blocks | REST API |
| Upload files/images programmatically | REST API (MCP cannot) |
| Create a new database programmatically | REST API |
| Move pages by re-creating under a new parent | REST API |
| Any operation touching ≥3 rows | REST API |
If you find yourself calling MCP twice for the same data, switch to the REST API.
Python wrapper pattern
Create a thin self-contained wrapper around the Notion REST API. This wrapper should:
- Handle authentication via environment variable (e.g.,
NOTION_API_KEYorNOTION_TOKEN) - Provide auto-pagination for list endpoints (use
start_cursor/has_moreloops) - Include retry logic with exponential backoff for rate limits (HTTP 429) and transient errors (5xx)
- Throttle writes to respect Notion's published rate limit (~3 req/s)
- Expose CRUD functions for pages, databases, blocks, and comments
- Include property builders for clean schema construction (title, rich_text, select, date, etc.)
- Avoid external dependencies — use Python stdlib only (e.g.,
urllib,json,time)
Canonical imports (your wrapper should export)
# Core CRUD
get_page, create_page, update_page, archive_page
get_database, create_database, update_database
# Querying (query_db_all should auto-paginate)
query_database, query_db_all
# Blocks
get_block, list_block_children, list_block_children_all
append_block_children, update_block, delete_block
# Search and metadata
search, search_all, list_users_all, get_user, whoami
create_comment, list_comments_all
# File uploads (for image/attachment re-hosting)
file_upload_create, file_upload_send, file_upload_complete
# Property builders (clean payloads)
title_prop, rich_text_prop, select_prop, multi_select_prop
status_prop, number_prop, checkbox_prop, date_prop, url_prop
relation_prop, people_prop, files_prop
# Block builders
paragraph_block, heading_block, bulleted_list_item, numbered_list_item
to_do_block, code_block, divider_block, callout_block, quote_block
# Text helpers
title_text, rich_text_text
# Custom exceptions
NotionAPIError
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 281 lines · 79 tokens per session scan A f4a5cb303d6f
notion-api is a skill published in the GitHub repository avizmarlon/agent-skills (2 stars, last pushed 4mo ago), licensed MIT. It adds 79 tokens to every session and 2,406 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
apple-reminders
Apple Reminders via remindctl: add, list, complete.
apple-notes
Manage Apple Notes via memo CLI: create, search, edit.
box
Box manages cloud files, sharing, search, and metadata.
obsidian
Read, search, create, and edit notes in the Obsidian vault.
channels-setup
Use when a developer wants to build their first CopilotKit Channels agent and get it answering in Slack or Microsoft Teams: "set up a channel", "connect my agent to Slack", "get my agent into Teams", or starting from nothing and wanting a working channel end to end. Covers the whole path: inspecting or scaffolding the…
mantis-configure
Configures and validates Mantis pipeline environments, sandbox mechanisms, and AI models. Use to set up workflow.json, auto-detect host capabilities, switch between sandboxes (static-only, gvisor, microsandbox, gce), select AI models, and run fast 1-2s preflight tests. Don't use for scanning source code or running…