✨ 공부하며 성장하는 기록 공간입니다.
아직 부족한 점이 많고 배워야 할 것도 많지만, 그만큼 배우는 즐거움도 큽니다.
틀리거나 부족한 내용이 있다면 언제든지 편하게 지적해 주세요 😁
이 블로그는 오픈소스 프로젝트 githru-vscode-extension을 공부하고 기여한 내용을 정리한 공간입니다.
처음보다 성장해 있는 나 자신을 기대하며 꾸준히 기록해나가겠습니다!
앞선 글에서는 MCP Server가 Tools, Resources, Prompts를 통해
어떻게 LLM에게 외부 세계의 능력을 “표준화된 방식으로” 노출하는지 살펴보았습니다.
지금은 MCP 클라이언트는 LLM과 MCP를 연결하는 것으로 사용자로 하여금 편리하게 MCP를 사용할 수 있게 해주는 계층입니다.
지금부터 알아보겠습니다!
MCP Client
MCP 클라이언트는 LLM과 MCP를 연결하는 다리 역할로 LLM에 포함되어 다음과 같은 역할을 담당합니다.
- LLM으로부터 요청 수신
- 적절한 MCP 서버로 요청 전달
- MCP 서버로부터 받은 응답을 LLM으로 반환
- MCP HOST 애플리케이션 내 프로토콜 구현체
- 서버와 1:1 연결 유지.
- 메시지 직렬화/역직렬화 처리
MCP Client Features
Roots
서버가 접근할 수 있는 파일 시스템 범위 제어하는 것으로 MCP Client가 MCP 서버에게 "여기까지 파일을 읽어도 돼!"
라고 알려주는 기능입니다.
이는 MCP Server가 파일을 무제한 적으로 접근하지 못하도록 일종의 보안을 책임지는 기능입니다.
🔹필요한 이유
- 서버가 로컬 전체 디렉토리를 임의로 스캔하는 것을 방지
- Workspace 개념 제공
- 사용자 승인 기반
- 동적 업데이트 가능
🔹예시
// request
{
"jsonrpc": "2.0",
"id": 1,
"method": "roots/list"
}
// response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"roots": [
{
"uri": "file:///home/user/projects/myproject",
"name": "My Project"
}
]
}
}
Samplings
서버가 LLM 사용을 요청할 수 있도록 지원하는 기능으로 MCP Server가 직접 LLM을 호출하지 않고,
MCP Client에게 LLM에게 요청하는 기능입니다.
🔹필요한 이유
- Server가 LLM API 키를 갖지 않아도 됨 -> 보안
- LLM 접근 권한을 Host가 통제
- 서버가 Agentic Behavior를 수행할 수 있게 함.
🔹예시
// request
{
"jsonrpc": "2.0",
"id": 1,
"method": "sampling/createMessage",
"params": {
"messages": [
{
"role": "user",
"content": { "type": "text", "text": "What is the capital of France?" }
}
],
"systemPrompt": "You are a helpful assistant.",
"maxTokens": 100
}
}
// response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"role": "assistant",
"content": { "type": "text", "text": "The capital of France is Paris." }
}
}
Elicitation
서버가 사용자에게 추가 정보를 요청할 수 있도록 지원하는 것으로 사용자에게 추가 입력을 받도록 요청하는 기능입니다.
Sampling이 “LLM에게 질문”이라면
Elicitation은 “사용자에게 질문”입니다.
🔹필요한 이유
- 서버가 사용자로부터 추가 정보를 얻어야 할 때
- 복잡한 workflow에서 Multi-step 입력이 필요한 경우
- Client가 사용자 승인·프라이버시 보호 책임을 가짐
🔹예시
// request
{
"jsonrpc": "2.0",
"id": 1,
"method": "elicitation/create",
"params": {
"message": "Please provide your GitHub username",
"requestedSchema": {
"type": "object",
"properties": {
"name": { "type": "string" }
},
"required": ["name"]
}
}
}
// response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"action": "accept",
"content": { "name": "octocat" }
}
}
전체 흐름도

이번 글에서는 MCP Client가 가진 핵심 기능인 Roots, Sampling, Elicitation 을 중심으로
LLM ↔ Server 간 인터랙션이 어떻게 제어되고,
사용자 승인 기반 보안 모델이 어떻게 작동하는지를 살펴보았습니다.
다음은 간단하게 MCP Host에 대해서 살펴보겠습니다.
'OSSCA > 2025' 카테고리의 다른 글
| [OSSCA 2025] MCP Host (0) | 2025.11.16 |
|---|---|
| [OSSCA2025] MCP Server (0) | 2025.10.26 |
| [OSSCA2025] MCP 개요 (0) | 2025.10.21 |
| [OSSCA2025] 2025 OSSCA 발대식 후기 (0) | 2025.07.14 |