Files
dap-was-dapms/docs/decisions/ADR-0002-tool-exposure-and-single-call.md
koseokmin 58d3014a0f
All checks were successful
Deploy Gateway / deploy (push) Successful in 2m52s
저장소 문서를 다시 추적하고 계약 예제를 복원한다
계약 테스트는 docs/contracts 아래 예제를 golden example로 읽는다.
docs/와 README.md가 ignore되어 있어 예제 파일이 사라졌고 9건이
실패하고 있었다. 문서가 온전했던 마지막 상태(3de052a)에서 복원하고
.gitignore에서 두 항목을 제거한다. 에이전트 산출물인
docs/superpowers/ 제외는 유지한다.

initialize 응답의 capabilities.tools.listChanged를 문서는 true로
적고 있었으나 InitializeHandler는 false를 낸다. 현재 HTTP 단발 응답
transport가 notification을 push할 수 없으므로 false가 맞다. 예제와
architecture.md를 코드에 맞추고, ToolListChangedEvent가 발행되지만
아직 소비되지 않는다는 점과 SSE 도입 시 true로 바꾼다는 조건을
남긴다.

169개 테스트 전부 통과.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 17:16:13 +09:00

1.7 KiB

ADR-0002 Agent Builder Tool 노출 제한과 단일 Tool 호출

배경

많은 Tool을 한 번에 LLM context에 노출하면 Tool 식별과 선택 정확도가 저하될 수 있다. 또한 한 요청에서 여러 Tool을 실행하면 timeout, 부분 성공, 순서 의존성과 오류 계약이 복잡해진다.

결정

  • Agent Builder가 사용자·Agent·업무 맥락에 맞는 Tool을 선택한다.
  • Agent Builder가 한 시점에 LLM에 노출하는 활성 Tool은 최대 50개다.
  • 목표 Agent Builder-MCP 호출 모델은 요청 하나당 Tool 하나다.
  • MCP Server는 50개 선별 로직이나 LLM 기반 우선순위 판단을 구현하지 않는다.

영향

  • 50개 선별은 Agent Builder 변경 사항이며 MCP 코드 변경 대상이 아니다.
  • 요청 하나당 Tool 하나라는 결정은 그대로 유효하다.

결정 당시의 envelope 기록 (현재 구현 아님)

결정 시점에는 최종 field 이름이 미확정이어서 params.toolCalls[] 배열 envelope를 유지하고, 원소를 정확히 한 개만 허용해 단일 호출을 강제했다. 빈 배열과 2개 이상은 -32602로 거절했다.

이 envelope는 ADR-0005계약 v0.3에서 표준 MCP params.name + params.arguments로 대체되었다. 현재 코드에 toolCalls는 존재하지 않는다. 배열이 사라졌으므로 "정확히 한 개" 검증도 필요 없어졌고, 단일 호출 결정은 envelope 구조 자체로 만족된다.