MCP(Model Context Protocol) 입문 가이드 1: MCP 시작하기

조현상·2025년 5월 2일

mcp

목록 보기
1/3
post-thumbnail

MCP 시작하기

— LangChain·LangGraph 연동부터 서버 구축까지

“LLM이 외부 세상과 안전하게 대화할 수 있는 표준 인터페이스가 필요하다.”
그 해답이 바로 MCP입니다


목차

  1. MCP란 무엇인가?
  2. 왜 MCP가 등장했을까?
  3. 직접 MCP 서버 만들어 보기
  4. LangChain · LangGraph에서 MCP 활용하기
  5. MCP Flow

1. MCP란 무엇인가?

MCP(Model Context Protocol)는 Anthropic이 제안한 “LLM 친화적 Web API” 표준입니다.

  • 역할 : 데이터·기능을 툴(tool) 형태로 노출 → LLM 에이전트가 HTTP + JSON만으로 호출 가능
  • 목표 : ✅ 안전성 ✅ 해석 가능성 ✅ 재사용성

2. 왜 MCP가 등장했을까?

기존 LangChain Tool 체계는 코드(파이썬 등) 안에서만 정의돼 재사용이 어려웠습니다.
MCP는 “툴을 네트워크 서비스로 분리”언어·플랫폼 독립성을 확보합니다.
덕분에 

  • Tool: 하나의 MCP 서버만 배포 → 어디서든 호환
  • Agent: REST 주소만 알면 수백 개의 외부 툴을 즉시 연결

3. 직접 MCP 서버 만들어 보기

아래 예제에서는 FastMCP로 만든 Math 서버입니다.


# math_server.py

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("Math")          # 도구 집합 이름

@mcp.tool()
def add(a: int, b: int) -> int:
    """두 수를 더합니다"""
    return a + b

@mcp.tool()
def multiply(a: int, b: int) -> int:
    """두 수를 곱합니다"""
    return a * b

if __name__ == "__main__":
    mcp.run(transport="stdio")  # 표준 입·출력으로 통신
핵심 포인트설명
FastMCP("Math")“Math”라는 툴 묶음을 정의합니다.
@mcp.tool() 데코레이터해당 함수를 원격 호출 가능한 MCP 툴로 노출합니다.
mcp.run(transport="stdio")STDIO 전송 방식을 사용하여, 다른 프로세스가 파이프로 이 함수를 호출할 수 있게 만듭니다.

4.LangChain · LangGraph에서 MCP 활용하기

클라이언트가 서버 툴을 호출하는 예시입니다.

import asyncio
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
from langchain_mcp_adapters.tools import load_mcp_tools
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4o")   # LLM 선택

server_params = StdioServerParameters(
    command="python",
    args=["/절대/경로/math_server.py"],  # 서버 스크립트 경로
)

async def main():
    # ① 서버 프로세스 실행 & 스트림 확보
    async with stdio_client(server_params) as (read, write):
        # ② MCP 세션 래핑
        async with ClientSession(read, write) as session:
            await session.initialize()           # 핸드셰이크
            # ③ 서버가 노출한 툴 정보 가져오기
            tools = await load_mcp_tools(session)
            # ④ ReAct 에이전트 구성
            agent = create_react_agent(model, tools)
            # ⑤ 질문 → 에이전트에게 전달
            response = await agent.ainvoke(
                {"messages": "what's (3 + 5) x 12?"}
            )
            print(response)

if __name__ == "__main__":
    asyncio.run(main())

흐름 요약

  • 서버 기동 : StdioServerParameters로 math_server.py를 서브프로세스로 실행
  • 세션 초기화 : ClientSession.initialize()로 프로토콜 버전 확인 등 기본 정보 교환
  • 툴 메타데이터 수신 : load_mcp_tools()가 서버에서 add, multiply 시그니처를 수집 → LangChain Tool 객체로 변환
  • ReAct 에이전트 구성 : LLM(GPT‑4o)이 추론(Reason)·도구 호출(Act)을 번갈아 수행

문제 해결 :

  1. 에이전트 Reason – “(3 + 5) × 12”를 계산하려면 덧셈 후 곱셈 툴이 필요하군!
  2. Act – add(3, 5) → 8, 이어서 multiply(8, 12) → 96
  3. Answer – “The result is 96.”

5. MCP Flow

profile
꿈꾸는 개발자

0개의 댓글