
🔌 에이전트는 아직 혼자예요
지난 6편에서 에이전트에게 성격을 입혀줬어요. Chef Marco처럼 유쾌한 요리사도, 까칠한 코드 리뷰어도 만들 수 있게 됐죠. 그런데 한 가지 문제가 있어요. 이 에이전트들, 아직 바깥 세상과 연결되지 않았어요.
날씨를 물어보면 실시간 데이터를 못 가져와요. 파일을 읽어달라고 하면 손이 닿지 않아요. Jira에 이슈를 등록해달라고 하면? 꿈도 못 꿔요. 성격은 완벽한데, 마치 방 안에 갇힌 천재 같은 거예요.
잠깐, Ep3에서 Tool Use 배웠잖아. 검색도 하고 계산기도 쓰고. 그거면 충분한 거 아니야?
좋은 질문이에요! Tool Use는 “AI가 도구를 쓸 수 있다”는 개념이었어요. 그런데 현실에는 도구가 수백 개예요. 날씨 API, 파일 시스템, 데이터베이스, Git, Jira, Slack… 이 모든 걸 각각 따로 연결해야 한다면 어떻게 될까요?
😵 M×N 문제: 연결의 지옥
AI 모델이 3개 있다고 해볼게요. Claude, GPT, Gemini. 그리고 연결하고 싶은 도구가 5개예요. GitHub, Slack, 파일 시스템, 데이터베이스, 날씨 API. 각 모델마다 각 도구에 맞는 연결 코드를 따로 작성해야 해요.
3개 모델 × 5개 도구 = 15개의 커스텀 통합 코드. 모델이 10개가 되고 도구가 50개가 되면? 500개의 연결을 만들어야 해요. 이게 바로 M×N 문제예요. 조합이 폭발적으로 늘어나는 거죠.

옛날에 휴대폰 충전기가 다 달랐던 거랑 비슷하네. 삼성은 삼성 충전기, LG는 LG 충전기, 아이폰은 또 다른 거…
바로 그거예요! 그리고 그 문제를 해결한 게 뭐였죠?
USB-C!
정답! AI 세계에도 USB-C가 나왔어요. 그게 바로 MCP예요!

🔗 MCP: AI 세계의 USB-C
MCP는 Model Context Protocol의 약자예요. 이 MCP 프로토콜은 2024년 11월, Anthropic이 오픈 소스로 발표한 표준이에요. 핵심 아이디어는 단순해요. AI 모델과 외부 도구 사이에 하나의 표준 연결 규격을 만들자는 거예요.
AI 모델이 외부 도구와 데이터에 접근하기 위한 오픈 표준 프로토콜. USB-C처럼 하나의 규격으로 어떤 모델이든, 어떤 도구든 연결할 수 있어요. JSON-RPC 2.0 기반으로 통신해요.
MCP가 있으면 M×N 문제가 해결돼요. 모델 쪽은 “MCP 클라이언트”만 구현하면 되고, 도구 쪽은 “MCP 서버”만 만들면 돼요. 3개 모델 + 5개 도구 = 3 + 5 = 8개의 구현이면 끝! 15개가 8개로 줄었어요.
그리고 REST API와의 핵심 차이가 있어요. REST API는 인간 개발자를 위해 설계됐어요. 문서를 읽고, 엔드포인트를 외우고, 직접 코드를 작성해야 하죠. 반면 MCP는 AI가 스스로 도구를 발견하고 사용할 수 있도록 설계됐어요. AI가 “너 무슨 도구 갖고 있어?”라고 물으면, 서버가 “나는 이런 도구가 있고, 이런 파라미터를 받아”라고 자동으로 알려주는 거예요.
클라이언트가 서버에 “사용 가능한 도구 목록을 알려줘”라고 요청하면, 서버가 도구 이름, 설명, 파라미터 스키마를 동적으로 반환하는 메커니즘. REST API에는 없는 MCP만의 핵심 기능이에요.
🏗️ MCP 아키텍처: 식당으로 이해하기
MCP의 구조를 식당에 비유해볼게요.

Host (식당 매니저)는 전체를 관리하는 AI 앱이에요. Claude Desktop이나 VS Code 같은 거예요. LLM을 품고 있고, 여러 Client를 관리해요. 식당 매니저가 여러 웨이터를 관리하는 것처럼요.
Client (웨이터)는 Host와 Server 사이를 연결하는 중간자예요. 하나의 Client는 하나의 Server와 1:1로 연결돼요. 웨이터가 주방과 손님 사이를 오가며 주문을 전달하는 것처럼, 프로토콜 협상과 메시지 전달을 담당해요.
Server (주방)는 실제 기능을 제공하는 쪽이에요. 날씨 정보를 가져오거나, 파일을 읽거나, 데이터베이스를 조회하는 실제 작업을 해요. 주방장이 요리를 만드는 것처럼요.
그러면 Claude Desktop이 Host이고, 내가 만든 날씨 서버가 Server, 그 사이를 연결하는 게 Client인 거지?
완벽해요! 그리고 Host 하나에 여러 Server를 연결할 수 있어요. 날씨 서버, 파일 서버, GitHub 서버를 동시에 연결하면 AI가 날씨도 보고, 파일도 읽고, PR도 올릴 수 있게 돼요!

🧩 MCP의 세 가지 기본 요소
MCP 서버는 세 가지 종류의 기능을 제공할 수 있어요.
1. Tools (도구) — AI가 실행할 수 있는 함수예요. search_web, read_file, send_email 같은 거예요. Ep3에서 배운 Tool Use가 여기에 해당해요! 차이점은 이제 이 도구들이 MCP 표준으로 제공되기 때문에, 어떤 AI 모델이든 같은 방식으로 사용할 수 있다는 거예요.
2. Resources (리소스) — AI가 읽을 수 있는 데이터예요. 파일 내용, 데이터베이스 레코드, 설정 파일 같은 것들이요. URI로 주소를 지정하고, 읽기 전용이에요. 웹 페이지 URL처럼 file:///path/to/doc.txt 형태로 접근해요.
3. Prompts (프롬프트) — 재사용 가능한 템플릿이에요. “코드 리뷰해줘”라는 복잡한 워크플로우를 미리 정의해놓고, 필요할 때 불러올 수 있어요.
Tool이랑 Resource의 차이가 뭐야? 둘 다 데이터를 가져오는 거 아니야?
Tool은 “행동”이에요. 뭔가를 실행하고, 세상을 바꿀 수 있어요. 이메일을 보내거나 파일을 생성하는 것처럼요. Resource는 “읽기”예요. 기존 데이터를 가져오기만 하고, 아무것도 바꾸지 않아요. 도서관에서 책을 빌려 읽는 것(Resource)과 직접 책을 쓰는 것(Tool)의 차이라고 보면 돼요!
🚀 Transport: 어떻게 연결하나요?
MCP는 두 가지 연결 방식을 지원해요.
stdio (표준 입출력) — 로컬 컴퓨터에서 사용해요. MCP 서버를 자식 프로세스로 실행하고, stdin/stdout 파이프로 통신해요. 네트워크가 필요 없어서 빠르고 간단해요. 개인 개발 환경에 딱이에요.
Streamable HTTP — 원격 서버와 연결할 때 사용해요. HTTP POST로 요청을 보내고, SSE(Server-Sent Events)로 응답을 받아요. OAuth 2.1 인증도 지원해서, 클라우드 서비스와 안전하게 연결할 수 있어요.
요청과 응답을 JSON으로 주고받는 경량 메시지 프로토콜. MCP의 모든 통신은 이 형식을 따라요. “method: list_tools” 같은 요청을 보내면, 서버가 JSON으로 결과를 돌려줘요.
🛠️ 실습 1: 나만의 MCP 서버 만들기
이제 직접 MCP 서버를 만들어볼게요! Python의 FastMCP 프레임워크를 사용하면 놀라울 정도로 간단해요.
Python 타입 힌트로 자동 도구 정의를 생성하는 MCP 서버 프레임워크. @mcp.tool() 데코레이터를 붙이면 함수의 파라미터 타입과 docstring을 분석해서 JSON Schema를 자동으로 만들어줘요.
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("weather-demo")
@mcp.tool()
def get_weather(city: str) -> str:
"""Get current weather for a city.
Args:
city: City name (e.g. Seoul)
"""
weather_db = {
"Seoul": "Clear, 18°C",
"Tokyo": "Cloudy, 22°C",
"New York": "Rainy, 15°C",
}
return weather_db.get(
city, f"No data for {city}"
)
if __name__ == "__main__":
mcp.run(transport="stdio")
이게 전부예요! pip install mcp로 설치하고, @mcp.tool() 데코레이터를 붙이면 끝이에요. FastMCP가 함수의 타입 힌트(city: str)와 docstring을 분석해서 JSON Schema를 자동으로 생성해요. AI가 “이 도구는 city라는 문자열 파라미터를 받아”라는 걸 자동으로 알게 되는 거예요.
진짜 이게 끝이야? 보통 함수 만드는 거랑 뭐가 다른 거지?
평소에 함수 만드는 것과 거의 똑같아요! 다른 점은 @mcp.tool() 데코레이터 하나뿐이에요. 그 한 줄이 이 함수를 “MCP 표준을 따르는 도구”로 바꿔주는 거예요. 어떤 AI 앱이든 이 서버에 연결하면 이 도구를 쓸 수 있게 돼요!
🛠️ 실습 2: MCP 클라이언트로 연결하기
서버를 만들었으니, 이제 클라이언트에서 연결해볼게요.
from mcp import (
ClientSession,
StdioServerParameters
)
from mcp.client.stdio import stdio_client
server = StdioServerParameters(
command="python",
args=["mcp_weather_server.py"],
)
async with stdio_client(server) as (r, w):
async with ClientSession(r, w) as s:
await s.initialize()
tools = await s.list_tools()
print(f"Found {len(tools.tools)}"
f" tools")
result = await s.call_tool(
"get_weather",
{"city": "Seoul"}
)
print(result.content[0].text)
핵심을 짚어볼게요. stdio_client(server)가 서버를 자식 프로세스로 실행하고 연결해요. s.list_tools()가 바로 Tool Discovery예요! 서버에게 “너 무슨 도구 있어?”라고 물어보는 거죠. 그리고 s.call_tool()로 도구를 실행해요.
실행하면 이렇게 출력돼요:
Found 1 tools
Clear, 18°C
전체 코드는 GitHub ep07에서 확인할 수 있어요.

🌍 현실 세계의 MCP 도입 현황
MCP는 발표 1년 만에 업계 표준이 됐어요. 숫자가 말해줘요.
월간 SDK 다운로드 9,700만 회. 활성 공개 MCP 서버 10,000개 이상. 2025년 12월, Anthropic은 MCP를 Linux Foundation 산하 Agentic AI Foundation (AAIF)에 기부했어요. OpenAI, Block과 함께 공동 설립한 재단이에요. 이제 MCP는 특정 회사의 기술이 아니라 업계 공동의 표준이 된 거예요.
주요 도입 현황을 볼게요:
| 회사/제품 | MCP 지원 내용 | 시기 |
|---|---|---|
| Anthropic | Claude Desktop, Claude Code 네이티브 지원 | 2024.11 |
| OpenAI | Agents SDK, ChatGPT Desktop 도입 | 2025.03 |
| Google DeepMind | Gemini MCP 지원 | 2025.04 |
| Microsoft | Copilot Studio, VS Code 통합 | 2025 |
| 개발 도구 | Cursor, Zed, Replit, Windsurf 등 | 2025 |
| 엔터프라이즈 | Salesforce, Atlassian, PayPal 등 | 2025 |
OpenAI도 도입했어? Anthropic이 만든 건데?
그만큼 MCP가 필요했다는 뜻이에요! USB-C도 처음엔 하나의 회사 제안이었지만, 결국 모든 제조사가 채택했잖아요. 표준이 좋으면 경쟁사도 쓰는 거예요.
⚔️ MCP vs REST API
“그냥 REST API 쓰면 안 돼?”라고 물을 수 있어요. 중요한 차이가 있어요.
| 비교 항목 | REST API | MCP |
|---|---|---|
| 설계 대상 | 인간 개발자 | AI 에이전트 |
| 도구 발견 | 문서를 읽고 수동 코딩 | 런타임 자동 발견 (list_tools) |
| 스키마 | 별도 문서 참조 | JSON Schema 내장 |
| 상태 관리 | Stateless (매번 새로 시작) | Stateful 세션 유지 가능 |
| 양방향 통신 | 요청-응답만 | 서버 → 클라이언트 알림 가능 |
| 인증 | API별 각각 다름 | OAuth 2.1 표준 |
핵심은 이거예요. MCP는 REST API를 대체하는 게 아니에요. MCP 서버 내부에서 REST API를 호출하는 경우가 많아요. MCP는 REST API 위에 앉아서, AI가 도구를 자동으로 발견하고 사용할 수 있게 해주는 표준 계층인 거예요.
⚡ 3줄로 나만의 MCP 서버 연결하기
Claude Desktop에서 MCP 서버를 연결하는 방법은 놀라울 정도로 간단해요. 설정 파일에 3줄만 추가하면 돼요.
{
"mcpServers": {
"weather": {
"command": "python",
"args": [
"mcp_weather_server.py"
]
}
}
}
이 설정을 claude_desktop_config.json에 저장하면, Claude Desktop을 재시작할 때 자동으로 서버가 연결돼요. 그러면 Claude에게 “서울 날씨 알려줘”라고 말하면, 우리가 만든 get_weather 도구를 직접 호출해요!
%APPDATA%\Claude\claude_desktop_config.json, macOS에서 ~/Library/Application Support/Claude/claude_desktop_config.json이에요. MCP 공식 퀵스타트에서 자세한 가이드를 확인할 수 있어요.
🔗 이전 편과의 연결
지금까지 배운 것들이 MCP와 어떻게 연결되는지 정리해볼게요.
Ep3 Tool Use에서 AI에게 “손”을 줬어요. MCP는 그 손을 표준화한 거예요. 도구마다 다르게 만들었던 연결을 하나의 규격으로 통일했어요.
Ep5 Agent Loop에서 AI가 “생각→행동→관찰”을 반복하는 루프를 배웠어요. 그 루프 안에서 호출하는 도구가 이제 MCP 서버가 될 수 있어요. 한 번 만든 서버를 여러 앱에서 재사용할 수 있게 된 거예요.
Ep6 시스템 프롬프트에서 AI에게 성격을 줬어요. 성격(시스템 프롬프트) + 능력(MCP 서버) = 완성된 에이전트예요!
참고 자료
- Model Context Protocol — 공식 문서
- MCP Specification (2025-03-26)
- Anthropic — Introducing MCP
- Linux Foundation — Agentic AI Foundation 발표
- 이번 편 실습 코드 (GitHub)

✅ 오늘 배운 것
1. MCP 프로토콜은 AI 세계의 USB-C예요. M개 모델 × N개 도구의 조합 폭발 문제를, 하나의 표준 프로토콜로 M+N개의 깔끔한 연결로 바꿔줘요. 2024년 Anthropic이 발표하고, 지금은 OpenAI, Google, Microsoft까지 채택한 업계 표준이에요.
2. MCP 아키텍처는 Host→Client→Server 구조예요. Host(AI 앱)가 Client를 통해 Server(도구 제공자)와 통신해요. 서버는 Tools(실행), Resources(읽기), Prompts(템플릿) 세 가지 기능을 제공해요.
3. FastMCP로 서버 만들기는 놀라울 만큼 쉬워요. @mcp.tool() 데코레이터 하나면 평범한 Python 함수가 어떤 AI 앱이든 연결할 수 있는 표준 도구로 변해요. Claude Desktop 설정 3줄이면 바로 사용할 수 있어요.
다음 편에서는 이 모든 것을 조립하는 방법을 배워요. Claude Agent SDK로 여러 에이전트를 만들고, MCP 서버를 연결하고, 에이전트끼리 협업하는 시스템을 구축해볼게요!
