MCP(Model Context Protocol) 완벽 이해하기
MCP(Model Context Protocol)는 AI를 외부 API, 실시간 데이터 등과 연결해 주는 표준화된 프로토콜입니다. 2024년 말 Anthropic에서 공개했습니다.
MCP 서버는 하나의 '도구'라고 생각하면 이해하기 쉽습니다. 예를 들어 날씨 데이터 조회, 텍스트 번역, 외부 API 연동 같은 기능이죠. AI 에이전트는 현재 작업에 유용하다고 판단되면 이런 도구를 자율적으로 호출합니다.
실제 사례를 들어보겠습니다. Upstash MCP를 사용하면 Cursor가 여러분의 데이터베이스와 직접 상호작용할 수 있습니다. 일반적인 Claude만으로는 불가능한 작업입니다. "내 Redis 데이터베이스에 XYZ를 넣어줘" 같은 간단한 자연어 명령만 입력하면, MCP가 이 요청을 실제 데이터베이스 연산으로 변환해 주기 때문입니다.
MCP 활용 예시
MCP가 출시된 이후 사람들은 곳곳에서 창의적인 활용 사례를 만들어내고 있습니다. Cursor나 코딩에만 국한되지 않습니다. 직접 만들려면 몇 시간이 걸릴 복잡한 Blender 애니메이션 장면도, Claude에게 MCP를 통해 Blender 접근 권한만 주면 손쉽게 구현할 수 있습니다.
개인적으로 Model Context Protocol은 AI에 인터넷 접근 권한을 준 것의 '다음 단계'처럼 느껴집니다. 비유하자면, 인터넷 접근이 AI에게 팔과 손을 부여한 것이라면(실제로 무언가를 할 수 있게 된 것), MCP는 걸어 다닐 수 있는 다리를 준 것과 같습니다.
참고로 MCP 서버 구축은 특정 기업이나 소수 전문가만 할 수 있는 것이 아닙니다. 누구나 자신만의 MCP를 만들고, 호스팅하고, 심지어 SaaS 사업으로 발전시킬 수도 있습니다. 지금부터 그 방법을 살펴보겠습니다.
기본 MCP 서버 만들기
아주 간단한 MCP 예제를 살펴보겠습니다. Cursor가 우리의 도구로 텍스트를 번역할 수 있도록 번역 MCP를 만든다고 가정해 봅시다. 필요한 것은 MCP를 제공할 서버와 원하는 작업을 수행할 도구, 딱 두 가지뿐입니다.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
const server = new McpServer({
name: "Translation Service",
version: "1.0.0",
});
server.tool(
"translate",
{
text: z.string(),
targetLanguage: z.enum(["spanish", "french", "german"]),
},
async ({ text, targetLanguage }) => {
// 👉 여기서 번역 서비스로 API 호출
const translatedText = `[Translated: "${text}" to ${targetLanguage}]`;
return {
content: [{ type: "text", text: translatedText }],
};
},
);
위 코드는 Model Context Protocol의 핵심 원리를 보여줍니다. Claude가 프로그래밍 방식으로 상호작용할 수 있는 번역 서비스를 만드는 과정입니다.
Zod 스키마를 사용해 translate라는 도구를 정의하고, 받을 수 있는 매개변수를 명시했습니다.
text: 문자열 타입targetLanguage: 문자열 타입 (스페인어, 프랑스어, 독일어 중 선택)
AI 어시스턴트가 이 도구를 호출하면, Zod(오픈소스 스키마 검증 라이브러리)가 강제하는 필수 매개변수가 함께 전달되고 우리 함수가 이를 처리합니다. 실제 프로덕션 환경에서는 플레이스홀더 번역 대신 DeepL이나 Google Translate 같은 번역 서비스에 실제 API 호출을 하도록 바꾸면 됩니다.
content: [{ type: "text", text: translatedText }]라는 응답 형식은 MCP 도구 사양을 따르는 것으로, Claude가 응답 생성에 활용할 수 있는 구조를 반환합니다. 이렇게 표준화된 방식 덕분에 어떤 MCP 호환 AI든 별도의 커스텀 통합 작업 없이 여러분의 도구를 그대로 사용할 수 있습니다.
동일한 패턴으로 모든 종류의 도구를 만들 수 있습니다. 번역은 물론 데이터 분석, 이미지 생성, 심지어 스마트홈 기기 제어까지 확장 가능합니다.
MCP 서버 실행 및 Cursor로 테스트하기
이제 MCP 서버를 시작하기 위해 transport를 사용합니다.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({
name: "Translation Service",
version: "1.0.0",
});
server.tool(/* ... */);
const transport = new StdioServerTransport();
server.connect(transport);
이것으로 끝입니다. 우리만의 MCP 서버가 완성되었습니다! 🎉
index.ts 파일 경로를 복사해 Cursor에 연결하면 로컬에서 바로 새 MCP를 테스트할 수 있습니다. Cursor는 MCP 서버를 추가해 'Agent' 모드를 강화하는 기능을 제공합니다.
- Cursor에서
index.ts파일을 우클릭한 후 Copy Path를 선택합니다. 나중에 필요하니 경로를 복사해 둡니다. - Cursor에 MCP 서버를 추가하려면
Cursor Settings > Features > MCP로 이동한 후 + Add New MCP Server를 클릭합니다.
type은command로 그대로 둡니다.- 서버 이름을 지정합니다. 예를 들어
Translation으로 정하겠습니다. - 번역 도구를 실행할 명령어를 입력합니다:
npx tsx <path-to-file>
이제 Cursor가 우리의 MCP 서버와 사용 가능한 모든 도구를 인식합니다. 이 예제에서는 앞서 만든 translate 도구입니다.

테스트하려면 Agentic Chat을 열어보세요. Cursor는 이제 우리 도구를 파악하고 있으며, 번역 작업이 필요하면 자동으로 해당 도구를 사용합니다.
참고: 이 예제의 도구는 실제로 번역을 수행하지 않고 번역을 흉내 내는(mock) 동작만 합니다. 실제 번역 결과는 Claude가 응답합니다.

그 외 MCP 활용 아이디어
이 글을 쓰면서 몇 가지 MCP 서버 아이디어가 떠올랐습니다. 일부는 독립적인 서비스로 수익화해볼 만한 가치도 있어 보입니다.
- 코드 스크린샷 생성 MCP 도구
- 생성된 코드의 베스트 프랙티스 준수 여부, 취약점, 버그를 검사하는 MCP 도구
- 테스트 코드 자동 생성기 MCP
여러분도 충분히 자신만의 아이디어를 떠올릴 수 있을 겁니다. 결국 MCP는 LLM을 위한 API를 설계하는 것과 다르지 않으니까요.
Upstash MCP
저희는 오픈소스 Upstash MCP를 제공하여 자연어만으로 Upstash 계정과 상호작용할 수 있습니다. 예시는 다음과 같습니다.
- "us-east-1 리전에 새 Redis 데이터베이스 만들어줘"
- "내 데이터베이스 목록 보여줘"
- "users-db에서 'user:'로 시작하는 모든 키 보여줘"
- "백업 생성해줘"
- "지난 7일간 처리량 급증 구간 보여줘"
Cursor의 Add MCP Server에 아래 명령어를 붙여넣기만 하면 바로 사용할 수 있습니다.
npx -y @upstash/mcp-server run <UPSTASH_EMAIL> <UPSTASH_API_KEY>
설치는 60초 이내로 끝납니다. 자세한 내용은 https://github.com/upstash/mcp-server 에서 확인하세요.
끝까지 읽어주셔서 감사합니다! 피드백이 있거나 Upstash의 게스트 저자로 참여하고 싶으시다면 josh@upstash.com으로 언제든 연락 주세요 🙌