14. MCP 서버 연동

🎯 이 장의 목표
  • MCP(Model Context Protocol)가 무엇이고 왜 필요한지 이해한다
  • MCP 서버를 추가하고 전송 방식(stdio·HTTP 등)을 구분한다
  • MCP가 컨텍스트를 많이 먹는 이유와 절약법을 안다
  • MCP의 보안 위험과 안전 수칙을 안다

MCP란

MCP(Model Context Protocol) 는 Claude Code를 외부 서비스·도구와 잇는 표준 규약입니다. Claude Code는 MCP "클라이언트"로서, 별도로 작성된 MCP "서버"에 접속해 그 서버의 도구·리소스·프롬프트를 마치 네이티브 도구인 것처럼 모델에 노출합니다.

비유하자면, MCP는 다양한 가전을 꽂는 표준 콘센트입니다. GitHub·데이터베이스·브라우저·Sentry·Stripe·Linear 등 제각각인 외부 시스템을, 같은 규격의 플러그로 Claude에 연결하는 것이죠.

flowchart LR
    CC[Claude Code<br/>MCP 클라이언트]:::agent
    CC <-->|MCP| S1[GitHub 서버]:::tool
    CC <-->|MCP| S2[데이터베이스 서버]:::tool
    CC <-->|MCP| S3[브라우저 서버]:::tool
    CC <-->|MCP| S4[사내 API 서버]:::tool

    classDef agent fill:#80DEEA,stroke:#00ACC1,color:#000
    classDef tool fill:#90CAF9,stroke:#1E88E5,color:#000

Skill과 MCP는 다른 문제를 푼다

둘 다 "Claude가 할 수 있는 일을 넓힌다"는 점에서 비슷해 보이지만 역할이 다릅니다.

SkillMCP 서버
무엇방법(knowledge) — 어떻게 할지 지침접근(access) — 외부 시스템과의 연결
"Snowflake SQL은 이렇게 써"Snowflake에 실제 접속해 쿼리 실행
형태디스크 위 파일실행되는 서버 프로세스/원격 엔드포인트
📌 핵심
데이터 웨어하우스 작업에는 둘 다 필요합니다 — 접속을 위한 MCP 서버 쿼리 컨벤션을 가르치는 Skill. MCP가 "전화선"이라면 Skill은 "통화 매너"입니다.

MCP 서버 추가하기

MCP 서버 설정은 settings.jsonmcpServers나 프로젝트의 .mcp.json에 들어가며, /mcp로 상태를 봅니다. 전송 방식(transport)에 따라 설정이 다릅니다.

전송 방식특징
stdio로컬 프로세스로 실행, 표준입출력으로 통신로컬 도구 서버
HTTP / SSE원격 엔드포인트에 연결벤더가 호스팅하는 서버
WebSocket양방향 스트리밍실시간 연동
💡 팁
stdio 서버에는 실행 시 CLAUDE_CODE_SESSION_IDCLAUDECODE=1 같은 환경변수가 전달됩니다. MCP 서버의 프롬프트는 /mcp__<서버>__<프롬프트> 형태의 명령으로도 나타날 수 있습니다.
⚠️ 흔한 실수
정확한 설정 키·플래그·OAuth 흐름은 버전에 따라 바뀝니다. 구체적인 추가 명령은 공식 MCP 문서와 각 벤더 문서를 확인하세요.

⚠️ MCP는 컨텍스트를 많이 먹는다

이건 Skill과의 결정적 차이라 꼭 알아야 합니다.

flowchart TB
    subgraph Skill["Skill (점진적 공개)"]
        SK[세션 시작: 이름+설명만<br/>스킬당 ~30-50 토큰]:::result
    end
    subgraph MCP["MCP (선행 로드)"]
        MC[세션 시작: 모든 도구의<br/>이름·설명·파라미터 스키마 로드<br/>5서버 58도구 ≈ 55,000 토큰]:::danger
    end

    classDef result fill:#A5D6A7,stroke:#43A047,color:#000
    classDef danger fill:#EF9A9A,stroke:#E53935,color:#000

Skill은 호출 전엔 이름·설명만 차지하지만(~30-50토큰), MCP는 모든 도구의 이름·설명·파라미터 스키마를 선행 로드합니다. 5개 서버에 58개 도구짜리 구성은 프롬프트를 보내기도 전에 약 55,000토큰을 먹습니다.

절약 수칙:

  • 정말 쓰는 서버만 연결하세요. "혹시 몰라서" 켜둔 서버가 컨텍스트를 갉아먹습니다.
  • 도구가 많은 서버는 신중히. 일부 버전은 도구 스키마를 필요 시 로드하는 deferred loading(ToolSearch)을 지원합니다(→ 22장).

⚠️ MCP 보안

MCP는 외부 시스템과 잇는 통로라 공급망·주입 공격의 표면이 됩니다. 실무 수칙:

  1. 1차 벤더 서버를 선호하세요. Sentry·Stripe·GitHub·Linear 등은 자기 서버에 서명해 배포합니다. 출처 불명의 커뮤니티 포크는 위험이 큽니다.
  2. 되돌릴 수 없는 부작용엔 사람을 끼우세요(human-in-the-loop). Slack 메시지 전송, PR 열기, 이슈 삭제 등은 자동 승인하지 말고 확인을 거치세요.
  3. 읽기 전용 도구만 자동 승인하세요. 쓰기·삭제는 매번 검토.
  4. 연결 시점뿐 아니라 런타임에도 감사하세요. 도구 응답을 로깅하고, 주입된 지시가 없는지 분류기로 점검하고, 이상을 알림으로.
📌 핵심
권한 deny 규칙과 PreToolUse 훅으로 MCP 도구 호출을 막을 수 있습니다(→ 8장, 15장). 보안 설계 전반은 23장에서 다룹니다.

⚠️ 알려진 위험 사례: 과거 일부 MCP 서버(예: 특정 git 서버, 재귀 클론을 통한 RCE 등)에서 취약점이 보고되었습니다. 새 서버를 도입하기 전 권한·스크립트·훅·외부 연결을 먼저 점검하세요. 많은 MCP 자원이 파일을 읽고, 명령을 실행하고, 데이터를 외부로 보낼 수 있습니다.

실전 예: GitHub MCP

GitHub MCP 서버를 연결하면 Claude가 이슈·PR·코드를 직접 조회·생성할 수 있습니다. 예:

CODE
> 우리 저장소의 열린 PR 중 리뷰 안 된 걸 찾아서, 변경 규모순으로 요약해줘

Claude가 GitHub MCP 도구를 호출해 데이터를 가져와 정리합니다. 다만 "PR 머지" 같은 되돌리기 어려운 작업은 위 보안 수칙대로 확인을 거치게 하세요. (Git/GitHub 워크플로우는 18장에서 더 다룹니다.)

이 장에서 배운 것

  • MCP는 Claude Code를 외부 서비스와 잇는 표준 규약이다. Claude Code는 MCP 클라이언트로서 서버의 도구를 네이티브처럼 쓴다.
  • Skill은 "방법", MCP는 "접근" — 웨어하우스 작업처럼 둘 다 필요한 경우가 많다.
  • 전송 방식은 stdio(로컬)·HTTP/SSE(원격)·WebSocket이 있고, mcpServers/.mcp.json에 설정한다.
  • MCP는 도구 스키마를 선행 로드해 컨텍스트를 크게 먹는다 → 정말 쓰는 서버만 연결.
  • 보안: 1차 벤더 선호, 비가역 작업엔 사람 개입, 읽기만 자동 승인, 런타임 감사.

✍️ 확인 문제

  1. Skill과 MCP 서버의 역할 차이를 "방법 vs 접근"으로 설명해 보세요.
  2. MCP가 Skill보다 세션 시작 시 컨텍스트를 훨씬 많이 먹는 이유는 무엇인가요?
  3. PR 머지나 이슈 삭제 같은 작업에 대해 권장되는 안전 수칙은 무엇인가요?
다음 장: 15. Hooks(훅) — 모델의 판단에 기대지 않는 결정적 자동화.