# Gemini + MCP 데모 스크립트 v2: MCP 기본 개념 ## MCP(Model Context Protocol)란? MCP는 **LLM과 외부 도구/데이터 소스를 연결하기 위한 표준 프로토콜**이다. ### 기존 문제점 LLM을 실용적으로 사용하려면 외부 시스템과 연결이 필수다: - 파일 시스템 접근 - 데이터베이스 쿼리 - API 호출 - 웹 검색 하지만 각 LLM 프레임워크마다 다른 방식으로 이를 구현했다: - Langchain: Custom tools - LlamaIndex: Custom tools - OpenAI: Function calling - 각 프레임워크마다 다른 인터페이스 **문제**: 도구를 재사용하기 어렵고, 플랫폼 종속적이다. ### MCP의 해결책 MCP는 **표준화된 프로토콜**을 제공한다: ``` ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ │ │ │ │ LLM Client │ ◄──MCP──►│ MCP Server │ ◄───────►│ External │ │ (Gemini) │ │ (Vercel) │ │ System │ │ │ │ │ │ (Vercel API)│ └─────────────┘ └──────────────┘ └──────────────┘ ``` ### MCP의 핵심 개념 #### 1. Server - 실제 도구/데이터를 제공하는 주체 - 하나 이상의 **tools**를 expose - 다양한 transport 방식 지원 #### 2. Client - LLM을 사용하는 애플리케이션 - MCP server에 연결하여 tools 사용 - Tool 호출 결과를 LLM에 전달 #### 3. Tools - Server가 제공하는 개별 기능 - 각 tool은 schema를 가짐 (이름, 설명, 파라미터) - JSON Schema로 정의됨 #### 4. Transport - Client와 Server 간 통신 방식 - **stdio**: 표준 입출력 (로컬 프로세스) - **HTTP**: HTTP/HTTPS 통신 (네트워크) ## Transport 방식 비교 ### stdio Transport ```typescript // 로컬 프로세스로 MCP server 실행 const server = spawn('mcp-server-filesystem', { stdio: ['pipe', 'pipe', 'inherit'] }); ``` **장점**: - 빠른 통신 속도 - 간단한 로컬 도구에 적합 **단점**: - 로컬 환경에서만 동작 - 원격 접근 불가 - 브라우저에서 사용 불가 ### HTTP Transport ```typescript // HTTP로 MCP server에 연결 const response = await fetch('https://mcp.example.com/tools/list'); ``` **장점**: - 원격 접근 가능 - 브라우저/서버 양쪽에서 사용 - 방화벽 친화적 - 확장성 좋음 **단점**: - 네트워크 레이턴시 - 인증/보안 고려 필요 ## 왜 HTTP Transport를 선택했는가? 이 프로젝트에서 HTTP transport를 선택한 이유: ### 1. 범용성 - Node.js, 브라우저, Deno 등 어디서나 동작 - 특별한 권한 없이 사용 가능 ### 2. Vercel MCP Server - Vercel이 제공하는 공식 MCP server - HTTP transport로 공개됨 - 별도 설치/설정 불필요 ### 3. 실무 활용성 - 프로덕션 환경에서도 사용 가능 - Load balancing, caching 등 HTTP 생태계 활용 - 마이크로서비스 아키텍처와 잘 맞음 ## MCP 프로토콜 기본 플로우 ### 1. Server Discovery ```json GET /mcp/tools Response: { "tools": [ { "name": "get_deployments", "description": "Get Vercel deployments", "inputSchema": { "type": "object", "properties": { "projectId": { "type": "string" } } } } ] } ``` ### 2. Tool Invocation ```json POST /mcp/tools/invoke Request: { "name": "get_deployments", "arguments": { "projectId": "prj_abc123" } } Response: { "result": { "deployments": [...] } } ``` ### 3. LLM Integration Client는 이 결과를 LLM에 전달하여 다음 행동을 결정한다. ## MCP의 장점 정리 1. **표준화**: 한번 만든 server는 어디서나 사용 2. **재사용성**: 기존 MCP server 라이브러리 활용 가능 3. **독립성**: LLM 프레임워크에 종속되지 않음 4. **확장성**: 새로운 tool 추가가 쉬움 ## 다음 단계 v3에서는 Gemini SDK가 제공하는 기능을 탐색하고, MCP와 어떻게 통합할 수 있을지 살펴볼 것이다. --- **작성일**: 2025-11-26 **참고**: [MCP 공식 문서](https://modelcontextprotocol.io)