Claude Code로 돌아가기
Claude Code중급14분 소요

MCP 파워 도구 — Claude의 능력 확장

MCP 서버를 설정하고 활용해 Claude Code에 초능력을 부여하는 방법

mcp도구통합서버

공식 참고 자료: MCP · MCP Specification · Overview

커리큘럼 흐름

  1. CLAUDE.md Mastery — 저장소 메모리와 규칙
  2. Effective Prompting — 작업 framing과 제약 설정
  3. MCP Power Tools — 도구와 라이브 컨텍스트 연결 ← 현재 문서
  4. Multi-Agent Workflows — 위임과 병렬 실행
  5. Hooks Automation — 로컬 가드레일 자동화
  6. GitHub Actions Workflows — 반복 작업을 팀 자동화로 옮기기

이 문서에서 참고한 공식 문서

  • Claude Code가 MCP 서버와 연결되는 방식MCP
  • project-scope / user-scope 설정 차이MCP
  • 왜 MCP가 Claude Code에 잘 맞는지Overview

MCP란?

Model Context Protocol (MCP)은 Claude Code에 외부 도구와 데이터 소스에 대한 접근 권한을 부여합니다. AI 어시스턴트의 플러그인이라고 생각하세요.

MCP 없이 Claude는 파일을 읽고 셸 명령을 실행할 수 있습니다. MCP가 있으면:

  • 데이터베이스를 직접 쿼리
  • 회사 내부 문서 검색
  • API와 상호작용 (Jira, Slack, GitHub)
  • 전문 도구 사용 (브라우저, 디자인 도구)

MCP 서버 설정하기

설정 위치

MCP 서버는 프로젝트 루트의 .mcp.json에서 설정합니다:

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
      }
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "your-token"
      }
    }
  }
}

필수 MCP 서버

서버 기능 사용 시점
server-postgres 데이터베이스 직접 쿼리 스키마나 데이터를 이해해야 할 때
server-github GitHub API 접근 PR 리뷰, 이슈 관리
server-filesystem 확장된 파일 접근 여러 레포에서 작업 시
server-memory 영속적 메모리 세션 간 컨텍스트가 필요한 장기 프로젝트
context7 라이브러리 문서 조회 모든 라이브러리의 최신 API 문서 필요 시

context7 패턴

가장 유용한 MCP 서버 중 하나입니다. Claude가 학습 데이터에서 API 시그니처를 추측하는 대신:

사용자: "이 Next.js 페이지에 페이지네이션 추가해줘"
Claude: *context7로 최신 Next.js 문서 조회*
Claude: *최신 API로 구현, 오래된 패턴이 아님*

MCP vs. Codex 샌드박스

GPT Codex는 다른 접근 방식을 취합니다 — 도구를 미리 설치하는 샌드박스 컨테이너에서 실행됩니다. MCP는 더 유연하지만 로컬 설정이 필요합니다.

측면 MCP (Claude Code) 샌드박스 (Codex)
설정 프로젝트별 설정 파일 Dockerfile/설정 스크립트
접근 도구별 권한 전체 컨테이너 접근
보안 세밀한 프로토콜 수준 컨테이너 격리
확장성 모든 MCP 서버 모든 CLI 도구

프로젝트 vs 사용자 스코프 MCP 설정

MCP 설정에는 두 가지 스코프가 있어요. 어느 것을 쓸지 결정하는 방법:

프로젝트 스코프 — .mcp.json

팀 전체가 동일한 MCP 서버를 써야 한다면 프로젝트 스코프를 사용해요. 이 파일은 git에 커밋할 수 있어서 팀원 모두가 같은 설정을 공유할 수 있어요.

// 프로젝트 루트/.mcp.json (팀 공유, git 커밋 가능)
{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres"],
      "env": {
        "DATABASE_URL": "${DATABASE_URL}"
      }
    }
  }
}

단, API 키나 비밀번호는 .mcp.json에 직접 넣지 마세요. 환경 변수를 참조하도록 하고, 실제 값은 각자의 .env 파일에 보관하세요.

사용자 스코프 — ~/.claude/settings.json

본인만 쓰는 도구, 예를 들어 개인 API 키가 필요한 서버는 사용자 스코프에 넣어요. 모든 프로젝트에서 자동으로 사용할 수 있어요.

// ~/.claude/settings.json (개인용, 모든 프로젝트에서 사용 가능)
{
  "mcpServers": {
    "memory": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-memory"]
    },
    "brave-search": {
      "command": "npx",
      "args": ["-y", "@anthropic/server-brave-search"],
      "env": {
        "BRAVE_API_KEY": "your-personal-key"
      }
    }
  }
}
스코프 파일 위치 공유 여부 언제 사용
프로젝트 .mcp.json 팀 전체 공유, git 커밋 DB, 프로젝트 전용 도구
사용자 ~/.claude/settings.json 개인 전용 개인 API 키, 범용 도구

더 많은 유용한 MCP 서버

기본 서버 외에도 실제 업무에 도움이 되는 서버들이 많아요:

서버 기능 설치 명령
server-brave-search 웹 검색 (최신 정보 조회) npx @anthropic/server-brave-search
server-puppeteer 브라우저 자동화, 스크린샷 npx @anthropic/server-puppeteer
server-slack Slack 메시지 및 채널 접근 npx @anthropic/server-slack
server-sqlite SQLite DB 쿼리 npx @anthropic/server-sqlite
server-filesystem 확장된 파일 접근 npx @modelcontextprotocol/server-filesystem

예를 들어 Brave Search를 추가하면 Claude가 최신 라이브러리 이슈나 보안 패치를 직접 찾아볼 수 있어요. Puppeteer를 연결하면 웹 UI 테스트 자동화도 가능해지고요.

MCP 서버 직접 만들기

반드시 남이 만든 MCP 서버만 써야 하는 건 아니에요. 회사 내부 도구를 Claude와 연결하고 싶다면 직접 만들 수 있어요.

TypeScript SDK(@modelcontextprotocol/sdk)를 사용하면 생각보다 빠르게 만들 수 있어요:

// 예시: 내부 위키를 검색하는 MCP 서버 개념
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
 
const server = new Server({ name: "internal-wiki", version: "1.0.0" });
 
// 도구 등록: Claude가 이 함수를 호출할 수 있게 됩니다
server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "search_wiki") {
    const query = request.params.arguments.query;
    // 내부 위키 API 호출
    const results = await internalWikiApi.search(query);
    return { content: [{ type: "text", text: JSON.stringify(results) }] };
  }
});

이렇게 만들면 "내부 위키에서 배포 절차 찾아줘"라고 하면 Claude가 실제로 검색해서 가져올 수 있어요. 내부 API, 사내 문서 시스템, 사내 모니터링 대시보드 등 뭐든 연결할 수 있어요.

MCP 디버깅과 문제 해결

연결이 잘 안 될 때 확인할 것들이에요.

연결된 서버 확인

claude mcp list

이 명령으로 현재 활성화된 MCP 서버 목록과 상태를 확인할 수 있어요.

자주 발생하는 문제

서버가 시작되지 않을 때:

  • npx 경로가 올바른지 확인하세요 (which npx)
  • Node.js 버전이 맞는지 확인하세요 (대부분 v18+ 필요)
  • 필요한 환경 변수가 설정되어 있는지 확인하세요

서버가 느리거나 타임아웃이 날 때:

{
  "mcpServers": {
    "slow-server": {
      "command": "npx",
      "args": ["-y", "some-mcp-server"],
      "timeout": 30000
    }
  }
}

로그 확인 방법:

Claude Code를 실행할 때 --mcp-debug 플래그를 사용하면 MCP 통신 로그를 볼 수 있어요:

claude --mcp-debug

MCP 3요소 심화: Tools, Resources, Prompts

MCP를 "Claude가 호출하는 함수"로만 생각하고 계신다면, 아직 1/3만 쓰고 있는 거예요. MCP에는 세 가지 핵심 요소가 있어요:

  1. Tools — Claude가 호출할 수 있는 함수 (예: 데이터베이스 쿼리, 이슈 생성)
  2. Resources — Claude가 읽을 수 있는 데이터 소스 (예: DB 스키마, 설정 파일, 문서)
  3. Prompts — 서버가 제공하는 사전 정의 프롬프트 템플릿 (예: "analyze-schema", "review-code")

대부분 Tools만 사용하지만, Resources와 Prompts를 활용하면 훨씬 깊은 통합이 가능해요.

Resources 예시: Postgres MCP 서버가 테이블 스키마를 리소스로 노출하면, Claude가 매번 쿼리하지 않아도 항상 최신 스키마 정보를 갖고 있을 수 있어요.

Prompts 예시: 코드 리뷰 MCP 서버가 "security-review" 프롬프트 템플릿을 제공하면, 보안 점검에 필요한 모든 체크 항목이 자동으로 포함돼요.

인기 커뮤니티 MCP 서버

앞서 소개한 서버 외에도 실무에서 자주 쓰이는 커뮤니티 서버들이 있어요:

서버 기능 설치 명령
@anthropic/mcp-server-linear Linear 이슈 트래킹 npx @anthropic/mcp-server-linear
@anthropic/mcp-server-notion Notion 워크스페이스 접근 npx @anthropic/mcp-server-notion
@anthropic/mcp-server-sentry 에러 모니터링 npx @anthropic/mcp-server-sentry
@anthropic/mcp-server-everart 이미지 생성 npx @anthropic/mcp-server-everart
mcp-server-docker Docker 컨테이너 관리 npx mcp-server-docker

전체 커뮤니티 카탈로그는 https://github.com/modelcontextprotocol/servers 에서 확인할 수 있어요.

서버를 선택할 때는 보안을 위해 공식 서버(@modelcontextprotocol 또는 @anthropic)를 우선적으로 사용하는 게 좋아요.

Python으로 MCP 서버 만들기

TypeScript 외에 Python SDK도 있어요. 데이터 중심 워크플로우에서는 TypeScript보다 더 간단하게 만들 수 있어요.

pip install mcp

내부 API를 래핑하는 예시:

from mcp.server import Server
from mcp.types import Tool, TextContent
import mcp.server.stdio
 
app = Server("internal-api")
 
@app.list_tools()
async def list_tools():
    return [
        Tool(
            name="search_docs",
            description="Search internal documentation",
            inputSchema={
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "Search query"}
                },
                "required": ["query"]
            }
        )
    ]
 
@app.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "search_docs":
        results = await internal_api.search(arguments["query"])
        return [TextContent(type="text", text=str(results))]
 
async def main():
    async with mcp.server.stdio.stdio_server() as (read, write):
        await app.run(read, write, app.create_initialization_options())

.mcp.json에 등록할 때는 이렇게 하면 돼요:

{
  "mcpServers": {
    "internal-api": {
      "command": "python",
      "args": ["-m", "my_mcp_server"]
    }
  }
}

Python이 익숙하다면 내부 API 래핑 서버를 만드는 데 30분이면 충분해요.

MCP 서버 조합 전략

MCP 서버를 무작정 다 추가하면 안 돼요. 각 서버마다 컨텍스트 오버헤드가 생기거든요. 워크플로우에 맞는 조합을 선택하는 게 중요해요.

풀스택 개발:

{
  "mcpServers": {
    "postgres": { "...": "DB 쿼리와 스키마" },
    "github": { "...": "PR과 이슈 관리" },
    "context7": { "...": "라이브러리 최신 문서" }
  }
}

데이터 엔지니어링:

{
  "mcpServers": {
    "postgres": { "...": "데이터 웨어하우스 쿼리" },
    "filesystem": { "...": "여러 레포 접근" },
    "memory": { "...": "세션 간 컨텍스트" }
  }
}

DevOps/SRE:

{
  "mcpServers": {
    "sentry": { "...": "에러 모니터링" },
    "docker": { "...": "컨테이너 관리" },
    "github": { "...": "배포 워크플로우" }
  }
}

경험적으로 2-4개가 이상적이에요. 5개 이상은 시작 속도가 느려지고 컨텍스트를 많이 소비할 수 있어요.

프로 팁

과도하게 연결하지 마세요

각 MCP 서버는 컨텍스트 오버헤드를 추가합니다. 필수적인 2-3개로 시작하고 필요에 따라 추가하세요.

CLAUDE.md와 적극적으로 결합하세요

MCP 서버를 설정만 해두면 Claude가 언제 어떤 도구를 써야 할지 판단이 애매할 수 있어요. CLAUDE.md에 명확한 규칙을 적어두면 훨씬 일관성 있게 동작해요:

## MCP 도구 사용 규칙
- DB 스키마 질문 → postgres MCP 먼저, 추측 금지
- 외부 라이브러리 → context7로 최신 문서 확인 후 구현
- 이슈 생성/업데이트 → GitHub MCP 사용, 수동 API 호출 금지
- 웹 검색이 필요하면 → brave-search MCP 사용
- 내부 문서 참조 → internal-wiki MCP로 검색

이렇게 해두면 Claude가 "DB 테이블 구조가 어때?"라는 질문을 받았을 때 추측하지 않고 실제로 쿼리해서 확인해요.

연결된 가이드