
여러 데이터 저장소에 액세스하기 위해 MCP 에이전트를 사용하는 방법
요약
Agent2Agent(A2A) 프로토콜을 활용하여 서로 다른 데이터 소스를 쿼리하는 MCP 에이전트 구축 방법을 설명합니다. Bronto REST API와 SQLite를 MCP 서버로 래핑하여 Claude가 통합적으로 데이터를 분석하는 과정을 다룹니다.
핵심 포인트
- MCP를 통한 이기종 데이터 소스의 통합 쿼리 구현
- FastMCP를 사용하여 API 및 DB를 MCP 도구로 노출
- A2A 프로토콜 기반의 에이전트 간 데이터 상호작용
- 퇴사 프로세스 자동화와 같은 실무 시나리오 적용 가능성
David Tracey 작성
이 글은 Agent2Agent (A2A) 프로토콜 및 에이전트 기반 데이터 쿼리(agentic data querying)에 관한 3부작 시리즈 중 제2부입니다. 제1부에서는 A2A 개념을 소개하고 기본적인 에이전트를 구축하는 방법을 보여주었습니다. 이 포스트에서는 서로 다른 데이터 소스를 쿼리하는 두 개의 간단한 MCP 에이전트를 생성하고, Claude를 사용하여 그 출력값을 분석하는 것이 얼마나 쉬운지 보여줍니다.
시나리오: 직원이 퇴사할 때, IT 부서는 해당 직원의 세부 정보가 확인되었는지, 그리고 모든 시스템(이 경우에는 HR 데이터베이스와 로깅 플랫폼)에서 액세스 권한이 제거되었는지 확인해야 합니다. 전통적으로 IT 담당자는 맞춤형 도구를 사용하여 각 시스템을 개별적으로 확인해야 했습니다. 우리는 MCP가 이를 어떻게 획기적으로 단순화하는지 보여줄 것입니다.
아키텍처 개요 (Architecture Overview)
우리는 다음을 생성할 것입니다:
- Bronto에서 사용자를 가져오기 위한 Bronto REST API 클라이언트
- HR 데이터를 나타내는 SQLite 데이터베이스 서버
- 각 데이터 소스를 래핑(wrapping)하는 두 개의 MCP 서버
- 쿼리에 답변하기 위해 두 MCP 서버를 모두 사용하는 Claude의 시연
여기서 사용된 Bronto REST API 클라이언트를 테스트하려면 14일 무료 체험을 설정할 수 있습니다.
1단계: Bronto REST API 클라이언트 생성하기
# bronto_client.py
import json
import logging
...
실행 방법:
python -m venv ./env && source ./env/bin/activate && pip install requests
python bronto_client.py
이렇게 하면 귀하의 Bronto 계정에 있는 모든 사용자가 포함된 JSON 응답이 반환됩니다:
{
"users": [
{
...
2단계: 간단한 직원 데이터베이스 생성하기
SQLite를 설치하고(Mac의 경우 brew install sqlite 사용), 데이터베이스를 생성합니다:
sqlite3 bronto_employee.db
CREATE TABLE Employee (
Id INTEGER PRIMARY KEY AUTOINCREMENT,
FirstName TEXT NOT NULL,
...
3단계: 두 소스를 MCP 서버로 래핑하기
3단계: 두 소스를 MCP 서버로 래핑하기
각 데이터 소스를 MCP 도구(tool)로 노출하기 위해 FastMCP를 사용할 것입니다.
Bronto MCP 서버
# mcp-bronto-user-get.py
import json
from requests import Session
...
서버 실행하기:
python -m venv ./env && source ./env/bin/activate && pip install fastmcp
fastmcp run mcp-bronto-user-get-server.py:mcp --transport sse --port 8080 --host 0.0.0.0
SQLite 직원 MCP 서버
# sqlite-server.py
from fastmcp import FastMCP
import sqlite3
...
포트 8081에서 서버 실행하기:
FastMCP run -p 8081 -t sse sqlite-test-server.py
MCP 서버 검사(Inspecting)
FastMCP CLI에는 유용한 inspect 명령어가 있습니다:
FastMCP inspect sqlite-test-server.py
이 명령어는 사용 가능한 도구, 프롬프트, 리소스 및 전체 검사 로그를 보여줍니다.
4단계: 두 서버를 Claude에 연결하기
Claude를 로컬에 설치한 다음, 두 MCP 서버 모두를 Claude의 설정 파일에 추가합니다. Mac의 경우: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"EmployeeDB": {
...
Settings → Developer → Local MCP Servers에서 서버들이 Claude에 로드되었는지 확인합니다.
5단계: 하나의 프롬프트로 두 데이터 소스 질의하기
Claude에 다음 프롬프트를 입력하세요:
Bronto 직원을 보여주고, 그들이 Bronto 사용자 계정을 가지고 있는지 확인한 후 발견한 내용을 요약해 주세요.
Claude는 두 MCP 서버를 모두 사용하며 다음과 유사한 결과를 반환합니다:
Bronto 직원 및 사용자 계정 요약
직원 데이터베이스: 총 4명의 직원이 있습니다.
Bronto 사용자 계정: 활성 사용자 계정 8개가 있습니다.
Bronto 계정을 가진 직원 (4명 중 3명):
- Paul McCartney — 2개 계정 (@beatles.io, @wings.io) — 관리자(Admin) 역할
- George Harrison — 2개 계정 (@beatles.io, @wilburys.io) — 관리자(Admin)
- John Lennon — 4개 계정 (다양한 도메인) — 관리자/읽기 전용(Admin/ReadOnly) 역할
Bronto 계정이 없는 직원:
- Ringo Starr — 사용자 계정 없음
주요 발견 사항:
- 75% 커버리지 (coverage) — 4명의 직원 중 3명이 Bronto 계정을 보유함
- 대부분의 직원이 여러 개의 계정을 보유 (테스트용 또는 서로 다른 환경일 가능성이 높음)
- 직원 명단에 없는 추가 사용자들은 외부 계약업체이거나 직원 명단이 불완전함을 시사함
이것이 중요한 이유
이 간단한 데모가 보여주듯, MCP를 사용하면 데이터를 전혀 이동시키지 않고도 단일 LLM 프롬프트에서 여러 개의 이질적인 데이터 소스 (data sources)를 쉽게 쿼리할 수 있습니다. 로그는 Bronto(대규모 환경에서의 빠른 검색에 최적화됨)에 그대로 머물고, HR 데이터는 SQL(표 형식 쿼리에 최적화됨)에 그대로 머뭅니다. 각 데이터 소스는 해당 소스에 맞게 특수 제작된 에이전트 (agent)에 의해 액세스됩니다.
이러한 이점은 데이터 저장소와 에이전트의 수가 늘어날수록 복리로 커집니다.
Part 3에서는 A2A를 추가하여 이 시나리오를 확장할 예정입니다. 이를 통해 Claude를 조정자 (coordinator)로 의존하지 않고도, 이러한 데이터 소스 에이전트들을 자율적으로 발견하고 오케스트레이션 (orchestrate)할 수 있는 "SuperAgent"를 구현하게 됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기