Files
vpd-permission-poc/docs/design/743-mcp-advertised-agent-tool-validation/README.md

3.2 KiB

#743 MCP 광고 Agent Tool 시작 검증

문제

백오피스 MCP의 tools/listBACKOFFICE_MCP_TOOLS에 선언된 공개 계약을 광고한다. AGENT_TOOLtargetNameDBMS_CLOUD_AI_AGENT.RUN_TOOL에 전달하지만, 현재는 서버 시작 시 해당 Tool이 ADB에 실제로 등록되어 있는지 확인하지 않는다. 따라서 Discovery는 성공하고 첫 tools/call에서만 실패할 수 있다.

목표

  • 공개 Tool 이름과 입력 스키마는 배포 설정에서 안정적으로 관리한다.
  • AGENT_TOOL의 내부 targetName은 현재 JDBC 실행 사용자의 USER_AI_AGENT_TOOLS에서 존재하고 ENABLED 상태여야 한다.
  • 누락·비활성·메타데이터 조회 실패는 서버 시작을 중단한다.
  • Java 자체 구현인 SELECT_AI는 ADB Agent Tool 검증 대상에서 제외한다.

처리 흐름

Spring 설정 로드
  → EnvironmentMcpToolCatalog가 BACKOFFICE_MCP_TOOLS 검증
  → SmartInitializingSingleton이 AGENT_TOOL targetName 수집
  → USER_AI_AGENT_TOOLS 조회
  → 모두 ENABLED
       ├─ 예: MCP endpoint 기동 완료, tools/list 광고
       └─ 아니오: 기동 실패, 외부에 불완전한 Tool 계약을 광고하지 않음

Discovery 요청 때마다 DB를 조회하지 않는다. ADB Agent Tool은 운영 설정이므로 시작 시 한 번 검증하고, 설정이나 DB Tool을 바꾼 뒤에는 애플리케이션을 재기동해 계약을 다시 확정한다.

실패 정책

누락된 Tool을 tools/list에서 자동 제외하지 않는다. 호출 가능한 Tool 집합이 환경에 따라 조용히 축소되면 Agent instruction과 실제 도구 목록이 어긋나기 때문이다. 설정에 선언된 AGENT_TOOL이 하나라도 누락되거나 ENABLED가 아니면 fail-closed로 기동을 실패시킨다.

오류에는 설정의 내부 Tool 이름과 상태만 포함한다. Bearer Token, Tool 입력, DB 접속정보는 로그에 기록하지 않는다.

구현 경계

  • EnvironmentMcpToolCatalog: 공개 이름, 인자, 실행 유형, 내부 target 형식 검증
  • McpAgentToolStartupValidator: DB 등록·상태 검증
  • McpSseService: 검증 완료된 catalog를 tools/list로 광고하고 tools/call로 실행
  • JdbcHmmAiAgentToolRunner: 검증된 targetName을 동일 JDBC 세션에서 실행

USER_AI_AGENT_TOOLSRUN_TOOL을 실행하는 기본 datasource 사용자 기준 View다. 다른 스키마의 Tool을 임의로 검색하거나 ALL_* 권한을 요구하지 않는다.

검증 기준

  1. AGENT_TOOL이 모두 ENABLED면 검증이 통과한다.
  2. Tool이 누락되면 누락된 이름을 포함해 실패한다.
  3. Tool이 DISABLED면 이름과 상태를 포함해 실패한다.
  4. 같은 ADB Tool을 여러 공개 Tool이 참조해도 한 번만 검증한다.
  5. SELECT_AI만 구성되면 USER_AI_AGENT_TOOLS를 조회하지 않는다.
  6. 기존 Maven 전체 테스트와 MCP discovery/call 테스트가 통과한다.

롤백

검증 컴포넌트와 테스트를 제거하면 기존 설정 기반 광고 방식으로 돌아간다. DB Tool, 프로필, VPD 정책과 운영 데이터는 이 변경에서 수정하지 않는다.