Notion MCP 이용하기 with Amazon Q

Dongwoo Kim·2025년 8월 21일

AWS

목록 보기
5/5
post-thumbnail

개요

회사계정으로 Amazon Q Devoloper Pro를 사용할 수 있게 되었다. Amazon Q 는 다른 AI 서비스들에 비해 AWS 인프라 관리에 용이하다는 장점이 있다. 그 전에도 개인 AWS Builders ID를 통해 사용하고는 있었지만 간혹 사용량을 제한되어 도중에 작업을 멈추는 일은 이제 없을 것 같다. 그리고 이 참에 Notion MCP 서버와도 연결시켜서 노션 문서를 읽거나 수정할 수 있게 하려고했다.

아키텍처

Amazon Q CLI / IDE ↔️ Local MCP Server ↔️ Notion API Server

구조는 위와 같다. 나는 내 로컬환경에서 CLI나 IDE를 통해서 Amazon Q 사용할 것이기 때문에 MCP 서버를 따로 내 로컬에 띄우고 해당 서버를 통해 통신하여 노션 api를 이용하는 방식이었다. 때문에 http, sse, stdio 중에 로컬 통신에 유리한 stdio 연결 방식을 선택하게 되었다.

# With ChatGPT 5 Thinking

나: notion mcp 연결방법이 http, sse, stdio 이렇게 총 3가지 방법이 있던데 설명좀

ChatGPT 5 Thinking : 
HTTP → 외부 API 연동, 요청-응답 위주 통신
SSE → 서버 → 클라이언트 방향 실시간 이벤트 스트림
STDIO → 로컬 프로세스 간 통신 (빠르고 안정적, 개발/테스트용에 좋음) 

인증 오류

Notion docs에서 연결방법을 찾아보고 호기롭게 stdio 방식으로 연결을 시도했지만 바로 연결 실패. 이유는 다음과 같다.

mcp를 통해 원하는 노션 페이지에 접근하려면 당연히 인증이 필요한데 일반적으로 notion mcp에 연결 인증은 OAuth/브라우저 인증 통해서 이뤄진다.

내가 연결하고자 했던 우리 회사 워크스페이스에서 내 계정은 게스트(...) 자격이였기 때문에 브라우저를 통한 인증은 당연히 불가능했다.

Notion API Key

다른 방법으로 Notion API key를 발급받아 인증을 대신할 수 있었다. API 발급은 권한이 있는 관리자 자격의 계정으로 발급받아야하지만 그 이후로는 그 키를 통해 계정자격 상관없이 mcp를 이용할 수 있었다.

다만 주의할 점은 발급한 후에 해당 키에 리소스를 연결하여 그 키의 권한을 부여해야한다. 때문에 회사 노션 워크스페이스에 별도로 MCP workspace용 페이지를 만들고 해당 페이지만 권한을 허용시켜줬다.

Local MCP Server

노션에 접근할 수 있는 권한을 얻었으니 이를 이용해 mcp 서버를 열면 된다. 기본적으로 notion에서나 aws에서나 node, npx를 이용해 서버를 실행하고있었고 가이드를 그대로 따라서 별 문제없이 로컬서버를 시작할 수 있었다.

다만 참고사항으로는 나는 Amazon Q CLI와 VSCode에서 작업했고 두 방법 모두 Amazon Q를 실행할때 자동으로 로컬 mcp서버를 연결하는 설정을 할 수 있어서 실행하기전에 별도로 로컬서버를 열어두어야하는 번거로움은 없었다.

마지막으로 MCP workspace에서만 작업할 수 있도록 관련 제한사항 프롬프트를 추가했다.

CLI

// .aws/mcp.json
{
  "mcpServers": {
    "notion": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@notionhq/notion-mcp-server"
      ],
      "env": {
        "OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer {NOTION_API_KEY}\",\"Notion-Version\":\"2022-06-28\"}"
      },
      "timeout": 120000,
      "disabled": false
    }
  }
}

VSCODE

// .aws/amazonq/agents/default.json
{
  "name": "default-agent",
  "version": "1.0.0",
  "description": "Default agent configuration",
  "mcpServers": {
    "notion": {
      "command": "npx",
      "args": [
        "-y",
        "@notionhq/notion-mcp-server"
      ],
      "env": {
        "OPENAPI_MCP_HEADERS": "{\"Authorization\":\"Bearer {NOTION_API_KEY}\",\"Notion-Version\":\"2022-06-28\"}"
      },
      "timeout": 6000
    }
  },
  "tools": [
    ...
    "@notion"
  ],
  "allowedTools": [
    ...
    "@notion/API-get-user",
    "@notion/API-get-users",
    "@notion/API-get-self",
    "@notion/API-post-database-query",
    "@notion/API-post-search",
    "@notion/API-get-block-children",
    "@notion/API-retrieve-a-block",
    "@notion/API-retrieve-a-page",
    "@notion/API-retrieve-a-database",
    "@notion/API-retrieve-a-page-property",
    "@notion/API-retrieve-a-comment"
  ],
    ...
}
// .amazonq/rules/mcp.md
[notion]
Notion 작업은 다음 ID로 엄격히 제한:
- {MCP workspace page_id}

규칙:
- MCP 호출 시 대상 ID ∈ 허용 집합인지 항상 검증.
- 쓰기 전 1회 읽기 조회로 권한/대상 일치 확인.
- 외부/비허용 리소스 요청 → 정중히 거부하고 허용 범위 안내.
- 403/404 → 재시도 금지, 허용 범위 재안내.
- 브라우저 OAuth 금지, API 토큰+MCP만 사용.

연결 확인

중간 중간 삽질을 많이 하긴했지만 cli와 vscode 모두 연결 성공했다.

CLIVSCode

TODO

  1. cli와 vscode 모두 같은 mcp 설정인데 별도로 정의해줘야하는게 번거로워서 이를 한번에 관리할 수 있는 방법이 있는지 찾아볼 예정 -> cli에 agent 명시해주면 될듯
  2. mcp tool 종류별로 실행권한을 always allow / ask / deny 3가지로 별도 설정

Ref

profile
kimphysicsman

0개의 댓글