MCP란?
Model Context Protocol
•
LLM에 컨텍스트를 제공하는 방법을 표준화하는 개방형 프로토콜
•
LLM(Large Language Model) 애플리케이션과 외부 데이터 소스 및 도구들 간의 원활한 통합을 가능하게 하는 개방형 프로토콜
목적
1.
데이터 및 도구 통합 표준화
•
LLM이 다양한 데이터 소스(예: 파일 시스템, 데이터베이스, API 등) 및 도구(예: 개발 환경, 협업 툴 등)와 연결될 때 각각의 커스텀 통합 방식 대신 단일 표준 인터페이스를 제공하여 개발 복잡성을 대폭 줄인다.
•
LLM이 직접 연결할 수 있는 사전 구축된 통합의 증가하는 목록
•
LLM 공급자와 벤더 간 전환의 유연성
•
인프라 내에서 데이터를 보호하기 위한 모범 사례
•
사전 구축 통합
◦
MCP는 파일 시스템, 데이터베이스(PostgreSQL, SQLite), 개발 도구(Git, GitHub, GitLab), 네트워크 도구(Brave Search, Fetch), 생산성 도구(Slack, Google Maps) 등을 포함한 다수의 사전 제작된 서버 통합을 제공한다.
2.
실시간 컨텍스트 제공 및 LLM 전환 지원
•
MCP가 LLM의 한계를 보완하기 위해 최신 컨텍스트 정보를 실시간으로 제공하고, 특정 LLM에 종속되지 않고 유연하게 전환할 수 있도록 지원한다.
•
MCP를 사용하면 전체 애플리케이션의 통합 로직을 다시 작성할 필요가 없다. 단지 하위 모델을 변경하면, 모든 데이터 및 도구 통합은 그대로 유지된다.
3.
도구와 기능 노출
•
AI 시스템에 로컬 또는 원격 도구들을 안전하게 노출
•
표준화된 방식으로 기능을 정의하고 호출
•
도구의 능력을 명확하게 기술하고 제어
4.
통합 워크플로우 구축
•
여러 데이터 소스와 도구를 조합한 워크플로우 생성
•
재사용 가능한 프롬프트 템플릿 제공
•
모듈식 구성을 통한 유연한 확장
주요 특징
1.
JSON-RPC 기반 양방향 통신
•
표준 JSON-RPC 2.0 메시지 포맷 사용
•
상태 기반 연결 및 유틸리티(진행 추적, 오류 처리 등)를 지원
•
서버와 클라이언트 간 능력 협상
•
MCP가 LLM과 외부 시스템 간의 지속적인 양방향 연결을 유지한다
2.
보안 중심 설계
•
MCP 구현 시 사용자 동의, 데이터 프라이버시, 접근 제어 등을 최우선으로 고려
•
데이터 프라이버시 보호
•
도구 사용에 대한 명시적 승인 필요
3.
유연한 확장성
•
미리 구축된 다양한 커넥터와 SDK를 통해 손쉽게 확장 가능
•
다양한 리소스 타입 지원
•
커스텀 도구 및 프롬프트 정의 가능
•
표준화된 방식의 기능 확장
아키텍처
•
MCP: 호스트 애플리케이션, 클라이언트, 서버 간의 표준화된 통신을 위한 프로토콜
•
JSON-RPC를 기반으로 하며, 안전하고 효율적인 데이터 및 기능 교환을 가능하게 함
•
기본적으로 호스트 애플리케이션이 여러 서버에 연결할 수 있는 클라이언트-서버 아키텍처를 따른다.
◦
MCP 호스트
: MCP를 통해 데이터에 액세스하려는 Claude Desktop, IDE 또는 AI 도구와 같은 프로그램
◦
MCP 클라이언트
: 서버와 1:1 연결을 유지하는 프로토콜 클라이언트
◦
MCP 서버
: 표준화된 모델 컨텍스트 프로토콜을 통해 각각 특정 기능을 노출하는 경량 프로그램
◦
로컬 데이터 소스
: MCP 서버가 안전하게 액세스할 수 있는 컴퓨터의 파일, 데이터베이스 및 서비스
◦
원격 서비스
: MCP 서버가 연결할 수 있는 인터넷(예: API를 통한)을 통해 사용 가능한 외부 시스템
MCP 호스트 (Host)
•
Claude Desktop, IDE(Cursor 등), 또는 MCP를 통해 데이터를 액세스하고자 하는 AI 도구와 같은 프로그램
Logto
•
기능
interface HostResponsibilities {
// 사용자 인터페이스 관리
userInterface: {
displayResults: () => void;
collectUserInput: () => Promise<UserInput>;
showProgress: () => void;
};
// 클라이언트 관리
clientManagement: {
initializeClients: () => void;
manageConnections: () => void;
handleErrors: () => void;
};
// 보안 관리
security: {
authenticateUser: () => Promise<boolean>;
authorizeOperations: () => Promise<boolean>;
managePermissions: () => void;
};
}
TypeScript
복사
•
주요 역할
◦
사용자 인터페이스 제공
◦
LLM과의 통합
◦
여러 MCP 클라이언트 관리
◦
보안 정책 실행
MCP 클라이언트 (Client)
•
LLM과 MCP 서버를 연결하는 브리지
Logto
•
기능
interface ClientCapabilities {
// 기본 기능
roots?: {
listChanged?: boolean;
};
// 샘플링 지원
sampling?: object;
// 실험적 기능
experimental?: {
[key: string]: object;
};
}
TypeScript
복사
•
주요 역할
◦
서버와의 통신 관리
◦
메시지 변환 및 처리
◦
연결 상태 관리
◦
에러 핸들링
•
구현 시 고려사항
1.
연결 관리
•
연결 수립 및 유지
•
재연결 로직
•
타임아웃 처리
2.
메시지 처리
•
직렬화/역직렬화
•
메시지 큐잉
•
응답 매칭
3.
오류 처리
•
네트워크 오류
•
프로토콜 오류
•
비즈니스 로직 오류
MCP 서버 (Server)
•
LLM이 사용할 수 있는 도구와 데이터 액세스 기능을 제공하는 프로그램
Logto
•
기능
interface ServerCapabilities {
// 로깅 지원
logging?: object;
// 프롬프트 지원
prompts?: {
listChanged?: boolean;
};
// 리소스 지원
resources?: {
subscribe?: boolean;
listChanged?: boolean;
};
// 도구 지원
tools?: {
listChanged?: boolean;
};
}
TypeScript
복사
•
주요 역할
◦
리소스 제공
◦
도구 실행
◦
프롬프트 처리
◦
보안 구현
•
서버 구현 유형
1.
파일 시스템 서버
interfaceFileSystemServer {
readFile: (path: string) =>Promise<string>;
writeFile: (path: string, content: string) =>Promise<void>;
listDirectory: (path: string) =>Promise<string[]>;
}
TypeScript
복사
2.
데이터베이스 서버
interfaceDatabaseServer {
query: (sql: string) =>Promise<any>;
connect: () =>Promise<void>;
disconnect: () =>Promise<void>;
}
TypeScript
복사
3.
도구 서버
interfaceToolServer {
listTools: () =>Promise<Tool[]>;
executeTool: (name: string, args: any) =>Promise<any>;
}
TypeScript
복사
MCP Workflow
•
MCP를 기반으로 구축된 AI 애플리케이션
핵심 MCP 개념
도구(Tools)
: LLM에서 호출할 수 있는 기능(사용자 승인 필요)