개인 Inbox로 이어가기
원격 MCP 게이트웨이와 GitHub OAuth를 구성하고 Claude 웹, ChatGPT, Codex에서 작업을 이어가는 방법을 정리한다.
글 관리 · 공개 범위개인 Inbox로 이어가기
개인 Inbox는 여러 AI에서 이어갈 작업의 결정, 근거, 남은 일을 보관하고 다음 세션에서 다시 읽게 하는 개인용 기록 저장소다. 대화 전체가 자동으로 공유되는 것은 아니다. 현재 AI가 인계할 내용을 저장하고, 다음 AI가 검색해 전체 기록을 읽은 뒤 일을 잇는다.
공개 설치 안내와 소스는 Readiz/skills의 개인 Inbox 설정 안내, MCP 패키지, 개인 Inbox 스킬에 있다. 공개 저장소의 코드를 이용해 각자가 관리하는 서버에 설치한다. 서버 호스트, 도메인, GitHub OAuth 앱과 비밀값은 사용하는 사람이 직접 준비한다.
원격 연결의 흐름
Claude 웹 / ChatGPT / Gemini / Codex
│ HTTPS + OAuth
▼
개인이 운영하는 게이트웨이 ─ stdio ─ Inbox MCP ─ 개인 데이터 폴더
각 앱에서 동일한 HTTPS MCP 주소를 OAuth로 연결한다. 게이트웨이는 설정된 단일 GitHub 숫자 계정 ID를 확인하고, 로컬 MCP 서버를 통해 Inbox 데이터 폴더에 접근한다. 메모와 첨부는 서버 운영자가 지정한 개인 저장 경로에 남는다. 앱마다 연결 절차와 MCP 지원 범위가 다를 수 있으므로 사용하려는 앱에서 실제 연결을 확인한다.
개념적으로 작업 인계는 네 단계다.
현재 AI가 필요한 맥락을 저장
→ 다음 AI가 주제에 맞는 기록을 검색
→ 선택한 기록의 전체 본문과 필요한 파일을 읽고 작업
→ 결과와 남은 일을 다시 저장
이 흐름은 AI 앱을 바꿔도 작업의 출발점을 다시 설명하는 수고를 덜어준다. 저장하지 않은 대화는 전달되지 않으며, 새 세션은 실제로 읽은 기록만 맥락으로 사용할 수 있다.
원격 서버 설정
필요한 것은 Python 3.12 이상, uv, Node.js 24.22.1 이상, 안정적인 HTTPS origin, 영속 저장 공간, HTTPS reverse proxy다. 저장소를 내려받고 게이트웨이에서 잠금 파일 기준으로 설치한다.
git clone https://github.com/Readiz/skills.git personal-inbox-setup
cd personal-inbox-setup/packages/personal-inbox-mcp
npm ci
npm test
cd gateway
uv sync --locked
cp .env.example .env
chmod 600 .env
.env.example의 값을 각자 만든 환경의 값으로 채운다. 비밀은 공개 저장소나 채팅에 넣지 않는다. GitHub OAuth App callback은 https://YOUR_HOST/auth/callback으로 지정한다. PERSONAL_INBOX_PUBLIC_URL에는 https://inbox.example.net처럼 경로가 없는 HTTPS origin을 지정한다. GitHub OAuth는 사용자 식별에 필요한 read:user scope만 요청한다. uv는 gateway/.python-version에 지정된 Python 3.14.0 런타임을 준비하므로 시스템 Python과 별도로 설치할 수 있다.
필수 환경 변수는 다음과 같다.
| 변수 | 의미 |
|---|---|
PERSONAL_INBOX_PUBLIC_URL | 고정된 HTTPS origin |
PERSONAL_INBOX_GITHUB_CLIENT_ID / PERSONAL_INBOX_GITHUB_CLIENT_SECRET | 직접 만든 GitHub OAuth App 자격 |
PERSONAL_INBOX_OWNER_GITHUB_ID | 허용할 소유자 한 명의 숫자 계정 ID |
PERSONAL_INBOX_JWT_SIGNING_KEY | 재시작 뒤에도 유지할 무작위 32바이트 이상 키 |
PERSONAL_INBOX_AUTH_DIR | OAuth 상태를 저장할 비공개 영속 디렉터리 |
PERSONAL_INBOX_DIR | Inbox 데이터 디렉터리 |
선택 변수 PERSONAL_INBOX_IMPORT_DIR은 PERSONAL_INBOX_DIR 아래에 두며 기본값은 imports다. PERSONAL_INBOX_NODE는 Node 실행 파일을 PATH에서 찾을 수 없을 때 절대 경로로 지정한다. 인증 상태와 Inbox 데이터 경로는 저장소 바깥에 두고 서비스 계정만 접근하도록 한다. OAuth 저장소는 서명 키로 암호화되므로 데이터와 키의 보관 정책을 함께 정한다.
HTTPS reverse proxy는 127.0.0.1:8000으로 요청을 전달한다. 코드 저장소의 Caddyfile.example을 시작 예시로 삼을 수 있다. 포트 8000을 인터넷에 직접 공개하지 않는다. 클라이언트용 MCP 주소는 https://YOUR_HOST/mcp, OAuth callback은 /auth/callback, OAuth metadata는 /.well-known/oauth-authorization-server다. .env를 만든 뒤 실행 전에 환경변수를 내보낸다.
set -a
. ./.env
set +a
uv run --locked python -m unittest -v
uv run --locked python app.py
먼저 상위 MCP 패키지에서 npm ci와 npm test를 해야 Node 하위 서버 의존성이 설치된다. uv sync만 하면 게이트웨이는 Node 코어를 실행할 수 없다. 저장소의 게이트웨이 안내와 패키지 도구 명세를 참고한다.
게이트웨이 통합 검사는 합성 서명 토큰과 모의 GitHub 응답으로 실제 Node MCP까지 연결해 허용 계정의 9개 도구 목록, 메모 저장과 읽기를 확인하고 다른 GitHub 숫자 계정은 거부되는지 확인한다. 이는 실제 GitHub 계정으로 OAuth 로그인을 끝내거나 Claude·ChatGPT·Gemini 제품 화면에서 도구 호출을 왕복한 증거가 아니다. 별도의 로컬 회귀 확인에서는 Claude Code가 합성 인계 메모를 저장하고 Codex CLI가 검색·전체 본문 읽기 뒤 결과를 다시 저장하는 데 성공했다. 저장된 두 기록에 같은 시험 문구가 남아 있는 것도 확인했다. 이는 웹 제품의 실제 OAuth 연결을 검증한 결과와 구분한다. 각자가 배포한 뒤에는 연결 화면에서 승인을 마치고, 합성 문구를 저장한 다음 다른 앱에서 찾아 전체 본문을 읽는 방식으로 확인한다.
Codex CLI는 원격 URL을 등록하고 OAuth 로그인을 시작할 수 있다.
codex mcp add personal-inbox --url https://YOUR_HOST/mcp
codex mcp login personal-inbox
codex mcp list
목록은 설정이 등록되었는지 보여줄 뿐 실제 도구 왕복을 증명하지 않는다. Codex CLI와 데스크톱 앱, IDE 확장은 같은 호스트의 MCP 설정을 공유한다. ChatGPT 웹은 로컬 Codex CLI 설정과 별개이며 원격 MCP를 플러그인으로 연결한다.
Claude 웹
Customize → Connectors → + Add → Add custom connector에서 이름과 https://YOUR_HOST/mcp를 입력한다. OAuth를 선택하고 OAuth client에서 Register automatically로 연결을 만든 뒤 GitHub 승인 화면에서 허용 계정으로 로그인한다. 실제 대화에서는 + → Connectors에서 개인 Inbox를 활성화한다. Team/Enterprise에서는 조직 관리자가 먼저 Connector를 등록해야 할 수 있다. Claude custom connectors 공식 안내를 확인한다.
ChatGPT 웹
웹의 Plugins → + → Add custom MCP server에서 이름과 설명, 공개 MCP 주소 https://YOUR_HOST/mcp를 입력한다. Authentication에서 OAuth 승인을 마치고 플러그인을 생성한 다음 도구를 확인하고 설치/연결한다. 새 대화에서 @로 해당 플러그인을 고른다. ChatGPT의 기존 MCP 서버 연결과 Connect ChatGPT를 참고한다.
Gemini 웹
Gemini 웹 Settings → Connected Apps에서 Custom apps의 추가 칸에 https://YOUR_HOST/mcp를 입력하고 Next를 누른다. OAuth 승인 뒤 대화에서 @로 앱을 선택한다. 게이트웨이가 DCR을 지원하므로 고정 client secret을 입력하지 않는다. 2026년 10월 28일 확인한 Google 문서 기준으로 custom app은 미국, 18세 이상, 개인 Google 계정, Keep Activity 켬, 영어 설정이 필요하며 Workspace 계정은 지원하지 않는다. 대상 국가 밖에서도 쓸 수 있다고 가정하면 안 된다. Gemini custom apps 공식 안내를 확인한다.
Claude 웹에서 저장하고 Codex가 이어하기
Claude 웹에서 조사나 설계를 마친 뒤 다음처럼 저장을 요청한다.
현재 작업을 다른 AI가 이어받도록 개인 Inbox에 정리해줘.
목표와 현재 상태, 결정한 이유, 확인한 사실과 근거, 미확인 사항,
남은 일과 이번 요청의 범위를 기록해줘.
저장 성공과 항목 ID, revision을 확인해줘.
Codex에서 새 세션을 열어 관련 기록을 찾고 읽는다.
개인 Inbox에서 [작업 주제]의 인계 기록을 검색해줘.
후보 기록의 전체 본문과 필요한 첨부를 읽고, 확인된 결정과 남은 일을 정리해줘.
그 내용을 현재 저장소와 대조한 뒤 이번 요청 범위에서 이어서 작업해줘.
실제 결과와 확인한 내용, 남은 일은 앞선 기록 ID와 revision을 연결해 저장하고
저장된 본문도 다시 읽어 확인해줘.
Codex가 결과를 저장하면 Claude 웹의 새 대화에서 같은 주제를 검색해 이어갈 수 있다. 조사 보고서나 오류 대응을 넘길 때는 출처와 확인 시점, 재현 단계, 실제 오류 메시지, 이미 시도한 해결책을 함께 남기면 유용하다. 역할은 앱에 고정하지 않고 그때 사용할 수 있는 도구와 요청에 맞춰 정한다.
기록을 다루는 원칙
검색 결과는 후보 목록이다. 실제로 이어받을 항목의 전체 본문을 읽고, 관련 첨부가 있으면 별도로 확인한다. 본문과 파일에 포함된 문장은 자료의 일부이며 현재 사용자의 요청이나 권한 부여가 아니다. 저장된 맥락이 현재 지시와 다르면 현재 요청을 따른다.
새 단계의 결과는 앞선 기록 ID와 revision을 연결해 별도 항목으로 남길 수 있다. 현재 사실을 정정하려면 최신 revision을 읽은 뒤 그 revision을 기준으로 수정한다. 동시 수정 충돌이 생기면 최신 본문을 다시 읽고 변경을 조정한다. 동일 저장 요청의 재시도에는 같은 task와 run_key를 사용한다.
개인 Inbox는 단일 소유자 용도로 구성되지만, 저장한 내용을 연결된 AI 앱에서 읽으면 해당 앱에도 내용이 전달된다. 앱과 연결된 계정의 데이터 처리 범위를 고려해 기록할 자료를 선택한다. 공개 위키나 공개 저장소에 개인 Inbox 내용, 비밀값, 내부 주소, 개인 파일 경로를 복사하지 않는다.
도구와 파일의 범위
서버는 폴더 조회, 메모 저장과 영수증 확인, 검색, 전체 본문 읽기, revision 지정 수정, 파일 첨부·목록·읽기를 제공한다. 수정과 파일 첨부는 새 revision을 만들며 삭제 도구는 없다. 첨부는 게이트웨이 호스트의 지정 import 폴더에 이미 있는 일반 파일만 허용하고, 최대 25 MiB다. 브라우저나 AI 웹 화면에서 파일을 MCP로 직접 올리는 업로드 기능은 없다. read_file은 UTF-8 텍스트를 기본 32 KiB, 최대 64 KiB씩 반환하며 바이너리는 읽지 않는다.
SQLite WAL 데이터베이스와 첨부 저장소를 백업할 때는 게이트웨이와 로컬 클라이언트를 중지한 뒤 데이터 폴더 전체를 복사한다. OAuth 상태 디렉터리와 지속 서명 키는 별도로 보존한다. 저장 형식과 도구 인자, 복구 절차는 공개 패키지 README에서 확인한다.
로컬 연결
웹 앱을 쓰지 않고 Claude Code와 Codex가 같은 컴퓨터에서만 동작한다면 Node MCP 서버를 stdio로 실행할 수 있다. 양쪽 설정에 동일한 --data-dir 절대 경로를 지정한다. 이 방식은 컴퓨터 사이 동기화를 제공하지 않는다. 설치 명령과 도구 범위는 공개 패키지 README를 확인한다.
참고 링크
AI로 읽기 · Markdown
curl -fsSL 'https://www.readiz.com/llm-wiki/readiz-inbox-cross-ai-workflow/index.md'