LangChain의 MCP 지원 변경 사항: 상태 비저장 프로토콜 및 기타 기능
요약
LangChain이 Model Context Protocol (MCP) 지원을 대폭 개선하고 새로운 사양을 도입했습니다. 주요 변경점은 MCP 지원 패키지가 메인 라이브러리로 통합되고, FastMCP 기반으로 구축되어 호환성이 높아진 것입니다. 특히 상태 비저장(stateless) 코어 아키텍처를 채택하여 서버의 확장성과 안정성을 크게 향상시켰습니다.
핵심 포인트
- MCP 지원이 `langchain-mcp-adapters`에서 `langchain.mcp`로 통합되었습니다.
- FastMCP 기반으로 구축되어 구/신 사양 서버 모두와 호환됩니다.
- 새로운 상태 비저장(stateless) 사양은 세션 의존성을 제거하여 확장성을 높였습니다.
- 캐싱 및 인터럽트를 통한 Elicitation 기능이 지원되어 사용자 경험이 개선되었습니다.
MCP의 공식 Tier 1 SDK는 월간 거의 5억 건에 육박하는 다운로드를 기록하고 있으며, 사용량은 그보다 더 빠르게 증가하고 있습니다. ChatGPT 사용자들의 MCP 도구 호출은 2026년 동안 98배 증가했으며, 지난 8월에는 두 배 이상 증가했습니다.

Model Context Protocol (MCP)은 에이전트를 도구에 연결하는 가장 인기 있는 방법입니다. 이 프로토콜은 지난 7월 출시 이후 최대 규모의 재작성을 거쳤습니다. 저희는 새로운 사양(spec)과 그 뒤에 숨겨진 증가하는 수요에 맞춰 LangChain의 MCP 지원을 개선했습니다.
세 가지 변화가 있었습니다:
MCP 지원이 메인 패키지로 이동합니다. 이제 별도의 langchain-mcp-adapters가 아니라 langchain.mcp에서 사용 가능합니다.
FastMCP를 기반으로 구축됩니다. 전송(Transports), 인증(auth), 연결 관리, 프로토콜 협상 등은 클라이언트 측 하위 계층에서 처리되므로, 구 사양과 신 사양의 서버 모두 작동합니다.
인터럽트를 통한 Elicitation 및 클라이언트 측 캐싱이 지원됩니다. 새로운 사양은 서버의 호출 중간 단계(mid-call) elicitation을 재시도 가능한 라운드(retry-able round)로 변경했으며, 저희는 이를 LangGraph 인터럽트로 노출합니다. 또한 도구 목록(tool lists)을 캐싱할 수 있게 되어, 도구 카탈로그를 더 이상 매번 실행 시 다시 가져올 필요가 없습니다.
새로운 상태 비저장 사양 (The new, stateless spec)
역사적으로 (이전 사양의 경우) 모든 MCP 호출은 세션(sessions)을 중심으로 구축된 프로토콜을 통해 실행되었습니다. MCP를 통해 도구를 호출한다는 것은 먼저 세션을 여는 것을 의미했습니다. 클라이언트와 서버가 악수(shook hands)를 나누고, 서버가 세션 ID를 반환했으며, 이후의 모든 요청은 이 ID를 포함해야 했기 때문에 해당 클라이언트를 발급한 특정 서버 인스턴스에 고정시키는 문제가 있었습니다.

어떤 규모로든 원격 서버를 운영하려면 Sticky Routing과 공유 세션 저장소(shared session store)가 필요했습니다.
이 모든 것이 새로운 MCP 사양에서 변경되었으며, 이는 상태 비저장 코어(stateless core)를 가능하게 했습니다. MCP 팀은 개발자들이 서버의 더 나은 안정성과 확장성을 원했기 때문에 가장 많이 요청된 기능 중 하나로 상태 비저장 코어를 설명합니다. 새 사양에서는 고정시킬 것이 아무것도 없습니다. 재배포가 더 이상 활성 세션을 종료시키지 않는데, 왜냐하면 그런 세션이 없기 때문입니다.

이것은 두 가지를 열어주었고, 둘 다 이제 langchain.mcp에 포함되었습니다.:
캐싱(Caching): 서버가 자신의 도구 목록이 얼마나 오랫동안 최신 상태를 유지할 수 있는지 알려줄 수 있어, 클라이언트가 매번 실행할 때마다 이를 다시 가져오는 것을 막아줍니다.엘리시테이션(Elicitation): 도구가 호출자에게 삭제 확인을 요청하거나 모델이 누락한 매개변수를 제공하는 등 잠시 멈춰서 무언가를 물어볼 수 있게 되었으며, 기다리는 동안 연결을 유지할 필요가 없습니다.
수정 사항에 대한 더 자세한 정보는 MCP 팀의 공지사항을 읽어보세요.
1급(First-class) MCP 지원
저희는 MCP 지원을 langchain으로 옮겨서 에이전트에게 1급 기능으로 만들었습니다. 이제 mcp extra를 통해 설치할 수 있습니다:
pip install "langchain[mcp]"
기존 패키지에서 사용되던 MultiServerMCPClient는 단일 MCPAdapter 클래스로 통합되었습니다. 채택하는 방법에 대한 더 자세한 지침은 마이그레이션 가이드를 읽어보세요. 기본 사용법은 다음과 같습니다:
from deepagents import create_deep_agent from langchain.mcp import MCPAdapter async def main(): ...
도구들은 일반적인 LangChain 도구이므로, create_deep_agent, create_agent 또는 직접 연결한 그래프 등 어디든 배치될 수 있습니다.
FastMCP 기반 구축
FastMCP는 전송 계층(transport layer)에 걸쳐 깨끗한 추상화(abstractions)를 제공합니다: 연결, 인증, 캐싱 및 프로토콜 협상입니다. 그 클라이언트 표면은 사용자에게 직접 사용할 수 있습니다.
MCP는 이제 두 가지 뚜렷한
서버들이 서로 다를 필요가 없다면, 단순한 설정 딕셔너리(config dict)만으로 충분하며, 연결 가이드(connections guide)에서 어떤 것을 사용할지 알려줍니다.
클라이언트의 나머지 부분은 사용자가 직접 사용할 수 있습니다:
인증 (Auth): bearer 토큰, 전체 OAuth 2.1 흐름, 기계 간 자격 증명(machine-to-machine credentials), CIMD 또는 모든 httpx2.Auth
전송 계층 (Transports): 스트리밍 HTTP, stdio 및 인메모리(in-memory) 방식이며, 대상에서 추론하거나 헤더, SSL 및 공유된 httpx2 풀을 위해 구성됩니다.
캐싱 (Caching): 서버의 TTL(Time To Live)이 허용하는 동안 유지되는 결과 목록
진행 상황 및 로그 (Progress and logs): 장시간 실행 호출에서 오는 알림
FastMCP는 또한 사용자가 직접 서버를 구축하고 테스트하기 쉽게 만듭니다. FastMCP 인스턴스는 서브프로세스와 소켓이 없는 유효한 어댑터 대상(adapter target)이므로, 에이전트가 실제 MCP 서버에 대해 인-프로세스(in-process)로 실행될 수 있습니다.
인터럽트를 통한 추출 (Elicitation via interrupts)
추출(Elicitation)은 MCP의 인간 개입 루프 지원 기능입니다. 즉, 호출자에게 무언가를 먼저 요청하지 않으면 완료할 수 없는 도구입니다. 이 상태 비저장 사양(stateless spec)은 이를 클라이언트가 답변을 첨부하여 재시도하는 일반적인 요청으로 변환했으며, 이는 이미 사용하고 있는 인터럽트 프리미티브(interrupt primitive)를 사용하여 지원할 수 있게 했습니다. 실행이 일시 정지되고, 에이전트의 작업을 검토하는 사람이 답변하면 다시 재개됩니다:
pauzed = await agent.ainvoke(
{"messages": [{"role": "user", "content": "4인용 테이블을 예약해 주세요."}]}, config
)
...
체크포인터(checkpointer) 외에는 설정할 것이 없으므로, 일시 정지된 실행이 기다릴 곳이 있습니다. 추출 관련 문서는 질문 거절 방법과 파괴적인 도구(destructive tools)를 동일한 승인 흐름 뒤에 게이팅(gating)하는 방법을 다룹니다.
클라이언트 측 캐싱 (Client-side caching)
모든 에이전트 실행은 존재하는 도구를 발견하는 것부터 시작하며, 이는 모델이 어떤 것을 보기도 전에 도구를 발견하기 위한 왕복 요청을 의미합니다. 이제 서버는 자신들의 도구 목록이 얼마나 오랫동안 신선하게 유지될 수 있는지 알려줄 수 있으므로, 카탈로그를 캐시에서 제공할 수 있습니다. cache=True
은 해당 힌트를 존중하는 인메모리 캐시를 제공합니다:
from fastmcp import Client
from langchain.mcp import MCPAdapter
client = Client("https://billing.internal/mcp", cache=True)
...
캐시는 클라이언트 소속이므로, 호출자당 하나의 클라이언트를 유지하면 카탈로그가 교차하는 것을 방지할 수 있습니다. 응답 캐싱(response caching)에서는 TTL, 공유 스토어 및 기타 캐시 모드에 대해 확인하십시오.
시작하기
uv pip install "langchain[mcp]"
이 네임스페이스는 langchain[mcp]>=1.4.0을 필요로 하며, 현재 베타 버전이므로 API가 변경될 수 있습니다. 오늘 Python 지원을 제공하며, TypeScript는 곧 뒤따를 예정입니다.
- LangChain의 MCP: 빠른 시작(quickstart), 연결(connections), 인증(auth), 유도(elicitation), 및 도구 결과(tool results)
langchain-mcp-adapters에서 마이그레이션하기
: 모든 공개 기능은 대체품으로 매핑됨 - FastMCP 클라이언트 문서: 하위 클라이언트
- MCP
2026-07-28
사양(specification)
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기