MCP란 무엇인가
MCP(Model Context Protocol)는 AI 모델과 외부 도구를 연결하는 표준 프로토콜입니다. Claude Code는 MCP를 통해 파일 시스템, 데이터베이스, 웹 API, 문서 검색 엔진 등 다양한 외부 서비스와 통합할 수 있습니다.
기본적으로 Claude Code는 코드 읽기, 쓰기, 실행 등의 기능을 제공하지만, MCP 서버를 추가하면 이러한 능력을 무한히 확장할 수 있습니다. 예를 들어, Context7 MCP 서버를 연결하면 최신 라이브러리 문서를 실시간으로 검색할 수 있고, Exa MCP 서버를 통해 웹 검색 결과를 활용할 수 있습니다.
MCP 아키텍처
MCP는 클라이언트-서버 구조로 동작합니다.
Claude Code (클라이언트)
↕ MCP Protocol
MCP 서버 (filesystem, context7, exa 등)
↕ 각 서버의 프로토콜
외부 서비스 (파일시스템, API, 데이터베이스 등)
클라이언트인 Claude Code는 표준화된 MCP 프로토콜로 서버에 요청을 보내고, 각 MCP 서버는 자신이 연결된 외부 서비스에 맞는 방식으로 요청을 처리합니다. 이러한 추상화 덕분에 Claude Code는 각 서비스의 세부 구현을 몰라도 통일된 방식으로 다양한 도구를 사용할 수 있습니다.
MCP 서버 설정하기
MCP 서버는 .claude/settings.json 파일에서 설정합니다.
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@anthropic-ai/mcp-filesystem-server", "/home/user/projects"]
},
"context7": {
"command": "npx",
"args": ["-y", "@context7/mcp-server"]
},
"exa": {
"command": "npx",
"args": ["-y", "@exa/mcp-server"],
"env": {
"EXA_API_KEY": "your-api-key-here"
}
}
}
}
각 서버 설정은 다음 요소로 구성됩니다.
- command: 실행할 명령어 (주로 npx 또는 node)
- args: 명령어 인자 (서버 패키지 이름과 옵션)
- env: 환경변수 (API 키 등)
설정을 저장하면 Claude Code는 세션 시작 시 자동으로 MCP 서버를 실행합니다.
주요 MCP 서버
filesystem - 파일 시스템 접근
filesystem 서버는 특정 디렉토리에 대한 읽기/쓰기 권한을 제공합니다.
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@anthropic-ai/mcp-filesystem-server",
"/home/user/documents",
"/home/user/projects"
]
}
}
}
제공하는 도구:
mcp__filesystem__read_file: 파일 읽기mcp__filesystem__write_file: 파일 쓰기mcp__filesystem__list_directory: 디렉토리 목록 조회mcp__filesystem__search_files: 파일 검색
context7 - 최신 문서 검색
context7 서버는 프로그래밍 라이브러리와 프레임워크의 최신 문서를 검색합니다.
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@context7/mcp-server"]
}
}
}
사용 예시:
// Claude Code가 내부적으로 호출
// "React 18의 useTransition 훅 사용법을 알려줘"
// → mcp__context7__resolve-library-id("react")
// → mcp__context7__query-docs("/facebook/react", "useTransition hook usage")
이 서버는 공식 문서, GitHub README, 코드 예제를 통합하여 최신 정보를 제공합니다.
exa - 웹 검색
exa 서버는 웹 검색 기능을 제공합니다.
{
"mcpServers": {
"exa": {
"command": "npx",
"args": ["-y", "@exa/mcp-server"],
"env": {
"EXA_API_KEY": "your-api-key"
}
}
}
}
제공하는 도구:
mcp__exa__web_search_exa: 일반 웹 검색mcp__exa__company_research_exa: 회사 정보 검색mcp__exa__get_code_context_exa: 코드 예제 검색
MCP 도구 호출 방식
MCP 서버가 등록되면 Claude Code는 자동으로 해당 서버의 도구들을 인식합니다. 도구 이름은 mcp__서버명__도구명 패턴을 따릅니다.
mcp__filesystem__read_file
mcp__context7__query-docs
mcp__exa__web_search_exa
사용자가 직접 이 도구들을 호출할 필요는 없습니다. Claude Code가 문맥에 맞게 자동으로 선택하여 사용합니다.
예를 들어:
- "이 프로젝트의 package.json을 읽어줘" → filesystem 서버 사용
- "Next.js 15의 App Router 사용법" → context7 서버 사용
- "2026년 JavaScript 트렌드" → exa 서버 사용
커스텀 MCP 서버 만들기
자신만의 MCP 서버를 만들어 특정 API나 데이터베이스를 Claude Code와 연결할 수 있습니다.
Node.js MCP 서버 예시
간단한 데이터베이스 조회 MCP 서버를 만들어보겠습니다.
// db-mcp-server.js
const { Server } = require('@modelcontextprotocol/sdk/server/index.js');
const { StdioServerTransport } = require('@modelcontextprotocol/sdk/server/stdio.js');
const mysql = require('mysql2/promise');
const server = new Server(
{
name: 'database-server',
version: '1.0.0',
},
{
capabilities: {
tools: {},
},
}
);
// 데이터베이스 연결 풀
const pool = mysql.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
// 도구 목록 제공
server.setRequestHandler('tools/list', async () => {
return {
tools: [
{
name: 'query_users',
description: 'Query users from the database',
inputSchema: {
type: 'object',
properties: {
limit: {
type: 'number',
description: 'Maximum number of users to return',
},
},
},
},
{
name: 'get_user',
description: 'Get a specific user by ID',
inputSchema: {
type: 'object',
properties: {
userId: {
type: 'number',
description: 'User ID',
},
},
required: ['userId'],
},
},
],
};
});
// 도구 실행 핸들러
server.setRequestHandler('tools/call', async (request) => {
const { name, arguments: args } = request.params;
if (name === 'query_users') {
const limit = args.limit || 10;
const [rows] = await pool.query('SELECT * FROM users LIMIT ?', [limit]);
return {
content: [
{
type: 'text',
text: JSON.stringify(rows, null, 2),
},
],
};
}
if (name === 'get_user') {
const [rows] = await pool.query('SELECT * FROM users WHERE id = ?', [args.userId]);
return {
content: [
{
type: 'text',
text: JSON.stringify(rows[0] || null, null, 2),
},
],
};
}
throw new Error(`Unknown tool: ${name}`);
});
// 서버 시작
async function main() {
const transport = new StdioServerTransport();
await server.connect(transport);
}
main().catch(console.error);
package.json 설정
{
"name": "db-mcp-server",
"version": "1.0.0",
"type": "module",
"bin": {
"db-mcp-server": "./db-mcp-server.js"
},
"dependencies": {
"@modelcontextprotocol/sdk": "^0.5.0",
"mysql2": "^3.6.0"
}
}
Claude Code에서 사용
{
"mcpServers": {
"database": {
"command": "node",
"args": ["/path/to/db-mcp-server/db-mcp-server.js"],
"env": {
"DB_HOST": "localhost",
"DB_USER": "root",
"DB_PASSWORD": "password",
"DB_NAME": "myapp"
}
}
}
}
이제 Claude Code에서 "사용자 목록을 조회해줘"라고 요청하면 자동으로 mcp__database__query_users 도구를 호출합니다.
실전 활용 사례
사례 1: 문서 검색 통합
프로젝트에서 사용하는 라이브러리의 최신 문서를 실시간으로 참조할 수 있습니다.
사용자: "Prisma ORM에서 트랜잭션을 어떻게 사용하나요?"
Claude Code:
1. mcp__context7__resolve-library-id("prisma")
2. mcp__context7__query-docs("/prisma/prisma", "transaction usage")
3. 최신 공식 문서 기반으로 답변
이는 Claude의 지식 컷오프 날짜 이후에 나온 새로운 기능도 정확히 안내할 수 있게 합니다.
사례 2: 데이터베이스 스키마 분석
커스텀 MCP 서버를 통해 데이터베이스 스키마를 분석하고 마이그레이션을 생성할 수 있습니다.
// "users 테이블에 verified_at 컬럼을 추가하는 마이그레이션을 만들어줘"
// → mcp__database__describe_table("users")
// → 현재 스키마 확인 후 마이그레이션 파일 생성
사례 3: CI/CD 파이프라인 연결
GitHub Actions나 Jenkins와 연결하여 빌드 상태를 확인하거나 배포를 트리거할 수 있습니다.
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@github/mcp-server"],
"env": {
"GITHUB_TOKEN": "ghp_your_token"
}
}
}
}
사용자: "최근 빌드가 실패한 이유를 분석해줘"
Claude Code:
1. mcp__github__get_workflow_runs()
2. 실패한 빌드 로그 분석
3. 원인 파악 및 수정 제안
MCP 서버 디버깅
MCP 서버가 제대로 작동하지 않을 때는 다음을 확인하세요.
서버 로그 확인
# MCP 서버 직접 실행하여 에러 확인
node /path/to/mcp-server.js
settings.json 문법 검증
JSON 문법 오류가 있으면 서버가 로드되지 않습니다. JSON 검증기로 확인하세요.
환경변수 확인
API 키 등 필수 환경변수가 올바르게 설정되었는지 확인합니다.
{
"mcpServers": {
"exa": {
"command": "npx",
"args": ["-y", "@exa/mcp-server"],
"env": {
"EXA_API_KEY": "${EXA_API_KEY}"
}
}
}
}
시스템 환경변수를 참조하려면 ${변수명} 형식을 사용합니다.
마무리
MCP는 Claude Code의 능력을 무한히 확장할 수 있는 강력한 메커니즘입니다. 파일 시스템, 문서 검색, 웹 API, 데이터베이스 등 필요한 모든 외부 도구를 표준화된 방식으로 연결할 수 있습니다.
기본 제공되는 MCP 서버들을 활용하는 것부터 시작하여, 점차 프로젝트에 특화된 커스텀 MCP 서버를 만들어보세요. 이를 통해 Claude Code는 단순한 코드 편집기를 넘어 프로젝트 전체를 이해하고 관리하는 지능형 개발 파트너가 될 것입니다.