Search

MCP 프롬프트

대분류
인공지능/데이터
소분류
LLM 정리 노트
유형
MCP
부유형
MCP 핵심 개념/기능
주요 레퍼런스
https://www.jiniai.biz/2025/03/22/mcp-%ed%94%84%eb%a1%ac%ed%94%84%ed%8a%b8prompts-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0/
https://wikidocs.net/268801
https://modelcontextprotocol.io/docs/concepts/prompts
최종 편집 일시
2025/03/31 23:12
생성 일시
2025/03/31 05:04
13 more properties

프롬프트(Prompts)

: 사용자가 특정 작업을 완료하는 데 도움이 되는 미리 작성된 템플릿
LLM 애플리케이션에서 사용할 수 있는 재사용 가능한 메시지 템플릿과 워크플로우를 정의
재사용 가능한 대화 템플릿이나 작업 흐름
AI와의 대화를 위한 ‘미리 만들어진 대본’
프롬프트를 사용하면 서버가 클라이언트가 사용자와 LLM에 쉽게 표시할 수 있는 재사용 가능한 프롬프트 템플릿과 워크플로를 정의할 수 있다.
기본 프롬프트 정의
interface Prompt { // 프롬프트의 이름 name: string; // 프롬프트에 대한 설명 description?: string; // 템플릿 매개변수 정의 arguments?: PromptArgument[]; } interface PromptArgument { // 매개변수 이름 name: string; // 매개변수 설명 description?: string; // 필수 여부 required?: boolean; }
TypeScript
복사

개요

MCP의 프롬프트는 다음을 수행할 수 있는 미리 정의된 템플릿이다.
동적 인수 허용
리소스의 컨텍스트 포함
여러 상호 작용 체인
특정 워크플로 가이드
UI 요소(슬래시 명령 등)로 표면화

프롬프트 구조

{ name: string; // Unique identifier for the prompt description?: string; // Human-readable description arguments?: [ // Optional list of arguments { name: string; // Argument identifier description?: string; // Argument description required?: boolean; // Whether argument is required } ] }
TypeScript
복사
{ "name": "코드-분석", // 프롬프트 식별자 "description": "코드 개선점 분석", // 설명 "arguments": [ // 동적 인자(선택사항) { "name": "language", // 인자 이름 "description": "프로그래밍 언어", // 인자 설명 "required": true // 필수 여부 } ] }
Python
복사
메시지 구조
interface PromptMessage { // 메시지 발신자/수신자 역할 role: "user" | "assistant"; // 메시지 내용 content: TextContent | ImageContent | EmbeddedResource; } interface TextContent { type: "text"; text: string; } interface ImageContent { type: "image"; data: string; // base64 인코딩된 이미지 mimeType: string; // 이미지 타입 }
TypeScript
복사

프롬프트 작업

프롬프트 목록 조회/발견

클라이언트는 prompts/list 요청을 통해 사용 가능한 프롬프트 목록을 받는다.
interface ListPromptsRequest { method: "prompts/list"; params?: { cursor?: string; // 페이지네이션용 커서 }; } interface ListPromptsResult { prompts:Prompt[]; nextCursor?: string; }
TypeScript
복사
클라이언트는 엔드포인트를 통해 사용 가능한 프롬프트를 검색할 수 있다.
// Request { method: "prompts/list" } // Response { prompts: [ { name: "analyze-code", description: "Analyze code for potential improvements", arguments: [ { name: "language", description: "Programming language", required: true } ] } ] }
TypeScript
복사

프롬프트 사용

프롬프트를 사용하려면 클라이언트가 다음과 같이 prompts/get요청해야 한다.
// Request { method: "prompts/get", params: { name: "analyze-code", arguments: { language: "python" } } } // Response { description: "Analyze Python code for potential improvements", messages: [ { role: "user", content: { type: "text", text: "Please analyze the following Python code for potential improvements:\n\n```python\ndef calculate_sum(numbers):\n total = 0\n for num in numbers:\n total = total + num\n return total\n\nresult = calculate_sum([1, 2, 3, 4, 5])\nprint(result)\n```" } } ] }
TypeScript
복사
프롬프트 가져오기
클라이언트는 prompts/get 요청을 통해 특정 프롬프트와 필요한 인자를 보낸다.
interface GetPromptRequest { method: "prompts/get"; params: { name: string; // 프롬프트 이름 arguments?: { // 템플릿 매개변수 [key: string]: string; }; }; } interface GetPromptResult { description?: string; messages:PromptMessage[]; }
TypeScript
복사
프롬프트 응답
서버는 완성된 대화 메시지를 반환
{ "messages": [ { "role": "user", "content": { "type": "text", "text": "다음 Python 코드를 분석해 주세요: ..." } } ] }
TypeScript
복사

프롬프트 설계 고려사항

템플릿 설계

1.
유연성
다양한 사용 사례 지원
커스터마이제이션 옵션
확장 가능한 구조
2.
재사용성
모듈식 설계
공통 패턴 추출
일관된 형식
3.
명확성
이해하기 쉬운 매개변수
명확한 설명
예제 포함

컨텍스트 관리

interface PromptContext { // 기본 시스템 프롬프트 systemPrompt?: string; // 컨텍스트 제한 contextLimit?: { maxTokens: number; truncateMethod: 'start' | 'end'; }; // 메타데이터 metadata?: { source: string; timestamp: string; version: string; }; }
TypeScript
복사

오류 처리

interface PromptError { code: number; // 오류 코드 message: string; // 오류 메시지 details?: { invalidArgs?: string[]; contextError?: string; resourceError?: string; }; }
TypeScript
복사

고급 기능

프롬프트 체이닝(리소스 포함)

프롬프트에 파일 내용이나 데이터베이스 정보 등의 리소스를 포함할 수 있다.
interface ChainedPrompt { steps: { name: string; dependsOn?: string[]; arguments?: { [key: string]: string | { fromStep: string; field: string; }; }; }[]; }
TypeScript
복사

컨텍스트 주입

여러 대화 턴을 미리 설계하여 복잡한 문제 해결 과정을 안내할 수 있다.
interface ContextInjection { // 전역 컨텍스트 global?: { variables: { [key: string]: string }; resources: string[]; }; // 단계별 컨텍스트 stepContext?: { [stepName: string]: { variables: { [key: string]: string }; resources: string[]; }; }; }
TypeScript
복사

결과 후처리

클라이언트 UI에서 슬래시 명령어(/), 빠른 액션, 컨텍스트 메뉴 등으로 표시될 수 있다.
interface PostProcessor { // 결과 형식 변환 format?: 'text' | 'json' | 'markdown'; // 결과 필터링 filters?: { excludePatterns?: string[]; includeOnly?: string[]; }; // 결과 검증 validation?: { schema?: object; rules?: string[]; }; }
TypeScript
복사

업데이트 및 변경 사항

서버는 클라이언트에게 즉각적인 변경 사항을 알릴 수 있다.
1.
서버 기능:prompts.listChanged
2.
공고:notifications/prompts/list_changed
3.
클라이언트가 프롬프트 목록을 다시 가져온다.

모범 사례

프롬프트 설계

목적 명확화: 각 프롬프트의 목적을 명확히 정의
일관된 형식: 표준화된 형식과 구조 사용
문서화: 상세한 설명과 예제 제공

구현 권장사항

비동기 처리: 장시간 실행 작업 고려
리소스 효율성: 메모리와 처리 시간 최적화
버전 관리: 프롬프트 변경 이력 관리

보안 고려사항

모든 인수 검증
사용자 입력을 정리
속도 제한을 고려
접근 제어를 구현
Audit prompt 사용
민감한 데이터를 적절히 처리
생성된 콘텐츠 검증
타임아웃 구현
injection risks을 고려
문서 보안 요구 사항