메뉴
← 기술 블로그
글자 크기
MCP2026.08.19

MCP 도구 설계 패턴
— 좋은 도구 vs 나쁜 도구

MCP 서버를 만드는 건 어렵지 않습니다.AI 에이전트가 제대로 쓸 수 있는 도구를 만드는 게 어렵습니다.

MCP 도구의 품질은description 한 줄, 스키마 몇 줄에서 결정됩니다.AI 에이전트는 이 정보만 보고도구를 이해하고 호출합니다.

좋은 도구는 에이전트가 정확하게 사용하고,나쁜 도구는 잘못 호출하거나 아예 무시합니다.

1. description — 도구의 운명을 결정하는 한 줄

LLM은 도구의 description을 읽고“이 도구를 지금 써야 하는가”를 판단합니다.description이 모호하면 엉뚱한 상황에서 호출되고,너무 길면 핵심을 놓칩니다.

나쁜 description

“데이터를 처리합니다”

→ 무슨 데이터? 어떻게 처리? 에이전트가 판단 불가

“이 도구는 사용자의 주문 정보를 데이터베이스에서 조회하여 JSON 형식으로 반환하는 도구입니다. 주문 번호를 입력하면 주문 상태, 배송 정보, 결제 정보를 포함한 상세 정보를 확인할 수 있습니다.”

→ 불필요하게 길고 반복적. 핵심이 묻힘

좋은 description

“주문 번호로 주문 상세(상태, 배송, 결제)를 조회합니다.”

→ 무엇을(주문 상세), 어떻게(주문 번호로), 결과가 뭔지(상태, 배송, 결제) 명확

description 작성 원칙

· 한 문장으로 도구의 목적을 설명

· 입력이 무엇인지, 출력이 무엇인지 포함

· 언제 쓰는지 맥락을 포함 (선택, 하지만 권장)

· 구현 세부사항(DB 타입, API 경로)은 제외

· LLM 지시문으로 오해될 수 있는 표현 금지

2. 입력 스키마 — 엄격할수록 안전하다

MCP 도구의 inputSchema는 JSON Schema 형식입니다.에이전트는 이 스키마를 보고 파라미터를 구성합니다.

나쁜 스키마

· 타입이 anystring으로만 정의

· 필수/선택 구분이 없음

· 파라미터 설명(description)이 없음

· 유효 범위(enum, min, max)가 없음

좋은 스키마

· 각 파라미터에 정확한 타입 (string, number, boolean)

· required로 필수 파라미터 명시

· 각 파라미터에 description 포함

· enum으로 허용 값 제한 (예: status: [“active”, “inactive”])

· 기본값(default) 제공

스키마가 엄격할수록 에이전트가 올바른 인자를 보내고,동시에 인젝션 공격의 여지도 줄어듭니다.

3. 단일 책임 — 하나의 도구는 하나의 일만

“주문을 조회하고, 수정하고, 삭제하는 도구”는하나가 아니라 세 개여야 합니다.

왜 나눠야 하는가

· 권한 분리 — 조회는 허용하되 삭제는 승인 필요

· 에이전트 판단 정확도 — 도구가 하나의 일만 하면 선택이 명확

· 에러 추적 — 어떤 행동에서 문제가 생겼는지 바로 특정

· 감사 로그 — “조회했다”와 “삭제했다”가 구분됨

4. 에러 처리 — 에이전트가 이해할 수 있는 에러

도구가 실패했을 때에이전트는 에러 메시지를 보고 다음 행동을 결정합니다.스택트레이스를 돌려주면 에이전트는 아무것도 할 수 없습니다.

나쁜 에러

“Error: ECONNREFUSED 127.0.0.1:5432”

→ 에이전트가 DB 연결 오류를 해결할 수 없음. 내부 구현 노출

좋은 에러

“주문 번호 ORD-12345를 찾을 수 없습니다. 주문 번호를 확인해 주세요.”

→ 에이전트가 사용자에게 재확인 요청 가능

에러 처리 원칙

· 에이전트가 다음 행동을 판단할 수 있는 메시지

· 내부 구현 세부사항(IP, 포트, 스택트레이스) 절대 노출 금지

· 재시도 가능 여부 명시 (일시적 오류 vs 영구적 오류)

· MCP의 isError 플래그를 활용하여 에러 응답 구분

5. 멱등성 — 두 번 호출해도 같은 결과

AI 에이전트는 같은 도구를 여러 번 호출할 수 있습니다.네트워크 타임아웃으로 재시도하거나,에이전트 로직이 반복 호출할 수도 있습니다.

조회(GET) 도구는 자연스럽게 멱등하지만,쓰기 도구는 의도적으로 설계해야 합니다.

멱등성 확보 방법

· 주문 생성 시 idempotency key 파라미터 추가

· 같은 키로 재요청 시 기존 결과 반환 (중복 생성 방지)

· 상태 변경 시 “현재 상태 확인 → 변경”이 아닌 원자적 연산 사용

· description에 멱등성 여부를 명시

6. 응답 설계 — 에이전트가 파싱할 수 있게

도구의 응답은 에이전트의 다음 사고 과정에 들어갑니다.구조화된 JSON으로 돌려주되,너무 많은 데이터를 한 번에 보내지 마세요.

응답 설계 원칙

· 필요한 정보만 반환 (전체 레코드를 덤프하지 않기)

· 대량 결과는 페이지네이션 또는 요약 제공

· 민감 정보(비밀번호, 토큰)는 응답에서 제외

· 일관된 응답 구조 유지 (성공/실패 모두 같은 형태)

도구 설계 체크리스트

01

description이 한 문장으로 도구의 목적, 입력, 출력을 설명하는가?

02

inputSchema에 모든 파라미터의 타입, 필수 여부, 설명이 있는가?

03

하나의 도구가 하나의 일만 하는가? (단일 책임)

04

읽기 도구와 쓰기 도구가 분리되어 있는가?

05

에러 메시지가 에이전트의 다음 행동을 안내하는가?

06

내부 구현 세부사항이 에러 메시지에 노출되지 않는가?

07

쓰기 도구에 멱등성이 확보되어 있는가?

08

응답에 민감 정보가 포함되지 않는가?

도구의 품질은 에이전트의 정확도에 직결됩니다.좋은 도구를 만들면 에이전트가 알아서 잘 쓰고,나쁜 도구를 만들면 아무리 좋은 모델이라도 실수합니다.

본 글은 리원에이스 기술개발본부가 작성한 기술 콘텐츠입니다. 외부 공유 시 출처를 명시해 주세요.

2026년 8월 19일
리원에이스 기술개발본부