Skip to content

[Feat] search_documents 도구 구현 #105

Description

@kangcheolung

📌 Description

사용자 질문과 관련된 문서 chunk를 검색해 반환하는 도구. 검색 블록의 SearchFacade를 그대로 재사용한다.

✅ To-do

  • Issue 1의 빈 핸들러를 실제 로직으로 교체: SearchFacade.search(userId, SearchRequest) 호출 → SearchOutcome 반환값에서 .response()SearchResponse 추출 (직접 SearchResponse를 반환하지 않음)
  • query 길이(2000자 이내), topK 범위(1~20, 기본 5) 검증 로직 추가 (타입/필수값은 SDK가 자동 처리)
  • Issue 2의 McpApiKeyAuthFilter가 세팅한 userId를 핸들러에서 가져오는 연결부 구현 — SecurityContextHolder.getContext().getAuthentication().getDetails()로 직접 조회 (@McpTool 메서드는 Spring MVC 컨트롤러가 아니라 CurrentUserArgumentResolver가 자동 적용 안 됨)
  • 검색 결과를 CallToolResult로 변환
  • 예외 처리: query 누락 → VALIDATION_ERROR(isError=true), 결과 0건 → 빈 배열(정상 응답)
  • MCP Inspector/curl로 tools/call 수동 테스트

📒 기타

SearchFacade 내부에서 이미 pre-filter + live check 권한검증을 수행하므로 별도 Permission Checker 불필요. Issue 2(인증)에 의존.

Issue 2 완료 후 실제 검증한 내용: @McpTool 메서드가 원래 HTTP 요청을 받은 서블릿 스레드에서 그대로 실행되고(스레드 이동 없음), McpApiKeyAuthFilter가 저장한 SecurityContext가 정상적으로 조회된다는 것을 로그인 → API 키 발급 → /mcp 호출 전체 플로우를 curl로 직접 확인함. userId 조회 연결부는 리스크 없이 진행 가능.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions