MCP in LangChain: Stateless Protocol, Elicitation, and More!
Quick Summary
LangChain은 새 MCP 무상태 규격에 맞춰 langchain.mcp를 도입하고, FastMCP 기반의 구·신규 규격 호환, 인터럽트를 통한 사용자 응답 요청, 클라이언트 캐싱을 지원한다.
🖼️ 인포그래픽

🖼️ 4컷 인포그래픽

💡 한 줄 요약
LangChain은 새 MCP 무상태 규격에 맞춰 langchain.mcp를 도입하고, FastMCP 기반의 구·신규 규격 호환, 인터럽트를 통한 사용자 응답 요청, 클라이언트 캐싱을 지원한다.
📌 핵심 요약
- MCP 공식 Tier 1 SDK의 월간 다운로드는 약 5억 회에 근접했으며, ChatGPT 사용자의 MCP 도구 호출은 2026년 들어 98배 증가하고 8월에만 두 배 이상 늘었다.
- 새 MCP 규격은 세션 중심 구조를 무상태 코어로 바꿔 특정 서버 인스턴스에 대한 연결 종속을 없애고, 도구 목록 캐싱과 연결을 유지하지 않는 사용자 응답 요청을 지원한다.
- MCP 지원은 별도 langchain-mcp-adapters 패키지에서 langchain.mcp로 이동했으며, MultiServerMCPClient는 MCPAdapter로 통합됐다. langchain[mcp]>=1.4.0이 필요하고 현재 베타이며, Python 지원이 먼저 제공되고 TypeScript 지원은 예정돼 있다.
- FastMCP는 전송, 인증, 연결 관리, 규격 협상을 담당한다. ClientGroup은 서버별 규격과 인증 설정을 유지하며, 도구 이름에 서버 접두사를 붙여 구분한다.
- 사용자 응답 요청은 LangGraph 인터럽트로 실행을 중단하고 답변을 받아 재개하며 checkpointer가 필요하다. 클라이언트 캐싱은 서버의 TTL을 따르고, 호출자별 클라이언트를 사용해 도구 목록이 서로 섞이지 않도록 한다.
🧩 주요 포인트
- 세션 종속 제거 → 고정 라우팅과 공유 세션 저장소가 필요했던 운영 부담을 줄이고, 재배포에 따른 세션 단절 문제를 해소한다.
- MCPAdapter와 FastMCP의 역할 분담 → 에이전트에는 일반 LangChain 도구를 제공하면서 서버별 구·신규 규격 차이를 연결 계층에서 처리한다.
- LangGraph 인터럽트와 서버 TTL 기반 캐싱 → 사용자 응답 대기와 도구 탐색을 각각 재개 가능한 실행 및 유효기간 내 목록 재사용으로 처리한다.
🧠 상세 정리
1. 사용 증가와 무상태 규격으로의 전환
원문은 MCP 공식 Tier 1 SDK의 월간 다운로드가 약 5억 회에 근접하고, ChatGPT 사용자의 MCP 도구 호출이 2026년 들어 98배 증가했다는 수치로 개편 배경을 설명한다. 기존 규격에서는 도구 호출 전에 클라이언트와 서버가 핸드셰이크를 수행하고, 이후 요청마다 발급받은 세션 ID를 전달해야 했다. 이 구조는 클라이언트를 세션을 발급한 서버 인스턴스에 묶어 두므로, 원격 서버를 확장하려면 고정 라우팅과 공유 세션 저장소가 필요했다. 7월의 규격 개편은 무상태 코어를 도입해 이러한 종속을 없앴으며, 세션 자체가 없으므로 재배포가 진행 중인 세션을 끊는 문제도 사라진다고 설명한다.
2. 주 패키지에 통합된 MCP 지원
LangChain은 MCP를 에이전트의 기본적인 도구 연결 방식으로 지원하기 위해 관련 기능을 별도 패키지에서 langchain.mcp 네임스페이스로 옮겼다. 설치에는 langchain[mcp]를 사용하며, 기존 langchain-mcp-adapters의 MultiServerMCPClient는 단일 MCPAdapter 클래스로 통합된다. 기본 사용 흐름은 MCPAdapter로 서버에 연결하고 list_tools()로 도구를 가져온 뒤 에이전트 생성 시 전달하는 방식이다. 반환된 도구는 일반 LangChain 도구이므로 create_deep_agent, create_agent 또는 직접 구성한 그래프에서 사용할 수 있다. 기존 공개 기능과 대체 기능의 대응 관계는 별도의 마이그레이션 가이드에서 안내한다.
3. FastMCP를 통한 규격 호환과 연결 관리
FastMCP는 전송, 인증, 연결 관리, 캐싱, 규격 협상을 담당하며, 개발자는 그 클라이언트 기능에 직접 접근할 수 있다. 연결마다 새 규격을 먼저 시도하고 아직 업그레이드하지 않은 서버에는 기존 핸드셰이크 방식으로 전환하므로, 양쪽 서버에 대해 에이전트 코드를 바꿀 필요가 없다. ClientGroup을 사용하면 서버마다 지원 규격과 인증 정보를 따로 유지하고, 같은 search 도구도 billing_search와 docs_search처럼 서버 접두사로 구분한다. 인증에는 베어러 토큰과 OAuth 2.1 등이, 전송에는 스트리밍 가능한 HTTP와 표준 입출력 및 메모리 내 연결이 지원된다. FastMCP 인스턴스를 어댑터 대상으로 직접 전달하면 별도 프로세스나 소켓 없이 실제 MCP 서버와 에이전트를 같은 프로세스에서 실행할 수 있다.
4. 인터럽트로 처리하는 사용자 응답 요청
사용자 응답 요청은 도구가 작업을 마치기 전에 호출자에게 확인이나 누락된 입력을 요구하는 MCP의 사람 참여 기능이다. 새 무상태 규격에서는 이를 답변을 첨부해 다시 시도할 수 있는 일반 요청으로 처리하므로, 응답을 기다리는 동안 연결을 계속 열어 둘 필요가 없다. LangChain은 이 흐름을 LangGraph 인터럽트로 노출해 실행을 멈추고, 검토자의 답변을 받은 뒤 다시 이어 간다. 원문의 식당 예약 예시는 4명 예약 요청에서 빠진 날짜를 질문한 다음, 해당 질문의 키에 답변을 연결해 Command로 실행을 재개한다. 중단된 실행 상태를 보관할 checkpointer가 필요하며, 관련 문서는 질문 거절과 파괴적 도구 실행에 같은 승인 흐름을 적용하는 방법도 다룬다.
5. 서버 유효기간을 따르는 클라이언트 캐싱
에이전트는 실행을 시작할 때 사용할 수 있는 도구를 알아내야 하므로, 기존에는 모델이 작업을 시작하기 전에 도구 목록을 조회하는 왕복 요청이 발생했다. 새 규격에서는 서버가 도구 목록의 유효기간을 알릴 수 있어, 클라이언트가 그 기간 동안 캐시된 목록을 재사용할 수 있다. FastMCP 클라이언트에 cache=True를 설정하면 서버의 유효기간 안내를 따르는 메모리 캐시가 활성화된다. 캐시가 구성되면 기본 동작인 cache_mode="use"가 TTL 내의 목록을 반환하고, 새로 조회한 결과는 저장한다. 캐시는 클라이언트에 속하므로 호출자마다 클라이언트를 따로 두어 목록이 섞이지 않도록 하며, 추가 문서는 TTL과 공유 저장소 및 다른 캐시 모드를 설명한다.
6. 도입 조건과 현재 지원 범위
새 네임스페이스를 사용하려면 langchain[mcp]>=1.4.0이 필요하며, 원문은 현재 베타이므로 API가 바뀔 수 있음을 명시한다. 공개 시점에는 Python 지원을 제공하고 있으며, TypeScript 지원은 후속 제공을 예고한 상태다. 시작 안내는 설치 명령과 함께 연결, 인증, 사용자 응답 요청, 도구 결과를 설명하는 LangChain 문서를 제시한다. 기존 패키지 이용자를 위한 마이그레이션 가이드와 기반 계층을 설명하는 FastMCP 클라이언트 문서, 2026년 7월 28일 MCP 규격도 참고 자료로 연결한다. 따라서 현재 제공되는 Python 기능과 아직 예정 단계인 TypeScript 지원을 구분하고, 베타 API의 변경 가능성을 도입 조건에 포함해야 한다.
🧾 핵심 주장 / 시사점
- 무상태 전환은 연결 관리 방식뿐 아니라 재배포와 서버 확장에 필요한 운영 구조를 바꾸는 변화다.
- FastMCP의 연결별 규격 협상은 서버의 업그레이드 시점이 달라도 같은 에이전트 코드로 연결할 수 있게 한다.
- 사용자 응답 대기는 LangGraph 실행 상태로, 도구 목록의 유효성은 서버 TTL로 관리해 각각의 처리 기준을 분명히 한다.
✅ 액션 아이템
- langchain.mcp 이전 범위를 정하고, langchain[mcp]>=1.4.0 요구사항과 베타 상태를 반영해 Python 적용 우선순위를 정한다.
- FastMCP와 ClientGroup이 구·신규 규격을 함께 처리할 때 서버별 인증 설정이 유지되고 도구 이름이 서버 접두사로 구분되는지 점검한다.
- LangGraph 인터럽트의 중단·재개에 필요한 checkpointer를 점검하고, 호출자별 클라이언트 캐싱이 서버 TTL을 따르는지 점검한다.
❓ 열린 질문
- langchain.mcp의 베타 상태와 Python 우선 지원, TypeScript 지원 예정이라는 제약을 고려할 때 이전 범위를 정하는 기준은 무엇인가?
- FastMCP로 구·신규 규격 서버를 함께 연결할 때, 무상태 코어 전환으로 고정 라우팅과 공유 세션 저장소를 줄일 수 있는 범위는 어디인가?
- 클라이언트 캐싱에서 서버 TTL에 따른 도구 목록 재사용과 호출자별 클라이언트 간 목록 분리가 모두 지켜지는지 어떻게 판단할 것인가?