AI Sparkup

복잡한 AI 세상을 읽는 힘

MCP 서버: 처음부터 구축하는 단계별 가이드

AI가 소프트웨어 개발 분야를 혁신하면서, 개발자들은 Cursor나 Windsurf 같은 IDE에 AI를 통합하는 것이 일상이 되고 있습니다. 하지만 여전히 큰 문제가 남아있습니다. 바로 다양한 도구, 외부 API 서비스, 로컬 데이터를 IDE와 AI에 통합하는 과정이 매우 복잡하다는 것입니다.

Function Calling, Tool Calling, RAG 같은 방법이 있지만, 이들은 시간이 많이 소요되고 도메인 지식이 필요합니다. 이 과정을 간소화할 수 있다면 어떨까요?

바로 Model Context Protocol(MCP)이 그 해답이 될 수 있습니다. 이 글에서는 MCP가 무엇인지, 어떻게 사용하는지, IDE에 어떻게 통합하는지, 그리고 MCP의 고급 활용 사례까지 알아보겠습니다.

MCP란 무엇인가?

MCP를 노트북의 USB-C 포트로 생각해보세요. USB-C 포트 하나로 컴퓨터 충전, 데이터 전송, 외부 디스플레이 연결, 다른 기기 충전까지 모두 가능합니다.

이와 유사하게, Model Context Protocol은 AI 시스템이 외부 도구, API 서비스, 데이터 소스와 연결할 수 있는 표준화된, 안전한, 실시간, 양방향 통신 인터페이스를 제공합니다.

MCP 아키텍처 다이어그램

전통적인 API 통합과 달리, MCP는 AI 모델이 외부 시스템과 상호작용하는 단일의 표준화된 방법을 제공합니다. 한 번 코드를 작성하면 모든 AI 시스템이 이를 사용할 수 있습니다.

MCP와 전통적인 API의 주요 차이점은 다음과 같습니다:

특징MCP전통적인 API
통합 노력단일 표준화된 통합API마다 별도 통합 필요
실시간 통신✅ 지원❌ 미지원
동적 발견✅ 지원❌ 미지원
확장성간편함 (플러그 앤 플레이)추가 통합 작업 필요
보안 및 제어도구 간 일관성API마다 다름

MCP는 양방향 통신을 가능하게 하여 AI 모델이 정보를 검색하고 동적으로 작업을 트리거할 수 있습니다. 이는 더 지능적이고 상황 인식이 가능한 애플리케이션을 만드는 데 완벽합니다.

MCP 구성요소

MCP 아키텍처는 원활한 통합을 가능하게 하는 여러 핵심 구성요소로 이루어져 있습니다:

  1. 호스트(Hosts): 외부 데이터나 도구에 접근이 필요한 애플리케이션(예: Claude Desktop이나 AI 기반 IDE)
  2. 클라이언트(Clients): MCP 서버와 1:1 연결을 유지
  3. MCP 서버(MCP Servers): MCP를 통해 특정 기능을 제공하는 경량 서버로, 로컬 또는 원격 데이터 소스에 연결
  4. 로컬 데이터 소스(Local Data Sources): MCP 서버가 안전하게 접근하는 파일, 데이터베이스 또는 서비스
  5. 원격 서비스(Remote Services): MCP 서버가 접근하는 외부 인터넷 기반 API나 서비스

이러한 관심사의 분리는 MCP 서버를 매우 모듈화하고 유지보수하기 쉽게 만듭니다.

구성 요소들이 함께 작동하는 방식

실제 예시로 이해해 봅시다:

여러분이 프로젝트 예산을 관리하기 위해 Cursor(MCP 호스트)를 사용한다고 가정해 보겠습니다. Google Sheets에서 예산 보고서를 업데이트하고, Slack을 통해 팀에게 변경 사항 요약을 보내고 싶다면:

  • Cursor(MCP 호스트)는 MCP 클라이언트에게 Google Sheets 예산 보고서 업데이트와 Slack 알림 전송을 요청합니다.
  • MCP 클라이언트는 두 개의 MCP 서버(Google Sheets용과 Slack용)에 연결합니다.
  • Google Sheets MCP 서버는 Google Sheets API(원격 서비스)와 상호작용하여 예산 보고서를 업데이트합니다.
  • Slack MCP 서버는 Slack API(원격 서비스)와 상호작용하여 알림을 보냅니다.
  • MCP 서버들은 응답을 MCP 클라이언트에게 보냅니다.
  • MCP 클라이언트는 이 응답들을 Cursor에 전달하고, Cursor는 결과를 사용자에게 표시합니다.

이러한 원활한 프로세스를 통해 Cursor는 표준화된 인터페이스를 통해 여러 서비스와 통합할 수 있습니다.

MCP 서버 구축 방법

MCP 서버를 구축하는 방법은 Python SDK 또는 JavaScript SDK를 사용하는 두 가지가 있습니다. 이 가이드에서는 간단하게 Python SDK를 사용하겠습니다.

1. 작업 환경 설정

먼저 프로젝트 디렉토리를 만들고 가상 환경을 설정합니다.

# 가상 환경 생성
# Windows
python -m venv dotenv

# Linux/Mac
python -m venv dev-env

# 가상 환경 활성화
# Windows
dotenv\Scripts\activate

# Linux/Mac
source dev-env/bin/activate

# 필요한 라이브러리 설치
pip install mcp mcp[cli]

2. 서버 코드 작성

아래는 간단한 계산기 기능을 제공하는 MCP 서버 예제입니다. calculator.py 파일을 생성하고 다음 코드를 작성해봅시다:

# 기본 import 
from mcp.server.fastmcp import FastMCP
import math

# MCP 서버 클라이언트 인스턴스화
mcp = FastMCP("Hello World")

# 도구 정의

# 덧셈 도구
@mcp.tool()
def add(a: int, b: int) -> int:
    """두 숫자 더하기"""
    return int(a + b)

# 뺄셈 도구
@mcp.tool()
def subtract(a: int, b: int) -> int:
    """두 숫자 빼기"""
    return int(a - b)

# 곱셈 도구
@mcp.tool()
def multiply(a: int, b: int) -> int:
    """두 숫자 곱하기"""
    return int(a * b)

# 나눗셈 도구
@mcp.tool() 
def divide(a: int, b: int) -> float:
    """두 숫자 나누기"""
    return float(a / b)

# 제곱 도구
@mcp.tool()
def power(a: int, b: int) -> int:
    """두 숫자의 거듭제곱"""
    return int(a ** b)

# 리소스 정의

# 동적 인사말 리소스 추가
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """개인화된 인사말 얻기"""
    return f"안녕하세요, {name}님!"
    
# 실행 및 표준 입출력으로 출력
if __name__ == "__main__":
    mcp.run(transport="stdio")

이 코드에서 일어나는 일을 이해해 봅시다:

  1. 먼저 MCP 패키지에서 FastMCP 서버와 math 모듈을 가져옵니다FastMCP 서버는 연결을 관리하고, MCP 프로토콜을 따르며, 메시지를 라우팅합니다.
  2. 다음으로, MCP 서버 클라이언트를 생성하고 이름을 **”Hello World”**로 지정합니다.
  3. 그런 다음, @mcp.tool()을 사용하여 도구를 추가하고 @mcp.resource()를 사용하여 리소스를 추가합니다. 이 도구들은 서버가 연산을 수행하는 데 도움이 되고, 리소스는 개인화된 인사말을 제공합니다.
  4. 마지막으로, @mcp.run()을 사용하여 MCP 서버를 시작하고, 이 설정은 표준 입력/출력(stdio)을 통한 통신을 허용합니다.
프로젝트 폴더 구조

3. 서버 로컬에서 실행 및 테스트

MCP Inspector는 LLM/AI 에이전트와 통합하지 않고도 커스텀 MCP 서버를 테스트할 수 있는 유용한 GUI 도구입니다. 터미널을 열고 작업 환경에 있는지 확인한 후 다음 명령어를 입력합니다:

mcp-inspector

브라우저에서 제공된 URL(일반적으로 localhost)을 열고 Connect를 누릅니다.

MCP Inspector

이제 리소스와 도구 기능을 테스트해볼 수 있습니다:

  1. 리소스 테스트: “List Templates”를 클릭하고, 표시된 템플릿을 선택한 후, 이름을 추가하고 “Read Resources”를 클릭하여 출력을 확인합니다.
  2. 도구 테스트: 상단 네비게이션 바에서 Tools로 이동하여 “List Tools”를 클릭한 후, 원하는 도구를 선택하고, 값을 입력한 다음 “Run Tool”을 눌러 출력을 확인합니다.

Cursor에 커스텀 서버 연결하기

Cursor와의 통합은 간단하고 직관적입니다. 현재 작업 디렉토리로 이동하여 Cursor에서 폴더를 엽니다. 필요한 경우 이전 단계에서 만든 가상 환경을 활성화합니다.

다음으로, File → Preferences → Cursor Settings → MCP → Add New Server로 이동합니다.

다음과 같이 세부 정보를 입력합니다:

이름: 서버 이름 (예: calculator)
유형: command (중요)
명령: 서버를 실행할 명령어. 형식은 다음과 같습니다:

/가상환경경로/bin/python /파일경로.py

예시:

C:\Users\사용자명\Documents\프로젝트폴더\dotenv\Scripts\python.exe C:\Users\사용자명\Documents\프로젝트폴더\calculator.py

완료되면 명령/터미널 창이 열립니다. 최소화하면 🟢 calculator가 표시됩니다. (🟠가 표시되면 경로를 확인하고 다시 시도하세요.)

기능을 확인하기 위해 Composer로 이동하여 Agent를 선택하고 다음 프롬프트를 입력합니다:

“Can you add two numbers, 3 and 6?”

Cursor가 mcp_add() 별칭으로 add 도구를 자동으로 검색하는 것을 볼 수 있습니다. 이것은 Cursor가 이제 서버에 연결되었음을 의미합니다.

Composio: 더 간단한 대안

지금까지는 간단한 예제를 살펴봤지만, 고급 프로젝트에서 여러 서버/도구를 사용해야 한다면 어떨까요? 여러 도구에 대해 수많은 코드 줄을 작성해야 할까요?

이때 Composio가 등장합니다. Composio는 개발자가 AI 에이전트를 외부 도구, 서버, API와 단 한 줄의 코드로 원활하게 연결할 수 있게 해주는 통합 플랫폼입니다.

Composio MCP 통합

Composio MCP와의 통합은 매우 간단하며 다음 다섯 단계로 수행할 수 있습니다:

  1. Composio MCP Directory 페이지 방문
  2. 필요한 도구 선택 (도구 이름, 설명, 호환성 확인)
  3. 다음 페이지의 Installation Steps 섹션에서 Generate를 클릭하고 생성된 URL 복사
  4. Cursor를 열고 File → Preferences → Cursor Settings → MCP → Add New Server로 이동
  5. Type을 “sse”로 선택하고 복사한 URL을 Server URL에 붙여넣기

이렇게 하면 설정이 완료됩니다!

고급 활용 사례: Linear 티켓 관리와 Slack 협업

Composio는 고급 사용 사례도 쉽게 처리할 수 있습니다. 다음과 같은 과제를 Composio가 어떻게 원활하게 해결하는지 살펴보겠습니다:

개발 팀은 종종 제품 관련 이슈를 관리하는 데 어려움을 겪습니다. 이는 IDE와 팀 Slack 채널 사이를 계속해서 오가는 것을 필요로 합니다. IDE를 통해 모든 작업을 처리하는 에이전트를 개발하여 팀이 불필요한 컨텍스트 전환 없이 계속 동기화된 상태를 유지하면 생산성이 극적으로 향상됩니다.

Composio MCP를 사용하여 이 문제를 해결해 봅시다:

  1. MCP Repository로 이동하여 Linear 및 Slack 통합을 선택합니다. 목록에 없으면 검색 콘솔을 사용하세요.
  2. SSE 키를 생성하고 복사합니다.
  3. Cursor를 열고 위에서 다룬 방법으로 통합합니다.

통합이 완료되면:

  • Cursor 채팅으로 이동하여 Agent를 선택합니다.
  • “create a connection with Slack”이라고 작성하여 OAuth 연결을 시작합니다. Linear에 대해서도 동일하게 수행합니다.
  • 생성된 URL로 이동하여 인증합니다. 권한을 반드시 검토하세요!
  • Cursor로 돌아와 연결이 활성화되었는지 확인합니다.
  • 모든 것이 준비되면 MCP 통합 작업을 시작할 수 있습니다.

Linear 이슈를 생성하고 이에 대한 메시지를 Slack 채널에 보내는 간단한 프롬프트를 사용해보세요:

“특정 프로젝트에서 Linear 이슈를 생성하고, 라벨을 ‘TODO’로 변경하고, 문제 아래에 코멘트를 추가한 다음, 모든 작업이 완료되면 Slack 채널에 이슈 생성 상태에 대한 메시지를 보내주세요.”

Composio MCP의 원활한 통합은 단 한 줄의 코드도 작성하지 않고 복잡한 워크플로우를 연결했습니다.

결론

AI가 소프트웨어 개발을 변화시키면서, MCP는 원활하고 통합된 경험을 만드는 데 점점 더 중요한 역할을 할 것입니다.

커스텀 MCP 서버를 구축하든, Composio MCP와 같은 사전 구축된 솔루션을 활용하든, 이 프로토콜은 외부 도구와 데이터 소스를 통해 AI 기능을 향상시키는 강력한 방법을 제공합니다.

AI의 미래는 단지 더 똑똑한 모델을 만드는 것이 아니라, AI가 우리가 매일 사용하는 도구와 원활하게 상호작용할 수 있는 생태계를 만드는 것입니다. MCP는 그 미래를 향한 중요한 단계입니다.

참고자료: MCP server: A step-by-step guide to building from scratch


Awsom GPT에서 더 알아보기

구독을 신청하면 최신 게시물을 이메일로 받아볼 수 있습니다.

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다