diff --git a/API명세서.md b/API명세서.md index ddc38b8..10f233f 100644 --- a/API명세서.md +++ b/API명세서.md @@ -557,19 +557,21 @@ MCP 서버를 초기화하고 서버 정보 및 지원 기능을 반환합니다 "jsonrpc": "2.0", "id": "8", "result": { - "uri": "memory://recent", - "mimeType": "application/json", - "text": "{\"message\": \"Resource content for memory://recent\"}", - "metadata": { - "uri": "memory://recent", - "timestamp": 1701234567890 - } + "contents": [ + { + "uri": "memory://recent", + "mimeType": "application/json", + "text": "{\"message\": \"Resource content for memory://recent\"}" + } + ] } } ``` **응답 DTO**: `McpResourceResponse.ResourceReadResponse` +**참고:** MCP 프로토콜에 따라 `contents` 필드는 배열이며 필수입니다. 각 요소는 `uri`, `mimeType`, `text` (또는 바이너리 리소스의 경우 `blob`)를 포함합니다. + --- ### 7. prompts/list diff --git a/README.md b/README.md index ea8bd8d..67afb70 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,8 @@ AI ↔ Spring Boot(Dewey) │ ├── api <-- 외부로 노출되는 REST API 계층 │ │ ├── controller <-- 요청을 받아 Service 호출하는 곳 (Endpoint) │ │ └── dto <-- Controller에서 사용하는 DTO - │ │ ├── request <-- 요청 DTO - │ │ └── response <-- 응답 DTO + │ │ ├── request <-- 요청 DTO + │ │ └── response <-- 응답 DTO │ │ │ ├── config <-- Spring 설정, Bean 등록, CORS, Filter, ModelConfig 등 │ │ diff --git a/src/main/java/com/pandol365/dewey/api/dto/response/McpResourceResponse.java b/src/main/java/com/pandol365/dewey/api/dto/response/McpResourceResponse.java index 173d952..64a9abb 100644 --- a/src/main/java/com/pandol365/dewey/api/dto/response/McpResourceResponse.java +++ b/src/main/java/com/pandol365/dewey/api/dto/response/McpResourceResponse.java @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; -import java.util.Map; /** * MCP Resource 응답 DTO (View) @@ -37,11 +36,18 @@ public class McpResourceResponse { @Builder @NoArgsConstructor @AllArgsConstructor - public static class ResourceReadResponse { + public static class ResourceContent { private String uri; private String mimeType; private String text; - private Map metadata; + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + public static class ResourceReadResponse { + private List contents; } } diff --git a/src/main/java/com/pandol365/dewey/api/service/impl/McpServiceImpl.java b/src/main/java/com/pandol365/dewey/api/service/impl/McpServiceImpl.java index 5df1fcc..e13e38a 100644 --- a/src/main/java/com/pandol365/dewey/api/service/impl/McpServiceImpl.java +++ b/src/main/java/com/pandol365/dewey/api/service/impl/McpServiceImpl.java @@ -187,15 +187,18 @@ public class McpServiceImpl implements McpService { public McpResourceResponse.ResourceReadResponse readResource(String uri) { log.info("MCP 리소스 읽기: uri={}", uri); - Map metadata = new HashMap<>(); - metadata.put("uri", uri); - metadata.put("timestamp", System.currentTimeMillis()); - - return McpResourceResponse.ResourceReadResponse.builder() + // MCP 프로토콜에 따라 contents 배열을 반환해야 함 + McpResourceResponse.ResourceContent content = McpResourceResponse.ResourceContent.builder() .uri(uri) .mimeType("application/json") .text("{\"message\": \"Resource content for " + uri + "\"}") - .metadata(metadata) + .build(); + + List contents = new ArrayList<>(); + contents.add(content); + + return McpResourceResponse.ResourceReadResponse.builder() + .contents(contents) .build(); }