AI 어시스턴트가 이제 막 인턴 수준에 진입했습니다.
PDF 분석, SQL 생성, 쿠버네티스 관련 아재 개그 등 어떤 단일 작업이든 완벽하게 수행하지만, Slack, Gmail, Jira를 넘나들며 조율하라고 하면 API 키로 얽힌 엉뚱한 기계의 디버깅까지 떠맡아야 하는 상황에 직면합니다.
앤트로픽의 모델 컨텍스트 프로토콜(MCP)은 이러한 혼란을 표준화하는 것을 목표로 합니다. 사용자 입장에서는 컴퓨터 공학 학위 없이도 AI 모델을 Figma 파일과 Linear 티켓에 연결할 수 있다는 의미입니다. 개발자 입장에서는 "모델이 왜 자꾸 염소 이모티콘만 내놓는거지?"와 같은 순간이 줄어든다는 의미입니다.
MCP와 AI 통합이 미래에 미치는 영향을 살펴보겠습니다. 먼저, MCP가 해결하는 문제를 이해해야 합니다.
도구를 지능적으로 활용하면, 단순히 "오 신기하네"에서 끝나지 않고, AI 모델이 앱과 서비스를 유기적으로 연결하는 에이전트형 어시스턴트로 진화합니다.
AI 용어에서 도구란 대규모 언어 모델(LLM)이 외부 세계와 상호 작용할 수 있도록 하는 코드 모듈로 즉, JSON 또는 함수 매개변수를 모델에 노출하는 API 래퍼를 뜻합니다.
생태계에 훌륭한 도구들이 있지만, 그것들을 연결하는 것은 IKEA 설명서보다 더 어렵게 느껴집니다. 왜 2025년에도 여전히 이렇게 어렵게 느껴질까요?
모든 API 엔드포인트( get_unread_messages
, search_messages
, mark_as_read
)는 자체적인 도구가 되므로 상세한 문서화가 필요합니다. 모델은 언제 도구를 호출해야 하는지, 어떤 엔드포인트를 사용해야 하는지, 각 엔드포인트의 JSON 스키마, 인증 헤더, 페이지네이션 및 오류를 모두 기억해야 합니다.
사용자가 "Mohab이 Q4 보고서에 대해 이메일 보냈어?"라고 물으면 AI는 다음을 수행해야 합니다.
search_messages
엔드포인트를 선택합니다sender:"mohab@company.com"
및 contains:"Q4 report"
를 포함한 JSON으로 포맷합니다.문제는 LLM의 컨텍스트 윈도우가 제한적이라는 것입니다. 이 모든 정보를 시스템 프롬프트에 넣으면 모델이 모든 것을 기억하더라도 과적합될 위험이 있습니다. 즉, 모델이 적응력 있는 문제 해결 모델이 아니라 융통성 없는 매뉴얼 기계로 전락할 수 있습니다.
간단한 API 작업도 여러 개의 엔드포인트가 필요합니다. CRM 연락처를 업데이트하고 싶으신가요?
get_contact_id
호출read_contact
로 현재 데이터 가져오기patch_content
를 통한 업데이트결정론적 코드에서는 추상화된 기능을 한 번만 작성하면 바로 사용할 수 있기 때문에 문제가 되지 않습니다. 하지만 LLM에서는 각 단계마다 매개변수가 잘못 인식되거나 잘못 라우팅된 호출의 위험이 있습니다.
API가 변경되면 새로운 엔드포인트가 개발되고 OAuth 플로우가 업데이트됩니다. 서비스가 업그레이드될 때마다 현재 설정이 AI 에이전트의 "머슬 메모리"를 손상시킬 위험이 있습니다.
Claude를 Gemini Flash로 바꾸고 싶으신가요? 모든 도구 설명을 다시 작성하는 재미가 쏠쏠합니다. 오늘날의 통합 기능은 API 세부 사항을 맞춤형 모델 프롬프트에 통합하기 때문에 업그레이드를 고통스럽게 만듭니다.
웹은 HTTP 동사(GET/POST/PUT/DELETE)를 표준화함으로써 승리했습니다. AI 도구는 끝없는 API 세부 사항을 통해 모델이 "어떻게"가 아닌 "무엇을" 해야 하는지에 집중할 수 있도록 하는 범용적인 프로토콜이 필요합니다.
표준화 없이는 확장 가능하고 안정적인 AI 에이전트를 유지하는 것은 실현 불가능합니다.
MCP는 도구 통합의 복잡한 문제를 해결하기 위한 최초의 대규모 시도입니다. 2024년 11월 Anthropic이 발표한 이 사양은 AI 모델과 외부 서비스 간에 꼭 필요한 추상화 역할을 합니다.
기능을 제한하지 않고 연결을 표준화하는 방법은 다음과 같습니다.
AI 모델이 수많은 API 스키마를 처리하도록 강제하는 대신, MCP는 모델이 검색할 수 있는 일종의 "앱 스토어"와 유사한 표준화된 "도구 디렉토리"를 도입합니다.
서비스는 일관된 JSON-RPC 형식을 사용하여 수행할 수 있는 작업("Slack 메시지 보내기", "Linear 티켓 생성")과 이를 수행하는 방법(매개변수, 인증 방법)을 설명합니다.
모델은 사용 가능한 도구를 동적으로 발견할 수 있어, AI가 구문에 얽매이지 않고 도구를 언제, 왜 사용해야 하는지에만 집중할 수 있습니다.
도구는 귀중한 모델 컨텍스트 윈도우 공간을 소모합니다. MCP는 다음과 같은 방법을 통해 시스템 프롬프트의 크기를 간소화합니다.
userID
인가 user_id
인가?"와 같은 혼란 방지)MCP는 프론트엔드와 백엔드 사이의 API 경계와 같습니다. AI 모델(생각하는 사람)과 외부 도구(실행하는 사람) 사이를 명확하게 구분합니다.
여기서 가장 큰 장점은 Slack이 API를 수정하더라도 멋진 AI 에이전트가 망가지지 않는다는 점입니다. MCP 계층은 버퍼 역할을 하여 변경 사항을 변환하므로 모델을 지속적인 재훈련하거나 프롬프트를 개편할 필요가 없습니다. 서비스는 업데이트될 수 있고, 모델은 더 스마트해질 수 있으며, 대부분의 기능은 (대부분) 정상적으로 작동합니다.
비결정적 LLM에 원시 API 키를 넘겨주는 것은 좋지 않습니다. MCP는 OAuth 2.0 플로우를 사용하여 인증을 표준화함으로써 필요한 보안을 제공합니다. 이를 통해 모든 MCP 기능에 대해 세분화된 권한 범위(읽기 전용, 쓰기 전용)를 설정할 수 있습니다.
이러한 범위는 안전장치 역할을 합니다. 브레인스토밍 GPT가 고객 데이터베이스를 삭제하는 "기발한 아이디어"를 갖는 것을 방지합니다. 이는 예측 불가능한 시스템에 있어 필수적인 최소 권한 원칙을 강제하는 것입니다.
전반적으로 MCP는 도구 통합을 "암기해야 할 복잡한 스키마를 가진 15개의 도구"에서 "사용 가능한 도구를 발견하고 사용하기 위한 표준화된 프로토콜"로 전환합니다. 이것은 확장 가능하고 신뢰할 수 있는 AI 에이전트를 민주화하는 데 꼭 필요한 변화입니다.
그렇다면 MCP는 어떻게 목표를 현실로 구현할까요? 주요 역할(클라이언트, 서버, 서비스 제공자)과 기능(도구, 리소스, 프롬프트)을 살펴보고 모든 요소가 어떻게 상호 작용하는지 알아보겠습니다.
MCP 생태계는 크게 세 가지 주요 플레이어로 구성됩니다.
클라이언트는 Cursor, Windsurf, Cline, Asari 또는 Claude Desktop 앱과 같이 실제로 사용하는 앱입니다. 이들은 시스템의 프론트엔드(사용자, AI 모델 및 MCP 서버) 간의 통신을 처리합니다.
먼저, MCP 서버에 사용 가능한 기능 목록을 요청합니다. 그런 다음, 사용자의 요청과 함께 AI 모델에 이러한 옵션(예: "읽지 않은 이메일 요약")을 보여줍니다. AI가 도구를 선택하고 올바른 매개변수를 출력하면 클라이언트는 서버와 함께 실제 버튼 클릭을 처리하고 결과를 가져옵니다.
클라이언트는 또한 AI 모델에게 "MCP 101"을 제공해 기본 규칙을 학습시킵니다.
서버는 사용자/AI와 서비스 제공자 사이의 중재자이자 범용적인 어댑터입니다. MCP 서버는 표준화된 JSON-RPC 인터페이스를 통해 기능을 제공하여 모든 호환 클라이언트가 검색하고 액세스할 수 있도록 합니다.
이들은 자연어와 구조화된 형식을 모두 사용하여 도구를 설명하고, 인증 핸드셰이크를 처리하며, 모든 사람이 동일한 MCP 언어를 사용하도록 보장합니다.
서비스 제공자는 Slack, Notion, GitHub, 여러분의 회사 데이터베이스 등 실제 작업을 수행하는 플랫폼입니다. 서비스 제공자는 기존 API를 변경할 필요가 없습니다. 적응하는 것은 MCP 서버의 역할입니다.
이 아키텍처는 서비스 제공자와 개발자 커뮤니티에 힘을 실어줍니다. 대규모 LLM 제공업체가 모든 도구 통합을 구축하길 기다릴 필요 없이, 누구나 MCP 서버를 만들어 API를 통해 모든 서비스를 MCP 호환 클라이언트에 연결할 수 있습니다.
Claude와 같은 네이티브 모델 지원이 이상적이기는 하지만, 이 프로토콜은 모델에 구애받지 않고 클라이언트가 다른 LLM과의 통신을 이어주는 것을 목표로 합니다.
MCP는 모델이 도구를 사용하는 데 도움이 된다는 것을 알고 있습니다. create_task
또는 search_emails
와 같이 AI가 다른 시스템과 상호 작용할 수 있도록 하는 작업이 MCP의 핵심입니다.
하지만 MCP 서버는 리소스와 프롬프트를 노출할 수도 있습니다.
리소스는 지속적인 AI 경험을 가능하게 합니다. AI가 여러 세션에서 읽고 쓸 수 있는 영구 데이터(파일, 데이터베이스 항목, 지식 베이스)를 생각해보세요. 채팅 창이 닫히는 순간 모든 것을 잊어버리는 금붕어같은 기억력은 더 이상 없습니다.
MCP를 통해 고유 URI(예: file://home/user/documents/coding-prefs.json
)로 정의된 이러한 리소스는 프로젝트 노트, 사용자 기본 설정, 코딩 스타일, 팀 위키 등 원하는 모든 것이 포함될 수 있습니다. 또한 여러 사람(또는 AI 어시스턴트)이 동일한 리소스에 대해 협업하여 더 나은 에이전트형 플로우가 가능해집니다.
이것이 ChatGPT 또는 Windsurf와 같은 기존 AI 메모리 시스템과 어떻게 다를까요? 다시 한번 말씀드리지만, MCP는 AI 모델을 AI 에이전트로 만들기 위한 모범 사례를 표준화합니다. 리소스는 새로운 개념이 아닙니다. 단지 MCP를 사용하면 클라이언트는 모델에게 리소스를 사용하는 방법을 한 번만 보여주면 되고, 모델은 모든 리소스에서 읽고 쓸 수 있다는 것입니다.
하지만 리소스(및 프롬프트)는 현재 대다수의 MCP 클라이언트에 구현되어 있지 않습니다. Claude Desktop에서도 리소스 지원이 제한적이며, 모델의 동적 검색을 지원하지 않습니다.
도구는 AI가 작업을 수행하도록 해주지만, AI가 작업을 수행하는 동안 어떻게 행동해야 하는지 사용자가 직접 안내해야 한다면 어떨까요? 바로 이럴 때 MCP 프롬프트가 미묘한 차이를 처리해 줍니다. AI가 필요에 따라 이용할 수 있는 사용 설명서나 스타일 가이드라고 생각하면 됩니다.
MCP는 도구의 기능을 아는 것만으로는 충분하지 않은 경우가 있기 때문에 이것을 프로토콜에 통합시킵니다. 프롬프트를 통해 AI가 회사의 특이한 브랜드 이미지를 채택하거나, delete_everything
버튼을 누르기 전에 특정 안전 체크리스트를 준수하도록 보장할 수 있습니다.
실제 사례(현재 MCP 클라이언트 상태로는 전혀 불가능한 사례이기는 합니다)를 살펴보겠습니다.
몇 가지 멋진 Notion MCP 서버가 있지만, Notion의 API는... 너무 복잡할 수 있습니다. 모든 "블록"에는 자체 메타데이터가 잔뜩 있습니다. AI 모델에게 MCP 도구를 통해 Notion에서 블로그 게시물을 직접 수정하라고 요청하면, 실제 콘텐츠와 API 노이즈를 분리하는 데 어려움을 겪으며 종종 손실됩니다.
바로 이 부분에서 프롬프트와 리소스가 함께 사용될 수 있습니다. MCP 프롬프트는 AI에게 "Notion에서 긴 텍스트를 편집할 때는 content
필드에만 집중하세요. write-notion-to-resource
도구를 사용하여 텍스트를 임시 리소스(Resource A
)에 저장하고, 거기서 편집한 다음, write-resource-to-notion
도구를 사용하여 원본을 업데이트하세요."라고 안내할 수 있습니다.
이것은 표준화된 메커니즘을 통해 즉석에서 가르치는 미니 워크플로우이며, 안내(프롬프트), 동작(도구), 상태(리소스)를 결합합니다.
MCP는 컨텍스트 윈도우 공간을 다른 곳에서 절약하기 때문에 프롬프트를 세부적으로 표현할 수 있습니다. 그리고 도구 및 리소스와 마찬가지로 프롬프트도 동적으로 검색 가능합니다. MCP 서버에 150개의 프롬프트 라이브러리를 포함하더라도 AI는 과부하가 걸리지 않습니다. 왜냐하면 프롬프트는 도구처럼 정의되기 때문입니다. AI는 클라이언트 또는 자체 추론을 통해 필요할 때 특정 프롬프트를 참조하도록 지시받을 수 있습니다.
그렇다면 AI는 MCP 서버의 멋진 기능을 어떻게 찾을까요?
클라이언트 앱(Claude Desktop 또는 Cursor와 같은)이 MCP 서버에 연결될 때, "무엇을 할 수 있나요?"라는 질문을 받게 됩니다. 서버는 사용 가능한 도구, 리소스 및 프롬프트 목록을 표준 방식으로 정의하여 응답합니다.
그런 다음 클라이언트는 사용자 쿼리를 기반으로 관련 도구를 모델에 제시하고, 모델의 요청에 따라 서버를 통해 선택한 도구를 호출하고, OAuth 범위를 처리하여 "음, Claude가 프로덕션 DB를 삭제했어" 같은 고전적인 상황을 방지하는 등 앞뒤 통신을 관리합니다.
다시 말해, 모든 것은 클라이언트의 구현에 달려 있습니다. MCP의 다양한 기능 도입이 점점 더 증가함에 따라 모델에 대한 더 나은 기능이 제공될 것입니다.
현재 MCP에 대한 많은 과대 광고가 있으며, 그 중 상당 부분은 그럴듯합니다.
OpenRouter가 모든 것을 다시 작성하지 않고도 AI 모델을 바꿀 수 있도록 하는 것처럼, MCP는 도구, 리소스 및 프롬프트에도 동일하게 하려는 목표를 가지고 있습니다. 이는 표준 인터페이스를 통해 종속성에서 벗어나 어떤 MCP 서버의 기능이든 즉시 활용할 수 있도록 합니다.
이상적인 세계에서는 사용자가 직접 MCP 서버를 작성하거나 (또는 즐겨 사용하는 서버를 수집하고) 모든 공급자의 모든 모델과 함께 쉽게 사용할 수 있게 하여, 모든 LLM에서 개인화되고 유용한 에이전트를 생성할 수 있음을 의미합니다.
하지만 아직 해야 할 일이 많이 남아 있습니다. MCP는 표준화를 위한 첫 시도이며, 아직 널리 채택되지 않았습니다. 따라서 이러한 점을 고려하여 잠재력과 현재의 장애물을 모두 살펴보겠습니다.
… 하지만 우리는 아직 갈 길이 멉니다.
MCP는 가능한 청사진을 제공하지만, 개발자들은 이제 막 표준화된 도구 생태계를 구축하기 시작했을 뿐입니다.
그럼에도 불구하고 MCP를 사용할 준비가 되었다면 시작하는 데 도움이 되는 리소스는 다음과 같습니다.
곧 MCP 서버를 직접 구축하는 방법에 대한 가이드도 작성할 예정입니다. 저는 MCP의 잠재력을 크게 기대하고 있으며, 참여하는 개발자가 많을수록 모두에게 더 큰 이익이 될 것입니다.
오늘날의 AI 툴은 마치 얽히고설킨 전선 상자처럼 느껴집니다. 클로드는 여기, GPT는 저기 있지만, 제대로 연결된 것은 아무것도 없습니다. MCP는 이러한 복잡함을 해소하는 방법을 제안합니다. 개발자는 열 개가 아닌 하나의 통합 코드를 작성하고, 사용자는 앱을 실제로 연결하는 AI를 사용하게 되며, 서비스는 "이게 왜 안 되는 거지?!"라는 질문에 휩쓸리지 않게 됩니다.
그렇긴 하지만, 모든 것은 플러그인을 통해서만 작동합니다. 서비스가 MCP를 채택하고 모델이 원활하게 작동한다면, 서커스 공연보다는 스위스 군용 칼처럼 느껴지는 AI를 얻게 될 것입니다. 아직 그 수준에 도달하지는 못했고, MCP가 최종 표준이 아닐 수도 있지만, 처음으로 그 길이 덕트 테이프와 기도로만 이루어지지는 않습니다. Anthropic의 문서에서 말했듯이, MCP는 AI 세계의 USB-C가 될 수 있는 실질적인 시도입니다.
🚀 한국어로 된 프런트엔드 아티클을 빠르게 받아보고 싶다면 Korean FE Article을 구독해주세요!
좋은 글 감사합니다