langchain / / 2025. 11. 8. 21:15

[LangChain v1.0] Model Context Protocol (MCP)

Model Context Protocol (MCP)은 애플리케이션이 LLM에 도구와 컨텍스트를 제공하는 방법을 표준화하는 개방형 프로토콜입니다. LangChain 에이전트는 langchain-mcp-adapters 라이브러리를 사용하여 MCP 서버에 정의된 도구를 사용할 수 있습니다.

Install

LangGraph에서 MCP 도구를 사용하려면 langchain-mcp-adapters 라이브러리를 설치하세요:

pip

pip install langchain-mcp-adapters

uv

uv add langchain-mcp-adapters

Transport types

MCP는 클라이언트-서버 통신을 위한 다양한 전송 메커니즘을 지원합니다:

  • stdio – 클라이언트가 서버를 하위 프로세스로 실행하고 표준 입력/출력을 통해 통신합니다. 로컬 도구 및 간단한 설정에 가장 적합합니다.
  • Streamable HTTP – 서버가 HTTP 요청을 처리하는 독립 프로세스로 실행됩니다. 원격 연결 및 여러 클라이언트를 지원합니다.
  • Server-Sent Events (SSE) – 실시간 스트리밍 통신에 최적화된 streamable HTTP의 변형입니다.

Use MCP tools

langchain-mcp-adapters는 에이전트가 하나 이상의 MCP 서버에 정의된 도구를 사용할 수 있도록 합니다.

여러 MCP 서버에 액세스하기

from langchain_mcp_adapters.client import MultiServerMCPClient
from langchain.agents import create_agent

client = MultiServerMCPClient(
    {
        "math": {
            "transport": "stdio",  # Local subprocess communication
            "command": "python",
            # Absolute path to your math_server.py file
            "args": ["/path/to/math_server.py"],
        },
        "weather": {
            "transport": "streamable_http",  # HTTP-based remote server
            # Ensure you start your weather server on port 8000
            "url": "http://localhost:8000/mcp",
        }
    }
)

tools = await client.get_tools()

agent = create_agent(
    "claude-sonnet-4-5-20250929",
    tools
)

math_response = await agent.ainvoke(
    {
        "messages": [{
            "role": "user",
            "content": "what's (3 + 5) x 12?"
        }]
    }
)

weather_response = await agent.ainvoke(
    {
        "messages": [{
            "role": "user",
            "content": "what is the weather in nyc?"
        }]
    }
)

MultiServerMCPClient기본적으로 상태 비저장(stateless)입니다. 각 도구 호출은 새로운 MCP ClientSession을 생성하고, 도구를 실행한 다음, 정리합니다.

Custom MCP servers

자체 MCP 서버를 만들려면 mcp 라이브러리를 사용할 수 있습니다. 이 라이브러리는 도구를 정의하고 서버로 실행하는 간단한 방법을 제공합니다.

pip

pip install mcp

uv

uv add mcp

MCP 도구 서버로 에이전트를 테스트하려면 다음 참조 구현을 사용하세요.

Math server (stdio transport)

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Math")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b

@mcp.tool()
def multiply(a: int, b: int) -> int:
    """Multiply two numbers"""
    return a * b

if __name__ == "__main__":
    mcp.run(transport="stdio")

Weather server (streamable HTTP transport)

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Weather")

@mcp.tool()
async def get_weather(location: str) -> str:
    """Get weather for location."""
    return "It's always sunny in New York"

if __name__ == "__main__":
    mcp.run(transport="streamable-http")

Stateful tool usage

도구 호출 간에 컨텍스트를 유지하는 상태 저장 서버의 경우, client.session()을 사용하여 영구적인 ClientSession을 생성하세요.

상태 저장 도구 사용을 위한 MCP ClientSession 사용

from langchain_mcp_adapters.tools import load_mcp_tools

client = MultiServerMCPClient({...})

async with client.session("math") as session:
    tools = await load_mcp_tools(session)

Additional resources


출처: https://docs.langchain.com/oss/python/langchain/mcp


Langchain v1.0

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유