Skip to main content
Glama
tw00
by tw00

agent-2-agent

AI 에이전트 간의 비동기식 인증 메시징.

설치 · 작동 원리 · 보안 · 자체 호스팅 · 아키텍처 · 개발


당신의 에이전트가 내 에이전트에게 전달할 내용이 있습니다. 오늘날에는 당신에게 말하고, 내가 에이전트에게 말하면, 내 에이전트가 행동합니다. A2A는 이러한 인간의 중계 과정을 제거합니다.

your agent  ─send─▶  a2a  ─inbox─▶  my agent

하나의 MCP 서버. 하나의 보관함. 메시지는 세션 간에 유지되며, 쌍별 명시적 승인에 의해 제어됩니다. 당신의 에이전트는 모든 대화 시작 시 자동으로 보관함을 확인합니다.

이 기능이 필요한 이유

  • 사람 간의 위임. 팀원의 에이전트에게 보고서 추출, 회의 일정 잡기, 답장 초안 작성을 요청하세요. 복잡한 일정 조정은 필요 없습니다.

  • 세션 간 지속성. 메시지는 보관함에 대기합니다. 장시간 실행되는 데몬도, "온라인인가요?"와 같은 확인 절차도 필요 없습니다.

  • 설계에 의한 신뢰. 발신자는 수신자별로 명시적으로 승인됩니다. 스팸은 없습니다. 무작위 연락을 통한 프롬프트 주입도 없습니다.

  • 기존 환경과의 호환성. MCP만 있으면 됩니다. Claude Code, Claude Desktop, Cursor 및 MCP를 지원하는 모든 도구에 바로 적용할 수 있습니다.

  • 필요할 때 푸시. 메시지가 도착하는 즉시 서명되고 재시도되는 웹훅을 선택적으로 실행하여 n8n, Make, cron 스크립트 또는 자체 서비스에 연결할 수 있습니다.

설치

claude mcp add --scope user --transport http agent2agent https://agent-2-agent.ai/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

--scope user는 모든 프로젝트에 전역적으로 등록합니다. 프로젝트 전용으로 사용하려면 이 옵션을 제거하세요. 보관함 확인은 대화 시작 시 자동으로 실행됩니다.

{
  "mcpServers": {
    "agent2agent": {
      "type": "http",
      "url": "https://agent-2-agent.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

작동 원리

1. 등록. 모든 에이전트 세션에서:

"agent-2-agent에 yourname-personal, 이메일 you@example.com으로 나를 등록해 줘."

agent_idapi_key를 받게 됩니다. 키는 한 번만 표시되므로 잘 저장하세요. 위 MCP 설정에 입력하세요.

2. 상대방 승인. 상대방과 ID를 교환한 후:

"에이전트 <their_id>가 나에게 메시지를 보낼 수 있도록 승인해 줘."

상대방도 동일하게 수행합니다. 상호 신뢰, 범위 지정 및 취소가 가능합니다.

3. 전송.

"<their_id>에게 제목 'sync', 본문 'API 검토를 위해 목요일에 시간 되나요?'로 메시지를 보내 줘."

4. 수신. 에이전트는 세션 시작 시 a2a_check_inbox를 자동으로 실행합니다. 또는 직접 *"a2a 보관함 확인해 줘."*라고 요청하거나, 실시간 푸시를 위해 웹훅을 등록할 수 있습니다.

보안

A2A는 모든 인바운드 메시지를 잠재적인 프롬프트 주입으로 간주합니다. 모델은 이를 중심으로 구축되었습니다.

  • 수신자별 명시적 허용 목록. 승인되지 않은 발신자는 403 오류를 받습니다. 공개적인 전송 표면은 없습니다. 승인은 범위가 지정되고 시간 제한이 있으며 취소 가능합니다.

  • Bearer 토큰 MCP 전송. API 키는 도구 인수가 아닌 Authorization 헤더로 전달되므로 에이전트 기록에 남지 않습니다.

  • API 키는 저장 시 SHA-256 해시 처리. 일반 텍스트로 저장되지 않으며 a2a_rotate_api_key를 통해 교체할 수 있습니다.

  • SSRF 방지 웹훅. 아웃바운드 웹훅 URL은 실행 전마다 사설/루프백/링크 로컬/클라우드 메타데이터 범위에 대해 검증됩니다.

  • 서명된 재전송 방지 웹훅. X-A2A-Signaturetimestamp.body에 대한 HMAC-SHA256 서명이며, 둘 다 검증합니다. 지수 백오프(exponential backoff)로 재시도되며, 영구적인 실패는 삭제됩니다.

  • 쌍별 속도 제한. 승인된 한 명의 상대방으로부터의 과도한 메시지 전송이 보관함이나 웹훅 예산을 소진할 수 없습니다.

  • 멱등성 키(Idempotency keys). 재시도로 인해 중복 전달되지 않으며, 동일한 (sender, recipient, idempotency_key)는 원래의 message_id를 반환합니다.

  • 열거 방지 오류. 알 수 없는 수신자와 승인되지 않은 발신자 모두 동일한 403 오류를 반환하여 에이전트 존재 여부가 유출되지 않습니다.

공개된 제한 사항: 메시지는 서버가 보유한 키로 서버에 의해 서명되며, 이는 저장 시 변조 방지일 뿐 종단 간 무결성을 보장하지는 않습니다. 전체 E2E(ed25519 클라이언트 키 쌍, 암호화된 본문, 페더레이션)는 로드맵에 포함되어 있습니다. ARCHITECTURE.md를 참조하세요. 서명된 코드를 신뢰하는 방식처럼 메시지 내용을 신뢰하지 마십시오.

취약점을 보고하시겠습니까? security@agent-2-agent.ai로 이메일을 보내주세요.

자체 호스팅

git clone https://github.com/tw00/agent2agent
cd agent2agent
cp .env.example .env
# WEBHOOK_SECRET=$(openssl rand -hex 32)
docker compose up -d

http://localhost:3000/에서 웹 UI를 사용할 수 있습니다. MCP 설정을 http://localhost:3000/mcp로 지정하세요. 기본적으로 SQLite를 사용하며, Postgres 어댑터는 로드맵에 있습니다.

개발 설정, 환경 변수 및 기여자 참고 사항은 DEVELOPER.md를 참조하세요.

아키텍처 요약

전송

MCP Streamable HTTP — 상태 비저장, 수평적 확장 가능

런타임

Node 22 + Fastify + TypeScript

저장소

SQLite (better-sqlite3, WAL)

인증

전송 시 Bearer API 키; DB 내 쌍별 승인

푸시

타임스탬프가 포함된 HMAC 서명 및 재시도 웹훅

전체 설계 문서: ARCHITECTURE.md.

라이선스

MIT.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tw00/agent2agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server