Model Context Protocol 소개
Model Context Protocol (MCP) 심화 학습
프로토콜 개요
Model Context Protocol (MCP)은 애플리케이션이 대규모 언어 모델(LLM)에 컨텍스트를 제공하는 방법을 표준화하는 개방형 표준입니다. MCP를 AI 애플리케이션용 USB-C 포트처럼 생각해보세요—AI 모델을 다양한 데이터 소스와 도구에 연결하는 표준화된 방법을 제공합니다.
주요 이점
- 표준화된 통신 인터페이스
- 안전한 데이터 전송
- 확장 가능한 아키텍처 설계
- 크로스 플랫폼 호환성
- 실시간 컨텍스트 동기화
- 플러그인 기반 확장 지원
사용 사례
- 코드 분석 및 이해
- 문서 생성 및 유지보수
- 프로젝트 관리 통합
- 데이터베이스 쿼리 및 작업
- API 서비스 통합
- 워크플로우 자동화
아키텍처 설계
MCP 프로토콜 계층 아키텍처 및 구성 요소 개요
MCP 호스트
AI 애플리케이션
하나 또는 여러 MCP 클라이언트를 조정하고 관리하는 AI 애플리케이션
주요 책임:
- 여러 MCP 클라이언트 조정
- AI 모델 상호작용 관리
- 서버 응답 처리
- 세션 상태 처리
MCP 클라이언트
연결 관리자
MCP 서버에 대한 연결을 유지하고 MCP 호스트가 사용할 수 있도록 MCP 서버에서 컨텍스트를 가져오는 구성 요소
주요 책임:
- 일대일 서버 연결 유지
- 컨텍스트 쿼리 전송
- 서버 응답 처리
- 연결 생명주기 관리
MCP 서버
컨텍스트 제공자
도구, 리소스 및 프롬프트를 통해 MCP 클라이언트에 컨텍스트를 제공하는 프로그램
주요 책임:
- 클라이언트 연결 수락
- 컨텍스트 요청 처리
- 구조화된 데이터 반환
- 리소스 상태 유지
전송 계층
통신 채널
클라이언트와 서버 간의 통신 채널 및 인증 관리
주요 책임:
- 로컬 프로세스용 STDIO 전송
- 원격 서버용 HTTP 전송
- 메시지 프레이밍 및 직렬화
- 인증 및 보안
데이터 계층
프로토콜 정의
클라이언트-서버 통신을 위한 JSON-RPC 기반 프로토콜 정의
주요 책임:
- JSON-RPC 2.0 메시지 형식
- 생명주기 관리
- 프리미티브 정의 (도구, 리소스, 프롬프트)
- 알림 시스템
MCP 프리미티브
클라이언트와 서버가 서로에게 제공할 수 있는 것을 정의하는 핵심 프리미티브
도구
AI 애플리케이션이 작업을 수행하기 위해 호출할 수 있는 실행 가능한 함수
예시:
- 파일 작업 (읽기, 쓰기, 생성)
- 외부 서비스에 대한 API 호출
- 데이터베이스 쿼리 및 작업
- 코드 분석 및 컴파일
- 시스템 명령 실행
사용 가능한 메서드:
tools/list
tools/call
리소스
AI 애플리케이션에 컨텍스트 정보를 제공하는 데이터 소스
예시:
- 파일 콘텐츠 및 메타데이터
- 데이터베이스 레코드 및 스키마
- API 응답 및 문서
- Git 저장소 정보
- 구성 파일
사용 가능한 메서드:
resources/list
resources/read
프롬프트
언어 모델과의 상호작용을 구조화하는 데 도움이 되는 재사용 가능한 템플릿
예시:
- 특정 작업을 위한 시스템 프롬프트
- 학습을 위한 Few-shot 예제
- 코드 리뷰 템플릿
- 문서 생성 프롬프트
- 분석 및 요약 템플릿
사용 가능한 메서드:
prompts/list
prompts/get
전송 계층
클라이언트와 서버 간의 데이터 교환을 가능하게 하는 통신 메커니즘
STDIO 전송
직접 프로세스 통신을 위해 표준 입출력 스트림 사용
사용 사례:
- 동일한 머신의 로컬 MCP 서버
- 직접 프로세스 통신
- 네트워크 오버헤드 없는 최적 성능
- 간단한 설정 및 구성
예시:
npx @modelcontextprotocol/server-filesystem /path/to/files
STDIO를 통해 파일시스템 서버 시작
HTTP 전송
선택적 Server-Sent Events와 함께 클라이언트-서버 메시지에 HTTP POST 사용
사용 사례:
- 원격 MCP 서버
- 클라우드 기반 서비스
- Bearer 토큰을 사용한 인증
- 확장 가능한 서버 배포
예시:
https://api.example.com/mcp
HTTP를 통해 원격 MCP 서버에 연결
메시지 유형
MCP 프로토콜에서 지원하는 JSON-RPC 2.0 기반 메시지 유형
initialize
연결을 초기화하고 프로토콜 버전 및 기능 협상
메시지 예시:
{ "method": "initialize", "params": { "protocolVersion": "2025-06-18", "capabilities": { "tools": {}, "resources": {} }, "clientInfo": { "name": "gemini-cli", "version": "1.0.0" } } }
tools/list
서버에서 사용 가능한 도구 발견
메시지 예시:
{ "method": "tools/list", "params": {} }
tools/call
제공된 인수로 특정 도구 실행
메시지 예시:
{ "method": "tools/call", "params": { "name": "com.example.weather/current", "arguments": { "location": "San Francisco", "units": "imperial" } } }
resources/list
사용 가능한 리소스 목록 가져오기
메시지 예시:
{ "method": "resources/list", "params": {} }
resources/read
특정 리소스 콘텐츠 읽기
메시지 예시:
{ "method": "resources/read", "params": { "uri": "file:///path/to/file.ts" } }
prompts/list
사용 가능한 프롬프트 템플릿 가져오기
메시지 예시:
{ "method": "prompts/list", "params": {} }
notifications/tools/list_changed
사용 가능한 도구가 변경될 때 클라이언트에 알림
메시지 예시:
{ "method": "notifications/tools/list_changed" }
도구 정의 예시
MCP 프로토콜에서 도구가 정의되는 방법의 예
날씨 도구 정의
이 예시는 적절한 입력 스키마 검증과 문서화를 포함한 날씨 도구가 어떻게 정의되는지 보여줍니다.
// MCP 工具定义示例 { "name": "com.example.weather/current", "title": "Get Current Weather", "description": "Get current weather information for a specified location", "inputSchema": { "type": "object", "properties": { "location": { "type": "string", "description": "The location to get weather for" }, "units": { "type": "string", "enum": ["metric", "imperial"], "description": "Temperature units", "default": "metric" }, "include_forecast": { "type": "boolean", "description": "Whether to include forecast data", "default": false } }, "required": ["location"] } }
주요 구성 요소:
- name: 도구의 고유 식별자
- title: 사람이 읽을 수 있는 표시 이름
- description: 기능에 대한 자세한 설명
- inputSchema: 입력 검증을 위한 JSON Schema
모범 사례:
- 네임스페이스가 있는 도구 이름 사용 (예: com.example.weather/current)
- 명확하고 설명적인 문서 제공
- 포괄적인 입력 스키마 정의
- 적절한 곳에 기본값 포함
통신 흐름
MCP 클라이언트와 서버 간의 완전한 통신 흐름
연결 초기화
클라이언트가 연결을 설정하고 서버와 기능을 협상
세부 단계:
- 클라이언트가 프로토콜 버전과 함께 초기화 요청 전송
- 서버가 지원되는 기능으로 응답
- 양측이 통신 매개변수 협상
- 합의된 프로토콜 버전으로 연결 설정
기능 발견
클라이언트가 사용 가능한 도구, 리소스 및 프롬프트 발견
세부 단계:
- 사용 가능한 도구 목록 요청 (tools/list)
- 사용 가능한 리소스 요청 (resources/list)
- 사용 가능한 프롬프트 요청 (prompts/list)
- 효율적인 액세스를 위해 기능 정보 캐시
컨텍스트 교환
클라이언트가 리소스에서 컨텍스트 데이터를 요청하고 수신
세부 단계:
- 리소스 읽기 요청 전송 (resources/read)
- 다양한 형식의 구조화된 데이터 수신
- 필요에 따라 데이터 형식 변환 처리
- 수신된 정보로 로컬 컨텍스트 업데이트
도구 실행
클라이언트가 작업을 수행하기 위해 서버 도구를 호출
세부 단계:
- 도구 호출 요청 구성 (tools/call)
- 적절한 검증과 함께 필수 매개변수 전달
- 서버에서 실행 결과 대기
- 반환된 데이터 처리 및 오류 처리
실시간 업데이트
알림을 통해 동기화 유지
세부 단계:
- 리소스 변경 알림 수신
- 도구 목록 업데이트를 동적으로 처리
- 연결 중단을 우아하게 처리
- 필요시 연결 재설정
보안 기능
MCP 프로토콜의 보안 메커니즘 및 보호 조치
인증
여러 인증 메커니즘 지원
지원되는 방법:
- API 키 인증
- OAuth 2.0 플로우
- Bearer 토큰
- 사용자 정의 인증 헤더
권한 부여
세밀한 권한 관리
지원되는 방법:
- 리소스 수준 권한
- 작업 유형 제한
- 시간 기반 액세스 제어
- 속도 제한 및 할당량
데이터 보호
엔드투엔드 데이터 보안
지원되는 방법:
- TLS/SSL 전송 암호화
- 메시지 콘텐츠 암호화
- 민감한 데이터 마스킹
- 보안 키 관리
감사 및 모니터링
포괄적인 작업 추적
지원되는 방법:
- 요청/응답 로깅
- 권한 확인 기록
- 오류 및 예외 추적
- 성능 메트릭 수집
시작하기
Gemini CLI와 함께 MCP 사용을 시작할 준비가 되셨나요? 이러한 리소스를 탐색해보세요