밭가는개발자
Published on

Model Context Protocol(MCP) 이해와 활용

Authors
  • Name
    Twitter

AI와 데이터의 연결고리 만들기

인공지능(Large Language Model, LLM) 시대에, 모델과 외부 데이터를 연결하는 것은 필수 과제입니다. **MCP(Model Context Protocol)**는 이러한 연결을 표준화한 플러그인 시스템입니다. 예를 들어 USB-C 포트처럼, MCP를 도입하기 전에는 AI 애플리케이션마다 GitHub, Slack, gDrive 같은 외부 서비스별로 개별 API를 구현해야 했습니다. 하지만 MCP를 이용하면 LLM이 **하나의 통합 인터페이스(MCP)**로 다양한 도구와 데이터 소스에 접근할 수 있습니다.

참고: Model Context Protocol (MCP) an overview, MCP: Revolutionizing How AI Interacts with Your Tools and Data - DEV Community

아래 그림은 MCP 도입 전후 구조를 비교한 예시입니다.

MCP 도입 전후 구조 비교
  • 도입 전: AI 애플리케이션과 외부 서비스들이 각기 다른 API로 연결됨 (M×N 방식)
  • 도입 후: LLM이 MCP라는 공통 API를 통해 Slack, Google Drive, GitHub 등에 연결됨 (M+N 방식)

이로 인해 개발자는 중복되는 통합 작업을 줄이고, AI도 필요한 데이터를 더 쉽고 안정적으로 활용할 수 있게 됩니다.

MCP의 세 가지 핵심 요소

MCP 서버는 크게 도구(Tools), 리소스(Resources), 프롬프트(Prompts) 세 가지 구성 요소를 노출합니다.

MCP 서버 구성 요소
  • Tools(도구): 모델이 직접 호출할 수 있는 함수나 기능입니다. 예) "Slack에 메시지 보내기", "DB 레코드 업데이트" 등. Tools는 복잡한 연산이나 외부 API 호출, 시스템 변경 등 **부수 효과(side effects)**를 포함할 수 있습니다.
  • Resources(리소스): 애플리케이션이 제공하는 데이터입니다. 예) 파일 내용, 데이터베이스 레코드, API 응답 등. Resources는 REST API의 GET 엔드포인트처럼 단순히 데이터를 제공합니다.
  • Prompts(프롬프트): LLM과의 상호작용을 돕는 미리 정의된 템플릿입니다. 예) 코드 리뷰, 문서 요약, PR 설명 생성 등 자주 하는 작업에 대해 재사용 가능한 프롬프트를 만들어 둘 수 있습니다.

이처럼 Tools, Resources, Prompts는 각기 다른 관점에서 모델의 동작을 돕습니다. Tools를 통해 모델은 직접 조작 가능한 기능을 획득하고, Resources로는 필요한 데이터를 실시간으로 가져오며, Prompts는 작업을 구체화하는 가이드 역할을 합니다.

Cursor에서 MCP 사용하기

실제 개발 환경에서는 Cursor 같은 IDE에서 MCP를 활용할 수 있습니다. Cursor는 로컬 머신에서 stdio 기반으로 MCP 서버를 실행하거나, SSE(Server-Sent Events)를 통해 네트워크상의 서버에 연결할 수 있도록 지원합니다.

1. MCP 서버 구현 (Python 예시)

파이썬의 FastMCP 라이브러리를 사용하면 몇 줄의 코드로 MCP 서버를 만들 수 있습니다. 아래는 add라는 도구와 get_greeting 리소스, review_code 프롬프트를 등록하는 간단한 예제입니다.

from fastmcp import FastMCP

mcp = FastMCP("DemoServer")

@mcp.tool()
def add(a: int, b: int) -> int:
    """두 수를 더하는 도구"""
    return a + b

@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """이름에 맞는 인사말을 반환하는 리소스"""
    return f"Hello, {name}!"

@mcp.prompt()
def review_code(code: str) -> str:
    """코드 리뷰를 위한 프롬프트 템플릿"""
    return f"다음 코드를 검토해 주세요:\n\n{code}"

위 코드에서 @mcp.tool(), @mcp.resource(...), @mcp.prompt() 데코레이터는 각각 도구, 리소스, 프롬프트를 정의합니다. 실제로는 이 서버를 python server.py 같은 명령으로 실행합니다.

2. Cursor에 연결

로컬 MCP 서버를 사용하려면 Cursor 프로젝트 디렉터리에 .cursor/mcp.json 파일을 생성합니다. 예시:

{
  "mcpServers": {
    "demo": {
      "command": "python",
      "args": ["server.py"]
    }
  }
}

이 설정은 Cursor에게 python server.py 명령어로 MCP 서버를 실행하도록 알려줍니다. (원격 서버를 쓰려면 host/sse URL을 지정할 수도 있습니다.)

설정 후 Cursor를 다시 시작하면, 챗 인터페이스의 MCP 도구 설정에서 demo 서버의 Tools/Resources/Prompts가 목록에 표시됩니다.

3. 도구 사용해보기

이제 Cursor의 AI 에이전트에 명령하거나 대화해보면, 예를 들어 "두 수를 더해줘" 같은 요구에 에이전트가 add 도구를 호출하고 결과를 반환할 수 있습니다. Cursor 챗 창에서는 도구 실행 내역과 결과를 확인할 수 있고, 초보자는 권한 요청 메시지를 통해 어떤 도구가 호출되는지 확인할 수 있습니다. 이를 통해 LLM이 직접 시스템 명령이나 API를 안전하게 사용할 수 있게 됩니다.

Python 외에도 Node.js, Rust 등 다양한 언어로 서버를 만들 수 있고, 개발 중에는 stdio 방식으로, 서비스 환경에는 SSE 방식으로 배포하는 식으로 유연하게 활용할 수 있습니다.

MCP를 배워야 하는 이유

MCP는 AI와 실제 시스템을 이어주는 다리입니다. 기존 LLM은 학습된 데이터에만 의존했기 때문에 실시간 정보나 사내 시스템 파일에는 접근할 수 없었습니다. MCP를 배우면 LLM이 AI 애플리케이션에서 벗어나 구글드라이브, 슬랙, 데이터베이스 등 다양한 정보에 직접 연결해 활용할 수 있습니다. 또한, 프로젝트별로 일일이 API를 구현하지 않아도 되므로 개발 생산성이 크게 향상됩니다.

결론적으로 MCP를 익히면 AI 에이전트 개발의 확장성을 높일 수 있습니다. 예를 들어 Cursor, Claude, Codeium 같은 도구들은 이미 MCP를 지원하여 사용자의 코드, 데이터, 작업 흐름을 이해하고 자동화 기능을 제공합니다. 따라서 새로운 AI 기능을 개발하거나 기존 시스템을 AI에 연결할 때 MCP를 사용하면 표준화된 방식으로 쉽고 안전하게 구현할 수 있습니다.

앞으로 AI와 데이터 통합이 더욱 중요해지는 만큼, MCP는 AI를 활용한 개발의 필수 기술로 자리잡아갈 것입니다.


추천 활용 방법: 자신의 서비스나 애플리케이션(예: 사내 데이터베이스, 문서 저장소, 도메인 특화 기능 등)을 MCP 서버로 감싸두면, Cursor나 Claude 같은 도구들이 이를 자동으로 이용할 수 있습니다. 반대로 AI 애플리케이션을 만든다면 다양한 공개/사내 MCP 서버를 연결해 풍부한 컨텍스트를 제공할 수 있습니다. 이렇게 표준 프로토콜을 활용하면 AI와 데이터 간의 연결이 보다 쉽고 재사용 가능해지므로, MCP 학습은 AI 시대 개발자에게 큰 자산이 될 것입니다.