윤누리
윤누리
Admin
🧙 AI 위자드
🎻 루키 파트너
🌈 지피터스금손
🚀 SNS 챌린지 달성자

[사내AX] API 토큰 없이 Notion 2만 페이지를 3초 만에 읽는 법 - 로컬 캐시 MCP

📝 한줄 요약

Notion API 권한이 없어도 로컬 캐시를 활용해 Claude에서 2만 개 페이지를 즉시 읽을 수 있는 MCP 서버를 만들었습니다.

🎯 이런 분들께 도움돼요

  • Electron 앱의 로컬 캐시로 MCP를 만드는 방식에 관심 있는 분

  • 회사 Notion에 게스트로 초대되어 API 권한이 없는 분

  • Claude Code에서 Notion 데이터를 빠르게 활용하고 싶은 분

😫 문제 상황 (Before)

Notion MCP를 쓰려면 API 토큰이 필요합니다. 그런데 우리 회사는 대표님 계정의 Notion에 직원들이 게스트로 초대되어 있는 형태라서 API 토큰을 발급받을 수 없었습니다.

설령 API가 된다고 해도 문제가 있었습니다. 매번 문서를 읽어올 때마다 토큰이 너무 많이 소모되고, rate limit에도 걸릴 수 있었죠.

그러다 linear-mcp-fast라는 프로젝트를 발견했습니다. 알고봤더니 김욱영 님이 만든거였어요!

좀 뜯어보니 Linear.app의 로컬 캐시를 읽어서 API 없이 데이터에 접근하는 방식이었어요. "이거 Notion에도 적용할 수 있지 않을까?" 싶었습니다.


🔧 작업 과정

Notion도 로컬에 캐시를 저장할까?

linear-mcp-fast 코드를 보면서 "Electron 앱은 로컬에 캐시를 저장한다"는 걸 알게 됐습니다. Linear는 IndexedDB를 쓰던데, Notion은 어떨까요?

Notion.app의 로컬 캐시 구조를 분석해줘. 어떤 테이블이 있고 어떻게 데이터가 저장되어 있어?

Claude가 바로 찾아줬습니다. Notion.app은 SQLite를 사용하고, 경로는 ~/Library/Application Support/Notion/notion.db였어요.

테이블 구조도 분석해줬습니다:

  • block 테이블: 모든 콘텐츠 (페이지, 텍스트, 데이터베이스 등)

  • collection 테이블: 데이터베이스 스키마

  • space 테이블: 워크스페이스 정보

  • notion_user 테이블: 사용자 정보

DB 구조를 파악하니까 "이거 되겠는데?" 싶었습니다.


MCP 서버 구현 - 생각보다 빠르게 완성

linear-mcp-fast 구조를 참고해서 Notion 버전으로 만들어줘.

Claude가 핵심 파일 3개를 만들어줬습니다:

  • SQLite 캐시 리더 (메타데이터는 메모리 캐싱, 블록 콘텐츠는 on-demand 로드)

  • Notion 블록 파서 (리치 텍스트, 헤더, 리스트, 코드 블록 등)

  • MCP 서버 (9개 도구)

여기서 한 가지 더 궁금한 게 생겼습니다.

게시글 생성일, 생성자 같은 메타데이터도 가져올 수 있어?

Claude가 DB 구조를 다시 확인하더니 created_time, last_edited_time 필드가 있다고 알려주고, 바로 추가 구현까지 해줬습니다.


2만 페이지가 3초 만에 - 진짜 되네?

구현 완료 후 테스트를 돌려봤습니다.

직접 써보고 싶은데 예시 상황을 가정해서 시뮬레이션 해볼래?

결과가 놀라웠습니다:

=== 캐시 요약 ===
pages: 21,024
databases: 1,053
workspaces: 9
users: 415

2만 개가 넘는 페이지가 있었는데, 전부 즉시 로드됐습니다. 공식 API였으면 rate limit에 걸렸을 겁니다.

워크스페이스 목록, 페이지 검색, 데이터베이스 쿼리까지 전부 정상 동작했습니다.


테스트 계획까지 체계적으로

테스트 계획을 세우고 실제로 테스트를 진행해줘.

Claude가 59개 테스트 케이스를 체계적으로 정리해줬습니다:

  • 단위 테스트 22개 (블록 파서, 리더)

  • 통합 테스트 28개 (정상/엣지/에러 케이스)

  • 성능 테스트 5개

  • 데이터 무결성 테스트 4개

테스트 계획서와 실제 테스트 코드까지 한 번에 생성해줬습니다.


✅ 결과 (After)

Before vs After

항목

Before

After

API 토큰

필요 (게스트라 발급 불가)

불필요

속도

API 호출마다 네트워크 지연

3초 만에 2만 페이지 로드

Rate limit

있음

없음

오프라인

불가능

가능

결과물

  • GitHub: notion-mcp-fast

  • 9개 MCP 도구: 페이지 목록, 검색, 전체 텍스트 검색, 데이터베이스 쿼리 등

🌍 다른 앱에 적용한다면?

핵심 발견: Electron 앱들은 대부분 로컬에 캐시를 저장한다

이 방식을 다른 앱에도 적용할 수 있습니다:

  • Linear → IndexedDB (LevelDB) → 이미 linear-mcp-fast로 구현됨

  • Notion → SQLite → 이번에 만든 notion-mcp-fast

  • Slack, Discord, VS Code → 각자의 로컬 캐시가 있을 것

API 토큰 없이, rate limit 없이, 오프라인에서도 동작하는 MCP 서버를 만들 수 있습니다.

🚀 앞으로의 계획

다른 Electron 앱들도 같은 방식으로 MCP 서버를 만들어볼 예정입니다. Slack도 로컬 캐시를 저장한다면 메시지 검색 MCP를 만들면 유용할 것 같습니다.

이걸로 리니어 - 슬랙 - 노션을 하나의 소스로 SSOT(단일 원천 소스) 구축하는 초석이 될 수 있을 것 같아요.


🔧 설치 방법

필수 조건

  • macOS (Notion.app의 로컬 캐시 사용)

  • 데스크탑앱 - Notion.app 설치 및 1회 이상 실행 (캐시 생성 필요)

Claude Desktop 설정

터미널에 입력하고 실행:

claude mcp add notion-local -- uvx \
    --from "git+https://github.com/chat-prompt/notion-mcp-fast" \
    notion-mcp-fast
1개의 답글

👉 이 게시글도 읽어보세요