📌 Description
사용자 질문과 관련된 문서 chunk를 검색해 반환하는 도구. 검색 블록의 SearchFacade를 그대로 재사용한다.
✅ To-do
📒 기타
SearchFacade 내부에서 이미 pre-filter + live check 권한검증을 수행하므로 별도 Permission Checker 불필요. Issue 2(인증)에 의존.
Issue 2 완료 후 실제 검증한 내용: @McpTool 메서드가 원래 HTTP 요청을 받은 서블릿 스레드에서 그대로 실행되고(스레드 이동 없음), McpApiKeyAuthFilter가 저장한 SecurityContext가 정상적으로 조회된다는 것을 로그인 → API 키 발급 → /mcp 호출 전체 플로우를 curl로 직접 확인함. userId 조회 연결부는 리스크 없이 진행 가능.
📌 Description
사용자 질문과 관련된 문서 chunk를 검색해 반환하는 도구. 검색 블록의
SearchFacade를 그대로 재사용한다.✅ To-do
SearchFacade.search(userId, SearchRequest)호출 →SearchOutcome반환값에서.response()로SearchResponse추출 (직접SearchResponse를 반환하지 않음)McpApiKeyAuthFilter가 세팅한 userId를 핸들러에서 가져오는 연결부 구현 —SecurityContextHolder.getContext().getAuthentication().getDetails()로 직접 조회 (@McpTool메서드는 Spring MVC 컨트롤러가 아니라CurrentUserArgumentResolver가 자동 적용 안 됨)CallToolResult로 변환VALIDATION_ERROR(isError=true), 결과 0건 → 빈 배열(정상 응답)tools/call수동 테스트📒 기타
SearchFacade내부에서 이미 pre-filter + live check 권한검증을 수행하므로 별도 Permission Checker 불필요. Issue 2(인증)에 의존.Issue 2 완료 후 실제 검증한 내용:
@McpTool메서드가 원래 HTTP 요청을 받은 서블릿 스레드에서 그대로 실행되고(스레드 이동 없음),McpApiKeyAuthFilter가 저장한SecurityContext가 정상적으로 조회된다는 것을 로그인 → API 키 발급 →/mcp호출 전체 플로우를 curl로 직접 확인함. userId 조회 연결부는 리스크 없이 진행 가능.