3.2 KiB
#743 MCP 광고 Agent Tool 시작 검증
문제
백오피스 MCP의 tools/list는 BACKOFFICE_MCP_TOOLS에 선언된 공개 계약을 광고한다.
AGENT_TOOL은 targetName을 DBMS_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_TOOLS는 RUN_TOOL을 실행하는 기본 datasource 사용자 기준 View다. 다른
스키마의 Tool을 임의로 검색하거나 ALL_* 권한을 요구하지 않는다.
검증 기준
AGENT_TOOL이 모두ENABLED면 검증이 통과한다.- Tool이 누락되면 누락된 이름을 포함해 실패한다.
- Tool이
DISABLED면 이름과 상태를 포함해 실패한다. - 같은 ADB Tool을 여러 공개 Tool이 참조해도 한 번만 검증한다.
SELECT_AI만 구성되면USER_AI_AGENT_TOOLS를 조회하지 않는다.- 기존 Maven 전체 테스트와 MCP discovery/call 테스트가 통과한다.
롤백
검증 컴포넌트와 테스트를 제거하면 기존 설정 기반 광고 방식으로 돌아간다. DB Tool, 프로필, VPD 정책과 운영 데이터는 이 변경에서 수정하지 않는다.