3.4 KiB
MCP SDK Validator and Source Updater Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Keep tool-name validation and source metadata updates functional after replacing the custom @McpFunction annotation with Spring AI's @McpTool.
Architecture: McpToolNameValidator will scan @McpTool(name = "...") declarations for naming and duplication rules. ToolSourceUpdater will update SDK-owned fields (name, description) on @McpTool and project-owned fields (group, register, requiresApproval) on adjacent @ToolHint, without trying to write unsupported fields to the SDK annotation.
Tech Stack: Java 21, JUnit 5, Spring AI MCP annotations, Gradle.
Global Constraints
- Preserve the existing tool-name convention and duplicate-name build validation.
- Do not reintroduce the removed custom
McpFunctionannotation. - Keep project-specific metadata in
io.shinhanlife.dat.lib.annotation.ToolHint. - Verify with focused tests and
gradlew.bat test.
Task 1: Migrate tool-name validation
Files:
- Modify:
dat-was-lib/src/main/java/io/shinhanlife/dat/lib/validation/McpToolNameValidator.java - Modify:
dat-was-lib/src/test/java/io/shinhanlife/dat/lib/validation/McpToolNameValidatorTest.java
Interfaces:
-
Consumes: Java source files containing
@McpTool(name = "..."). -
Produces:
McpToolNameValidator.assertUnique(Path)that rejects duplicate or invalid SDK tool names. -
Write tests using
@McpToolsource snippets for duplicate, invalid, and valid names. -
Run
:dat-was-lib:test --tests *McpToolNameValidatorTestand confirm current implementation does not detect those annotations. -
Replace the annotation scan target from
@McpFunctionto@McpTool. -
Re-run the focused test and confirm it passes.
Task 2: Migrate source metadata update behavior
Files:
- Modify:
dat-was-lib/src/main/java/io/shinhanlife/dat/lib/util/ToolSourceUpdater.java - Create:
dat-was-lib/src/test/java/io/shinhanlife/dat/lib/util/ToolSourceUpdaterTest.java
Interfaces:
-
Consumes: a tool interface source containing
@McpTooland@ToolHint. -
Produces:
ToolSourceUpdater.updateToolSource(String, String, String, boolean, Boolean)that updates SDK name/description and project metadata without emitting invalid@McpToolattributes. -
Write a temporary-source test defining one SDK annotation and one
ToolHintannotation. -
Run the focused test and confirm the legacy updater cannot locate
@McpTooldeclarations. -
Update annotation matching and replacements:
descriptionbelongs to@McpTool;group,register, andrequiresApprovalbelong to@ToolHint. -
Re-run the focused test and confirm it passes.
Task 3: Restore test-suite compilation after SDK migration
Files:
- Modify: stale tests referencing
McpFunctionor old package locations.
Interfaces:
-
Consumes:
McpTool,ToolHint, currentToolSchemaResolver, and current package names. -
Produces: compilation and behavioral coverage aligned with the SDK-based production code.
-
Replace stale annotation and resolver signatures in tests.
-
Fix package relocation and missing assertion imports without widening production visibility.
-
Run
gradlew.bat test.