모델 컨텍스트 프로토콜(MCP): AI 통합 가이드
이 가이드는 MCP가 외부 도구와 데이터 소스와의 AI 상호작용을 표준화하여 더 효율적인 AI 컨텍스트 통합을 가능하게 하는 방법을 설명합니다. 이 글은 AI 번역본입니다. 오역이 의심되면 댓글로 알려주세요.
Created on September 12|Last edited on September 12
Comment
모델 컨텍스트 프로토콜(MCP) 는 다음 방식을 간소화하는 개방형 표준입니다 대형 언어 모델(LLM) 애플리케이션이 외부 도구, 구조화된 데이터, 미리 정의된 프롬프트와 상호작용합니다. 통합된 인터페이스를 제공함으로써 MCP는 맞춤형 통합의 비효율을 제거하고, AI 시스템이 외부 리소스에 원활하게 접근하고 실행할 수 있도록 합니다.
전통적인 LLM 애플리케이션 종종 외부 정보를 가져오기 위해 임시 연결에 의존하며, 그 결과 일관성 부족, 개발 부담, 상호 운용성 결여 문제가 발생합니다. MCP는 외부 데이터를 관리하고 작업을 실행하기 위한 공통 인프라를 여러 AI 애플리케이션이 공유할 수 있도록 표준화된 프로토콜을 도입함으로써 이를 해결합니다.
Anthropic이 2024년 11월에 공개한 MCP는 고립된 AI 시스템을 탈피하도록 설계되어, 모델이 실시간 컨텍스트에 안전하게 접근하고 외부 시스템과 상호작용할 수 있게 합니다. MCP를 AI 애플리케이션을 위한 “USB 포트”라고 생각하면 됩니다. 각 서비스마다 맞춤 코드를 작성할 필요 없이, 어떤 LLM 기반 어시스턴트든 데이터 소스, API, 외부 도구와 보편적으로 연결해 통합할 수 있는 표준 인터페이스입니다.
이 글은 MCP의 동작 방식을 설명하고, Claude Desktop과 연결되는 MCP 서버를 구축하는 실용적인 가이드를 제공합니다. 이 서버는 웹 검색과 확장된 추론과 같은 강력한 기능을 가능하게 합니다 Deepseek R1마지막에는 구조적이고 효율적인 방식으로 외부 데이터와 도구와 상호작용하는 능력을 강화하는 MCP 환경을 실제로 구축하게 될 것입니다.

목차
목차Model Context Protocol(MCP)이란 무엇인가?MCP의 일반 아키텍처 탐구MCP 프리미티브 모든 것을 하나로 정리하기 MCP가 단순한 또 하나의 인터페이스가 아닌 이유: 고유한 과제에 대한 해법자습서: Claude Desktop용 MCP 서버 구축 코드 분석하기데스크톱용 Claude에서 MCP 서버 사용 설정하기서버 테스트하기 결론
Model Context Protocol(MCP)이란 무엇인가?
예를 들어 다음과 같은 LLM 애플리케이션은 챗봇 정확하고 동적인 응답을 제공하기 위해 외부 리소스에 자주 의존합니다. 이러한 리소스를 분류하는 한 가지 방법은 다음의 세 가지 핵심 프리미티브를 사용하는 것입니다.
- 도구, 데이터베이스 질의나 이메일 전송과 같은 작업을 LLM이 실행할 수 있도록 해 주며,
- 리소스, 문서, 로그, API 응답과 같은 구조화된 데이터를 제공하여 모델이 출력 생성 시 참고할 수 있게 해 주며; 그리고
- 프롬프트, 미리 정의된 템플릿으로서 상호작용을 안내해 일관성과 효율성을 보장합니다.
이러한 리소스에 접근하는 표준화된 프레임워크가 없으면, LLM 기반 애플리케이션마다 외부 기능을 통합하는 자체 방식을 구현해야 하므로 불필요한 복잡성과 중복 개발이 발생합니다.
MCP는 LLM 애플리케이션이 외부 리소스와 상호작용하는 방식을 표준화하는 통합 프로토콜을 제공함으로써 이 문제를 해결합니다. 여러 LLM 애플리케이션이 MCP를 채택하면 도구, 리소스, 프롬프트에 연결하는 동일한 인프라를 함께 활용할 수 있어, 서로 다른 AI 기반 애플리케이션 간 상호운용성이 훨씬 쉬워집니다.
AI 도입이 확대될수록 이는 특히 중요합니다. 공통 표준이 없다면 조직은 애플리케이션마다 별도의 맞춤형 통합을 구축하고 유지해야 하며, 이는 비효율적일 뿐 아니라 오류가 발생하기 쉽습니다. MCP를 사용하면 ���떤 LLM 기반 애플리케이션도 외부 데이터 소스와 일관된 방식으로 상호작용할 수 있어, 개발자는 한 번만 구축하고 여러 AI 플랫폼에 배포할 수 있습니다. 이로써 확장성이 향상되고 유지 보수 부담이 줄어들며, AI 애플리케이션이 필요한 정보를 안전하고 예측 가능한 방식으로 액세스할 수 있게 됩니다.
MCP의 일반 아키텍처 탐구
MCP의 아키텍처는 클라이언트–서버 모델을 따르며, LLM 애플리케이션과 외부 데이터 소스 간에 구조화되고 컨텍스트를 인지한 상호작용을 가능하게 합니다. 직접 함수 호출이나 데이터베이스 쿼리에 의존하는 기존 API 통합과 달리, MCP는 인프라를 호스트, 클라이언트, 서버의 세 가지 핵심 역할로 구성하여 각자가 맡은 역할을 통해 원활한 데이터 교환을 보장합니다.
- 호스트: 호스트는 챗봇, IDE 어시스턴트처럼 LLM을 내장한 애플리케이션으로, 사용자의 입력을 LLM이 처리하는 소프트웨어를 의미합니다. 호스트는 데이터 조회와 실행을 직접 관리하지 않고, 언제 외부 리소스를 조회하고 도구를 실행하며 구조화된 프롬프트를 사용할지 결정한 뒤 이러한 작업을 클라이언트에 위임합니다.
- 클라이언트: 호스트와 MCP의 외부 리소스 사이에서 중개자로 동작하는 클라이언트는 데이터 흐름과 도구 실행을 관리합니다. 예를 들어 Claude Desktop에서 MCP 클라이언트는 문서, API 결과, 데이터베이스 레코드와 같은 관련 컨텍스트를 선택해 LLM의 컨텍스트 윈도우에 주입합니다. 또한 도구 호출을 라우팅하여 모델의 요청이 올바르게 실행되도록 보장합니다.
- 서버: 서버는 리소스(구조화된 데이터), 도구(외부 작업), 프롬프트(표준화된 상호작용 템플릿)에 대한 액세스를 제공합니다. MCP 서버는 파일 시스템에 대한 LLM 액세스를 부여하는 로컬 통합일 수도 있고, 실시간 금융 데이터를 조회하는 클라우드 기반 시스템일 수도 있으며, 워크플로 자동화를 가능하게 하는 비즈니스 애플리케이션일 수도 있습니다. 서버는 복잡한 쿼리 없이도 필요한 순간에 구조화된 형식으로 정보를 제공되도록 보장합니다.

상호작용을 이러한 개별 구성 요소로 분해함으로써, MCP는 LLM 통합을 단순화하는 추상화 계층을 도입합니다. 각 애플리케이션이 데이터 조회나 외부 작업 실행을 위한 맞춤 로직을 구현할 필요 없이, MCP는 이러한 상호작용을 표준화하여 다양한 도구와 환경 전반에서 손쉽게 확장할 수 있도록 합니다. 이러한 분리는 보안과 제어도 강화합니다. 클라이언트가 접근 제한을 강제하고, LLM에 관련된 데이터만 제공되도록 보장할 수 있기 때문입니다.
MCP 프리미티브
MCP는 클라이언트와 서버의 상호작용 방식을 구성하는 여러 프리미티브를 정의합니다. 이 글은 주로 서버 측 사용에 초점을 맞추지만, 먼저 클라이언트 측의 핵심 프리미티브를 간단히 정리하겠습니다.
- 루트 제어된 진입점으로 작동하여 MCP 서버가 접근할 수 있는 파일, 데이터베이스, 서비스의 범위를 지정합니다. 이를 통해 애플리케이션은 필요한 데이터 소스만 노출하고, LLM에 제공되는 정보에 대한 보안과 통제를 유지할 수 있습니다.
- 샘플링 반복적인 응답 생성을 가능하게 합니다. 단일한 고정 출력 대신, MCP 클라이언트는 여러 번의 컴플리션을 요청하여 추가 컨텍스트나 제약을 통해 결과를 점진적으로 개선할 수 있습니다. 이를 통해 AI 상호작용에서 응답의 품질, 적응성, 그리고 관련성이 향상됩니다.
서버 측에서 MCP는 LLM 애플리케이션이 외부 시스템과 구조적이고 예측 가능한 방식으로 상호작용하는 방식을 정의하는 세 가지 기본 프리미티브를 도입합니다.
- 도구 LLM이 외부 함수를 실행할 수 있도록 하여, 텍스트 기반 추론을 넘어 행동을 수행하는 기본 메커니즘이 됩니다. 수동적 데이터를 제공하는 리소스나 상호작용을 구조화하는 프롬프트와 달리, 도구는 LLM이 실시간 데이터를 가져오고, 데이터베이스를 수정하며, 계산을 실행할 수 있게 합니다. 예를 들어, an LLM 기반 코딩 어시스턴트 테스트 케이스를 실행할 수도 있고, 고객이 지원 봇 새 지원 티켓을 생성할 수도 있습니다. 도구는 부작용을 일으킬 수 있으므로, 정적인 정보 조회를 넘어 LLM의 능력을 확장하여 AI 애플리케이션을 더 실행 가능하게 만듭니다.
- 리소스 파일, 로그, API 응답과 같은 구조화된 데이터를 제공하여 LLM이 생성 과정에서 참고할 수 있게 합니다. 도구와 달리 리소스는 외부 계산을 트리거하지 않습니다. 대신 관련 정보를 제공해 모델의 컨텍스트에 자연스럽게 통합되도록 하여, 불필요한 복잡성을 줄이면서 최신 정보에 일관되게 접근할 수 있게 합니다. 예를 들어, 재무 보고서나 시스템 로그를 리소스로 제공하면 모델의 응답에 자동으로 반영될 수 있습니다.
- 프롬프트 외부 동작을 트리거하지 않고 상호작용을 구조화하는 사전 정의 템플릿으로 작동합니다. 빈칸 채우기 템플릿과 유사하게, 프롬프트는 작업별 일관성을 위한 틀을 제공합니다. 예를 들어, 요약 프롬프트에는 사용자 입력을 위한 플레이스홀더와 함께 미리 정의된 지침이 포함될 수 있습니다. 프롬프트는 또한 Custom GPTs와 유사하게 챗봇의 페르소나, 톤, 행동을 정의하여 외부 시스템을 변경하지 않고도 응답을 동적으로 형성할 수 있습니다.
이러한 표준화된 프리미티브를 확립함으로써 MCP는 LLM 기반 애플리케이션이 외부 도구와 데이터 소스와 효율적이고 안전하며 예측 가능하게 상호작용하도록 보장합니다.
모든 것을 하나로 정리하기
종합하면, 외부 데이터나 동작이 필요한 질문을 AI에게 했을 때 MCP가 실제로 작동하는 방식은 다음과 같습니다:
1. 기능 검색MCP 클라이언트는 먼저 서버에 제공 가능한 항목을 설명해 달라고 요청합니다. 즉, 서버가 제공할 수 있는 도구, 리소스, 프롬프트 템플릿의 목록을 가져옵니다. 그런 다음 AI 모델(호스트 앱을 통해)은 이러한 기능을 인지하게 됩니다.
2. 보강 프롬프트 작성: 사용자의 질의(및 기타 컨텍스트)가 서버의 도구와 리소스에 대한 설명과 함께 AI 모델로 전송됩니다. 결과적으로 모델은 서버를 통해 무엇을 할 수 있는지 “알게” 됩니다. 예를 들어 사용자가 “내일 날씨가 어때?”라고 묻는다면, 모델에 전달되는 프롬프트에는 서버가 제공하는 “Weather API 도구”에 대한 설명이 포함됩니다.
3. 도구/리소스 선택: AI 모델은 질의와 사용 가능한 MCP 도구/리소스를 분석한 뒤, 이를 사용할 필요가 있는지 판단합니다. 필요하다면 MCP 사양에 따라 구조화된 형태로 어떤 도구나 리소스를 사용할지 표시하여 응답합니다. 날씨 예시에서는, 최신 정보를 얻기 위해 서버가 제공하는 “Weather API” 도구를 호출하기로 결정할 수 있습니다.
4. 서버 실행: MCP 클라이언트는 모델의 요청을 수신하고 MCP 서버에서 해당 동작을 호출합니다(예: 서버 코드로 날씨 API 호출을 실행). 서버는 데이터베이스에서 데이터를 가져오거나 외부 API를 호출하는 등 해당 동작을 수행한 뒤, 결과를 클라이언트에 반환합니다.
5. 응답 생성서버에서 반환된 결과(예: 일기 예보 데이터)는 클라이언트를 통해 AI 모델에 전달됩니다. 모델은 이제 이 데이터를 답변에 반영할 수 있습니다. 그런 다음 자체 지식과 방금 가져온 정보를 함께 바탕으로 최종 사용자 응답을 생성합니다(예: “내일 예보는 15 °C에 약한 비입니다.”). 사용자는 대화 중 모델이 외부 정보를 끊김 없이 불러와 답변을 풍부하게 만든 결과를 확인하게 됩니다.
내부적으로는 클라이언트와 서버 사이에서 JSON 메시지가 오가며 이 흐름이 동작하지만, 개발자 관점에서는 MCP가 저수준의 세부 사항을 추상화합니다. 개발자는 사양에 따라 MCP 서버를 구현(또는 이미 만들어진 서버를 사용)하고, MCP 클라이언트를 지원하는 AI 애플리케이션을 연결하기만 하면 새로운 도구와 데이터를 즉시 활용할 수 있습니다. Anthropic은 MCP 서버를 구축하거나 클라이언트를 통합하기 쉽도록 여러 언어(Python, TypeScript, Java/Kotlin)용 SDK를 제공합니다. 예를 들어, 사용자 지정 SQL 데이터베이스용 커넥터를 새로 작성하는 일은 작은 MCP 서버를 구현하는 것으로 충분합니다. AI와 서버가 어떻게 통신하는지에 대한 복잡한 부분은 프로토콜이 처리하며, 개발자는 서버가 수행할 수 있는 기능을 프롬프트, 리소스, 도구 관점에서 정의하기만 하면 됩니다.
MCP가 단순한 또 하나의 인터페이스가 아닌 이유: 고유한 과제에 대한 해법
MCP의 가장 큰 강점 중 하나는 얼마나 자연스럽게 녹아드는지입니다 AI 워크플로우언어 모델 에이전트를 염두에 두고 설계되었기 때문에, AI 시스템이 추론하고 정보를 검색하며 동작을 실행하는 방식에 매우 잘 적응합니다. MCP는 표준이기 때문에 AI 통합을 커뮤니티 주도로 확장할 수 있습니다. MCP와 호환되는 도구나 데이터 소스를 구축하는 개발자는 프로토콜을 따르는 어떤 AI 시스템에서도 곧바로 사용할 수 있는 구성 요소를 만들게 됩니다. 이는 각 AI 도구가 외부 서비스마다 별도의 맞춤형 연결을 요구하던 기존 API 통합 방식에서의 큰 전환입니다.
AI 애플리케이션이 외부 데이터와 도구와 소통하는 방식을 표준화함으로써, MCP는 중복 작업의 필요를 없앱니다매번 통합할 때마다 바퀴를 다시 발명하지 않고, 개발자들은 미리 만들어진 재사용 가능한 구성 요소의 공유 생태계에 기여하고 그 혜택을 누릴 수 있습니다.
전통적인 API 기반 통합 방식은 개발자가 통합하려는 각 시스템마다 커스텀 커넥터를 직접 만들어야 합니다. 서비스마다 API 설계가 달라서, 새로운 통합을 할 때마다 인증, 요청 포맷, 오류 처리 등을 모두 별도로 구현해야 합니다. 그 결과, 서로 다른 AI 애플리케이션에서 쉽게 재사용하기 어려운 파편화된 일회성 해결책이 양산됩니다.
MCP는 AI 모델이 외부 도구와 데이터와 상호작용하는 방식을 표준화하여 이러한 비효율을 제거합니다. 각 시스템마다 새 커넥터를 일일이 작성하는 대신, 개발자는 바로 사용할 수 있는 MCP 호환 도구의 확장되는 생태계를 활용할 수 있습니다. 한 번 AI 시스템이 MCP를 지원하면, 프로토콜을 따르는 어떤 서비스와도 즉시 상호작용할 수 있으며 추가적인 커스텀 코딩이 필요 없습니다.
자습서: Claude Desktop용 MCP 서버 구축
이제 Claude Desktop 앱과 함께 작동하여 기능을 확장하는 MCP 서버를 구현하겠습니다. 이 자습서에서는 웹 검색, DeepSeek R1을 활용한 고급 추론, 그리고 구조화된 기능 등을 추가합니다. 텍스트 요약 prompts 프리미티브를 사용하여
이 자습서에서는 사용할 것입니다 uv은 Python용 빠른 패키지 관리자이자 환경 관리 도구로, 종속성 관리를 단순화하고 pip과 venv 같은 전통적 도구보다 성능을 향상합니다. 아직 설치하지 않았다면 다음 명령으로 설치할 수 있습니다:
curl -LsSf https://astral.sh/uv/install.sh | sh
또는 Windows를 사용 중이라면:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
이후에 터미널을 다시 시작하여 uv 명령이 정상적으로 인식되는지 확인하세요. 이제 서버를 위한 설정 스크립트를 만들겠습니다. setup.sh라는 파일을 생성하고 다음 내용을 추가하세요:
# Create a new directory for the MCP server projectuv init servercd server# Create virtual environment and activate ituv venvsource .venv/bin/activate# Install dependenciesuv add "mcp[cli]" httpx weave openai# Create the server filetouch server.py
Windows의 경우:
# Create a new directory for the MCP server projectuv init servercd server# Create virtual environment and activate ituv venv.venv\Scripts\Activate# Install dependenciesuv add "mcp[cli]" httpx weave openai# Create the server fileNew-Item -ItemType File server.py
이제 다음 명령으로 스크립트를 실행하세요:
sh -x setup.sh
이제 MCP 서버를 구현할 server.py 파일을 작성할 수 있습니다. 이 서버는 Claude Desktop과 연동되어 웹 검색, DeepSeek R1을 활용한 고급 추론, 프롬프트를 사용한 구조화된 텍스트 요약 등 추가 기능을 제공합니다. 또한 리소스를 노출하는 방법을 시연하여, LLM이 외부 데이터를 구조화된 방식으로 접근할 수 있도록 합니다.
이를 구현하려면, 먼저 열어 주세요 server.py 선호하는 텍스트 편집기에서 열고 다음 코드를 추가하세요:
from typing import Anyimport osfrom mcp.server.fastmcp import FastMCPfrom openai import OpenAIimport weave; weave.init("mcp_tools")# Initialize FastMCP servermcp = FastMCP("mcp_server")# Initialize OpenAI client for web searchsearch_client = OpenAI(api_key="your_openai_key")# Initialize DeepSeek R1 clientr1_api_key = "your_deepseek_key"r1_client = OpenAI(api_key=r1_api_key, base_url="https://api.deepseek.com")# External function for web search@weave.opasync def run_web_search(query: str) -> str:try:response = search_client.responses.create(model="gpt-4o",tools=[{"type": "web_search_preview"}],input=query)return response.output_textexcept Exception as e:return f"Search failed: {str(e)}"# MCP Tool: Web Search@mcp.tool()async def web_search(query: str) -> str:try:return await run_web_search(query)except Exception as e:return f"Search failed: {str(e)}"# External function for R1 reasoning@weave.opasync def run_r1_reasoning(prompt: str) -> str:try:if not r1_api_key:return "Error: DeepSeek API key not set."response = r1_client.chat.completions.create(model="deepseek-reasoner",messages=[{"role": "user", "content": prompt}])return response.choices[0].message.contentexcept Exception as e:return f"DeepSeek-R1 reasoning failed: {str(e)}"# MCP Tool: R1 Reasoning@mcp.tool()async def r1_reasoning(prompt: str) -> str:return await run_r1_reasoning(prompt)# External function for retrieving memory preferences@weave.opdef get_writing_preferences() -> str:preferences = {"writing_preferences": {"headers": "unstyled - no bold headers in articles","terminology": "use 'LLM' - everyone knows what it means","avoid_words": ["crucial", "paramount", "critical", "essential", "invaluable", "In the provided script"],"formatting": "no bullets or lists in articles","commands": {"--c": "only write necessary changes, not full code","--q": "answer concisely and quickly","--a": "write full code from beginning to end","--nb": "rewrite without bullets or lists"},"absolute_dont": ["use canvas for writing code", "say 'structured workflow'"]}}return str(preferences)# MCP Resource: Writing Preferences@mcp.resource("file://memory")def get_memory() -> str:return get_writing_preferences()# External function for summarization prompt@weave.opdef generate_summarization_prompt(text: str) -> str:FIXED_QUESTIONS = """What is the primary objective of this research?What methodologies or algorithms are proposed or evaluated?What datasets or experimental setups are used in this study?What are the key findings and contributions of this research?What are the implications of these findings for the broader field of AI?What limitations or challenges are acknowledged by the authors?What are the proposed future directions or next steps in this research?"""return f"Summarize the following text by answering these questions:\n{FIXED_QUESTIONS}\n\n{text}"# MCP Prompt: Summarization@mcp.prompt()def summarization_prompt(text: str) -> str:return generate_summarization_prompt(text)# Run the MCP Serverif __name__ == "__main__":mcp.run(transport='stdio')
이 서버에는 OpenAI의 API를 사용하는 웹 검색 기능, DeepSeek R1로 구동되는 고급 추론 기능, 사전 정의된 연구 질문을 바탕으로 간결한 요약을 생성하도록 LLM을 안내하는 구조화된 요약 프롬프트 등 여러 도구가 포함되어 있습니다.
코드 분석하기
MCP 및 외부 서비스 초기화
처음에 FastMCP 서버를 초기화합니다. 이 서버는 LLM과 외부 도구 간 상호작용을 관리하는 중심 구성 요소로 작동합니다. 또한 두 개의 외부 클라이언트도 설정합니다:
- OpenAI 클라이언트(웹 검색용)
- DeepSeek R1 클라이언트(고급 수학적 추론용)
이 서비스들은 AI에 정보와 계산 기능에 대한 실시간 접근을 제공합니다.
웹 검색 도구
The run_web_search function은(는) 등록된 외부 유틸리티로서 @weave.op, Weave의 로깅 시스템에서 관찰 가능하도록 합니다. 이 함수는 쿼리하여 OpenAI의 웹 검색 API를 호출해 결과를 반환합니다. MCP 도구 web_search 이 함수는 비동기적으로 호출되어, 필요할 때 LLM이 실시간 검색을 트리거할 수 있습니다.
DeepSeek R1로 고도화된 추론
웹 검색과 마찬가지로, the run_r1_reasoning function은 복잡한 수학적·논리적 추론 작업을 위해 DeepSeek R1의 API와 연동됩니다. 이에 대응하는 MCP 도구는 r1_reasoning, 복잡한 계산이나 다단계 논리에 직면했을 때 LLM이 구조화된 추론 지원을 요청할 수 있도록 보장합니다.
메모리와 작성 선호도
MCP 리소스 get_memory LLM이 미리 정의된 사용자 선호도를 가져올 수 있도록 구조화된 방식을 제공합니다. 여기에는 다음이 포함됩니다:
- 형식 규칙(기사 작성에 유용)
- 금지어 및 표현(작성 시에도 유용)
- 특수 명령 단축키(--c, --q, --a 등 — LLM용 bash 별칭과 비슷한 개념)
각 프롬프트에 선호도를 일일이 주입하는 대신, MCP 클라이언트가 이 리소스를 동적으로 가져와 상호작용 전반의 일관성을 보장할 수 있습니다.
요약 프롬프트
The generate_summarization_prompt 함수는 고정된 연구 질문 집합을 정의하여, 문서를 요약할 때 AI의 응답을 구조화합니다. 이에 대응하는 MCP 프롬프트, summarization_prompt, LLM이 요약 작업에 일관된 방식으로 접근하도록 하여, 생성된 출력이 특정 연구 목표에 부합하도록 보장합니다.
또한 우리는 통합합니다 Weave, 는 MCP 서버와의 상호작용을 추적하기 위한 로깅 및 가시성 도구로 작동합니다. Weave를 사용하면 Claude Desktop과 MCP 서버 사이에서 실행되는 도구 호출과 데이터 흐름을 모니터링할 수 있어 디버깅과 최적화에 도움이 됩니다. 이러한 구현을 통해 우리의 MCP 서버는 Claude Desktop과 외부 데이터 소스 사이의 브리지 역할을 하며, 각 애플리케이션마다 복잡한 맞춤 로직을 추가하지 않고도 LLM이 정보를 검색하고 처리할 수 있도록 구조화된 방식을 제공합니다.
데스크톱용 Claude에서 MCP 서버 사용 설정하기
데스크톱용 Claude가 MCP 서버와 통신하도록 하려면, 서버를 인식하도록 설정해야 합니다. 아직 데스크톱용 Claude를 설치하지 않았다면 최신 버전을 다운로드할 수 있습니다. 여기이미 설치되어 있다면 최신 버전으로 업데이트되어 있는지 확인하세요.
구성 파일 편집하기
데스크톱용 Claude가 연결할 MCP 서버를 지정하려면 구성 파일이 필요합니다. 이 구성 파일은 아래 위치에서 찾거나 새로 만들 수 있습니다: ~/Library/Application Support/Claude/claude_desktop_config.json.
MacOS/리눅스:
VS Code가 설치되어 있다면 다음 명령으로 구성 파일을 열 수 있습니다:
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
Windows:
code $env:APPDATA\Claude\claude_desktop_config.json
서버 테스트하기
이제 모든 준비가 끝났으니 서버를 테스트해 보겠습니다. 먼저 Claude Desktop 앱을 재시작하세요. 그러면 앱이 우리 서버에 연결됩니다. 웹 검색 도구를 테스트하려면 MCP 서버를 통해 쿼리를 보내고 관련 결과를 어떻게 가져오는지 확인해 볼 수 있습니다. 예를 들어 다음과 같은 쿼리를 사용할 수 있습니다: “2025년 AI 연구 최신 업데이트.” 쿼리를 보낸 뒤에는 우리가 만든 검색 도구 사용 권한을 요청하는 팝업이 표시될 것입니다.

확인을 클릭하면 Claude가 우리 검색 도구를 사용해 결과를 가져옵니다. 놀랍게도 Claude는 AI의 개별 분야에 집중하기 위해 검색 도구를 여러 번 반복해서 사용할 수 있습니다!

보시다시피 Claude는 웹 검색 도구를 성공적으로 사용해 최신 정보를 반환합니다. 스크립트에서 Weave를 사용했기 때문에, 애플리케이션 내부 로그에서도 결과를 확인할 수 있습니다.

다음으로 DeepSeek R1의 고급 추론 작업을 테스트하겠습니다. 이 도구는 복잡한 수학 문제와 다단계 추론 작업을 처리하는 데 최적입니다. 이를 보여 주기 위해 복잡한 수학 문제를 입력해 보겠습니다: 도시 A에서 시속 60마일로 출발한 기차와 도시 B에서 시속 75마일로 서로를 향해 출발한 기차가 있을 때, 두 도시 사이의 거리가 300마일이라면 두 기차는 언제 만나나요?"""


우리의 DeepSeek R1 도구를 사용하면 모델이 R1을 활용해 답을 계산할 수 있습니다. 이는 MCP가 Claude Desktop 내부에 검색과 커스텀 모델 같은 매우 강력한 기능을 추가할 수 있게 해 준다는 점을 보여 줍니다. 이제 우리가 추가한 커스텀 프롬프트와 리소스를 테스트하는 단계로 넘어가겠습니다 server.py 파일.
Claude Desktop의 채팅 입력 창 안에 우리 새 도구들과 커스텀 프롬프트, 리소스를 위한 몇 가지 새로운 아이콘이 추가된 것을 눈치채셨을 겁니다.

“Attach from MCP” 아이콘을 클릭하면, 사용 가능한 프롬프트와 리소스를 보여 주는 팝업 메뉴가 표시됩니다.


우리가 “summarization_prompt”,을 클릭하면 요약할 텍스트를 입력할 수 있는 텍스트 필드를 보여 주는 팝업이 표시됩니다.

텍스트를 추가하고 제출을 클릭하면, 우리가 입력한 원래 프롬프트와 텍스트 필드에 붙여넣은 내용이 함께 포함된 새 텍스트 파일이 채팅에 첨부된 것을 확인할 수 있습니다.

이제 채팅을 Claude로 보내기만 하면 요약을 만들어 줍니다!

또한 “Attach from MCP” 메뉴의 드롭다운에서 메모리 리소스를 선택해, 채팅에서 사용할 메모리 리소스를 지정할 수도 있습니다.

이는 특정 채팅 대화에 필요한 메모리를 쉽게 관리할 수 있게 해줍니다.
결론
MCP는 AI 모델을 외부 데이터 소스, 도구, 프롬프트와 연결하기 위한 체계적이고 표준화된 프레임워크를 제공하여 파편화된 임시 통합의 필요를 없애 줍니다. LLM 애플리케이션이 외부 시스템과 상호작용하는 방식을 통일함으로써, MCP는 확장성, 보안성, 상호운용성을 강화하여 AI 기반 애플리케이션을 더욱 신뢰성과 적응성이 높은 형태로 만듭니다.
이 가이드에서는 MCP의 아키텍처를 살펴보며, 호스트, 클라이언트, 서버가 어떻게 협력해 동적인 문맥 인지형 AI 상호작용을 구현하는지 자세히 설명했습니다. 또한 OpenAPI와 GraphQL 같은 기존 통합 방식과 비교해, MCP가 LLM 중심 워크플로에 최적화된 프로토콜을 제공함으로써 어떻게 개선을 이루는지도 검토했습니다.
이 튜토리얼은 실제 환경에서 동작하는 MCP 서버 구현을 시연했으며, 웹 검색, DeepSeek R1을 활용한 고급 추론, 그리고 구조화된 요약 프롬프트 등의 기능을 통합했습니다. Claude Desktop을 MCP와 연동하도록 구성하면, 개발자는 사용자 정의 도구, 메모리 관리, 실시간 데이터 접근을 통해 AI 애플리케이션을 매끄럽게 확장할 수 있습니다.
MCP는 단순한 또 하나의 인터페이스를 넘어, AI 모델을 더욱 상호작용적이고 유연하며 실용적으로 만드는 데 필요한 기반적 도약입니다. 챗봇을 고도화하든, 엔터프라이즈 워크플로를 통합하든, IoT 시스템에 AI를 내장하든, MCP는 견고한 AI 기반 애플리케이션을 구축하는 데 필요한 확장성과 효율성을 제공합니다.
Add a comment