모델 컨텍스트 프로토콜(Model Context Protocol, MCP)은 2024년 11월 26일 Anthropic에 의해 도입된 개방형 표준으로, AI 모델과 외부 데이터 소스 간의 간극을 메우기 위해 설계되었습니다. 이 프로토콜은 중요한 과제인 고급 대형 언어 모델(LLM)들이 텍스트 생성에서 강력한 힘을 가지고 있지만, 실시간 데이터와 도구로부터 종종 고립되어 있어 그 실용적 활용이 제한된다는 점을 해결합니다. MCP 서버는 통합 구성 요소로서 Claude와 같은 AI 도우미가 파일, 데이터베이스, API 등에 접근할 수 있도록 하여, 관련성 있고 실행 가능한 응답을 제공하는 능력을 향상시킵니다.
MCP의 중요성은 통합 표준화의 가능성에 있으며, 이는 AI 발전에 발목을 잡아온 단편화를 줄여줍니다. 보편적인 프로토콜을 제공함으로써, 정보 사일로와 구식 시스템 장벽을 허물어 최신 모델들이 더 나은 관련성 있는 응답을 생산하도록 도우려 합니다.
2025년 3월 25일 현재, 이 생태계는 rapidly 성장하고 있으며, Block과 Apollo처럼 MCP를 그들의 시스템에 통합하고 있는 초기 수용자들이 포함된 커뮤니티 기여 및 기업 채택으로 이루어져 있습니다.
Apidog를 지금 무료로 다운로드하고 이를 통해 워크플로우를 전환하는 방법을 알아보세요!

MCP 서버란 무엇인가요?
MCP 서버는 모델 컨텍스트 프로토콜(MCP)의 일부로, Anthropic과 같은 AI 모델이 외부 데이터와 도구에 연결하여 사용할 수 있도록 돕는 특별한 프로그램입니다. 2024년 11월에 도입된 이들은 AI가 텍스트 생성 이상의 작업을 수행할 수 있도록 하여, 컴퓨터의 파일, 데이터베이스 또는 GitHub와 같은 서비스에 직접 접근하도록 합니다. 모든 것은 안전하고 표준화된 방식으로 이루어집니다.
MCP 서버를 USB 포트와 같이 외부 세계와 AI가 상호작용할 수 있는 다리로 생각할 수 있습니다. 예를 들어, AI에게 문서 요약을 요청하면, 시스템에서 파일을 직접 가져올 수 있습니다. 또는 GitHub 문제를 생성해야 할 경우, MCP 서버 덕분에 AI가 그것도 할 수 있습니다. 이들은 데이터(파일과 같은), 도구(API 호출과 같은) 또는 프롬프트(상호작용을 위한 가이드)를 제공하여 코딩, 연구 또는 프로젝트 관리와 같은 작업에 AI를 더 유용하게 만듭니다.

커뮤니티가 얼마나 빠르게 성장했는지를 보여주는 예상치 못한 세부사항도 있습니다. 이미 250개 이상의 서버가 가동되고 있으며, 공식 통합과 커뮤니티 기여가 포함되어 있어 매우 활성화된 생태계가 빠르게 확장되고 있습니다.
MCP 서버는 어떻게 작동하며 API와는 어떻게 다른가요?
MCP는 문서에서 설명한 것처럼 클라이언트-서버 모델에서 작업합니다. 아키텍처는 다음을 포함합니다:
- MCP 호스트: 외부 데이터를 활용하고자 하는 Claude Desktop, IDE 또는 AI 도구와 같은 애플리케이션.
- MCP 클라이언트: 서버와 안전한 일대일 연결을 유지하여 효율적인 통신을 보장하는 프로토콜 클라이언트.
- MCP 서버: 각기 특정 기능을 표준화된 모델 컨텍스트 프로토콜을 통해 노출하는 경량 프로그램. 이 구조는 호스트가 클라이언트를 사용하여 다양한 서버에 연결할 수 있도록 하여 원활한 통합을 가능하게 합니다. 프로토콜은 세 가지 주요 종류의 노출을 지원합니다:
- 리소스: AI가 컨텍스트로 불러올 수 있는 파일, 문서 또는 데이터베이스 쿼리와 같은 데이터 소스. 예를 들어, 파일 시스템 서버는 로컬 문서에 대한 접근을 허용할 수 있습니다.
- 도구: AI가 수행할 수 있는 작업, 예를 들어 API 호출을 하거나 명령을 실행하는 것입니다. 예시는 GitHub 리포지토리 관리가 가능한 GitHub 서버입니다.
- 프롬프트: LLM 상호작용을 위한 재사용 가능한 템플릿으로, 특정 시나리오에서 AI의 행동을 안내합니다.

이 프로토콜은 JSON-RPC 2.0을 기반으로 하여 클라이언트와 서버 간의 상태 기반 연결 및 기능 협상을 보장합니다. 이 기술적 기본 구조는 신뢰성을 향상시키는 진행 추적, 취소, 오류 보고와 같은 기능을 갖춘 견고하고 안전한 통신을 가능하게 합니다.
그렇다면 MCP는 실제로 무엇을 할 수 있나요?
MCP 서버는 다양한 요구를 수용할 수 있도록 설계되었습니다. 구현에 따라 로컬 또는 원격으로 실행될 수 있으며, 보안 우선 원칙으로 구축됩니다. 각 서버는 자원을 제어하여 무단 접근을 방지하기 위해 명확한 시스템 경계를 유지합니다.
이러한 보안은 민감한 데이터를 다룰 때 특히 중요하며, 연결이 안전하고 권한이 엄격하게 관리됩니다.
기술적으로, 서버는 JSON-RPC 엔드포인트를 통해 자신의 기능을 드러내며, 클라이언트가 사용 가능한 리소스, 도구 및 프롬프트를 쿼리할 수 있도록 합니다.
예를 들어, 서버는 특정 파일의 내용을 반환하는 "readFile" 리소스나 GitHub API와 상호작용하는 "createIssue" 도구를 노출할 수 있습니다. 이 프로토콜은 샘플링과 같은 서버 주도 행동을 지원하여 에이전식 AI 상호작용을 가능하게 하며, 이는 재귀적이고 동적일 수 있습니다.
MCP 서버에 관심이 있으신가요? 지금 시도해보세요!

MCP 서버의 생태계는 풍부하고 계속 성장하고 있으며, 그 유용성을 설명하는 여러 예제가 GitHub - awesome-mcp-servers에 나열되어 있습니다:
- 파일 시스템 MCP 서버: AI가 파일을 읽고 쓸 수 있도록 하여 개인 메모나 스크립트에 접근하는 데 유용하며, GitHub - filesystem에서 참조 구현이 있습니다.
- GitHub MCP 서버: 문제 생성 또는 코드 커밋과 같은 상호작용을 촉진하여 개발자 워크플로우를 향상시키며, GitHub - github에 자세히 설명되어 있습니다.
- 웹 스크래핑 MCP 서버: AI가 웹 콘텐츠를 검색하고 추출할 수 있도록 하여 실시간 데이터를 제공하며, tavily-ai/tavily-mcp와 같은 커뮤니티 서버에 언급되어 있습니다.
- 데이터베이스 MCP 서버: SQL 또는 NoSQL 데이터베이스에 접근을 제공합니다. PostgreSQL 또는 MongoDB와 같은 데이터 쿼리가 가능하며, GitHub - postgres에서 확인할 수 있습니다.
- API 통합 MCP 서버: Slack, Trello 또는 날씨 API와 같은 서비스에 연결하여 AI의 지식 기반을 확장하며, GitHub - slack와 같은 예제가 있습니다. 이 서버들은 프로토콜의 유연성을 보여주며, Kubernetes 관리 서버와 같은 커뮤니티 기여로 생태계를 확장하고 있습니다. 이는 제3자 서버에서 GitHub - servers에 나열되어 있습니다.
MCP 서버와 API의 차이점은 무엇인가요?

MCP 서버와 전통적인 API는 모두 소프트웨어가 외부 서비스와 상호작용할 수 있도록 허용하지만, AI 맥락에서 그 목적은 다릅니다:
- 목적: 전통적인 API는 소프트웨어 통신을 위한 일반 목적의 인터페이스로, AI 모델에 쿼리를 보내거나 외부 서비스에 접근하는 데 종종 사용됩니다. MCP 서버는 표준화된 형식으로 AI 모델에 문맥을 제공하도록 특별히 설계되었습니다.
- 상호작용: 전통적인 API를 사용하려면 AI 모델이 API를 호출하는 방법, 응답을 구문 분석하는 방법 및 해당 정보를 문맥에 통합해야 합니다. MCP 서버의 경우, 서버가 데이터 소스나 도구와의 상호작용을 처리하고 정보를 AI 모델이 쉽게 이해하고 사용할 수 있는 방식으로 제시합니다. 따라서 기본 데이터 소스에 대한 세부 사항을 알 필요가 없습니다.
- 표준화: MCP는 표준화된 프로토콜을 제공하여 다양한 서버에 플러그 앤 플레이를 가능하게 하며, 전통적인 API는 각 서비스에 대한 맞춤형 통합이 필요할 수 있습니다.
- 보안: MCP 서버는 보안을 위해 최적화되어 있으며, 기본 인증 및 접근 제어가 내장되어 있는 반면, 전통적인 API는 구현에 따라 추가 보안 조치가 필요할 수 있습니다.
예를 들어, 전통적인 설정에서 AI가 날씨 데이터를 가져오기 위해 REST API를 호출하고, JSON 응답을 구문 분석하고 이를 문맥에 통합해야 할 수 있습니다. MCP 서버를 사용하면 서버가 "get_weather" 도구를 노출하고 AI가 매개변수와 함께 호출하여 사용할 준비가 된 형식화된 데이터를 받을 수 있습니다.
Claude를 예로 MCP 서버 설정하는 방법
모델 컨텍스트 프로토콜(MCP)은 강력한 프레임워크로,
MCP 서버는 세 가지 주요 유형의 기능을 제공할 수 있습니다:
- 리소스: 클라이언트가 읽을 수 있는 파일과 같은 데이터(예: API 응답 또는 파일 내용)
- 도구: LLM이 호출할 수 있는 함수(사용자 승인 필요)
- 프롬프트: 사용자가 특정 작업을 수행하는 데 도움을 주는 미리 작성된 템플릿
환경 설정하기
시작하기 전에 다음 사항을 확인하세요:
- Python 3.10 이상이 설치되어 있어야 함
- Node.js (자바스크립트/타입스크립트 구현 시 필요)
- Python 또는 자바스크립트 프로그래밍에 대한 기본적인 친숙함
- Claude와 같은 LLM에 대한 이해
UV 패키지 관리자 설치하기
UV는 Python MCP 프로젝트에 권장되는 패키지 관리자입니다:
# MacOS/Linux
curl -LsSf <https://astral.sh/uv/install.sh> | sh
# 설치 후 터미널을 재시작할 것을 잊지 마세요.
MCP 서버 구축하기
간단한 날씨 서버를 예제로 만들어봅시다.

이 서버는 get-alerts
와 get-forecast
두 개의 도구를 제공합니다.
단계 1: 프로젝트 구조 설정하기
# 프로젝트를 위한 새로운 디렉토리 생성
uv init weather
cd weather
# 가상 환경을 생성하고 활성화합니다.
uv venv
source .venv/bin/activate # Windows의 경우: .venv\\\\Scripts\\\\activate
# 의존성 설치
uv add "mcp[cli]" httpx
# 서버 파일 생성
touch weather.py
단계 2: 서버 구현하기
여기 날씨 서버의 전체 구현이 있습니다(weather.py
에):
from typing import Any
import httpx
from mcpserver.fastmcp import FastMCP
# FastMCP 서버 초기화
mcp = FastMCP("weather")
# 상수
NWS_API_BASE = "<https://api.weather.gov>"
USER_AGENT = "weather-app/1.0"
async def make_nws_request(url: str) -> dict[str, Any] | None:
"""올바른 오류 처리를 통해 NWS API에 요청을 합니다."""
headers = {
"User-Agent": USER_AGENT,
"Accept": "application/geo+json"
}
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=headers, timeout=30.0)
response.raise_for_status()
return response.json()
except Exception:
return None
def format_alert(feature: dict) -> str:
"""알림 기능을 읽기 쉬운 문자열로 형식화합니다."""
props = feature["properties"]
return f"""
이벤트: {props.get('event', '알 수 없음')}
지역: {props.get('areaDesc', '알 수 없음')}
심각도: {props.get('severity', '알 수 없음')}
설명: {props.get('description', '설명 없음')}
지침: {props.get('instruction', '특별한 지침 없음')}
"""
@mcp.tool()
async def get_alerts(state: str) -> str:
"""미국 주에 대한 날씨 알림을 가져옵니다.
Args:
state: 미국 주의 두 글자 코드 (예: CA, NY)
"""
url = f"{NWS_API_BASE}/alerts/active/area/{state}"
data = await make_nws_request(url)
if not data or "features" not in data:
return "알림을 가져오지 못했거나 알림이 없습니다."
if not data["features"]:
return "이 주에 대한 활성 알림이 없습니다."
alerts = [format_alert(feature) for feature in data["features"]]
return "\\\\n---\\\\n".join(alerts)
@mcp.tool()
async def get_forecast(latitude: float, longitude: float) -> str:
"""위치에 대한 날씨 예보를 가져옵니다.
Args:
latitude: 위치의 위도
longitude: 위치의 경도
"""
# 먼저 예보 그리드 엔드포인트를 가져옵니다.
points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
points_data = await make_nws_request(points_url)
if not points_data:
return "이 위치의 예보 데이터 가져오기 실패."
# 포인트 응답에서 예보 URL을 가져옵니다.
forecast_url = points_data["properties"]["forecast"]
forecast_data = await make_nws_request(forecast_url)
if not forecast_data:
return "자세한 예보 가져오기 실패."
# 기간을 읽기 쉬운 예보로 형식화합니다.
periods = forecast_data["properties"]["periods"]
forecasts = []
for period in periods[:5]: # 다음 5 기간만 표시
forecast = f"""
{period['name']}: 온도: {period['temperature']}°{period['temperatureUnit']}
바람: {period['windSpeed']} {period['windDirection']}
예보: {period['detailedForecast']}
"""
forecasts.append(forecast)
return "\\\\n---\\\\n".join(forecasts)
if __name__ == "__main__":
# 서버 초기화 및 실행
mcp.run(transport='stdio')
단계 3: 서버 실행하기
서버를 직접 테스트하려면 다음을 실행하세요:
uv run weather.py
Claude for Desktop에 연결하기
Claude for Desktop은 MCP 서버와 상호작용하는 간단한 방법입니다.
단계 1: Claude for Desktop 설치하기
Claude for Desktop가 설치되고 최신 버전으로 업데이트되어 있는지 확인하세요.
단계 2: Claude for Desktop 설정하기
- 텍스트 편집기에서 Claude for Desktop 앱 구성 파일을 엽니다:
# macOS
code ~/Library/Application\\\\ Support/Claude/claude_desktop_config.json
2. 서버 구성을 추가합니다:
{
"mcpServers": {
"weather": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/PARENT/FOLDER/weather",
"run",
"weather.py"
]
}
}
}
다음 사항을 확인하세요:
- 서버 디렉토리에 대한 절대 경로를 사용하세요.
- 명령이 귀하의 환경에 맞는지 확인하세요 (예:
uv
또는uv
에 대한 전체 경로).
단계 3: Claude for Desktop 다시 시작하기
구성을 저장한 후, Claude for Desktop을 완전히 재시작합니다.
단계 4: 서버 테스트하기
Claude for Desktop 입력 상자의 오른쪽 하단에 있는 망치 아이콘을 찾으세요. 클릭하면 서버의 도구가 표시되어야 합니다.
이제 Claude에게 다음과 같은 질문을 할 수 있습니다:
- "샌프란시스코의 날씨는 어떤가요?"
- "텍사스에서 활성 날씨 알림은 무엇인가요?"
Claude MCP 서버를 위한 사용자 지정 MCP 클라이언트 구축하기
Claude for Desktop 대신, 사용자 지정 클라이언트를 구축할 수 있습니다.
단계 1: 클라이언트 프로젝트 설정하기
# 프로젝트 디렉토리 생성
uv init mcp-client
cd mcp-client
# 가상 환경 생성
uv venv
source .venv/bin/activate # Windows의 경우: .venv\\\\Scripts\\\\activate
# 필요한 패키지 설치
uv add mcp anthropic python-dotenv
# 우리의 메인 파일 생성
touch client.py
단계 2: API 키 설정하기
Anthropic API 키가 포함된 .env
파일을 생성합니다:
ANTHROPIC_API_KEY=<your key here>
단계 3: 클라이언트 구현하기
다음은 기본 클라이언트 구현입니다(client.py
에서):
import asyncio
import sys
from typing import Optional
from contextlib import AsyncExitStack
from mcp.client.stdio import ClientSession, StdioServerParameters, stdio_client
from anthropic import Anthropic
from dotenv import load_dotenv
load_dotenv() # .env에서 환경 변수 로드하기
class MCPClient:
def __init__(self):
# 세션과 클라이언트 객체 초기화
self.session: Optional[ClientSession] = None
self.exit_stack = AsyncExitStack()
self.anthropic = Anthropic()
async def connect_to_server(self, server_script_path: str):
"""MCP 서버에 연결합니다.
Args:
server_script_path: 서버 스크립트 경로 (py 또는 js)
"""
is_python = server_script_path.endswith('.py')
is_js = server_script_path.endswith('.js')
if not (is_python or is_js):
raise ValueError("서버 스크립트는 .py 또는 .js 파일이어야 합니다.")
command = "python" if is_python else "node"
server_params = StdioServerParameters(command=command, args=[server_script_path], env=None)
stdio_transport = await self.exit_stack.enter_async_context(stdio_client(server_params))
self.stdio, self.write = stdio_transport
self.session = await self.exit_stack.enter_async_context(ClientSession(self.stdio, self.write))
await self.session.initialize()
# 사용 가능한 도구 나열
response = await self.session.list_tools()
tools = response.tools
print("\\\\n서버에 연결됨, 도구:", [tool.name for tool in tools])
async def process_query(self, query: str) -> str:
"""Claude 및 사용 가능한 도구를 사용하여 쿼리를 처리합니다."""
messages = [
{
"role": "user",
"content": query
}
]
response = await self.session.list_tools()
available_tools = [{
"name": tool.name,
"description": tool.description,
"input_schema": tool.input_schema
} for tool in response.tools]
# 초기 Claude API 호출
response = self.anthropic.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
messages=messages,
tools=available_tools
)
# 응답 처리 및 도구 호출 관리
final_text = []
assistant_message_content = []
for content in response.content:
if content.type == 'text':
final_text.append(content.text)
assistant_message_content.append(content)
elif content.type == 'tool_use':
tool_name = content.name
tool_args = content.input
# 도구 호출 실행
result = await self.session.call_tool(tool_name, tool_args)
final_text.append(f"[도구 {tool_name}을(를) {tool_args}로 호출 중입니다.]")
assistant_message_content.append(content)
messages.append({
"role": "assistant",
"content": assistant_message_content
})
messages.append({
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": content.id,
"content": result
}
]
})
# Claude에게 다음 응답 요청
response = self.anthropic.messages.create(
model="claude-3-5-sonnet-20241022",
max_tokens=1000,
messages=messages,
tools=available_tools
)
final_text.append(response.content[0].text)
return "\\\\n".join(final_text)
async def chat_loop(self):
"""대화형 채팅 루프 실행하기"""
print("\\\\nMCP 클라이언트 시작됨!")
print("쿼리를 입력하거나 'quit'를 입력하여 종료합니다.")
while True:
try:
query = input("\\\\n쿼리: ").strip()
if query.lower() == 'quit':
break
response = await self.process_query(query)
print("\\\\n" + response)
except Exception as e:
print(f"\\\\n오류: {str(e)}")
async def cleanup(self):
"""리소스 정리하기"""
await self.exit_stack.aclose()
async def main():
if len(sys.argv) < 2:
print("사용법: python client.py <서버 스크립트 경로>")
sys.exit(1)
client = MCPClient()
try:
await client.connect_to_server(sys.argv[1])
await client.chat_loop()
finally:
await client.cleanup()
if __name__ == "__main__":
asyncio.run(main())
단계 4: 클라이언트 실행하기
날씨 서버와 함께 사용하기 위해 클라이언트를 실행합니다:
uv run client.py /path/to/weather.py
Claude for Desktop와 함께 미리 구축된 MCP 서버 사용하기

Claude for Desktop은 다양한 미리 구축된 MCP 서버를 지원합니다. 예를 들어 파일 시스템 서버를 사용하는 방법을 살펴보겠습니다.
단계 1: 파일 시스템 서버 설정하기
- Claude for Desktop 설정을 열고 "구성 편집"을 클릭합니다.
- 다음으로 구성 파일을 업데이트합니다:
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/username/Desktop",
"/Users/username/Downloads"
]
}
}
}
username
을 실제 사용자 이름으로 바꾸고, 필요에 따라 경로를 조정하세요.
단계 2: 재시작 및 테스트
Claude for Desktop을 재시작한 후 파일 시스템 도구를 사용하여:
- 파일 읽기
- 파일 쓰기
- 파일 검색
- 파일 이동
예시 프롬프트:
- "시를 작성하여 바탕화면에 저장할 수 있나요?"
- "내 다운로드 폴더의 업무 관련 파일은 무엇인가요?"
- "바탕화면의 모든 이미지를 'Images'라는 새로운 폴더로 이동시킬 수 있나요?"
결론
MCP 서버는 AI 기능의 중요한 진전을 나타내며, 강력한 언어 모델과 외부 도구 간의 간극을 메우고 있습니다. 이 가이드를 따름으로써, 여러분은 Claude의 기능을 향상시키기 위해 MCP 서버를 생성, 구성 및 사용하는 방법을 배웠습니다.
모델 컨텍스트 프로토콜의 표준화된 접근 방식은 AI 모델이 실시간 데이터에 접근하고, 작업을 수행하며, 안전하고 통제된 방식으로 시스템과 상호작용할 수 있도록 보장합니다. 이를 통해 AI 도우미는 개발, 데이터 분석, 콘텐츠 생성 등과 같은 실제 응용 분야에서 더욱 실용적으로 변모합니다.
MCP 생태계가 계속 발전함에 따라, 개발자들은 AI와 함께할 수 있는 더 정교한 서버를 구축하고 있습니다. 미리 구축된 서버를 사용하든 사용자 지정 솔루션을 개발하든, MCP는 보다 유능한 AI 응용 프로그램을 구축하기 위한 유연한 기초를 제공합니다.
API 통합과 관련된 MCP 서버 작업을 계속하면서, 여러분은 Apidog를 탐색하고 싶을 수도 있습니다. Apidog는 여러분의 MCP 구현 워크플로우를 보완할 수 있는 종합적인 API 개발 플랫폼입니다.

Apidog는 API 설계, 문서화, 디버깅 및 자동화된 테스트를 위한 올인원 솔루션을 제공합니다. 직관적인 인터페이스를 통해 쉽게 다음 작업을 수행할 수 있습니다:
- 시각적 인터페이스를 이용한 API 설계 또는 기존 사양 가져오기
- 코드와 동기화 상태를 유지하는 자동 생성 문서화
- 강력한 요청 생성기를 사용하여 API 엔드포인트 테스트
- API에 대한 자동화된 테스트 시나리오 생성
- 공유 작업 공간을 통해 팀원과 협업

외부 API와 상호작용하는 MCP 서버를 개발할 때, Apidog는 엔드포인트를 검증하고 응답 구조를 이해하며 서버 코드에 구현하기 전에 통합이 제대로 작동하는지 확인하는 데 도움을 줄 수 있습니다.
MCP 개발과 함께 Apidog를 시작하려면 Apidog의 웹사이트를 방문하여 API 개발 워크플로우를 어떻게 향상시킬 수 있는지 알아보세요.
MCP 서버와 Apidog과 같은 효율적인 API 개발 도구를 결합하면 AI 시스템과 외부 서비스 간의 보다 견고하고 신뢰할 수 있는 연결을 생성할 수 있으며, AI 응용 프로그램을 더욱 강력하게 만들 수 있습니다.