notion-bank-mcp
The notion-bank-mcp server allows AI agents (Cursor, Claude, Codex, etc.) to create, read, update, search, and sync Markdown implementation plans stored in Notion. It supports a structured hierarchy (Plans root → service page → plan page) and uses browser-based OAuth so no secrets are needed in config.
Key capabilities:
Authentication & Status: Check auth and workspace readiness (
plan_status); manage OAuth lifecycle (plan_oauth_login,plan_oauth_wait,plan_oauth_logout).Workspace Configuration: Set Plans root URL and service mappings (
plan_configure); ensure service pages exist (plan_ensure_service).Plan Management: Create/update plans from markdown strings (
plan_upsert) or local files (plan_migrate); retrieve plans with line numbers, TOC, and etag (plan_get); perform surgical line/section edits with concurrency control (plan_update_range); search across plans with line-level hits (plan_search); export plans to local markdown (plan_sync); create subpages (plan_create_child).Integration: Works with MCP hosts via stdio or HTTP, storing user config locally at
~/.config/notion-bank/.
Manages implementation plans in Notion with a structured hierarchy (Plans root → service page → plan page), providing tools for creating, reading, updating (including section-level edits with optimistic concurrency via etags), searching, and syncing plans as markdown.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@notion-bank-mcpGet the current status of my plan bank"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
notion-bank-mcp
Plan-bank MCP for AI agents — read and write Markdown implementation plans in Notion with line + section addressing, for Cursor, Claude, Codex, and other MCP hosts.
Auth: browser OAuth via mcp.notion.com. No CLIENT_ID / SECRET for end users. No integration token in mcp.json.
npx -y notion-bank-mcp@latest --versionWhy use notion-bank-mcp?
Generic Notion MCPs are great for browsing a workspace. notion-bank-mcp is optimized for one job: keep implementation plans in Notion in a shape agents can reliably create, revise, and ship — without throwaway scripts.
Advantage | What you get |
Plan-bank domain | First-class hierarchy: Plans root → service page → plan page. Agents follow one flow instead of inventing page structure every time. |
Surgical edits |
|
Markdown in / Markdown out | Upsert from file or string; |
No temp glue | Stop generating one-off Python/shell to patch Notion. The MCP is the stable API for plan migrate/sync. |
Zero secrets for end users | Install with |
Per-user workspace mapping | Each machine stores Plans root + service map under |
Agent-ready first steps |
|
Search with line hits |
|
Optional export |
|
When to prefer this over the official Notion MCP alone: you maintain a plan bank across services, you need section-level revisions with concurrency checks, and you want agents to do that in one tool surface instead of free-form page updates.
Related MCP server: tentra
Quick start
Add this to your MCP config (Cursor example — same shape works for Claude Desktop / Codex):
{
"mcpServers": {
"notion-bank": {
"command": "npx",
"args": ["-y", "notion-bank-mcp@latest"]
}
}
}Restart the host. Tools like
plan_statusandplan_upsertshould appear.On the first Notion action, a browser opens → sign in with Notion.
Tell the agent your Plans root Notion page URL once → it runs
plan_configure.
That is enough for most users.
Install options
Method | When to use |
| Recommended — always latest, no global install |
| Frequent local use |
Clone + | Developing the server itself |
Check / update the CLI:
notion-bank-mcp --version # or: notion-bank-mcp version
notion-bank-mcp update # checks npm only — does not auto-install
notion-bank-mcp --helpIf update reports a newer version:
npm i -g notion-bank-mcp@latest
# or keep using npx -y notion-bank-mcp@latestCLI
Command | Purpose |
| MCP over stdio (hosts) |
| Streamable HTTP (optional hosted URL) |
| Print package version |
| Compare local version to npm |
| Short usage |
Env (optional)
Env | Description |
| Override path to |
| Override path to OAuth credentials |
| In-process cache TTL (default |
| Cache LRU cap (default |
| Set |
| OAuth callback port (default |
HTTP-only (operators): NOTION_BANK_PUBLIC_URL, NOTION_BANK_HOST, NOTION_BANK_PORT, NOTION_BANK_HTTP_IDLE_MS. See docs/OPERATOR.md.
Local from source
make install && make check && make build
make stdio
# or: node dist/index.jsFrom a local clone before publishing:
{
"mcpServers": {
"notion-bank": {
"command": "node",
"args": ["/absolute/path/to/notion-bank-mcp/dist/index.js"]
}
}
}Host compatibility
Primary transport is stdio. Same command + args pattern as other MCP servers. No env tokens required.
Host | Config | Notes |
Cursor |
| See |
Claude Desktop |
| Same |
Claude Code | MCP settings | Stdio; optional skill under |
Codex | MCP / tools config | Same pattern |
Windsurf / OpenCode | MCP | Prefer stdio |
Agent flow
npx notion-bank-mcp@latest (host starts stdio)
│
▼
plan_status
│
├─ no auth → browser OAuth (localhost callback :8765)
│ tokens → ~/.config/notion-bank/credentials.json
│
└─ no root → ask Plans root URL → plan_configure
config → ~/.config/notion-bank/config.json
│
▼
plan_upsert / plan_get / plan_update_range / …Hierarchy:
Plans / Superpowers ← root (plan_configure)
└── <Service> ← plan_ensure_service
└── <Plan title> ← plan_upsert / plan_migrateTools
Tool | Purpose |
| Auth + workspace readiness |
| Browser OAuth lifecycle |
| Persist Plans root (+ optional service map) |
| Ensure service page under root |
| Create a subpage under any parent page id/URL |
| Create/update plan from markdown or file |
| Read with optional |
| Surgical edit by section / lines + |
| Search with line hits |
| Export Notion plan → local markdown |
Resources
notion-bank://docs/workflownotion-bank://docs/instructionsnotion-bank://config
Config (per user / machine)
Stored outside the git repo:
Path | Contents |
| Plans root + service map |
| OAuth access / refresh tokens |
| Short-lived login state (auto-cleared) |
Do not put Notion tokens or OAuth client secrets in the repo or in committed mcp.json. Access tokens expire (~8h); the server refreshes automatically when possible. If refresh fails, run plan_oauth_login again.
HTTP serve
Optional hosted URL mode for teams that want "url": "https://host/mcp" instead of stdio:
npm run serve
# or: notion-bank-mcp serveDetails: docs/OPERATOR.md. Not required for normal users.
Skills
MCP tools and skills are separate. The skill teaches the agent when/how to document in Notion; the server only registers tools.
Shipped skill: skills/notion-bank/SKILL.md
Slash name: /notion-bank
Copy into your host skills directory (with notion-bank MCP enabled):
Host | Typical path |
Cursor |
|
Claude Code |
|
Codex / agents |
|
The skill chains superpowers (brainstorming → writing-plans) and optimize-goal when applicable, uses an in-skill engineering checklist, and always returns the Notion URL.
Developers
make check # typecheck + biome + tests (coverage fail <75%, warn <90%)
make test-coverage
make release VERSION=1.5.0 # bump package.json, commit, create annotated tag v1.5.0
git push && git push origin v1.5.0 # triggers GitHub Actions → npm publishCoverage policy: CI fails below 75% (lines/statements/functions/branches). Below 90% emits a warning annotation only.
Release: git tag vX.Y.Z is the source of truth. The release workflow syncs package.json version from the tag, runs checks, then npm publish. Requires repo secret NPM_TOKEN.
Docs
License
MIT
Available Tools
12 toolsplan_configureA
Persist per-user workspace settings (NOT in repo .env). Pass the user's Plans root Notion URL or UUID. Optional services map slug→page_id. Merges services by default. Call after plan_status when root_page_id missing. Ask the user for their root page — never invent IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| services | No | Optional map e.g. {"my-service":"<page_uuid>"} | |
| export_dir | No | ||
| root_page_id | No | Notion page UUID (with or without dashes) | |
| root_page_url | No | Full Notion page URL containing the page id | |
| merge_services | No | Merge into existing services map (default true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses key behavioral traits: it persists settings, merges services by default, and requires user-provided IDs. However, it does not describe side effects like overwriting vs merging existing settings beyond services, or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: the first states the purpose, the second specifies what to pass, and the third gives behavioral and usage notes. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key context (when to call, what to pass, what it does) but is missing details about return values, error conditions, and idempotency. The export_dir parameter is unexplained. Given no output schema, more completeness would be beneficial.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (80%) with descriptions for most parameters. The description adds context for root_page_id/url and services, and notes the default merging behavior for merge_services. However, export_dir has no schema description and is not mentioned in the description, leaving a gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool persists per-user workspace settings and specifies it is NOT in the repo .env, distinguishing its scope. It directly links to sibling tool plan_status, providing context for when this tool is needed.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to call after plan_status when root_page_id is missing and includes strong guidance to ask the user for their root page and never invent IDs, providing clear when-to-use and when-not-to-use rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_ensure_serviceA
Ensure a service page exists under the configured Plans root. Creates if missing. Requires plan_configure + NOTION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| dry_run | No | ||
| service | Yes | Service slug or name, e.g. "billing" or "Auth Service" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full responsibility. It discloses that the tool creates the page if missing, and mentions required access tokens. This covers the core behavior adequately, though it could detail idempotency or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. The key information is front-loaded, and each sentence serves a clear purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, no output schema, no annotations), the description is mostly complete, covering purpose, behavior, and prerequisites. It could benefit from mentioning the return value or idempotency, but overall it's sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (dry_run lacks a description). The description does not add any parameter-specific meaning beyond the schema, leaving the dry_run parameter unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Ensure a service page exists under the configured Plans root. Creates if missing.' It uses a specific verb ('ensure') and resource ('service page'), and the name 'plan_ensure_service' aligns with this purpose, distinguishing it from siblings like 'plan_get' or 'plan_upsert'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit prerequisites: 'Requires plan_configure + NOTION_TOKEN.' While it does not explicitly state when to use this tool vs. alternatives or when not to use it, the clear purpose implies its appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_getA
Fetch a plan as addressable markdown with L00N| line numbers, TOC, and etag. Always call before plan_update_range. Requires plan_configure + NOTION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| page_id | No | ||
| service | Yes | ||
| sections | No | ||
| max_lines | No | ||
| with_lines | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description discloses read operation, output features, and authentication requirement. Lacks details on rate limits or error behavior but sufficient for basic usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, highly concise, purpose stated upfront, no filler. Every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite clear output description, the tool has 6 parameters with no schema descriptions and no output schema. The description fails to explain parameter roles or provide enough context for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description provides no explanation for any of the 6 parameters (title, page_id, service, sections, max_lines, with_lines). Agent cannot infer how to populate inputs from description alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Fetch' and specific resource 'plan', with detailed output format (addressable markdown, line numbers, TOC, etag). Distinguishes from siblings by mentioning relation to plan_update_range.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states to call before plan_update_range and lists required prerequisites (plan_configure + NOTION_TOKEN). No explicit when-not-to-use or alternative sibling tools mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_migrateB
Migrate a local markdown file into Notion plan bank (upsert under service → title). Requires plan_configure + NOTION_TOKEN. Chunking handled inside MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| path | Yes | Absolute or relative path to a .md file | |
| title | Yes | Plan title (Notion subpage name) | |
| dry_run | No | ||
| service | Yes | Service slug, e.g. "billing" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses upsert behavior and internal chunking, but omits critical details: what happens on failure (file not found, missing service), whether mode affects behavior differently, or if the tool is safe to re-run. Limited transparency for a write operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences front-load the purpose and then state prerequisites and internal behavior. No unnecessary words; every part earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and no annotations, the description fails to cover error states, return values, or detailed parameter semantics. Missing guidance on how mode or dry_run affect operation, leaving significant gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 60% (3 of 5 parameters described). Description adds context about upsert and chunking but doesn't clarify the purpose of mode or dry_run parameters. Does not compensate adequately for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool migrates a local markdown file into Notion plan bank, specifying verb 'Migrate' and resources (local file, Notion plan bank). It distinguishes from siblings like plan_upsert by emphasizing the file-based input and internal chunking.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions prerequisite (plan_configure + NOTION_TOKEN) and notes that chunking is handled internally, providing some guidance. However, lacks explicit when-to-use vs alternatives like plan_upsert or plan_sync, and no when-not-to scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_oauth_loginA
Open browser for Notion login (mcp.notion.com). Auto-runs on first Notion tool if not logged in. No CLIENT_ID/SECRET.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Block until browser login finishes (default true) | |
| timeout_ms | No | ||
| open_browser | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that a browser opens and login auto-runs, but lacks details on blocking behavior (wait parameter), timeout, potential side effects, or what happens if already logged in. The description is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with three short sentences, each adding value. It front-loads the purpose, includes key behavioral hints, and avoids any waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple OAuth login tool with no output schema and three parameters, the description covers the main behavior and automation feature. It misses parameter details but is otherwise complete enough for an agent to understand the core functionality.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33% (only 'wait' has a description). The description does not explain any parameter beyond the schema, such as timeout_ms or open_browser, so it adds minimal value. Given low coverage, it should compensate but fails to do so.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens a browser for Notion login, specifies the domain (mcp.notion.com), and distinguishes itself by noting auto-run behavior and absence of client credentials. This differentiates it from siblings like plan_oauth_logout and plan_oauth_wait.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates the tool auto-runs on first use if not logged in, implying when it's triggered. It also mentions no CLIENT_ID/SECRET needed, setting expectations. However, it does not explicitly state when not to use it or provide alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_oauth_logoutA
Clear saved OAuth credentials for this user (credentials.json). Does not revoke at Notion end.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses the critical behavioral trait that it does not revoke at Notion end, which is essential for agent decision-making.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with zero waste. Front-loaded with action and key limitation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no parameters or output schema, the description fully covers the behavior and limitation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, baseline 4. No need for parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it clears saved OAuth credentials locally. Distinguishes from sibling tools like plan_oauth_login and plan_oauth_wait by specifying the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the tool clears credentials locally and does not revoke at Notion end, providing context. Lacks explicit when-not or alternatives, but clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_oauth_waitB
Finish a pending plan_oauth_login(wait=false) after the user approves in the browser.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout_ms | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions finishing a pending login after user approval but doesn't disclose mutation behavior, error conditions, or return values. More detail needed for a tool involving network calls and user interaction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence is concise and to the point, but lack of parameter details reduces effectiveness. Could be slightly longer to cover essentials.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given moderate complexity (OAuth flow, user interaction) and no annotations or output schema, the description is insufficient. Missing parameter explanation, success/failure behavior, and prerequisites.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and description does not mention the timeout_ms parameter. No additional meaning beyond schema constraints. Parameter purpose and usage entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool completes a pending OAuth login after user approval, using specific verb 'Finish' and resource 'pending plan_oauth_login'. It distinguishes from sibling tools like plan_oauth_login and plan_oauth_logout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (after plan_oauth_login with wait=false and user approval) but lacks explicit when-not-to-use or alternative guidance. The sibling tool list provides context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_searchB
Search configured plan bank. Hits include service, title, url, line, snippet (lines match plan_get). Requires plan_configure + NOTION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| service | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions authentication requirements but does not explicitly state whether the operation is read-only or has side effects. The context implies a read operation, but transparency is lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise at two sentences, but it sacrifices completeness. It front-loads the core purpose but omits parameter details, requiring the agent to infer from schema alone.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's 3 parameters and lack of output schema or annotations, the description is incomplete. It does not explain parameter constraints (e.g., limit default, service filtering), output structure, or pagination behavior, making it insufficient for reliable tool use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 3 parameters with 0% description coverage. The tool description fails to explain the meaning or usage of any parameter (query, limit, service). This is a significant gap for an agent to correctly invoke the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and the resource ('configured plan bank'), and lists specific fields returned (service, title, url, line, snippet). It also references sibling tool plan_get for comparison, helping to differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a prerequisite ('Requires plan_configure + NOTION_TOKEN') but does not explicitly state when to use this tool over alternatives like plan_get. The comparison to plan_get is implied but not expanded into a clear when-to-use or when-not-to-use guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_statusA
Show auth + workspace status. Call first. End users need no CLIENT_ID — browser OAuth opens automatically.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must fully disclose behavior. It states that the tool shows status and that browser OAuth opens automatically, which is a key side effect. However, it does not clarify whether the tool is read-only, what the exact output or status fields are, or if authentication state changes occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, presenting the purpose and a key guideline in a clear, front-loaded manner. Every word contributes meaningful information with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no parameters, the description covers the basic purpose and the critical OAuth opening behavior. However, it lacks details on what exactly 'auth + workspace status' encompasses, such as specific status fields or return formats, making it less complete for an agent without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters and schema coverage is 100%, so the description does not need to compensate. The baseline of 4 is appropriate; the description adds value by explaining the OAuth behavior, though it does not directly address parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Show' and resource 'auth + workspace status', clearly distinguishing it from sibling tools like plan_oauth_login and plan_get. The addition 'Call first' further clarifies its role as an initial status check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Call first', indicating when to use this tool. It also explains that end users need no CLIENT_ID because browser OAuth opens automatically, which helps differentiate from OAuth tools. However, it does not provide explicit when-not-to-use or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_syncB
Export a Notion plan (canonical) to a local markdown file. Requires plan_configure + NOTION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| title | No | ||
| dry_run | No | ||
| page_id | No | ||
| service | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool creates a local markdown file (an output file), which implies a side effect. However, it does not disclose whether it overwrites existing files, handles errors, or if the operation is idempotent. The description adds some behavioral context beyond the name but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences are perfectly concise, with the first sentence stating the core purpose and the second adding a prerequisite. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (5 parameters, no schema descriptions, no annotations, no output schema) and the set of sibling tools (e.g., plan_configure, plan_get), the description is inadequate. It only covers basic purpose and a prerequisite, leaving parameter semantics and behavioral details completely unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description provides no explanation of the five parameters (path, title, dry_run, page_id, service). With 0% schema description coverage, the agent has no guidance on what each parameter does or how to use them. This is a critical gap for correct tool invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool exports a Notion plan to a local markdown file, specifying the verb 'export' and resource 'Notion plan (canonical)'. This distinguishes it from siblings like plan_get (retrieves plan data) and plan_migrate (moves plan).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite: 'Requires plan_configure + NOTION_TOKEN.' However, it does not provide guidance on when to use this tool versus alternatives, nor does it specify when not to use it. The prerequisite is useful but incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_update_rangeB
Surgical update by section (preferred) or start_line/end_line. Pass expected_etag from plan_get. Errors if neither section nor lines given (no silent full replace). Requires plan_configure + NOTION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | ||
| dry_run | No | ||
| page_id | No | ||
| section | No | ||
| service | Yes | ||
| end_line | No | ||
| occurrence | No | ||
| start_line | No | ||
| new_markdown | Yes | ||
| expected_etag | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses mutation, concurrency via etag, and error on missing spec. However, it does not explain how the update merges or replaces content, nor any side effects or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey core purpose and key usage tips. Could be slightly improved with bullet points or clearer separation of requirements, but overall no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite moderate complexity (10 params, no output schema), description omits many parameter semantics, return value, and error patterns beyond the missing spec case. Incomplete for an agent to fully understand usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but description only explains about half of the 10 parameters (section, start_line, end_line, expected_etag). Missing details on service, new_markdown, title, dry_run, page_id, and occurrence.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs a 'surgical update' by section or line range, distinguishing it from full-replace operations. However, it could be more explicit in differentiating from sibling tools like plan_upsert.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides specific guidance: prefer section over lines, pass expected_etag from plan_get, errors if no spec given. Prerequisites (plan_configure, NOTION_TOKEN) are listed. Lacks explicit comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_upsertB
Create or update a plan from a markdown string. Upserts by exact title under the service page. Requires plan_configure + NOTION_TOKEN.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | ||
| title | Yes | ||
| dry_run | No | ||
| service | Yes | ||
| markdown | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It does not detail side effects, error cases, idempotency, or what happens if the plan exists or not. The mention of 'upsert' is helpful but insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no redundant information. It front-loads the purpose and then adds requirements and matching detail. Efficient but could be slightly more structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no annotations, and no output schema, the description is insufficient. It does not explain the mode parameter, dry_run behavior, or any return value. A more complete description is needed for correct usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%. The description adds minimal meaning beyond the schema: 'markdown string' and 'exact title'. Parameters like mode (enum with upsert/create_only) and dry_run are not explained, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Create or update a plan from a markdown string.' It specifies the method (upsert by exact title under service page) and distinguishes from siblings like plan_get and plan_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions requirements ('Requires plan_configure + NOTION_TOKEN') and the matching condition ('by exact title'), but does not provide explicit guidance on when to use versus alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: configure, ensure_service, get, migrate, OAuth login/logout/wait, search, status, sync, update_range, upsert. No overlap.
All tools follow consistent 'plan_' prefix with verb_noun pattern in snake_case (e.g., plan_ensure_service, plan_update_range). No mixing of conventions.
12 tools is well within the ideal 3-15 range, covering auth, CRUD, search, sync, and migration without unnecessary bloat.
Covers configuration, service management, plan retrieval, updates, upserts, search, sync, and OAuth flow. Minor gap: no explicit deletion tool, but upsert can override and sync handles export. Still quite complete.
Maintenance
Related MCP Connectors
Task management your AI agents can actually run. One line becomes a context-ready task over MCP.
Agent-native notes, tasks, dev-docs, vaults, sync & handoffs. MCP + OpenAPI dual surface.
System-of-record notebook for AI coding agents: pages, datastores, tasks, skills over MCP.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
Related MCP Servers
- AlicenseAqualityAmaintenanceMarkdown-first MCP server for Notion that provides 7 composite action-based tools consolidating 28+ REST API endpoints, enabling AI agents to efficiently manage pages, databases, blocks, and content with automatic pagination and bulk operations.1189136Apache 2.0
- AlicenseBqualityFmaintenanceMemory for AI coding agents. Persistent code graph + AI architecture diagrams. 32 MCP tools32695MIT
- AlicenseNot gradedqualityBmaintenanceMulti-project execution, memory, and collaboration platform for humans and AI agents, providing MCP tools for agents to read and write project state.2MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP+HTTP control plane for routing work to multiple coding-agent CLIs through a normalized contract, enabling multi-agent coding pipelines with planning, implementation, review, and revision.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hinha/notion-bank-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server