본문으로 건너뛰기

MCP, Model Context Protocol

· 약 7분

MCP 개요

MCP 개념

  • AI 모델이 외부 데이터 소스 및 도구와 원활하게 통합될 수 있도록 하는 개방형 프로토콜
  • 2024년 11월에 Anthropic에서 오픈 소스로 공개, AI 생태계에서 USB-C 포트와 같은 역할을 수행

MCP 등장배경

  • 정보 사일로, 데이터 고립 해결
  • AI 모델 통합시 각 데이터소스마다 사용자 정의 코딩으로 인한 비효율 -> AI 시스템의 활용 범위 제한
  • AI 에이전트와 에이전틱 워크플로우 발전 -> 실제 비즈니스 시스템과 데이터의 통합 필요성 대두

MCP 구성도, 구성요소, 활용방안

MCP 구성도

MCP

MCP 구성요소

구분설명기능
호스트LLM 애플리케이션으로, MCP 연결 시작점사용자로부터 질문이나 명령을 받아 모델에게 전달하고, 모델의 응답을 사용자에게 보여주는 전체 흐름 조율
클라이언트호스트 애플리케이션 내에서 서버와 1:1 연결을 유지서버로 요청을 보내고 응답을 받아 모델에 전달
MCP 서버클라이언트에 컨텍스트, 도구, 프롬프트를 제공각 서버는 특정 기능을 표준화된 모델 컨텍스트 프로토콜을 통해 노출
MCP 리소스AI가 컨텍스트로 불러올 수 있는 데이터 소스파일, 문서 또는 데이터베이스 쿼리와 같은 데이터 소스 접근 제공
MCP 도구AI가 수행할 수 있는 작업API 호출을 하거나 명령을 실행하는 것과 같은 기능 제공
프롬프트LLM 상호작용을 위한 재사용 가능한 템플릿특정 시나리오에서 AI의 행동을 안내
통신 프로토콜JSON-RPC 2.0 기반 표준 메시지 형식클라이언트와 서버 간의 통신 규약 정의
전송 레이어표준 입출력(stdin/stdout) 또는 HTTP(SSE)클라이언트와 서버 간의 통신 채널 제공

MCP 활용방안

구분내용사례
기업용 솔루션기업 내부 데이터 접근 및 통합Slack(대화 기록, 채널 정보), Google Drive(문서 검색), 데이터베이스(Postgres, SQLite) 등 업무 도구 통합
개발 도구코드 컨텍스트 및 개발 환경 통합GitHub, Sourcegraph, Replit, Codeium, Zed 등 개발 플랫폼과 통합, 코드 리포지토리 상호작용
개인 생산성개인 정보 관리 및 자동화이메일 관리(Gmail), 캘린더, 작업 관리, Puppeteer를 통한 웹 브라우징
데이터 분석데이터 소스 접근 및 분석멀티모달 데이터 분석, 모니터링 시스템(Cloudflare, Sentry) 통합
AI 에이전트 개발복잡한 워크플로우 자동화RAG(Retrieval-Augmented Generation) 시스템, 복잡한 작업 조정을 위한 AI 에이전트 프레임워크
보안 및 규정 준수안전한 데이터 접근 및 통제민감한 데이터에 대한 제어된 접근, 권한 관리, 감사 로깅

MCP, LSP 차이점

MCP는 LSP, Language Server Protocol에서 영감 받음

구분LSPMCP
목적개발 도구와 언어 서버 간 통신 표준화AI 모델과 외부 데이터 소스 및 도구 간 통합 표준화
활용 영역코드 편집기, IDE에서 언어 기능 제공AI 애플리케이션에서 외부 데이터 접근 및 도구 활용
핵심 기능자동 완성, 정의로 이동, 오류 진단 등컨텍스트 제공, 도구 호출, 데이터 접근 등
아키텍처클라이언트(편집기)-서버(언어 서비스)클라이언트(AI 앱)-서버(데이터 소스/도구)
통신 방식JSON-RPC 2.0JSON-RPC 2.0
통신 채널stdin/stdout, 명명된 파이프, 소켓(TCP)stdin/stdout, HTTP + SSE(Server-Sent Events)
개발 주체MicrosoftAnthropic
공개 시기2016년2024년 11월
영감 출처V8 디버거 프로토콜부분적으로 LSP에서 영감을 받음
주사용자프로그래밍 언어 서비스 개발자, 도구 제작자AI 모델 개발자, 데이터 통합 엔지니어

MCP 예시 코드

#!/usr/bin/env node
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import {
ListToolsRequestSchema,
CallToolRequestSchema,
McpError,
ErrorCode
} from "@modelcontextprotocol/sdk/types.js";

// MCP 서버 인스턴스 생성
const server = new Server({
name: "mcp-simple-server",
version: "1.0.0",
});

// 도구 목록 제공 핸들러
server.setRequestHandler(ListToolsRequestSchema, async () => {
return {
tools: [{
name: "calculate_sum",
description: "두 숫자를 더합니다",
inputSchema: {
type: "object",
properties: {
a: { type: "number" },
b: { type: "number" }
},
required: ["a", "b"]
}
}]
};
});

// 도구 호출 핸들러
server.setRequestHandler(CallToolRequestSchema, async (request) => {
if (request.params.name === "calculate_sum") {
const { a, b } = request.params.arguments;
return { toolResult: a + b };
}

throw new McpError(ErrorCode.ToolNotFound, "도구를 찾을 수 없습니다");
});

// 표준 입출력을 통한 MCP 서버 연결
const transport = new StdioServerTransport();
await server.connect(transport);