Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

30장. MCP (Model Context Protocol)

이 장의 목표 2024년 말 Anthropic이 공개해 2025~2026 사이 사실상 표준이 된 MCP 가 뭔지, 왜 중요한지, 로컬 모델과 어떻게 쓰는지 정리합니다.


30.1 한 줄 정의

AI 모델과 외부 도구·데이터를 연결하는 “USB-C 같은” 표준 프로토콜.

도구를 만들면 한 번 만들고 모든 AI 클라이언트에서 쓸 수 있게 됩니다.


30.2 왜 만들어졌나

MCP 이전:

ChatGPT  → 자체 플러그인
Claude   → 자체 도구
Cursor   → 자체 통합
Continue → 자체 통합
...

같은 “Slack 메시지 보내기” 도구를 도구마다 따로 만들어야 했습니다.

MCP 이후:

[하나의 MCP 서버]
  - Slack
  - Notion
  - GitHub
  - DB
  ↓
[연결]
  ↓
Claude / ChatGPT / Cursor / Cline / Open WebUI / ...

도구 한 번 만들면 모든 곳에서 쓸 수 있음.


30.3 구조

[MCP 클라이언트]              [MCP 서버]
- AI 앱 (Cline, Cursor,        - 실제 도구 구현
  Open WebUI 등)                (Slack, Notion, DB, ...)
       │                            │
       └──── JSON-RPC ──────────────┘
            (stdio 또는 HTTP)

MCP 서버는 다음 4가지를 제공할 수 있습니다.

종류무엇
Tools호출 가능한 함수 (28장의 Function Calling과 비슷)
Resources읽을 수 있는 데이터 (파일·URL·DB row)
Prompts미리 정의된 프롬프트 템플릿
Sampling클라이언트가 다른 LLM을 호출하게 함

30.4 MCP 서버 예 — 이미 있는 것들

수백 개가 공개되어 있습니다.

서버무엇
filesystem파일 읽기·쓰기
githubGitHub API
gitlabGitLab API
slackSlack 메시지
postgresDB 쿼리
brave-search웹 검색
puppeteer브라우저 자동화
memory장기 메모리 저장
notionNotion 페이지
figmaFigma 디자인
time시간·타임존

전부 공개 npm/pypi 패키지.


30.5 클라이언트 — 어디서 쓰나

MCP를 받아들이는 클라이언트들:

클라이언트MCP 지원
Claude Desktop✅ (최초 공개)
Claude Code
Cursor
Cline (VS Code)
Continue.dev
Open WebUI
Zed
Goose

2025~2026 동안 빠르게 표준화 진행 중.


30.6 로컬 모델 + MCP 시나리오

가장 흔한 조합 두 가지.

① Cline + Ollama + 파일시스템 MCP

Cline (VS Code Agent)
  ↓ tools via MCP
filesystem MCP server (파일 읽기·쓰기)
  ↓
로컬 폴더

base_url 을 Ollama로 설정하면 로컬 32B 모델이 파일 작업을 수행 합니다.

② Open WebUI + Ollama + 사내 MCP

사내에 Postgres·GitHub·Slack MCP 서버를 두고, Open WebUI에서 로컬 모델이 그걸 호출.

사내 정보 챗봇 의 표준 구성.


30.7 가장 작은 MCP 서버 — Python 예

$ pip install mcp
# my_mcp_server.py
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("hello-mcp")

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

@mcp.tool()
def greet(name: str) -> str:
    """이름으로 인사합니다."""
    return f"안녕, {name}!"

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

실행:

$ python my_mcp_server.py

이게 진짜 MCP 서버입니다. 이 서버를 클라이언트(예: Claude Desktop / Cline)에 등록하면 LLM이 add, greet 를 호출할 수 있습니다.


30.8 클라이언트 등록 예 — Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "hello-mcp": {
      "command": "python",
      "args": ["/Users/kjj/dev/my_mcp_server.py"]
    },
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/kjj/Documents"]
    }
  }
}

재시작하면 Claude Desktop이 두 MCP 서버를 등록하고 도구를 사용합니다.


30.9 Cline + Ollama + MCP

VS Code에서 Cline 설치 후 설정에서:

API Provider: Ollama
Base URL:     http://localhost:11434
Model:        qwen3:32b

MCP 서버는 Cline 설정에서 추가.

이렇게 하면 VS Code 안에서 로컬 32B 모델이 MCP 도구로 코드를 수정합니다.


30.10 MCP vs Function Calling

항목Function Calling (28장)MCP
어디서 정의클라이언트 코드별도 서버
재사용한 앱 안에서여러 앱
표준OpenAI 호환MCP 사양
통신함수 인자JSON-RPC
적합작은 앱·간단 도구다중 앱·복잡 통합

새로 만들면 MCP가 미래. 단, 단순한 앱은 Function Calling이 더 빠릅니다.


30.11 보안·운영 주의점

29장과 동일하지만 MCP 특유 주의:

  • MCP 서버 자체가 권한을 갖습니다 → 서버 작성자가 누구인지 확인
  • 출처 모르는 MCP 서버 등록 금지 (공급망 공격 위험)
  • filesystem MCP는 허용 디렉토리만
  • 사내 환경이면 사내 자체 MCP 서버 호스팅

30.12 MCP 학습 자료

  • 공식 사이트: modelcontextprotocol.io
  • 공식 서버 모음: github.com/modelcontextprotocol/servers
  • 클라이언트 목록: 공식 문서의 Clients 페이지

이 장에서 기억할 한 가지

MCP는 AI 도구의 표준 USB-C.

도구를 한 번 만들면 Claude·Cursor·Cline·Open WebUI 등 어디서든 쓸 수 있습니다.

로컬 모델은 OpenAI 호환 API를 통해 자연스럽게 이 생태계에 합류합니다.


손으로 해볼 것

1. filesystem MCP 등록

Claude Desktop이 있다면 30.8 절 설정으로 filesystem MCP를 등록하고 “내 Documents 폴더 안 파일 목록 보여줘” 라고 물어보세요.

2. 30.7의 hello-mcp 서버 만들기

Python 가상환경에서 30.7 코드 그대로 만들고 Cline 또는 Claude Desktop에 등록. “3 + 4 좀 더해줘” 라고 물어보면 add 도구가 호출되는 걸 볼 수 있습니다.


다음 장에서는 멀티모달 — 비전·음성 모델을 다룹니다.

스크린샷·차트 분석부터 회의록 받아쓰기까지.