notion-local-mcp
Allows reading local Notion cache directly, supporting keyword search, recent pages, full page content retrieval, parent and children hierarchy, all read-only.
Click on "Deploy 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-local-mcpsearch for project roadmap"
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 Local MCP
Notion 데스크탑 앱의 로컬 SQLite 캐시를 읽어 Claude에서 빠르게 Notion 문서를 검색하고 조회하는 MCP 서버입니다.
빠른 시작 (Quick Start)
1. 필수 조건
Node.js 18+ 설치
Notion 데스크탑 앱 설치 및 로그인
2. 자동 설정
터미널에서 아래 명령어를 실행하면 자동으로 설정됩니다:
npx @lulee/notion-local-mcp setup🔧 Notion Local MCP Setup
========================================
🔍 Operating system: macOS
✅ Notion found: /Users/user/Library/Application Support/Notion/notion.db
Which apps do you want to configure?
1. Claude Desktop Chat
2. Claude Code (CLI)
3. Both (recommended)
Enter choice [1-3, default: 3]: 3
========================================
✅ Claude Desktop: Successfully configured notion-local for Claude Desktop
✅ Claude Code: Successfully configured notion-local for Claude Code
🎉 Setup complete!
Please restart your Claude app to apply the changes.3. 앱 재시작
Claude Desktop 또는 Claude Code를 재시작하면 사용할 수 있습니다.
끝!
Related MCP server: Notion MCP Server
Notion API MCP vs notion-local
Notion API MCP | notion-local | |
동작 방식 | Notion 서버 API 호출 | 로컬 SQLite 직접 읽기 |
Notion AI | 사용 (시맨틱 검색) | 사용 안 함 |
속도 | 느림 (네트워크) | 빠름 (로컬) |
오프라인 | 불가능 | 가능 |
Rate Limit | 있음 | 없음 |
데이터 최신성 | 실시간 | Notion 앱 동기화 시점 |
쓰기 기능 | 있음 | 없음 (읽기 전용) |
권장 사용법:
검색/조회 →
notion-local(빠름, Notion AI 미사용, 오프라인 가능)생성/수정 →
Notion API MCP(쓰기는 서버 API 필요)
지원 플랫폼
OS | Notion DB 경로 | 상태 |
macOS |
| ✅ 검증됨 |
Windows |
| ✅ 지원 (미검증) |
Linux |
| ⚠️ 비공식 |
참고: Notion은 공식 Linux 데스크탑 앱을 제공하지 않습니다. Linux에서는 커뮤니티 비공식 빌드(예: notion-app-electron)에서만 동작할 수 있습니다.
MCP 도구
notion_local_search
키워드로 페이지 검색
{
query: string, // 검색어 (필수)
type?: "page" | "all", // 검색 범위 (기본: page)
limit?: number // 최대 결과 수 (기본: 20)
}notion_local_recent
최근 수정된 페이지 목록
{
limit?: number, // 최대 결과 수 (기본: 20)
days?: number // 며칠 이내 (기본: 30)
}notion_local_get_page
페이지 전체 내용 조회
{
pageId: string, // 페이지 UUID (필수)
depth?: number // 중첩 블록 깊이 (기본: 3)
}notion_local_parent
페이지의 상위 계층 조회
{
pageId: string // 페이지 UUID (필수)
}notion_local_children
페이지의 하위 페이지 목록
{
pageId: string, // 페이지 UUID (필수)
depth?: number // 탐색 깊이 (기본: 2)
}수동 설정 (고급)
자동 설정이 안 될 경우 수동으로 설정할 수 있습니다.
Claude Desktop Chat
~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"notion-local": {
"command": "npx",
"args": ["-y", "@lulee/notion-local-mcp"],
"env": {
"NOTION_DB_PATH": "/Users/YOUR_USERNAME/Library/Application Support/Notion/notion.db"
}
}
}
}Claude Code
~/.claude.json:
{
"mcpServers": {
"notion-local": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@lulee/notion-local-mcp"],
"env": {
"NOTION_DB_PATH": "/Users/YOUR_USERNAME/Library/Application Support/Notion/notion.db"
}
}
}
}개발
로컬에서 개발하려면:
git clone https://github.com/lulee/notion-local-mcp.git
cd notion-local-mcp
npm install
npm run build
npm run setup # 로컬 빌드를 Claude에 연결주의사항
읽기 전용: 로컬 캐시만 읽으며, Notion 데이터를 수정하지 않습니다.
Notion 앱 필요: Notion 데스크탑 앱이 설치되어 있어야 캐시가 존재합니다.
동기화 지연: 최근 변경사항은 Notion 앱이 동기화될 때까지 반영되지 않을 수 있습니다.
라이선스
MIT
Available Tools
5 toolsnotion_local_childrenA
PREFERRED for Notion hierarchy. Get all child pages under a page. Fast, offline, no API limits.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many levels deep to traverse (default: 2) | |
| pageId | Yes | The UUID of the parent page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses useful behaviors: 'Fast, offline, no API limits.' 'Get' implies read-only. It doesn't mention potential staleness or output format, but goes beyond a minimal description.
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 short sentences, each earning its place: 'PREFERRED for Notion hierarchy' (usage), 'Get all child pages under a page' (purpose), 'Fast, offline, no API limits' (behavior). Zero waste and front-loaded with the most important signal.
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 2-parameter tool, the description covers purpose, usage, and behavioral traits. With no output schema, missing return-format details is a minor gap, but the tool is well-contextualized among its siblings and adequately complete.
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 covers 100% of parameters with clear descriptions (pageId, depth with default). The description's phrase 'all child pages' implies depth-based recursion but adds no syntax details beyond what the schema already provides. Baseline 3 is appropriate.
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 'Get all child pages under a page' with a specific verb and resource. The 'PREFERRED for Notion hierarchy' tag hints at its role among siblings but doesn't explicitly name alternatives, so it stops short of a 5.
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 says 'PREFERRED for Notion hierarchy' and gives reasons ('Fast, offline, no API limits') for choosing it. This provides clear when-to-use context, but lacks direct 'when not to use' guidance or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_local_get_pageA
Get Notion page. Returns summary by default (title + first blocks + link). Show summary and link to user. Use summary=false only when you need full content to answer.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | How many levels of nested blocks to include (default: 2) | |
| pageId | Yes | The UUID of the page to retrieve | |
| summary | No | Return summary only (default: true). Set to false for full content. | |
| maxBlocks | No | Maximum blocks to return (default: 10 for summary, 100 for full) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does disclose key behavioral traits: returns summary by default (title + first blocks + link), and advises displaying the link. It does not cover edge cases like errors or rate limits, but it gives meaningful insight into the tool's default output behavior.
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 tight sentences with no redundancy. The description is front-loaded with the core purpose and then provides essential usage guidance, earning every word.
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 has no output schema and no annotations, the description adequately explains the default return structure and the summary/full content distinction. It does not detail error handling or full content format, but it is sufficient for an agent to use the tool correctly in most scenarios.
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 100%, so baseline is 3. The description adds value beyond schema by explaining the default behavior of the summary parameter and when to set it to false, which is not fully captured in the schema's brief description.
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 'Get Notion page' with a specific verb and resource, distinguishing it from sibling tools like search, recent, parent, and children. The purpose is immediately identifiable and not tautological.
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 clear context for when to use summary mode vs. full content ('Use summary=false only when you need full content to answer'). However, it does not explicitly address alternatives among sibling tools, though the tool name and description make the primary use case obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_local_parentA
PREFERRED for Notion hierarchy. Get all ancestor pages up to the root. Fast, offline, no API limits.
| Name | Required | Description | Default |
|---|---|---|---|
| pageId | Yes | The UUID of the page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and adds useful behavioral context: it is 'Fast, offline, no API limits' and returns a complete set of ancestors. It does not disclose edge cases like invalid IDs or root pages, but the operational traits are clearly conveyed.
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 a single, front-loaded sentence with no filler words. Every phrase ('PREFERRED', 'up to the root', 'fast, offline, no API limits') 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?
For a one-parameter tool with no output schema and no annotations, the description covers purpose, usage, and behavior adequately. It clearly indicates what pages are returned, making it sufficient for the tool's simplicity.
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 already fully describes pageId (100% coverage), so the description adds no additional parameter-level detail. Per rubric, a baseline of 3 is appropriate when schema covers all 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 clearly states the tool retrieves all ancestor pages up to the root, using a specific verb ('Get') and resource ('ancestor pages'). It distinguishes itself from siblings like notion_local_children by orientation toward the hierarchy root.
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 marks this as 'PREFERRED for Notion hierarchy,' providing clear usage context and highlighting fast, offline operation. However, it does not explicitly name alternatives or exclusions, so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_local_recentA
PREFERRED for listing recent Notion pages. Get recently modified pages from local cache. Fast, offline, no API limits. Use this instead of Notion API for browsing recent documents.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Only include pages modified within this many days (default: 30) | |
| limit | No | Maximum number of pages to return (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the burden. It discloses useful behavioral traits: uses local cache, is fast, offline, and avoids API limits. This goes beyond the basic operation, though it could mention return format or cache staleness, but overall it adds meaningful context.
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?
Four short sentences that are mostly efficient, but there is redundancy between the first and last sentences both referring to browsing recent documents. Still, it is concise and front-loaded with key info.
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 simple tool (two optional numeric params, no output schema, no annotations), the description covers the essentials: what it does, when to use it, and its operational characteristics. It is complete enough for an agent to select and invoke it correctly, though it lacks explicit return format details.
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 100%, so the baseline is 3. The description doesn't add extra parameter semantics beyond connecting 'recently modified' to the 'days' parameter, but the schema already explains both parameters clearly.
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 identifies the tool as the preferred way to list recent Notion pages, with focus on recently modified pages from local cache. The description distinguishes it from siblings by emphasizing 'recent' and 'local cache', and directly positions it against the Notion API.
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 when to use this tool ('for browsing recent documents') and gives a clear alternative ('Use this instead of Notion API'). The 'PREFERRED' label reinforces the recommendation, providing solid usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
notion_local_searchA
PREFERRED for searching Notion. Search pages and blocks from local cache by keyword. Fast, offline, no API limits. Use this instead of Notion API for all search operations.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Search only pages or all block types (default: page) | |
| limit | No | Maximum number of results to return (default: 10) | |
| query | Yes | Search keyword to find in page titles and content |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses 'from local cache' and performance traits ('Fast, offline, no API limits'), but does not mention potential staleness of cached data, whether any side effects occur, or how completeness is guaranteed. Search is read-only by implication, but that is not explicitly stated.
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, front-loaded with the key directive 'PREFERRED for searching Notion.' Every phrase adds useful context (source, speed, offline capability, alternative guidance). 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?
Given the tool's simplicity (1 required param, no output schema), the description covers the core purpose, usage context, and key behavioral traits. It lacks an explanation of return value format or staleness caveats, but remains sufficiently complete for an agent to select and invoke the tool effectively.
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 100% for all three parameters, so baseline is 3. The description reinforces the 'type' parameter by mentioning 'pages and blocks,' but adds no additional meaning beyond what the schema already provides for 'query' and 'limit.'
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 a specific verb (search) and resource (Notion pages and blocks from local cache). It also distinguishes itself from both the Notion API and sibling local tools by being 'PREFERRED for searching Notion.'
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?
Usage guidance is explicit: 'Use this instead of Notion API for all search operations' and 'PREFERRED for searching Notion.' This gives clear direction on when to choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v1.0.4- First observed
notion_local_children - First observed
notion_local_get_page - First observed
notion_local_parent - First observed
notion_local_recent - First observed
notion_local_search
TDQS
Scored across 5 tools
Each tool has a distinctly different purpose: search by keyword, list recent pages, get ancestors, get page content, and get child pages. The descriptions clearly differentiate them with no overlapping functionality.
All tools share the 'notion_local_' prefix, making the namespace consistent. However, the suffixes mix verbs (search, get_page) and nouns (parent, children, recent), which is a minor deviation from a strict verb_noun pattern.
With five tools, the server is well-scoped for a local Notion cache. Each tool covers a core query need without redundancy, making the count appropriate for its purpose.
The read operations cover search, recent, hierarchy, and page content, but there is no tool to sync or refresh the local cache, which is a notable gap for a cache-based server. Users cannot update the data without external mechanisms.
Maintenance
Related MCP Connectors
Read-only search of your Sortio knowledge graph (files and entities) for Claude and ChatGPT.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables querying local meeting notes, calendar events, email metadata, and daily digests from Imprint's database via natural language through Claude Desktop and other MCP clients.15MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates Notion with Claude Code, enabling search, read, and write operations on Notion pages and databases via the Model Context Protocol.1,069MIT
- FlicenseNot gradedqualityDmaintenanceEnables full-text search and browsing of Claude.ai conversation history by ingesting exported conversations into a local SQLite database with FTS5 indexes.1-
- AlicenseNot gradedqualityBmaintenanceEnables Claude Code to search and retrieve from a local knowledge base of markdown notes using hybrid semantic+keyword search, keeping data entirely offline.8MIT