본문으로 건너뛰기

AgentCore와 로컬 MCP 도구를 연결하는 MCP 브리지

브라우저 확장과 네이티브 메시징으로 AgentCore 에이전트가 로컬 MCP 서버의 도구를 표준 MCP JSON‑RPC로 호출하도록 구현했다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

클라우드에 배포된 Strands 에이전트가 사용자의 로컬 MCP 서버 도구를 호출하도록 브라우저 확장과 Native Messaging을 결합한 MCP 브리지를 구현했다. 브리지는 브라우저의 JSON envelope과 MCP 표준 JSON‑RPC 간을 변환하고 FastMCP 프록시와 입출력 큐로 비동기 처리 병목을 완화한다. presigned SigV4 WebSocket으로 자격 증명을 브라우저에 노출하지 않으면서 중앙 에이전트를 로컬 파일과 도구에 안전하게 접근시키는 패턴을 제시한다.

섹션별 상세

원격에 호스팅된 에이전트가 사용자의 로컬 파일과 도구를 호출해야 하는 문제는 금융 직군처럼 로컬 Excel과 파일을 주로 사용하는 워크플로에서 발생한다. 이 글은 AgentCore에 배포된 Strands 에이전트가 로컬 MCP 서버를 호출하도록 브라우저 확장과 네이티브 메시징을 결합한 MCP 브리지를 구축한 과정을 단계별로 보여준다. 전체 목표는 자격 증명을 브라우저에 노출하지 않으면서 표준 MCP JSON‑RPC 메시지를 터널링해 중앙화된 에이전트를 로컬 도구에 안전하게 접근시키는 것이다.
근거
  • 내부에서 구축한 생산용 어시스턴트는 출시 후 1년 내에 41,000건 이상의 대화를 처리했다. 본문 초반부에서 'In this post, we recreate what we built internally' 직후에 내부 시스템의 운영 통계가 언급됨.
아키텍처는 네 요소로 구성된다: 클라우드의 AgentCore 런타임(에이전트 클라이언트), 사용자의 브라우저 확장, 로컬에 실행되는 MCP Bridge(프록시), 그리고 stdio로 통신하는 로컬 MCP 서버다. 브라우저 확장은 WebSocket을 통해 AgentCore와 통신하고 native messaging을 통해 브리지와 통신해 메시지 래핑을 전달·해제한다. 이 배치로 에이전트는 tools/list와 tools/call 같은 표준 MCP 호출을 통해 로컬 도구를 동적으로 발견하고 호출할 수 있다.
AgentCore 런타임, 브라우저 확장, MCP Bridge, 로컬 MCP 서버 간 메시지 흐름을 보여주는 아키텍처 다이어그램
Diagram다이어그램은 WebSocket을 통한 런타임 연결과 native messaging을 통한 브리지 호출 등 각 통신 채널을 명확히 구분한다. 메시지 래핑과 언래핑 단계, 그리고 각 컴포넌트의 역할(에이전트는 클라이언트, 브리지는 프로토콜 번역기)을 시각적으로 전달해 구현자의 전반적 설계 이해를 돕는다. 아키텍처는 보안 경계와 프로세스 분리를 강조하므로 운영 리스크 분석에 유용하다.
근거
  • 브리지 설계는 브라우저→브리지→MCP 서버로 이어지는 메시지 경로에서 각 홉이 하나씩 래핑을 제거하도록 구현되어 있다. 본문의 표 형식 예시에서 Agent→Extension→Bridge→MCP Server로 메시지가 이동하며 단계별로 envelope가 제거되는 흐름을 보여줌.
AgentCore의 Strands 에이전트는 presigned SigV4 WebSocket을 통해 확장과 연결하고 MCP 초기화(프로토콜 버전 교환과 initialized 알림)를 수행한 뒤 tools/list로 도구 스키마를 가져온다. 각 도구 스키마는 스트림 가능한 AgentTool로 래핑되어 stream() 호출 시 MCP JSON‑RPC tools/call 요청을 생성한다. 요청별로 고유 ID를 부여하고 (session_id, jsonrpc_id)로 Future를 매핑해 응답을 비동기적으로 상관시켜 다중 동시 호출을 명확히 처리한다.
근거
  • presigned WebSocket URL은 브리지에서 SigV4로 서명되며 기본 만료 시간은 5분이다. WebSocket 연결 설명에서 presigned URL 생성과 5분 유효 기간이 명시되어 있음.
브라우저와 로컬 프로세스 간 장기 연결을 위해 Chrome의 Native Messaging을 활용한다. 확장은 사전 등록된 매니페스트로 로컬 런처 스크립트를 실행하고 stdio 기반의 바이너리와 길이 헤더가 붙은 UTF‑8 JSON 메시지로 주고받는다. 이 방식은 브라우저에 네트워크 권한을 추가하지 않고도 확장과 로컬 브리지를 안전하게 연결하며, 브리지는 최대 메시지 크기 제한(호스트→브라우저 1MB, 브라우저→호스트 64MiB)을 준수한다.
json
{
  "name": "com.example.mcp_bridge",
  "description": "MCP Bridge - Routes MCP messages to local servers",
  "path": "/path/to/mcp-bridge-demo/bridge/run_bridge.sh",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension:///"
  ]
}

이 JSON 매니페스트는 Chrome의 Native Messaging 호스트 등록에 사용되는 파일로, 브라우저가 확장을 통해 로컬 브리지 바이너리를 실행하도록 매핑한다. 매니페스트는 실행 경로와 stdio 통신 타입, 허용된 확장 ID를 포함하므로 브리지 프로세스가 확장으로부터만 호출되게 제한하는 초권한 제어가 가능하다. 매니페스트를 올바른 위치에 설치해야 브라우저가 연결 시 호스트를 자동으로 시작한다.

bash
#!/bin/bash
cd "/path/to/mcp-bridge-demo/bridge"
source .venv/bin/activate
exec python3 bridge.py

run_bridge.sh은 매니페스트가 가리키는 런처 스크립트로, 가상환경을 활성화한 뒤 브리지 파이썬 프로세스를 실행한다. 이 스크립트가 있으면 사용자가 별도 Python 설치나 수동 환경 설정 없이 확장이 브리지 프로세스를 시작할 수 있다. 프로덕션에서는 이 스크립트를 대신 독립 실행 파일을 가리키도록 매니페스트를 변경하는 것이 권장된다.

MCP Bridge는 브라우저의 원형 메시지(envelope)와 MCP 표준 JSON‑RPC 간의 프로토콜 번역기로 동작한다. 브리지는 stdin에서 4바이트 길이 헤더를 떼어 JSON 바디를 파싱하고 내부 FastMCP 프록시의 입력 큐로 JSON‑RPC를 넣는다; 프록시는 로컬 MCP 서버의 stdin으로 전달하고 stdout에서 돌아온 응답을 출력 큐에 적재한다. 출력 소비 루프는 응답을 다시 envelope로 감싸 stdout에 쓰므로 브리지가 브라우저의 요청 타이밍과 로컬 도구 처리 속도를 비동기적으로 분리한다.
json
{
  "mcpServers": {
    "excel": {
      "command": "python3",
      "args": ["excel_server.py"]
    }
  }
}

mcp.json은 브리지가 시작 시 자식 프로세스로 실행할 로컬 MCP 서버를 구성하는 간단한 설정 파일이다. 서버 명과 실행 명령을 지정하면 브리지가 생애주기 동안 해당 프로세스를 유지해 요청당 프로세스 생성 오버헤드를 제거한다. 신규 도구를 추가할 때 이 파일에 한 줄을 추가하면 브리지를 다시 빌드하지 않고도 서버를 연결할 수 있다.

브리지 내부 구성으로 I/O 큐와 FastMCP 프록시, 네이티브 메시지 리더·응답 소비 루프를 보여주는 다이어그램
Diagram이 그림은 브리지가 두 개의 비동기 루프와 입출력 큐로 브라우저 요청 타이밍과 로컬 MCP 서버 처리 속도를 분리하는 설계라는 것을 기술적으로 보여준다. FastMCP 프록시가 stdin/stdout을 통해 자식 MCP 서버와 상호작용하며 응답을 출력 큐로 되돌리는 흐름이 명확하다. 설계는 요청 블로킹을 방지하고 병렬 도구 호출을 안전하게 처리하도록 구조화되어 있음을 알 수 있다.
배포 절차는 저장소 복제, 의존성 설치, AgentCore 에이전트 생성·배포, 브리지 구성 파일에 런타임 ARN 입력, Chrome 확장 로드, 네이티브 메시징 등록 순서로 진행된다. 브리지는 로컬 AWS 자격 증명을 사용해 presigned WebSocket URL을 생성하므로 별도 토큰 관리는 불필요하다. 테스트 단계에서는 확장 사이드패널이 자동으로 런타임에 연결하고 tools/list로 도구를 검색해 파일 생성·읽기 같은 예제 질의를 실행해 기능을 확인할 수 있다.
bash
git clone https://github.com/aws-samples/sample-mcp-bridge-agentcore.git
cd mcp-bridge-demo
chmod +x scripts/setup.sh manifests/install.sh
./scripts/setup.sh

이 셸 명령은 저장소를 복제하고 로컬 설정 스크립트를 실행해 예제 브리지와 MCP 서버 샘플을 준비한다. 저장소에는 확장, 브리지, 샘플 MCP 서버 및 배포 지침이 포함되어 있어 로컬에서 재현 가능한 데모 환경을 빠르게 구축할 수 있다. 실제 배포 전 스크립트가 요구하는 Python 및 Node 버전, AWS 자격 증명을 먼저 확인해야 한다.

MCP Bridge Demo 확장판넬이 로컬 Excel 워크북을 요약한 사이드패널 화면
Screenshot확장판넬이 AgentCore 호스팅 에이전트로부터 스트리밍된 구조화된 요약을 실시간으로 표시하는 장면이다. 화면은 에이전트가 로컬 파일의 내용을 MCP Bridge를 통해 읽고 요약 결과를 다시 브라우저로 보낸다는 흐름을 직관적으로 확인하게 해준다. 데모는 사용자 파일이 로컬에 남아 있음을 유지하면서 중앙 에이전트가 파일 내용을 활용할 수 있음을 시각적으로 입증한다.
보안 관점에서는 현재 구조가 기본적 보호만 제공하므로 운영 환경에서는 추가 인증·서명·파일 범위 제한·감사 로깅을 권장한다. 제안된 보강책으로는 WebSocket 첫 프레임에서 JWT 핸드셰이크를 요구해 presigned URL 유출 리스크를 줄이고, MCP 페이로드에 Ed25519 서명을 도입해 변조 여부를 검증하며, 파일 시스템 접근을 허용 목록으로 한정하고 모든 도구 호출을 로컬 로그로 기록하는 방법이 있다. 이런 보강은 원격 에이전트가 로컬 권한을 오남용할 가능성을 낮춘다.

용어 해설

Model Context Protocol (MCP)
MCP는 모델과 외부 도구를 표준화된 JSON-RPC 방식으로 연결하는 프로토콜로, stdio와 HTTP 스트리밍을 전송 수단으로 지원한다. 에이전트가 원격에서 실행될 때 로컬 도구를 안전하게 호출하도록 패킷 포맷과 초기화·도구 목록 조회 흐름을 규정해 상호운용성을 제공한다.
Native Messaging(Native Messaging (Chrome))
Native Messaging은 브라우저 확장이 로컬 바이너리를 stdio 기반으로 실행하고 길이 헤더가 붙은 UTF‑8 JSON 메시지로 통신하는 방식이다. 확장은 사전 등록된 매니페스트를 통해 호스트를 시작하고 별도 네트워크 권한 없이 로컬 프로세스와 장기 연결을 유지할 수 있다.
Presigned WebSocket (SigV4)
SigV4로 서명한 presigned WebSocket URL은 사용자의 로컬 자격 증명을 이용해 일시적 접근을 부여하는 방식이다. 브리지에서 URL을 만들고 확장판넬은 해당 URL로 wss 연결을 열어 자격 증명을 브라우저에 노출하지 않고도 AgentCore 런타임과 안전하게 통신한다.

기술

  • Claude Opus 4.7
  • Amazon Bedrock AgentCore
  • Strands Agents SDK
  • AgentCore CLI
  • Python 3.10+
  • Node.js 20+
  • AWS CDK

활용 사례

  • 로컬 Excel 통합 문서를 에이전트가 원격에서 요약·편집하도록 하는 워크플로.
  • 로컬 Git 저장소에 대한 에이전트 기반 자동화(체크아웃·커밋·로그 조회 등).
  • 브라우저 확장을 통한 페이지 상호작용 자동화(클릭·폼 입력·스크린샷)와 에이전트 연결.

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 06.수집 2026. 08. 06.출처 타입 RSS

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.