Structured Output와 mcp
예를 들어 사용자가 리뷰를 남겼다고 해보겠습니다.복사
배송은 빨랐지만 가격이 너무 비싸요.
우리는 이 리뷰에서 다음 정보를 얻고 싶습니다.복사
sentiment = "neutral"
score = 3
summary = "배송은 긍정적이지만 가격에 대한 불만이 있습니다."
하지만 일반적인 LLM 호출은 보통 이런 식으로 답합니다.복사
이 리뷰는 중립에 가깝습니다. 배송은 빠르다는 점은 긍정적이지만,
가격이 비싸다는 불만이 포함되어 있습니다.
사람이 읽기에는 자연스럽습니다. 하지만 프로그램 입장에서는 애매합니다.
sentiment는 어디에 있나요?
score는 몇 점인가요?
summary만 따로 꺼내려면 문자열 파싱을 해야 하나요?
이 문제를 해결하기 위해 사용하는 개념이 Structured Output입니다.
| 전략 | 방법 | 장점 | 단점 |
|---|---|---|---|
| Provider Native | method="json_schema" | 가장 안정, 빠름 | 일부 모델만 |
| Tool Calling | method="function_calling" | 호환성 ↑ | 토큰 약간 추가 |
기본값은 모델별로 알아서 골라줌. 명시적 제어가 필요할 때만 method 지정.

CP 서버는 클라이언트(LLM)에게 3종류의 자원을 제공할 수 있습니다.
① Tools (도구) — LLM이 호출하는 함수
지금까지 우리가 만든 @tool 과 비슷합니다.
② Resources (리소스) — LLM이 읽는 데이터
도구는 “함수 호출”, 리소스는 “데이터 읽기”. URI 기반.
③ Prompts (프롬프트) — 미리 정의된 프롬프트 템플릿
자주 쓰는 프롬프트를 서버가 제공.
| 프리미티브 | 무엇 | 누가 부르나 | 예시 |
|---|---|---|---|
| Tools | 함수 | LLM이 결정 | search_employee() |
| Resources | 데이터 | URI로 접근 | employees://12345 |
| Prompts | 템플릿 | 사용자가 명령 | /code-review |
| 항목 | 핵심 |
|---|---|
| MCP | LLM과 도구·데이터 사이의 표준 프로토콜 |
| 프리미티브 | Tools (호출 함수), Resources (데이터), Prompts (템플릿) |
| 전송 | stdio (로컬), SSE (구), Streamable HTTP (신규 권장) |
| 생태계 | filesystem, github, slack 등 공식 서버 풍부 |