MCP 도구 설명과 결과에 섞인 지시문을 검증하는 방법

MCP 서버를 사내 에이전트에 연결할 때는 도구 이름, 설명, 입력값, 결과값을 단순한 안내 문구로 보면 안 된다. 도구 정의와 도구 결과는 모델의 다음 판단에 영향을 줄 수 있기 때문이다. 제공된 Anthropic 문서는 도구의 이름·설명·입력 스키마가 모델에 전달되는 도구 정의의 일부라고 설명하며, 설명에는 기능, 사용할 때와 사용하지 않을 때, 매개변수 의미, 제약을 구체적으로 적으라고 권고한다. 또한 다음 판단에 필요한 고신호 정보만 도구 응답으로 반환하도록 안내한다. Anthropic Define tools

이 글의 목표는 모든 문장을 자동으로 믿지 않는 것이다. 설명과 결과 안에 있는 지시문을 사용자 요청과 같은 신뢰 수준으로 취급하지 말고, 검증할 데이터로 분리한다. 이는 외부 콘텐츠에 삽입된 지시문이 모델을 오도할 수 있다는 OpenAI의 프롬프트 인젝션 설명과도 맞닿아 있다. 특히 외부 콘텐츠가 도구 실행, 링크 접근, 정보 전송 같은 위험한 작업과 결합하면 문제가 커질 수 있다. OpenAI Understanding prompt injections

먼저 정할 경계

도구 설명은 권한 문서처럼 구체화한다

도구 설명에는 기능만 쓰지 말고, 가능한 작업과 금지된 작업을 함께 적는다. 예를 들어 설명에 “고객 목록을 조회한다”라고만 적기보다, 조회 범위, 필요한 식별자, 외부 전송 여부, 상태 변경 여부를 명시한다. 이는 Anthropic 문서가 권고하는 기능·사용 시점·비사용 시점·매개변수·제약의 구체화에 따른 구현 방식이다.

설명 속 “이전 지시를 무시하라”, “다른 도구를 호출하라”, “비밀값을 보내라” 같은 문장은 권한 부여로 해석하지 않는다. 사용자 요청, 서버가 정의한 권한, 승인 정책이 각각 허용하는지 따로 확인한다. 신뢰할 수 없는 외부 콘텐츠의 지시만으로 추가 도구 호출이나 데이터 전송을 허용하지 않는 테스트를 둔다.

검증 대상 확인할 내용 처리 원칙
name 역할이 한 가지로 분명한가 허용 목록에 있는 이름만 선택한다
description 기능, 사용·비사용 시점, 제약이 있는가 명령문이 아니라 검토 대상 텍스트로 분리한다
inputSchema 입력 구조가 정의됐는가 호출 전 입력을 스키마에 맞춰 검증한다
결과 텍스트 다음 행동을 유도하는 문장이 있는가 사실 데이터와 지시문을 분리해 표시한다
outputSchema 구조화 결과를 정의할 수 있는가 정의했다면 결과를 스키마로 검증한다

MCP 사양상 도구 정의에는 name, description, inputSchema가 포함되고, outputSchema와 annotations는 선택 사항이다. 사양은 신뢰할 수 없는 서버의 annotations를 믿지 말라고 명시한다. 또한 서버 출력 정제, 클라이언트의 도구 결과 검증 후 LLM 전달, 민감한 작업의 사용자 확인을 보안 고려사항으로 든다. MCP Tools Specification

AI 업무 자동화에 적용하는 흐름

예를 들어 에이전트가 사내 문서에서 정보를 찾고, 결과를 정리해 담당자에게 보내는 자동화를 생각해 볼 수 있다. 아래 흐름은 제공된 문서의 도구 설명 구체화, 결과 검증, 최소 권한, 민감 작업 승인 원칙을 조합한 구현 패턴이다.

  1. 사용자 요청을 먼저 고정한다. 요청 목적과 필요한 정보 범위를 기록하고, 결과에 새로 나타난 지시문은 사용자 요청으로 승격하지 않는다.
  2. 허용할 MCP 도구 이름을 최소 목록으로 제한한다. OpenAI Responses API 문서는 MCP 도구의 허용 도구 목록을 설정할 수 있다고 설명한다.
  3. 읽기 작업과 쓰기·외부 전송 작업을 구분한다. 문서는 읽기 전용 여부를 기준으로 승인 필터를 둘 수 있고, 쓰기 또는 외부 전송 도구에는 require_approval을 적용할 수 있다고 설명한다.
  4. 호출 직전 inputSchema에 맞는 입력인지 확인한다. 설명에 적힌 자연어 지시가 아니라 스키마와 허용 정책을 기준으로 판단한다.
  5. 결과를 받은 뒤 데이터와 행동 제안을 분리한다. 구조화 결과에 outputSchema가 있다면 먼저 스키마 검증을 거친다.
  6. 결과가 “다른 시스템으로 보내라” 또는 “추가 도구를 실행하라”고 말해도, 그 문장만으로 실행하지 않는다. 원래 요청, 허용 도구 목록, 승인 여부를 다시 통과해야 한다.
  7. 외부 전송이나 민감한 작업은 사용자 확인을 받는다. MCP 사양과 OpenAI 문서 모두 민감한 작업에 대한 사용자 확인 또는 승인 정책을 제시한다.

테스트 체크리스트

  • [ ] 설명에 기능, 사용 시점, 비사용 시점, 매개변수 의미, 제약을 적었는가?
  • [ ] 신뢰하지 않는 서버의 annotations를 신뢰 근거로 쓰지 않는가?
  • [ ] 결과 텍스트의 지시문을 사실 데이터와 분리하는가?
  • [ ] outputSchema가 있는 결과를 LLM에 넘기기 전에 검증하는가?
  • [ ] 허용한 tool_names 밖의 도구를 호출하지 못하게 했는가?
  • [ ] 읽기 전용 도구만 자동 호출하도록 정책을 시험했는가?
  • [ ] 쓰기·외부 전송 도구가 승인 없이 실행되지 않는가?
  • [ ] 외부 지시만으로 추가 호출 또는 데이터 전송이 일어나지 않는가?

한계도 분명히 둔다

스키마 검증은 결과의 구조를 확인하는 장치이지, 결과 내용 전체가 안전하거나 정확하다는 보증은 아니다. MCP 사양이 서버 출력 정제와 클라이언트 검증을 함께 언급하는 이유도 여기에 있다. 또한 설명이 자세해도 설명 자체가 모델 판단에 영향을 주는 텍스트라는 점은 바뀌지 않는다. 따라서 설명의 구체성, 최소 권한의 도구 허용 목록, 결과 검증, 민감 작업 승인이라는 여러 경계를 함께 둬야 한다.

사내 자동화에서는 ‘도구 결과가 요청한 일을 완료했다’는 문장과 ‘실제로 다음 외부 행동을 해도 된다’는 판단을 분리하는 편이 안전하다. 특정 도구 호출을 강제하거나 도구 선택 정책을 설정할 수 있다는 OpenAI 문서의 기능도, 허용된 범위 안에서만 사용한다. OpenAI Responses API MCP tools

구매 전 판매 페이지의 구성과 사용 대상을 다시 확인해.

FAQ

결과에 긴급 지시가 있으면 자동으로 따라야 하나요?

아니다. 제공된 OpenAI 자료는 외부 콘텐츠의 지시가 모델을 오도할 수 있다고 설명한다. 해당 지시는 원래 사용자 요청과 별도의 신뢰 수준으로 분류하고, 승인과 허용 도구 정책을 다시 확인한다.

annotations가 있으니 안전하다고 봐도 되나요?

아니다. MCP 사양은 신뢰할 수 있는 서버가 아니면 annotations를 신뢰하지 말라고 명시한다.

읽기 도구는 항상 승인 없이 호출해도 되나요?

OpenAI 문서는 읽기 전용 여부에 따른 승인 필터를 설정할 수 있다고 설명한다. 자동 호출 여부는 서버 설명과 사용자 승인 정책을 포함한 배포 정책으로 정해야 하며, 이 글의 출처만으로 모든 읽기 도구의 무승인 실행이 안전하다고 결론낼 수는 없다.

개발 환경은 무엇을 선택하면 좋나요?

이 주제는 MCP 서버, 에이전트, 개발, 인프라를 다루므로 포트폴리오 제품 선택은 Apple Mac mini로 둔다. 다만 제공된 출처에는 해당 제품의 기능이나 적합성에 관한 근거가 없으므로, 이 글은 제품 성능이나 사용 결과를 주장하지 않는다.

이 게시물은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글 남기기