Agentic AI 구축/LangChain & LangGraph

LangChain에서의 MCP 구현 설명 (@tool의 의미)

gksyb4235 2025. 11. 5. 13:12

LangChain을 통한 MCP 구현방식


 

 

LangChain은 여러 LLM(OpenAI, Claude 등)과 외부 도구(API, DB, MCP 서버 등)을 하나의 통합 프레임워크로 연결해주는

오케스트레이션(Orchestration) 라이브러리이다.

 

결국 LangChain은 LLM과 도구(External Tool)을 연결하는 프레임워크지, 자체 LLM이나 완전한 MCP Host는 아니다.

 

  • LangChain은 Claude나 ChatGPT 같은 Host(LLM App) 가 아니고,
  • Smithery처럼 독립된 MCP 서버 플랫폼도 아니다.

LangChain의 Position은 LLM-agnostic(모델 독립적인) 통합 프레임워크인 셈이다.

 

LangChain이 제공하는 세 가지 역할은 다음과 같다.

역할 설명 MCP 생태계에서의 위치
LLM Wrapper OpenAI, Anthropic, Mistral 등 다양한 모델 API를 동일한 인터페이스로 묶음 “Host 내부의 모델 어댑터”
ool / Agent Framework 여러 툴을 정의하고, 어떤 툴을 쓸지 LLM이 스스로 판단하도록 제어 “Host의 행동 엔진
(Orchestrator)”
MCP Adapter (langchain-mcp) LangChain 내부의 툴 체계를 MCP 표준인 JSON-RPC로 노출 “MCP Client + Server 브릿지 역할”

 

 

 

즉, LangChain은 MCP 생태계에서 MCP Client와 MCP Server의 역할을 한다고 생각하면 된다.

LangChain은 LangChain MCP Adapter라는 MCP Client를 제공해서 LLM(GPT, Claude 등)과 통신할 수 있고,

LangChain Tool을 MCP Server로 노출해서 Tool 집합체로서의 서버의 기능도 수행할 수 있다.

 

 

 

정리하면, LangChain이 직접 LLM을 가지고 있지는 않지만,

대신 서로 독립적으로 동작하는 LLM을 연결하는 추상화 계층을 제공하는 셈이다.

 

 

 

LangChain을 통한 MCP 생태계 구축


LangChain MCP Adapter (MCP Client)는 LangChain/LangGraph 생태계에서 다음을 가능하게 한다.

구성 요소  역할
MCP Server 실제 기능을 제공하는 MCP 표준 서버 (예: math, weather, file 등)
LangChain MCP Adapter MCP Client로 동작하여 서버와 통신하고, MCP Tool을 LangChain Tool로 변환
LangGraph / LangChain Agent 외부 LLM(OpenAI, Claude 등)을 이용해 사용자의 요청을 이해하고 MCP Tool 호출
LLM (OpenAI GPT, Claude 등) Host 내부에서 언어 이해 및 Tool 호출 제어 담당

 

LangChain은 LLM과 여러 MCP 서버 사이를 이어주는 “조정자(Orchestrator)”이고,
LangChain MCP Adapter는 이 연결을 실제로 가능하게 해주는 표준화된 MCP Client 구현체이다.

실제 동작과정은 아래와 같다.

 

 

(1) LLM을 선택 - MCP Host의 두뇌역할

agent = create_react_agent("openai:gpt-4.1", tools)

 

MCP는 자체 LLM을 가지고 있지 않기 때문에, OpanAI, Anthropic, Mistral 등 외부 모델을 불러와서 Host 역할을 수행한다.

이때, LLM은 "어떤 MCP Tool을 써야 하는지"를 스스로 판단한다.

 

 

(2) MCP 서버 연결 — ClientSession 생성

from mcp.client.stdio import stdio_client
from mcp import ClientSession, StdioServerParameters

server_params = StdioServerParameters(
    command="python",
    args=["/path/to/math_server.py"],
)

 

이 부분은 MCP Client의 실제 연결 과정이다.

  • stdio_client → 로컬 파이프(stdio) 통신
  • streamable_http → HTTP 통신즉

즉, MCP는 HTTP가 아닌 JSON-RPC 기반의 다양한 전송 방식을 지원한다.

LangChain MCP Adapter는 이런 전송 방식을 자동으로 관리해준다.

 

 

(3) MCP 서버의 Tool을 LangChain Tool로 변환 (@tool의 의미)

from langchain_mcp_adapters.tools import load_mcp_tools

tools = await load_mcp_tools(session)

 

이 함수는 MCP 서버에서 노출한 @mcp.tool()들을 LangChain이 이해할 수 있는 LangChain Tool 객체로 변환한다.

즉, MCP 서버의 “add(), multiply(), get_weather()” 같은 함수를

LangChain Agent가 바로 사용할 수 있는 형태로 자동 변환해주는 것!

 

 

(4) Agent가 Tool을 호출 → MCP 서버 실행

agent_response = await agent.ainvoke({"messages": "what's (3 + 5) x 12?"})

 

이제 LLM이 자연어 입력을 해석한 뒤, "add"와 "multiply" 툴을 순차적으로 호출해야 한다고 판단하게 된다.

그러면 LangChain MCP Adapter(MCP Client)가 MCP 서버에 JSON-RPC 요청을 전송하고,

그러면 서버의 Tool이 실행되어 외부 소스와 정보를 주고 받아 해당 결과를 Host(LLM)으로 전달한다.

최종적으로 이들을 가지고 LLM이 사용자에게 최종 답변을 전달하게 된다.