
METAL AI
왜 이 브리지가 필요한가
MCP(Model Context Protocol)는 Anthropic이 2024년 11월 공개한 오픈소스 표준으로, AI 모델이 외부 데이터·도구에 연결하는 방식을 통일한다. MCP는 클라이언트-서버 구조를 따르며 두 가지 전송 방식—동일 머신의 로컬 프로세스 간 통신에 쓰이는 stdio와 원격 서버-클라이언트 간 HTTP 통신인 Streamable HTTP—을 지원한다. 그러나 MCP 서버가 로컬에 있고 MCP 클라이언트가 원격 클라우드에 있는 경우는 두 방식 모두 직접 지원하지 않는다.
이 공백은 재무 분석가나 금융 매니저처럼 Excel과 로컬 파일을 주로 사용하는 직군에서 특히 두드러진다. AWS는 내부적으로 이 패턴을 재무 AI 어시스턴트에 적용해 출시 후 1년간 4만 1,000건 이상의 대화를 처리했으며, 이 내부 구현을 단순화한 형태의 참조 아키텍처로 재구성해 공개했다.

아키텍처: 네 개의 컴포넌트
전체 구조는 AgentCore 런타임, 브라우저 확장 프로그램, MCP 브리지, MCP 서버 네 가지로 이루어진다. AgentCore 런타임은 Strands 에이전트를 클라우드에서 호스팅하며 MCP 클라이언트 역할을 맡아 도구 탐색과 호출 요청을 보낸다. 브라우저 확장 프로그램은 채팅 인터페이스를 제공하는 동시에 AgentCore 런타임(웹소켓)과 MCP 브리지(네이티브 메시징) 사이에서 양방향 중계를 담당한다.
MCP 브리지는 사용자의 로컬 머신에서 실행되는 FastMCP 프록시로, 브라우저가 네이티브 메시징 호스트 등록을 통해 생성한다. 네이티브 메시징 봉투 형식과 MCP JSON-RPC 사이의 변환을 처리하며, MCP 서버와는 같은 머신에 있으므로 stdio 전송을 사용한다. MCP 서버는 브리지가 시작 시 자식 프로세스로 생성해 브리지가 종료될 때까지 유지한다.

메시지는 에이전트에서 출발해 각 홉을 지나며 래핑 레이어가 하나씩 벗겨진다. 에이전트는 {"type": "mcpbridge", "content": ..., "session_id": "..."} 형태의 JSON 봉투를 웹소켓으로 확장 프로그램에 보내고, 확장 프로그램은 이를 네이티브 메시징으로 브리지에 전달한다. 브리지는 봉투를 벗겨 순수 JSON-RPC 메시지를 stdio로 MCP 서버에 보낸다. 응답은 역방향 경로를 통해 그대로 되돌아온다.
핵심 작동 방식
WebSocket 연결과 자격증명 보호: 브라우저 확장 프로그램은 시작 시 로컬 브리지에 프리사인 요청을 보내고, 브리지는 사용자의 로컬 AWS 자격증명과 Bedrock AgentCore SDK를 사용해 SigV4 서명된 wss:// URL을 생성한다. 이 URL은 배포된 런타임 ARN에 한정되며 5분 후 만료된다. 자격증명은 사용자 기기 밖으로 나가거나 브라우저로 전달되지 않는다. 연결이 끊기면 사이드 패널이 2초 후 자동으로 새 URL을 요청해 재연결하므로 만료 창이 사용자에게 노출되지 않는다.
도구 탐색과 MCP 초기화: 에이전트는 각 사용자 메시지마다 tools/list를 호출해 도구 스키마 배열을 받는다. 각 스키마는 Strands AgentTool로 감싸이며, stream() 메서드가 브리지를 통해 tools/call 요청을 보낸다. MCP 서버에 도구를 추가하면 에이전트 코드 변경 없이 다음 요청부터 자동으로 사용 가능해진다. 도구 탐색 전에 에이전트는 표준 MCP 초기화 핸드셰이크를 수행하며, initialize 요청과 서버 응답, notifications/initialized 알림 교환이 완료된 후에야 tools/list·tools/call 요청이 수락된다.
MCP 브리지 내부 구조: 브리지는 두 개의 동시 루프를 운영한다. 메인 루프는 브라우저에서 메시지를 읽어 봉투를 벗기고 JSON-RPC 내용을 입력 큐에 놓는다. FastMCP 프록시가 이 큐에서 메시지를 가져와 MCP 서버 서브프로세스의 stdin으로 전달하고, 서버 stdout의 응답을 출력 큐에 쌓는다. 두 번째 백그라운드 루프는 출력 큐를 읽어 각 응답을 봉투로 감싸 브라우저로 보낸다. 이 이중 루프 설계 덕분에 느린 도구가 처리되는 동안에도 다음 요청 수신이 차단되지 않는다.

실제로 쓰려면
배포 시간은 약 15분으로 추정된다. 필요한 전제 조건은 다음과 같다.
- AWS: Bedrock 모델 접근이 활성화된 AWS 계정(코드는 Claude Opus 4.7 사용), AgentCore·CloudFormation·IAM 역할 생성·S3에 대한 IAM 권한, AWS CLI 자격증명 설정, CDK 부트스트랩 완료
- 소프트웨어: Python 3.10 이상, Node.js 20 이상, Google Chrome(Manifest V3 사이드 패널 지원), Git
- 설치 패키지: AgentCore CLI(
npm install -g @aws/agentcore), AWS CDK(npm install -g aws-cdk)
배포 순서는 GitHub 저장소(aws-samples/sample-mcp-bridge-agentcore) 클론 → Python 의존성 설치(./scripts/setup.sh) → agentcore create·agentcore deploy로 에이전트 생성 및 배포 → bridge/bridge_config.json에 런타임 ARN·리전 입력 → Chrome 확장 프로그램 로드 → ./manifests/install.sh <extension-id>로 네이티브 메시징 브리지 등록 순이다.
새 MCP 서버 추가는 mcp.json에 한 줄을 추가하는 것으로 완료된다. 브리지가 나머지 연결 작업을 처리한다.
비용: AgentCore 런타임은 호출당 과금으로 유휴 비용이 없으며, Bedrock 모델 사용은 Claude 표준 토큰당 가격이 적용된다. 브리지·확장 프로그램·MCP 서버는 로컬에서 실행되므로 추가 비용이 없다. 구체적인 단가는 소스에 명시되지 않았다.
보안 고려 사항과 한계
현재 샘플 구현에서 적용된 보안 조치는 세 가지다. 크롬이 네이티브 메시징 매니페스트의 allowed_origins에 명시된 확장 프로그램 ID만 연결을 허용하는 출처 제한, 5분 후 만료되는 SigV4 서명 프리사인드 URL, 그리고 확장 프로그램·브리지·MCP 서버가 각각 별도 OS 프로세스에서 공유 메모리 없이 실행되는 프로세스 격리다.
AWS는 프로덕션 환경에서 추가 조치를 권고한다. Amazon Cognito 등을 통한 JWT 핸드셰이크로 무단 사용을 차단하는 인증 레이어, Ed25519를 활용한 MCP 메시지 페이로드 서명, MCP 서버가 접근 가능한 디렉터리 허용 목록으로 파일 시스템 범위 제한, 도구 호출마다 이름·인수·타임스탬프·결과 상태를 로컬 파일에 기록하는 감사 로그가 그것이다. 이 아키텍처의 핵심 노출 지점은 브리지 자체로, 클라우드 에이전트의 지시를 받아 사용자의 파일 시스템 권한으로 로컬에서 실행된다.
현재 샘플의 네이티브 메시지 크기 제한은 네이티브 메시징 호스트→브라우저 방향 최대 1 MB, 브라우저→네이티브 메시징 호스트 방향 최대 64 MiB다. 프로덕션 배포를 위해 AWS는 PyInstaller로 브리지를 단독 실행 바이너리로 패키징해 Python 환경 없이도 동작하도록 하는 방식을 권고한다.



