# Redmine #726 · Select AI SHOWPROMPT 진단 MCP ## 목표 기존 Text2SQL 생성·실행 tool과 분리된 읽기 전용 SHOWPROMPT 진단 tool을 MCP `tools/list`에 추가한다. 일반 질문 처리 Agent는 포털 allowlist를 통해 기존 tool만 사용하고, FAIL 개선 제안 버튼만 진단 tool을 직접 호출한다. ## 외부 설정 - `BACKOFFICE_MCP_SHOWPROMPT_TOOL_NAME` - `BACKOFFICE_MCP_SHOWPROMPT_TOOL_LABEL` - `BACKOFFICE_MCP_SHOWPROMPT_TOOL_DESCRIPTION` 기본값은 제품 중립적인 `oracle.select_ai.data_showprompt`와 업무 데이터 표현을 사용한다. 스마일게이트 운영값은 외부 env에서 고객 전용 이름으로 설정한다. ## 동작 1. HTTP Bearer Token을 기존 업무 사용자 토큰으로 검증한다. 2. prompt를 기존 4,000자 제한으로 검증한다. 3. schema-owned Select AI 연결에서 `DBMS_CLOUD_AI.GENERATE(prompt, profile, 'showprompt')`를 호출한다. 4. SQL을 실행하지 않고 다음 JSON을 반환한다. - `status=SHOWPROMPT` - `profile` - `selectAiPrompt` ## 변경 함수 | 파일/함수 | 변경 | |---|---| | `McpProperties` | SHOWPROMPT tool 이름·label·description 외부 설정 | | `SelectAiService.generatePrompt` | 인증·prompt 검증 후 SHOWPROMPT 반환 | | `SelectAiService.generate` | `showsql/showprompt` action을 bind하는 공통 생성 함수 | | `McpSseService.toolsListResult` | Text2SQL과 SHOWPROMPT 두 tool 등록 | | `McpSseService.toolsCallResult` | exact tool name에 따라 query/diagnostic 분기 | ## 안전 조건 - SHOWPROMPT tool은 생성 SQL을 실행하지 않는다. - 임의 action 인자를 사용자에게 받지 않는다. - 응답에 Bearer Token이나 DB 연결 정보를 포함하지 않는다. - 기존 Text2SQL tool 이름과 계약은 유지한다. ## 테스트 - tools/list에 두 tool과 각 prompt schema가 존재한다. - Text2SQL 호출은 기존 generate-and-execute 경로를 유지한다. - SHOWPROMPT 호출은 generatePrompt만 실행한다. - 누락/비활성 Bearer Token은 기존과 동일하게 거절한다.