본문 바로가기

인공지능

MCP 서버 구축: 프롬프트 추가하기

728x90
반응형

MCP(Model Context Protocol) 서버를 구축하는 과정에서 프롬프트(Prompt)는 중요한 역할을 합니다. 프롬프트는 AI 모델과의 상호작용을 표준화하고, 일관된 결과를 도출할 수 있도록 도와주는 기능입니다. 이번 글에서는 MCP 서버에 프롬프트 기능을 추가하는 방법을 다룹니다.

이전 시리즈에서 우리는 기본적인 MCP 서버를 만들고, 리소스와 템플릿을 추가하여 코드 구조를 개선했습니다. 이제 프롬프트를 도입하여 AI 모델과 보다 효율적으로 상호작용할 수 있도록 MCP 서버를 확장해 보겠습니다.

반응형

MCP 프롬프트란 무엇인가?

프롬프트(Prompt)는 특정한 형식을 가진 메시지 템플릿으로, AI 모델과의 인터랙션을 표준화하는 역할을 합니다. 예를 들어, 코드 리뷰를 요청하거나, 데이터를 분석하거나, 이메일을 생성하는 등의 작업을 AI에게 지시할 때 일관된 형식으로 요청할 수 있도록 도와줍니다.

💡 비유하자면, 프롬프트는 레스토랑의 메뉴와 같습니다.

  • 메뉴에서 원하는 항목(프롬프트)을 선택하면, 웨이터(AI 모델)가 그에 맞는 요리를 제공해 줍니다.
  • 때로는 메뉴를 커스터마이징할 수도 있죠. 예를 들어, "덜 맵게 해주세요" 또는 "추가 토핑을 넣어주세요"라고 요청할 수 있듯이, 프롬프트에서도 특정한 매개변수(Parameters)를 추가하여 맞춤형 요청을 보낼 수 있습니다.

MCP 프롬프트를 사용하는 이유

프롬프트를 사용하면 일관된 패턴의 AI 상호작용을 만들 수 있습니다. 다음과 같은 예제들이 대표적인 활용 사례입니다.

1. 코드 리뷰 요청

프롬프트 예시:

{
  "name": "code-review",
  "description": "코드 리뷰 요청",
  "arguments": {
    "language": "Python",
    "focusAreas": "보안, 성능",
    "codeBlock": "..."
  }
}

📌 사용자 요청 예시:

"이 Python 코드의 보안 및 성능을 중심으로 리뷰해주세요."


2. 데이터 분석 요청

프롬프트 예시:

{
  "name": "analyze-sales-data",
  "description": "판매 데이터 분석",
  "arguments": {
    "timeframe": "Q1",
    "metrics": "수익, 성장률"
  }
}

📌 사용자 요청 예시:

"Q1 판매 데이터를 분석하고, 수익과 성장률을 중심으로 살펴봐 주세요."


3. 이메일 생성 요청

프롬프트 예시:

{
  "name": "generate-email",
  "description": "이메일 생성",
  "arguments": {
    "tone": "공식적",
    "type": "고객 지원",
    "context": "환불 요청"
  }
}

📌 사용자 요청 예시:

"Bob’s Barbecue LLC에 공식적인 환불 요청 이메일을 작성해 주세요."


MCP 서버 코드 구조 정리

이전 단계에서, 우리는 MCP 서버의 핸들러(handler)들을 별도의 파일로 분리하여 코드의 가독성을 높였습니다. 이제 프롬프트 관련 코드를 추가하여 더욱 체계적으로 정리해 보겠습니다.

📂 resources.ts (리소스 정의 파일)

export const resources = [
  {
    uri: "hello://world",
    name: "Hello World Message",
    description: "간단한 인사 메시지",
    mimeType: "text/plain",
  },
];

export const resourceHandlers = {
  "hello://world": () => ({
    contents: [
      {
        uri: "hello://world",
        text: "Hello, World! MCP 리소스를 처음 만들어 보았습니다.",
      },
    ],
  }),
};

📂 prompts.ts (프롬프트 정의 파일 추가)

이제 새로운 프롬프트를 정의합니다.

export const prompts = {
  "create-greeting": {
    name: "create-greeting",
    description: "맞춤형 인사 메시지 생성",
    arguments: [
      { 
        name: "name",
        description: "인사할 대상의 이름",
        required: true,
      },
      {
        name: "style",
        description: "인사 스타일 (공식적, 캐주얼, 흥분된 등)",
        required: false,
      }
    ],
  },
};

export const promptHandlers = {
  "create-greeting": ({ name, style = "casual" }: { name: string, style?: string }) => {
    return {
      messages: [
        {
          role: "user",
          content: {
            type: "text",
            text: `Please generate a greeting in ${style} style to ${name}.`,
          },
        },
      ],
    };
  },
};

📂 handlers.ts (핸들러 업데이트)

프롬프트를 MCP 서버에 등록합니다.

import { GetPromptRequestSchema, ListPromptsRequestSchema } from "@modelcontextprotocol/sdk/types.js";
import { promptHandlers, prompts } from "./prompts.js";

export const setupHandlers = (server: Server): void => {
  // 기존 리소스 핸들러 추가

  // 새로운 프롬프트 핸들러 추가
  server.setRequestHandler(ListPromptsRequestSchema, () => ({
    prompts: Object.values(prompts),
  }));

  server.setRequestHandler(GetPromptRequestSchema, (request) => {
    const { name, arguments: args } = request.params;
    const promptHandler = promptHandlers[name as keyof typeof promptHandlers];
    if (promptHandler) return promptHandler(args as { name: string, style?: string });
    throw new Error("Prompt not found");
  });
};

MCP 프롬프트 테스트하기

1️⃣ MCP 인스펙터(Inspector)에서 테스트

터미널에서 다음 명령어 실행

npx @modelcontextprotocol/inspector node build/index.js

👉 "Prompts" 탭에서 create-greeting 프롬프트 실행

  • name: "Alice", style: "excited" 입력
  • 결과: "Please generate a greeting in excited style to Alice."

2️⃣ Claude Desktop에서 테스트

  1. Claude Desktop 실행
  2. "Attach from MCP" 선택
  3. create-greeting 프롬프트 선택
  4. name에 "John" 입력 후 제출
  5. 결과: "Hi John! How are you doing today?"

📌 추가 실험:

  • name: "Alice", style: "formal" 입력
  • 결과:
Dear Alice,  
I hope this message finds you well. I am writing to extend my warmest greetings.  
Best regards,  
Claude  

 

728x90

MCP 프롬프트를 추가하여 서버의 AI 상호작용을 표준화할 수 있습니다.
코드 리뷰, 데이터 분석, 이메일 생성 등 다양한 활용이 가능합니다.
프롬프트를 커스터마이징하여 특정 요구 사항에 맞춘 응답을 얻을 수 있습니다.


https://medium.com/@cstroliadavis/building-mcp-servers-13570f347c74

 

Building MCP Servers

Part 3 — Adding Prompts

medium.com

728x90
반응형