Anthropic MCP 공식 발표 — Introducing the Model Context Protocol
0 조회
Claude가 제가 만든 SQLite 데이터베이스를 열어서 쿼리 결과를 바로 답변에 넣는 걸 처음 봤을 때, 뭔가 경계가 무너지는 느낌이었습니다. 프롬프트에 데이터를 복붙하는 게 아니라, AI가 직접 제 시스템 안을 들여다보는 거니까요. 이게 Anthropic이 2024년 11월 공개한 Model Context Protocol, 줄여서 MCP가 가능하게 만든 경험이에요.
이 글을 읽고 나면 여러분도 Claude에 연결할 수 있는 MCP 서버를 하나 만들고, 실제로 Claude Desktop에서 그 도구를 호출해보는 데까지 갈 수 있습니다. 30분이면 충분해요.
무엇을 준비하면 되나요?
필요한 건 생각보다 간단합니다.
- Node.js 18 이상 — 저는 20.11 버전을 썼어요
- Claude Desktop 앱 — 공식 사이트에서 다운로드하면 됩니다 (출처: Anthropic 공식 페이지)
- 텍스트 에디터 — VS Code나 본인이 편한 걸로
- 터미널 기본 사용법 — npm install 정도만 할 줄 알면 돼요
MCP는 오픈소스 표준이라 별도 비용은 없습니다. SDK도 npm에 공개되어 있고요. Claude Desktop은 무료 플랜에서도 MCP 서버 연결 기능을 쓸 수 있어요.
MCP 서버는 어떻게 만드나요?
첫 단계는 서버 뼈대를 만드는 겁니다. MCP 서버는 Claude가 호출할 수 있는 도구(tool)를 정의하고, 실제로 그걸 실행하는 로직을 담은 프로그램이에요.
빈 폴더를 하나 만들고 터미널을 열어주세요.
mkdir my-first-mcp
cd my-first-mcp
npm init -y
npm install @modelcontextprotocol/sdk
그러면 package.json이 생기고 MCP SDK가 설치됩니다. 이제 index.js 파일을 만들어서 서버 코드를 써볼게요.
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = new Server({
name: 'my-tools',
version: '1.0.0'
}, {
capabilities: {
tools: {}
}
});
server.setRequestHandler('tools/list', async () => {
return {
tools: [{
name: 'get_timestamp',
description: '현재 시각을 ISO 형식으로 반환합니다',
inputSchema: {
type: 'object',
properties: {}
}
}]
};
});
server.setRequestHandler('tools/call', async (request) => {
if (request.params.name === 'get_timestamp') {
return {
content: [{
type: 'text',
text: new Date().toISOString()
}]
};
}
throw new Error('Unknown tool');
});
const transport = new StdioServerTransport();
await server.connect(transport);
이 코드는 get_timestamp라는 도구 하나를 제공하는 MCP 서버예요. Claude가 "지금 몇 시야?"라고 물으면 이 도구를 호출해서 실제 시각을 얻을 수 있죠.
package.json에 "type": "module"을 추가해야 ES 모듈을 쓸 수 있습니다.
{
"name": "my-first-mcp",
"version": "1.0.0",
"type": "module",
"dependencies": {
"@modelcontextprotocol/sdk": "^0.5.0"
}
}
터미널에서 node index.js를 실행하면 서버가 시작돼요. 아무 출력도 안 나오는 게 정상입니다. stdio 방식은 표준 입출력으로 통신하거든요.
Claude와 연결은 어떻게 하죠?
서버를 만들었으니 이제 Claude Desktop에 알려줘야 합니다. 설정 파일 하나만 수정하면 돼요.
macOS 기준으로 ~/Library/Application Support/Claude/claude_desktop_config.json 파일을 열어주세요. Windows는 %APPDATA%\Claude\claude_desktop_config.json이고요.
파일이 없으면 새로 만들면 됩니다. 이렇게 써주세요.
{
"mcpServers": {
"my-tools": {
"command": "node",
"args": ["/Users/yourname/my-first-mcp/index.js"]
}
}
}
args 배열의 경로는 본인이 만든 index.js의 절대 경로로 바꿔야 해요. 상대 경로는 안 먹힙니다.
저장하고 Claude Desktop을 완전히 종료했다가 다시 켜주세요. 그냥 창만 닫으면 안 되고, macOS는 Cmd+Q로 앱을 종료해야 합니다.
다시 켜면 채팅 입력창 옆에 작은 망치 아이콘이나 도구 개수가 표시될 거예요. 거기 누르면 get_timestamp가 목록에 보입니다.
Claude에게 "지금 몇 시야?"라고 물어보세요. 그러면 Claude가 도구를 호출하고, 여러분 서버가 반환한 시각을 답변에 포함시킵니다. 입력은 자연어 질문이고, 출력은 "2026-08-03T14:23:45.678Z"같은 실제 ISO 타임스탬프가 답변 안에 들어가 있는 거죠.
실전에서 막힌 지점들
저는 이걸 처음 만들 때 세 군데서 막혔어요.
포트 충돌로 30분 날림 처음엔 HTTP 서버로 만들려고 Express를 띄웠는데, 3000번 포트를 다른 프로젝트가 쓰고 있어서 서버가 안 떴어요. 에러 메시지도 애매하게 나오고. 나중에 MCP는 stdio 방식이 기본이라는 걸 알았습니다. HTTP는 별도 설정이 필요하고요 (출처: Model Context Protocol 공식 문서). stdio로 바꾸니 포트 걱정이 사라졌어요.
설정 파일 경로 오타 claude_desktop_config.json에 절대 경로를 쓸 때 홈 디렉토리를 ~로 줄여 썼더니 Claude Desktop이 서버를 못 찾았어요. ~는 셸이 해석하는 거지 JSON 파일 안에선 그냥 문자열이거든요. /Users/myname/...처럼 풀 경로로 써야 됩니다. 이거 찾느라 또 20분 걸렸네요.
도구가 목록에 안 뜸 서버 코드를 수정하고도 Claude Desktop을 다시 시작 안 하면 변경사항이 반영이 안 돼요. 처음엔 "왜 안 나와?" 하면서 코드만 계속 뜯어봤는데, 앱 재시작이 답이었습니다. 핫 리로드 같은 건 없어요.
여기서 더 나가려면
이제 MCP 서버 하나를 만들고 Claude에 연결하는 법을 알았습니다. 이 타임스탬프 예시를 내 데이터베이스 조회 도구로 바꾸거나, 내부 API를 호출하는 도구로 확장하는 건 같은 패턴이에요. tools/list에 도구를 추가하고, tools/call에서 실제 로직을 실행하면 됩니다.
다음엔 여러 도구를 한 서버에 넣어보거나, SQLite 같은 실제 데이터 소스와 연결해보세요. MCP는 프롬프트 템플릿(prompts)이나 리소스(resources) 기능도 지원하는데, 이것도 같은 방식으로 추가할 수 있습니다.
Claude가 내 시스템의 일부가 되는 경험은 생각보다 강렬해요. 한번 해보시길 추천합니다.
자주 묻는 질문
Q. MCP는 무료인가요? A. MCP 자체는 오픈소스 프로토콜이라 무료입니다. SDK도 npm에 공개되어 있고요. Claude Desktop도 무료 플랜에서 MCP 서버 연결 기능을 제공해요. 다만 Claude API를 많이 호출하면 API 사용료는 별도로 나갈 수 있습니다.
Q. Node.js 말고 다른 언어로도 만들 수 있나요? A. Python SDK도 공식 제공됩니다. TypeScript, JavaScript, Python 세 가지가 Anthropic에서 직접 관리하는 SDK고, 커뮤니티에서 다른 언어 구현도 나오고 있어요.
Q. 보안은 어떻게 관리하나요? A. MCP 서버는 로컬에서 실행되고, Claude Desktop이 직접 프로세스를 띄웁니다. 외부에 포트를 열지 않으면 네트워크 노출은 없어요. 다만 서버 코드가 접근할 수 있는 파일이나 API는 Claude도 접근할 수 있으니, 민감한 데이터는 별도 권한 체크를 넣는 게 좋습니다.
Q. Claude Desktop 없이 API로도 쓸 수 있나요? A. 현재는 Claude Desktop이 MCP를 가장 쉽게 쓸 수 있는 방법입니다. API 레벨에서 MCP 서버를 직접 연결하는 건 아직 공식 지원이 제한적이에요. 커뮤니티에서 실험적인 구현들이 나오고 있긴 합니다.
Q. 여러 도구를 한 서버에 넣을 수 있나요? A. 네. tools/list에서 반환하는 배열에 도구를 여러 개 넣고, tools/call에서 request.params.name으로 분기 처리하면 됩니다. 한 서버에 10~20개 도구를 넣어도 문제없어요.