대시보드
Morit Plugin8. 실제 예제

Notion 예제

위치: examples/plugins/notion/

이 예제는 사용자가 개인 token을 붙여 넣는 방식이 아니라 Notion의 공식 OAuth 화면에서 Morit에 공유할 page/data source를 선택하는 실제 연결 흐름을 사용합니다. Client ID와 Client Secret은 package가 아닌 Plugin Cloud Project에 저장됩니다.

Developer Project 설정

  1. developers.moring.co에서 조직을 선택하고 Notion Plugin Project를 엽니다.
  2. 연결 및 Secrets에서 다음 두 Secret을 저장합니다.
    • NOTION_CLIENT_ID (oauth_client_id)
    • NOTION_CLIENT_SECRET (oauth_client_secret)
  3. Connection ID notion, Provider notion, 종류 oauth2를 추가합니다.
  4. Authorization URL은 https://api.notion.com/v1/oauth/authorize, Token URL은 https://api.notion.com/v1/oauth/token으로 설정합니다.
  5. 앞서 만든 두 Secret 이름을 Connection에 연결합니다.
  6. Provider에 notion을 입력하면 Developer Platform이 Notion의 공식 Basic + JSON token/revoke 형식과 owner=user를 자동 적용하고, PKCE는 공급자가 지원하지 않음으로 설정합니다. PKCE를 지원하는 다른 공급자는 기본값인 사용 (권장)을 유지합니다.

Notion은 현재 공식 token 요청에 code_challenge/code_verifier를 정의하지 않습니다. 이 호환 설정에서도 Morit의 일회용 state, 정확한 redirect URI, 사용자별 authorization transaction 격리와 replay 차단은 그대로 적용됩니다.

Notion integration의 redirect URI는 다음과 정확히 같아야 합니다.

text
https://morit-api.moring.co/v1/plugins/oauth/callback/notion

Morit 운영 서버의 .env에 Notion 전용 Client ID/Secret을 추가하지 않습니다. Plugin Runtime에는 Cloud vault 해제용 공통 key와 사용자 token vault용 별도 key만 둡니다.

기능

기능Capability
페이지/데이터 소스 검색과 상위 페이지 본문notion.search_and_read Tool
프로젝트 문서 contextnotion.project_context Skill
통합 검색notion.search_provider Provider
Slash/notion

Manifest는 POST https://api.notion.com/v1/search 결과 종류에 따라 후속 조회를 사용합니다.

  • page: GET /v1/blocks/{id}/children?page_size=100
  • data source: POST /v1/data_sources/{id}/query (page_size: 20)

page block의 제목·목록·코드와 data source row의 title/rich text/select/status/ multi-select/URL/contact 속성을 공용 result/evidence로 정규화합니다. endpoint, token, request body 같은 민감 provenance는 결과에 포함하지 않습니다.

Notion은 integration과 명시적으로 공유된 page/data source만 반환합니다. 401이면 refresh token으로 한 번 갱신하고, 갱신이 거부되면 앱에 재연결 안내를 표시합니다.

빌드와 배포

powershell
npx -y @morit/cli plugin validate .\examples\plugins\notion
npx -y @morit/cli plugin build .\examples\plugins\notion
npx -y @morit/cli plugin deploy .\examples\plugins\notion --visibility private

검증된 .mplg는 앱의 파일에서 설치로 직접 설치할 수도 있습니다. Cloud OAuth를 사용하려면 Project에 연결된 정확한 Deployment artifact여야 하며, 개인용으로만 쓸 경우 비공개를 유지합니다. 홈페이지·개인정보처리방침·아이콘·개발자 metadata를 모두 채운 후에만 공개 Marketplace 배포가 허용됩니다.

실제 사용 확인

  1. 앱에서 Plugin을 설치하고 자동 생성된 기본 Instance를 엽니다.
  2. Notion 연결을 눌러 실제 계정을 승인합니다. 다른 계정도 필요하면 같은 Instance 안에 Connection을 추가합니다.
  3. /notion Morit 플러그인 계획 또는 Notion에서 이번 분기 프로젝트 문서를 찾아줘를 실행합니다.
  4. 응답의 근거 링크가 승인한 workspace 범위 안에 있는지 확인합니다.
  5. 연결 해제 후 동일 기능이 token을 재사용하지 않고 연결 필요로 바뀌는지 확인합니다.

자동 테스트는 authorize/token/search/block children/data source query/revoke 계약, state replay 방지, 암호화, refresh, 사용자 격리와 Secret 비노출을 검증합니다. 실제 workspace 결과는 Notion 계정 승인과 공유 페이지가 있어야 하므로 배포 전 별도의 live smoke test가 필요합니다.