"하네스 엔지니어링 기초 (4/4) — MCP와 도구 엔지니어링: AI 에이전트 도구를 제대로 설계하는 법"

에이전트에 도구를 더 많이 붙인다고 더 유능해지지는 않는다. 오히려 이름이 모호하고, 권한이 과하고, 출력이 장황한 도구는 강한 모델도 반복해서 헷갈리게 만든다. 중요한 것은 도구 개수가 아니라 도구 표면이다. MCP는 그 표면을 연결하는 표준일 수는 있지만, 설계 자체를 대신해 주지는 않는다.


핵심 요약

  • 도구는 모델의 손과 발이지만, 모델은 그 손을 직접 움직이지 않는다. 도구 설명, 입력 schema, 권한 경계, 출력 형식이 모두 판단 품질에 영향을 준다.
  • MCP는 외부 도구와 데이터를 연결하는 유용한 표준이지만, "연결 가능"하다는 사실이 곧 "잘 설계되었다"는 뜻은 아니다.
  • 좋은 도구 표면은 보통 이름이 명확하고, 입력이 좁고, 위험도가 분리되어 있고, 출력이 짧고 구조적이다.
  • 나쁜 도구 표면은 과도한 권한, 중복 기능, 긴 원문 출력, 불명확한 설명 때문에 에이전트 루프를 망가뜨린다.
  • 결국 도구 엔지니어링은 기능 추가보다 판단 비용과 실패 반경을 줄이는 설계에 가깝다.

1. 왜 도구 문제는 곧 품질 문제인가

A2에서 본 것처럼 에이전트는 도구 호출 루프로 작동한다. 이 말은 곧, 모델이 무엇을 할지 판단할 때 도구 표면 자체가 입력의 일부라는 뜻이다.

예를 들어 아래 두 도구는 기능 차이보다 설계 차이가 더 중요할 수 있다.

  • search_docs: 제품 문서를 검색하고 상위 5개 결과를 요약해서 돌려준다
  • fetch_anything: 뭐든 가져온다

둘 다 검색 비슷한 기능일 수 있지만, 두 번째는 판단 비용이 너무 크다. 모델은 언제 써야 하는지, 무엇이 나올지, 결과가 어느 정도 길이인지 감을 잡기 어렵다.

즉, 도구 문제는 백엔드 구현 문제가 아니라 모델이 고르는 인터페이스 문제다.

2. 좋은 도구 표면은 네 가지를 분명하게 만든다

도구 엔지니어링을 복잡하게 볼 필요는 없다. 입문 단계에서는 아래 네 요소를 명확히 만드는 것이 핵심이다.

요소 질문
이름 이 도구가 무엇을 하는지 한눈에 드러나는가
설명 언제 써야 하고 언제 쓰면 안 되는지가 적혀 있는가
입력 schema 꼭 필요한 인자만 받고, 실수하기 쉬운 입력을 줄였는가
출력 형식 다음 판단에 필요한 핵심만 짧게 돌려주는가

이 네 가지가 선명하면, 모델은 같은 능력으로도 더 정확하게 행동한다.

3. 이름과 설명은 생각보다 훨씬 중요하다

사람 개발자는 README나 코드를 뒤져서 도구 의미를 복구할 수 있다. 모델은 주어진 설명과 schema를 우선 신뢰한다. 따라서 이름과 설명은 문서가 아니라 행동 유도 장치다.

안 좋은 예는 대체로 이런 식이다.

  • run
  • helper
  • project_tool
  • "Useful tool for many tasks"

이런 이름은 모델에게 판단 근거를 주지 못한다.

반대로 더 나은 방향은 다음과 같다.

  • read_repo_file
  • search_blog_drafts
  • list_pending_tasks
  • fetch_official_docs_snippet

설명도 비슷하다. "무엇을 할 수 있다"만 쓰는 것보다 "언제 써야 하는지"를 함께 써야 모델 선택 품질이 올라간다.

예를 들면:

  • 나쁜 설명: "Search documents."
  • 더 나은 설명: "Searches project docs and returns top matches with titles and short summaries. Use this before opening large documents directly."

4. 입력 schema는 실수 방지 장치다

많은 팀이 schema를 단지 형식 검사용으로 본다. 하지만 실전에서는 그것보다 더 중요하다. schema는 모델의 행동 공간을 줄여 준다.

좋은 schema는 대체로 이런 특징을 가진다.

  • 필수 인자가 명확하다
  • 자유 입력보다 선택지를 좁힌다
  • 위험한 조합을 만들기 어렵게 한다
  • 단일 책임을 유지한다

예를 들어 파일 읽기와 파일 삭제는 같은 "파일 도구"로 뭉치지 않는 편이 낫다. 검색과 수정도 마찬가지다. 기능을 합치면 사람 눈에는 편해 보여도, 모델 눈에는 도구 목적이 흐려진다.

즉, schema는 백엔드 편의가 아니라 오용 방지용 UX다.

5. 출력은 짧고 구조적이어야 한다

기존 도구·샌드박싱 초안과 활용 노트는 같은 경고를 반복한다. 에이전트 문제의 상당수는 도구가 "너무 많은 결과"를 너무 쉽게 돌려준다는 데서 시작된다.

왜냐하면 긴 출력은 두 번 비용을 만들기 때문이다.

  • 실행 순간에 비용이 든다
  • 그 결과를 다음 턴마다 다시 읽어야 하므로 추가 비용이 든다

그래서 좋은 도구 출력은 보통 다음 형태를 따른다.

  • 요약
  • 출처 또는 파일 경로
  • 날짜나 버전 같은 맥락 정보
  • 필요한 경우 후속 fetch용 ID나 포인터

반대로 나쁜 출력은 아래 형태에 가깝다.

  • 수천 줄 로그를 그대로 반환
  • 검색 결과 전문을 한 번에 반환
  • 핵심과 부가정보가 구분되지 않음
  • 불확실성과 출처가 없음

좋은 도구는 "많이 주는 도구"가 아니라, 다음 판단에 필요한 만큼만 주는 도구다.

6. MCP는 표준이지, 설계 자동화가 아니다

MCP는 외부 도구와 데이터 소스를 표준 인터페이스로 연결하게 해 주는 큰 진전이다. 여러 클라이언트가 같은 서버를 재사용할 수 있고, 도구 연결이 체계화된다.

하지만 여기서 자주 생기는 오해가 있다.

MCP를 붙였다고 도구 엔지니어링이 끝나는 것은 아니다.

MCP가 해결하는 것은 주로 연결 방식이다. 그러나 여전히 남는 질문이 있다.

  • 어떤 도구를 노출할 것인가
  • 권한을 어디까지 줄 것인가
  • 이름과 설명을 어떻게 쓸 것인가
  • 큰 결과를 어떻게 제한할 것인가
  • 신뢰할 수 없는 서버를 어떻게 격리할 것인가

즉, MCP는 전원 멀티탭에 가깝다. 유용하지만, 무엇을 꽂고 어떤 안전장치를 둘지는 여전히 하네스 설계자의 몫이다.

7. 권한과 위험도는 도구 설계에서 분리되어야 한다

좋은 도구 표면은 기능뿐 아니라 위험도 구분도 반영한다. 읽기와 쓰기, 검색과 실행, 로컬 수정과 외부 전송은 같은 수준으로 다뤄지면 안 된다.

실전에서는 다음 분리가 기본에 가깝다.

도구 유형 기본 태도
읽기 도구 상대적으로 넓게 허용 가능
검색 도구 출력 길이 제한 필요
수정 도구 범위 제한과 후속 검증 필요
실행 도구 화이트리스트와 타임아웃 필요
외부 전송 도구 승인 또는 명시 제한 필요

이 분리가 없으면 모델은 동일한 자신감으로 위험도가 전혀 다른 행동을 시도하게 된다.

8. 흔한 안티패턴

도구 엔지니어링이 약할 때 자주 보이는 실수는 아래와 같다.

8.1 만능 도구 하나로 다 처리한다

겉보기에는 단순하지만, 실제로는 언제 무엇을 해야 하는지 판단하기가 가장 어렵다.

8.2 설명이 추상적이다

모델이 어떤 상황에서 써야 하는지 학습할 단서가 부족하다.

8.3 결과를 원문 그대로 던진다

긴 로그, 긴 검색 결과, 대용량 문서 전문은 곧바로 컨텍스트 문제를 만든다.

8.4 권한 경계를 도구 밖에서만 처리하려 한다

상위 정책도 필요하지만, 도구 자체도 위험도에 맞게 잘게 나뉘어 있어야 한다.

8.5 연결 가능한 것을 전부 연결한다

MCP 서버를 많이 붙이는 것이 곧 성능 향상은 아니다. 종종 반대로 선택 혼란만 커진다.

9. 실무 체크리스트: 도구를 추가하기 전에 물어볼 것

새 도구나 MCP 서버를 붙이기 전에 아래 질문을 먼저 던지는 편이 좋다.

  1. 이 도구는 기존 도구와 역할이 겹치지 않는가?
  2. 이름만 보고도 언제 써야 하는지 짐작할 수 있는가?
  3. 설명에 "언제 사용"과 "언제 비사용"이 드러나는가?
  4. 입력 schema가 위험한 자유도를 줄여 주는가?
  5. 출력이 짧고 구조적이며, 필요 시 후속 조회가 가능한가?
  6. 읽기, 수정, 실행, 외부 전송의 위험도가 분리되어 있는가?
  7. 이 도구가 실패했을 때 에이전트는 어떻게 복구하거나 중단할 것인가?

이 질문을 통과하지 못하면, 연결은 되어도 품질은 좋아지지 않을 가능성이 높다.

10. 도구를 늘리기보다 표면을 설계하라

A 시리즈를 마무리하면서 가장 중요한 문장을 하나만 남기면 이렇다.

에이전트 품질은 도구 개수보다 도구 표면의 선명도에서 더 자주 갈린다.

좋은 하네스는 도구를 무한히 확장하지 않는다. 오히려 모델이 지금 상황에서 올바른 행동을 고르기 쉽게 만든다.

  • 이름은 구체적으로
  • 설명은 사용 맥락 중심으로
  • schema는 좁고 명확하게
  • 출력은 짧고 구조적으로
  • 권한은 위험도별로 분리해서

이 원칙만 지켜도 같은 모델이 훨씬 덜 흔들린다. 그래서 도구 엔지니어링은 기능 확장보다 판단 품질을 위한 인터페이스 설계에 가깝다.

참고 자료

  • docs/blog_series_하네스엔지니어링_총괄_design.md
  • sources/260518_하네스엔지니어링_15장_블로그활용노트.md
  • drafts/blog/260429_하네스시리즈04_도구와샌드박싱_블로그.md
  • drafts/blog/260429_harness_series_04_tools_sandboxing_en.md
  • WikiDocs, 하네스 엔지니어링 백과사전 4장 활용 메모

이 글은 하네스 엔지니어링 기초 시리즈의 4/4 편입니다. 후속 읽기: 평가 하네스, 장시간 에이전트 운영, Claude/OpenAI 구현 시리즈.

시리즈 전체 안내: 하네스 엔지니어링 시리즈 안내

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"