Pidgeon

공식

AI 에이전트를 위한 이메일 받은 편지함: 에이전트 전용 주소, 스레드, 메일 발송 및 답장, 수신 메일.

Pidgeon MCP(으)로 무엇을 할 수 있나요?

  • 받은 편지함 읽기 — 주소, 스레드, 메시지를 나열하거나 키가 접근할 수 있는 모든 주소에서 메시지 내용을 검색합니다.
  • 보내기 및 답장하기 — 키로 발신할 수 있는 주소에서 메시지를 보내거나, 메시지에 답장하거나, 첨부 파일과 함께 전달합니다.
  • 인증 메일 기다리기 — 메시지가 도착할 때까지 기다린 다음 추출된 인증 코드와 확인 링크를 가져옵니다.
  • 승인용 초안 작성 — 사람이 검토할 초안을 작성한 다음, 보류된 발송이 승인, 거부 또는 만료되었는지 확인합니다.
  • 첨부 파일 읽기 — CSV, 로그, JSON, 캘린더 파일, PDF, .docx 또는 .xlsx 첨부 파일의 텍스트를 추출합니다.
  • 캘린더 관리 — 주소의 일정을 읽고, 일정을 만들거나 업데이트하며, 메일로 받은 회의 초대를 수락하거나 거절합니다.

호스팅형 MCP 서버

npx add-mcp 'https://pidgeon.ai/api/mcp'

Claude Code, Codex, Cursor 등에 설치됩니다

문서

에이전트는 Pidgeon 받은 편지함을 직접 관리할 수 있습니다. 읽고, 그 안에서 답하고, 주소를 만들 수 있습니다. Pidgeon은 이 문서에서 설명하는 것과 동일한 API를 통해 Model Context Protocol을 사용합니다. 프로토콜 어댑터일 뿐, 그 이상은 아닙니다.

접속 방법은 두 가지이며, 같은 서버를 사용합니다. 호스팅 방식은 설치가 필요 없고, 패키지를 사용하면 서버가 컴퓨터에서 실행됩니다.

호스팅 방식: URL 사용

claude mcp add --transport http pidgeon https://pidgeon.ai/api/mcp

첫 번째 호출은 401에 응답하고, 클라이언트는 로그인을 위해 Pidgeon으로 안내합니다. 클라이언트가 할 수 있는 작업(읽기, 읽기 및 보내기, 전체 액세스)과 접근할 수 있는 범위(주소 하나 또는 계정 소유자인 경우 모든 주소)를 선택합니다. 이 선택은 API 키가 되고, 클라이언트는 해당 키의 토큰을 보유합니다. 이 키는 Developers → API keys → Connected apps에 표시되며, 여기서 연결을 해제하면 클라이언트의 다음 호출부터 연결이 종료됩니다.

Claude의 사용자 지정 커넥터, ChatGPT, Grok, Cursor, Codex, VS Code는 모두 같은 URL을 사용하고 같은 방식으로 로그인합니다. 각 요청은 독립적으로 처리됩니다. 서버는 자체적으로 유지할 상태가 없으므로 세션을 보유하지 않습니다.

로그인할 사람이 없는 에이전트에는 대신 키를 전달하세요.

claude mcp add --transport http pidgeon https://pidgeon.ai/api/mcp \
--header "Authorization: Bearer $PIDGEON_API_KEY"

x-api-key도 사용할 수 있습니다. Cursor, Codex(JSON이 아닌 TOML을 읽음), VS Code의 단계별 안내를 참고하세요. Windsurf와 Gemini CLI도 같은 URL과 헤더를 사용합니다.

Grok에서

Grok에서 Connectors → Custom을 선택하고 https://pidgeon.ai/api/mcp를 붙여 넣은 다음 동의 화면에서 로그인하세요. 키는 필요하지 않습니다(단계별 안내). Meta의 Muse는 Meta의 검토를 받고 있습니다.

Cursor에서

cursor.directory 목록에서 **Pidgeon을 Cursor에 추가**하세요. 이 목록에는 호스팅 서버와 스킬이 포함되어 있습니다.

또는 ~/.cursor/mcp.json(프로젝트 하나에만 적용하려면 .cursor/mcp.json)에서 서버를 직접 추가하세요. URL만 있으면 됩니다. Cursor는 첫 호출 때 로그인 안내를 표시합니다.

{
"mcpServers": {
  "pidgeon": {
    "url": "https://pidgeon.ai/api/mcp"
  }
}
}

로그인할 사람이 없는 에이전트라면 URL 옆에 "headers": { "Authorization": "Bearer ${env:PIDGEON_API_KEY}" }를 추가하세요. 그러면 Cursor가 환경 변수에서 값을 가져옵니다.

Codex, VS Code, Gemini CLI

Codex, VS Code, Gemini CLI에서는 명령 하나로 클라이언트 자체 파일에 서버를 기록할 수 있습니다.

npx -y @pidgeon-ai/mcp init --client codex    # ~/.codex/config.toml
npx -y @pidgeon-ai/mcp init --client vscode   # .vscode/mcp.json
npx -y @pidgeon-ai/mcp init --client gemini   # .gemini/settings.json

키가 설정되어 있지 않으면 URL만 기록하고 클라이언트에서 로그인하도록 합니다. PIDGEON_API_KEY이 설정되어 있으면 먼저 키를 확인한 다음, 클라이언트가 해당 변수에서 키를 읽도록 하거나(Codex, Gemini CLI) 한 번 입력하도록 요청합니다(VS Code). 따라서 키가 파일에 저장되지 않습니다. 주석을 포함해 기존 내용을 보존하며, 수정하는 파일은 <file>.bak에 복사합니다. 두 번째 실행에서는 아무 작업도 하지 않으며, 다른 pidgeon 항목은 --force을 지정한 경우에만 교체합니다. --scope user 또는 --scope project을 지정하면 다른 파일을 선택하고, --print를 지정하면 아무것도 기록하지 않습니다.

설치 방식: 패키지 사용

PIDGEON_API_KEY=pgn_live_… npx -y @pidgeon-ai/mcp init

이 명령은 아무것도 기록하기 전에 API에 키를 확인하고, 키가 접근할 수 있는 주소를 알려줍니다. JSON 블록만으로는 알 수 없고, 그렇지 않으면 모델이 조용히 오류를 받았지만 사용자는 이를 알아채지 못하는 유일한 질문에 답해 줍니다. 그런 다음 현재 디렉터리에 .mcp.json을 기록하고 기록한 내용을 출력합니다. 이미 있는 항목은 절대 덮어쓰지 않습니다. 덮어쓰려면 --force을 사용하고, 아무것도 기록하지 않고 설정만 보려면 --print를 사용하세요. 클라이언트가 다른 위치에 자체 설정 파일을 보관하는 경우 이 방법을 사용하면 됩니다.

키는 파일에 기록하지 않고 환경 변수에서 참조하므로, 설정 파일은 커밋할 수 있고 자격 증명은 파일에 남지 않습니다.

{
"mcpServers": {
  "pidgeon": {
    "command": "npx",
    "args": ["-y", "@pidgeon-ai/mcp"],
    "env": { "PIDGEON_API_KEY": "${PIDGEON_API_KEY}" }
  }
}
}

Claude Desktop이나 다른 MCP 클라이언트에서도 같은 블록을 사용할 수 있습니다. 서버를 직접 실행하려면 다음 명령을 사용하세요. 주로 서버가 시작되는 모습을 확인할 때 유용합니다.

PIDGEON_API_KEY=pgn_live_… npx -y @pidgeon-ai/mcp

PIDGEON_BASE_URL을 사용하면 프로덕션이 아닌 다른 환경을 지정할 수 있습니다. Pidgeon을 직접 실행하는 경우에만 유용합니다.

액세스 제어는 전적으로 키가 담당합니다

이 설정은 모델에 API 키를 전달합니다. 직접 만든 키이거나 로그인 과정에서 권한을 부여한 키입니다. 패키지는 접근 가능한 범위를 결정하지 않습니다. 키 자체의 권한 한도와 키에 부여된 주소가 서버 측에서 모든 것을 결정하며, 다른 호출자와 동일하게 적용됩니다. 여기에는 잘못 설정할 수 있는 별도의 규칙이 없습니다.

따라서 에이전트에 필요한 최소 권한의 키를 제공하세요. read에서 만든 키는 받은 편지함에 아무리 넉넉한 권한을 부여해도 메시지를 보낼 수 없습니다. 키의 접근 범위와 이를 제한하는 방법은 인증을 참고하세요. 분류만 하는 에이전트에는 읽기만 가능한 키를 제공해야 합니다. 그러면 민망한 내용을 보낼 가능성이 있는지는 프롬프트에 달린 문제가 아닙니다.

키의 접근 범위는 키에 권한을 부여한 주소의 스냅샷이므로, 키를 만든 뒤 생성한 주소는 포함되지 않습니다.

제공 기능

총 42개입니다. 이 페이지가 서버보다 뒤처지지 않도록 서버 자체 목록에서 가져왔습니다.

도구기능엔드포인트
list_addresses이 자격 증명으로 접근할 수 있는 주소입니다.GET /identities
create_address에이전트가 사용할 주소를 만듭니다.POST /identities
get_addressID로 주소 하나를 조회합니다.GET /identities/{id}
list_threads주소 하나의 대화를 최신순으로 조회합니다.GET /threads
get_threadID로 대화 하나를 조회합니다.GET /threads/{id}
list_messages대화 하나의 메시지를 오래된 순으로 조회합니다. 답장하기 전에 읽어야 할 내용입니다.GET /messages
search_messages이 자격 증명으로 접근할 수 있는 모든 주소에서 전문 검색을 수행하고 관련도순으로 결과를 반환합니다.GET /messages/search
send_message이 자격 증명으로 발신 권한이 있는 주소에서 메시지를 보냅니다.POST /messages
get_messageID로 메시지 하나를 조회합니다. 본문, 보관된 헤더, 발신 도메인의 레코드로 확인된 내용이 포함됩니다. authentication.spf\, .dkim\, .dmarc\에서 null은 실패가 아니라 보고되지 않았음을 뜻합니다.GET /messages/{id}
await_message주소에 메시지가 도착할 때까지 기다립니다. 예를 들어 가입 양식을 제출한 뒤 사용할 수 있습니다. 메시지와 함께 extracted.codes\, extracted.links\을 반환하며, 인증 코드와 확인 링크가 가장 유력한 항목부터 표시됩니다.GET /messages/await
reply_to_message답장할 메시지에서 수신자, 제목, 스레드를 가져오므로, 답장 내용만 제공하면 됩니다.POST /messages/{id}/reply
forward_message메시지를 받은 주소에서, 원래 수신 대상이 아니었던 사람에게 첨부 파일과 함께 메시지 하나를 전달합니다.POST /messages/{id}/forward
create_draft메시지를 보내지 않고 작성해 사람이 검토하고 보낼 수 있도록 합니다. 승인을 위해 답장을 준비해 달라는 요청을 받았을 때 사용하세요.POST /drafts
get_draft_approval보류 중인 발신의 상태를 해당 draft\_id\으로 조회합니다. 사람이 대시보드에서 승인하거나 거부할 때까지는 pending\이며, 이후에는 approved\(전송되었으며 message\_id\이 메시지임), rejected\, 또는 24시간 동안 아무도 결정하지 않으면 expired\가 됩니다.GET /drafts/{id}/approval
list_drafts주소 하나의 모든 초안을 최신순으로 조회합니다. 수신자와 본문도 포함되므로 나중에 돌아와 초안을 마무리할 수 있습니다.GET /drafts
get_draftID로 초안 하나를 조회합니다. 발신자, 수신자, 제목, 텍스트, 첨부 파일이 포함됩니다.GET /drafts/{id}
update_draft전달한 필드만 변경하고 나머지는 그대로 둡니다. null\를 사용하면 제목이나 텍스트를 지웁니다.PATCH /drafts/{id}
delete_draft초안 하나를 삭제하고, 예약된 발신이 있다면 취소합니다.DELETE /drafts/{id}
read_attachment첨부 파일 하나의 텍스트를 가져옵니다. CSV, 로그, JSON, 캘린더 파일, PDF, Word .docx\, Excel .xlsx\ 등이 해당합니다.GET /attachments/{id}/text
update_thread대화의 담당자와 진행 상태를 확인합니다.PATCH /threads/{id}
update_message메시지에 별표를 표시하거나 archive\, spam\, trash\로 이동합니다.PATCH /messages/{id}
list_send_rules주소 하나의 허용 및 차단 목록과 이에 연결된 발신 정책을 조회합니다.GET /identities/{id}/send-rules
list_receive_rules주소 하나에 도달하는 항목을 결정하는 규칙을 조회합니다. 발신자 또는 도메인별로 거부, 스팸, 휴지통, 보관함, 받은 편지함을 지정하며 receive\_policy\도 포함됩니다.GET /identities/{id}/receive-rules
list_folders주소 하나의 모든 폴더와 각 폴더의 개수를 조회합니다.GET /mailboxes
list_folder주소 하나의 폴더를 최신순으로 조회하며, 각 행은 대화 하나를 나타냅니다. list\_threads\가 어떤 대화가 있는지 알려준다면, 이 도구는 대화가 어디에 분류되어 있고 목록에서 어떻게 보이는지 알려줍니다.GET /mailboxes/{folder}
list_changessync\_cursor\ 이후 주소 하나의 받은 편지함에서 발생한 모든 변경 사항을 조회합니다. 새로 도착한 메시지도 포함되므로, 장시간 실행되는 에이전트가 새 메시지 하나를 찾으려고 폴더를 다시 읽을 필요가 없습니다.GET /mailboxes/changes
list_events이 자격 증명으로 접근할 수 있는 모든 주소의 모든 이벤트를 조회합니다. 메일 수신, 발신, 배달, 반송, 분류 등이 포함됩니다.GET /events
list_labels라벨은 워크스페이스가 아니라 주소에 속합니다. 따라서 주소 세 곳에 같은 이름의 라벨이 있으면 ID가 서로 다른 라벨 세 개입니다.GET /labels
create_label주소 하나의 라벨을 조회합니다.POST /labels
apply_label라벨은 대화와 같은 주소에 속해야 합니다. 해당 주소의 list\_labels\를 사용하면 올바른 ID를 찾을 수 있습니다.POST /threads/{id}/labels
remove_label대화 하나에서 라벨 하나를 제거합니다.DELETE /threads/{id}/labels
list_podspod는 자체 고객 한 명을 위한 컨테이너입니다. 주소와 도메인을 보관하며, **pod에서 보낸 메일은 자체 발신 평판에 반영되므로** 한 고객이 다른 고객의 메일 전달에 악영향을 줄 수 없습니다.GET /pods
create_pod자체 발신 평판을 가진 고객용 컨테이너입니다.POST /pods
get_metrics이벤트 로그를 기준으로 집계한 기간 days\ 동안의 발신, 배달, 반송, 거부, 불만 접수, 수신, 스팸 수입니다. 제공업체가 나중에 보고한 결과도 포함됩니다.GET /metrics
get_calendar주소의 id\을 기준으로 한 캘린더입니다. 기본 시간대와 이벤트 수를 포함합니다.GET /identities/{id}/calendar
update_calendar시간대를 지정하지 않고 만든 이벤트에 적용되는 시간대입니다. Europe/Lisbon\와 같은 IANA 이름을 사용합니다.PATCH /identities/{id}/calendar
get_agendaafter\부터 before\까지(ISO 8601 날짜-시간) 주소의 캘린더에 있는 항목을 시작 시간순으로 조회합니다. 반복 이벤트는 각 날짜별로 따로 표시됩니다.GET /identities/{id}/calendar/agenda
get_calendar_event주소 id\의 캘린더에서 eventId\으로 이벤트 하나를 조회합니다. 시간, 설명, 위치, 반복 설정, 참석자의 응답이 포함됩니다.GET /identities/{id}/calendar/events/{eventId}
create_calendar_event주소 id\의 캘린더에 이벤트를 추가합니다.POST /identities/{id}/calendar/events
update_calendar_event캘린더 이벤트 하나를 변경합니다. 전달한 필드만 변경하고 나머지는 그대로 둡니다.PATCH /identities/{id}/calendar/events/{eventId}
delete_calendar_event주소 id\의 캘린더에서 이벤트를 제거합니다.DELETE /identities/{id}/calendar/events/{eventId}
respond_to_invitation메일로 도착한 회의 초대에 메시지의 id\을 사용해 응답합니다. accepted\, declined\, tentative\ 중 하나를 선택하고, 선택적으로 comment\를 지정할 수 있습니다.POST /messages/{id}/invitation/respond

각 도구는 참조 문서에 나열된 엔드포인트를 사용하며, 동일한 거부 동작을 따릅니다. 키에서 사용할 수 없는 도구를 호출하면 API와 마찬가지로 API가 반환했을 문장과 함께 실패합니다.

키가 접근할 수 있는 모든 주소를 대상으로 검색하며, 주소를 지정하면 해당 주소만 검색합니다. 각 결과에는 검색된 주소가 표시됩니다.

이 제품이 아닌 것

이 제품은 에이전트 런타임이 아니며, 어떤 결정도 내리지 않습니다. Pidgeon은 어떤 모델을 실행할지, 모델이 어떤 결론을 내려도 되는지에 관여하지 않습니다. 이는 제품의 나머지 부분에 대해 스레드와 인계에서 설명하는 입장과 같습니다. 에이전트가 막히면 대화를 사람에게 넘기는 것은 스레드 상태이지, 이 패키지의 기능이 아닙니다.