이번 포스팅에서는 *Model Context Protocol(MCP)*의 TypeScript SDK를 사용하여 MCP 서버를 구축하는 방법을 알아보겠습니다. 이 글에서는 MCP가 무엇인지, 그리고 TypeScript SDK를 활용하여 MCP 서버를 단계별로 만드는 과정을 아주 자세하게 설명드리겠습니다.
먼저, MCP에 대해 간단히 알아보겠습니다. MCP는 *대형 언어 모델(LLM)*이 외부 데이터와 기능에 안전하고 표준화된 방식으로 접근할 수 있도록 해주는 프로토콜입니다. 쉽게 말해, LLM이 필요한 정보를 외부에서 가져오거나 특정 작업을 수행할 수 있도록 돕는 다리 역할을 합니다. 예를 들어, LLM이 날씨 정보를 필요로 할 때, MCP를 통해 실제 날씨 API에 접근하여 정보를 가져올 수 있습니다. MCP 공식 문서↗에서 더 자세한 정보를 확인하실 수 있습니다.
이제 실제로 MCP 서버를 구현해보겠습니다. 간단한 계산기 기능과 인사말을 제공하는 서버를 만들어보겠습니다.
import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";import { z } from "zod";const server = new McpServer({ name: "Demo", version: "1.0.0"});server.tool( "add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({ content: [{ type: "text", text: String(a + b) }] }));server.resource( "greeting", new ResourceTemplate("greeting://{name}", { list: undefined }), async (uri, { name }) => ({ contents: [{ uri: uri.href, text: `안녕하세요, ${name}님!` }] }));const transport = new StdioServerTransport();await server.connect(transport);
이 코드는 MCP 서버를 생성하고 add라는 이름의 도구(tool)를 추가하여 두 숫자의 합을 계산하는 기능을 제공합니다. 또한 greeting이라는 리소스를 추가하여 사용자의 이름에 따라 동적으로 인사말을 생성합니다. 마지막으로 표준 입출력을 통해 메시지를 처리합니다.
이번 글에서는 MCP의 개념부터 시작하여 TypeScript SDK를 통해 MCP 서버를 구축하는 과정을 차근차근 살펴보았습니다. MCP를 이용하면 LLM이 외부 데이터와 기능을 보다 안전하고 일관된 방식으로 사용할 수 있게 됩니다. SDK가 잘 정리되어 있어 비교적 쉽게 서버를 만들 수 있으므로, 다양한 기능 확장에 도전해보시길 바랍니다.