Spring Web to MCP Converter ð
ããŒã«ã«Spring Web to MCP Converter ð ã«ã€ããŠ
Spring Web to MCP Converter ã¯ãSpring Web ã® REST ã³ã³ãããŒã©ãŒã Spring AI MCP ãµãŒããŒã®ããŒã«ã«èªå倿ãã OpenRewrite ã¬ã·ã矀ã§ããæ¢åã® Spring Boot API ã AI ãšãŒãžã§ã³ãããåŒã³åºããã Java éçºè åãã§ãããŒã«ã®èª¬æã¯ JavaDoc ããååŸããŸãã
äž»ãªæ©èœ
- 01ãããã³ã°ã¢ãããŒã·ã§ã³ä»ãã¡ãœããã® @Tool 倿
- 02JavaDoc ããã®ããŒã«ãšãã©ã¡ãŒã¿ãŒã®èª¬ææœåº
- 03ã¡ãœãããã©ã¡ãŒã¿ãŒãžã® @ToolParam 远å
- 04ToolCallbackProvider Bean ã®ç»é²
- 05POM ã®äŸåé¢ä¿ãš MCP ãµãŒããŒèšå®ã®æŽæ°
掻çšã·ãŒã³
- 01æ¢åã® Spring Boot REST API ã MCP ããŒã«ãšããŠå ¬éãã
- 02倿åŸã®ããŒã«ã MCP Inspector ã§æ€èšŒãã
- 03AI ãšãŒãžã§ã³ããæšæºãããã³ã«ã§ API ãæ€åºããŠåŒã³åºããããã«ãã
MCP 察å¿
倿åŸã® Spring Boot ã¢ããªã±ãŒã·ã§ã³ã¯ MCP ãµãŒããŒãšããŠåäœããã³ã³ãããŒã©ãŒã¡ãœããããçæããããŒã«ã SSE ãšã³ããã€ã³ãçµç±ã§ MCP ã¯ã©ã€ã¢ã³ãã«æäŸããŸãã
èšå®
ããŒã«ã«ãµãŒããŒã®èšå®ã¯ã©ã®ã¯ã©ã€ã¢ã³ãã§ãå ±éã§ããã³ããŒããŠã¯ã©ã€ã¢ã³ãã® MCP èšå®ãã¡ã€ã«ã«è²Œãä»ããŠãã ããã
ãã®ãµãŒããŒã®ããã±ãŒãžããªã¢ãŒããšã³ããã€ã³ãã¯ãŸã ååŸã§ããŠããŸããããããžã§ã¯ãã® README ã®æé ã«åŸã£ãŠãã ããã
ããŒã«
ããŒã«ã«ãµãŒããŒã®ããŒã«ã¯ãã·ã³äžã§èµ·åããŠåããŠååŸã§ããŸããã¡ã³ãããŒã¯ãŸã ããŒã«äžèЧãæäŸããŠããŸããã
詳现
Spring Web ãã MCP ãžã®å€æ ð
Spring Web REST API ã Spring AI Model Context ProtocolïŒMCPïŒãµãŒããŒããŒã«ã«èªå倿ãããOpenRewrite ã®ã¬ã·ãéã§ãã
ð ã¯ããã«
ãã®ãããžã§ã¯ãã§ã¯ãåŸæ¥ã® Spring Web REST API ã Spring AI ã® Model Context ProtocolïŒMCPïŒãµãŒããŒããŒã«ã«ç§»è¡ããããã® OpenRewrite ã¬ã·ããæäŸããŸãã倿å å®¹ã¯æ¬¡ã®ãšããã§ãã
- ð Spring Web ã®ã¢ãããŒã·ã§ã³ã Spring AI MCP ã®
@Toolã¢ãããŒã·ã§ã³ã«å€æããŸã - ð§ å¿ èŠãª MCP èšå®ãšã³ã³ããŒãã³ãã远å ããŸã
- ðŠ Maven ã®äŸåé¢ä¿ãæŽæ°ããSpring AI MCP ãµãŒããŒã³ã³ããŒãã³ããå«ããŸã
ã¬ã·ãã¯æ¢åã® REST ã³ã³ãããŒã©ãŒããããã¥ã¡ã³ããèªåæœåºããé©åã«ããã¥ã¡ã³ãåããã MCP ããŒã«ãäœæããŸããããã«ãããModel Context Protocol ãéã㊠AI ãšãŒãžã§ã³ãã API ãå©çšã§ããããã«ãªããŸãã
Spring AI ã«ãã MCP ã®å®è£ ã®è©³çްã«ã€ããŠã¯ãSpring AI MCP ã®ããã¥ã¡ã³ããåç §ããŠãã ããã
ð ïž ãã«ããšã€ã³ã¹ããŒã«æ¹æ³
åææ¡ä»¶
- Java 17 以äž
- Maven 3.6+
ç§»è¡å¯Ÿè±¡ã® REST API ãããžã§ã¯ãã®åææ¡ä»¶
Spring Web REST API ã MCP ã«æ£åžžã«ç§»è¡ããã«ã¯ããããžã§ã¯ããæ¬¡ã®æ¡ä»¶ãæºãããŠããå¿ èŠããããŸãã
- Spring Boot 3.2+ïŒ3.2.0 以éïŒã䜿çšããŠãã
- REST ã³ã³ãããŒã©ãŒã« Spring Web MVC ã䜿çšããŠãã
- Maven ãã«ãããŒã«ã䜿çšããŠãã
ã¬ã·ã㯠Spring AI MCP ã®äŸåé¢ä¿ïŒããŒãžã§ã³ 1.0.0-SNAPSHOT 以éïŒããããžã§ã¯ãã«èªåã§è¿œå ããŸãã
ãã«ãæé
-
ãã®ãªããžããªãã¯ããŒã³ããŸãã
git clone https://github.com/yourusername/web-to-mcp.git cd web-to-mcp -
ãããžã§ã¯ãããã«ãããŸãã
mvn clean install
ããã«ãããã³ãŒããã³ã³ãã€ã«ãããææç©ãããŒã«ã«ã® Maven ãªããžããªã«ã€ã³ã¹ããŒã«ãããŸãã
ð¥ äœ¿çšæ¹æ³
Spring Web ãããžã§ã¯ãã«ã¬ã·ããé©çšããã«ã¯ã次㮠Maven ã³ãã³ããå®è¡ããŸãã
mvn org.openrewrite.maven:rewrite-maven-plugin:6.4.0:run \
-Drewrite.activeRecipes=RewriteWebToMCP \
-Drewrite.recipeArtifactCoordinates=com.atbug.rewrite:web-to-mcp:1.0-SNAPSHOT \
-Drewrite.exportDatatables=true
éèŠïŒãã®ã³ãã³ã㯠2 åå®è¡ããå¿ èŠããããŸãã
- 1 åç®ã®å®è¡ã§ãå¿ èŠãªãªããžããªãšäŸåé¢ä¿ã远å ããããã« pom.xml ãæŽæ°ããŸã
- 2 åç®ã®å®è¡ã§ãSpring Web ã³ã³ãããŒã©ãŒã MCP ããŒã«ã«å®éã«å€æããŸã
âš æ©èœ
ãã®ã¬ã·ãã§ã¯ã次㮠3 ã€ã®äž»èŠã³ã³ããŒãã³ãã«åããŠãè€æ°ã®å€æãå®è¡ããŸãã
1. POM ã®æŽæ°ïŒUpdatePomïŒ
- Spring Snapshots ãªããžããªïŒ
https://repo.spring.io/snapshotïŒã远å ããŸã - Central Portal Snapshots ãªããžããªïŒ
https://central.sonatype.com/repository/maven-snapshots/ïŒã远å ããŸã - Spring AI MCP ãµãŒã㌠WebMVC ã®äŸåé¢ä¿ïŒ
spring-ai-starter-mcp-server-webmvcïŒã远å ããŸã
2. ã³ãŒã倿
-
AddToolAnnotationToMappingMethodïŒSpring Web ã³ã³ãããŒã©ãŒã¡ãœããã MCP ããŒã«ã«èªå倿ããŸã- Spring Web ã®ãããã³ã°ã¢ãããŒã·ã§ã³ïŒ
@GetMappingã@PostMappingãªã©ïŒãä»äžãããã¡ãœããã«@Toolã¢ãããŒã·ã§ã³ã远å ããŸã - JavaDoc ã³ã¡ã³ãããã¡ãœããã®èª¬æãæœåºãã
description屿§ã«èšå®ããŸã - ã¡ãœãããã©ã¡ãŒã¿ãŒã«
@ToolParamã¢ãããŒã·ã§ã³ã远å ããJavaDoc ã®èª¬æãä¿æããŸã
- Spring Web ã®ãããã³ã°ã¢ãããŒã·ã§ã³ïŒ
-
AddToolCallbackProviderBeanïŒMCP ããŒã«ãç»é²ãã Bean ãäœæãŸãã¯æŽæ°ããŸã- Spring Boot ã¢ããªã±ãŒã·ã§ã³ã®ãšã³ããªãã€ã³ãã¯ã©ã¹ãç¹å®ããŸã
@Toolã¢ãããŒã·ã§ã³ãä»äžããããã¹ãŠã®ã³ã³ãããŒã©ãŒãç»é²ããToolCallbackProviderBean ãäœæããŸã- æ¢åã®ãããã€ã㌠Bean ãããå Žåã¯ãé©åã«æŽæ°ããŸã
-
AddSpringAIMcpPropertiesïŒMCP ãµãŒããŒã®ããããã£ãèšå®ããŸãapplication.propertiesãŸãã¯application.ymlã«å¿ èŠãª MCP ãµãŒããŒèšå®ã远å ããŸã- ãµãŒããŒåãããŒãžã§ã³ãã¿ã€ããã¡ãã»ãŒãžãšã³ããã€ã³ããèšå®ããŸã
- YAML 圢åŒãš Properties ãã¡ã€ã«åœ¢åŒã®äž¡æ¹ããµããŒãããŸã
𧪠äŸ
倿åïŒSpring Web ã³ã³ãããŒã©ãŒïŒ
@RestController
@RequestMapping("/api/users")
public class UserController {
/**
* Get a user by ID
* @param id The user identifier
* @return The user details
*/
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
// Implementation
}
}
倿åŸïŒMCP ããŒã«ïŒ
@RestController
@RequestMapping("/api/users")
public class UserController {
/**
* Get a user by ID
* @param id The user identifier
* @return The user details
*/
@GetMapping("/{id}")
@Tool(description = "Get a user by ID")
public User getUserById(@ToolParam(description = "The user identifier") @PathVariable Long id) {
// Implementation
}
}
çæããã MCP èšå®
ã¬ã·ãã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããããã£ã« MCP ãµãŒããŒèšå®ãèªåã§è¿œå ããŸãã
spring.ai.mcp.server.name=webmvc-mcp-server
spring.ai.mcp.server.sse-message-endpoint=/mcp/messages
spring.ai.mcp.server.type=SYNC
spring.ai.mcp.server.version=1.0.0
ãŸããSpring Boot ã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã« ToolCallbackProvider Bean ã远å ããŠãããŒã«ãèªåã§ç»é²ããŸãã
@Bean
ToolCallbackProvider toolCallbackProvider(UserController userController) {
return MethodToolCallbackProvider.builder()
.toolObjects(userController)
.build();
}
ð ãã¢
倿å¯èœãªç¶æ ã®ãµã³ãã« Spring Boot 3 REST API ãããžã§ã¯ãã§ããã®å€æããŒã«ãã詊ãããã ããŸãã
ãµã³ãã«ãããžã§ã¯ãã®ã»ããã¢ãã
-
ãµã³ãã«ãããžã§ã¯ããã¯ããŒã³ããŸãïŒ
git clone https://github.com/addozhang/spring-boot-3-rest-api-sample.git cd spring-boot-3-rest-api-sample -
ãµã³ãã«ãããžã§ã¯ãã®æ§æã確èªããŸãïŒ
- REST ã³ã³ãããŒã©ãŒãåããæšæºç㪠Spring Boot 3 ã¢ããªã±ãŒã·ã§ã³ã§ã
- ããŸããŸãª HTTP ã¡ãœããïŒGETãPOSTãPUTãDELETEïŒã䜿çšããäžè¬ç㪠REST ãšã³ããã€ã³ããå«ãŸããŠããŸã
- MCP ããŒã«ã®èª¬æã«å€æããããé©å㪠JavaDoc ã³ã¡ã³ããå«ãŸããŠããŸã
倿ããã»ã¹
-
ãŸããå¿ èŠãªäŸåé¢ä¿ã远å ããããã« Maven ã³ãã³ããå®è¡ããŠãPOM ãã¡ã€ã«ãæŽæ°ããŸãïŒ
mvn org.openrewrite.maven:rewrite-maven-plugin:6.4.0:run \ -Drewrite.activeRecipes=RewriteWebToMCP \ -Drewrite.recipeArtifactCoordinates=com.atbug.rewrite:spring-rest-to-mcp:1.0-SNAPSHOT \ -Drewrite.exportDatatables=true -
次ã«ãåãã³ãã³ããããäžåºŠå®è¡ããŠãå®éã®ã³ãŒã倿ãè¡ããŸãïŒ
mvn org.openrewrite.maven:rewrite-maven-plugin:6.4.0:run \ -Drewrite.activeRecipes=RewriteWebToMCP \ -Drewrite.recipeArtifactCoordinates=com.atbug.rewrite:spring-rest-to-mcp:1.0-SNAPSHOT \ -Drewrite.exportDatatables=true -
倿Žã確èªããŸãïŒ
- ã³ã³ãããŒã©ãŒã¯ã©ã¹ã«è¿œå ããã
@Toolããã³@ToolParamã¢ãããŒã·ã§ã³ã確èªããŸã - ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã¯ã©ã¹ã«æ°ãã
ToolCallbackProviderBean ã远å ãããŠããããšã確èªããŸã application.propertiesãŸãã¯application.ymlã« MCP ãµãŒããŒã®èšå®ãããããšã確èªããŸã
- ã³ã³ãããŒã©ãŒã¯ã©ã¹ã«è¿œå ããã
-
ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãïŒ
mvn spring-boot:run -
å ¬åŒã® MCP Inspector ã䜿çšã㊠MCP ãµãŒããŒããã¹ãããŸãïŒ
- MCP Inspector ãªããžããªãã¯ããŒã³ããŸãïŒ
git clone https://github.com/modelcontextprotocol/inspector.git cd inspector - äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããInspector ãèµ·åããŸãïŒ
npm install npm run dev - ãã©ãŠã¶ãŒã§ http://localhost:5173/ ã«ã¢ã¯ã»ã¹ã㊠Inspector ãéããŸã
- å·ŠåŽã®ããã«ã§ã次ã®èšå®ã䜿çšã㊠MCP ãµãŒããŒãæ§æããŸãïŒ
- çš®é¡ïŒSSE
- ã¢ãã¬ã¹ïŒhttp://localhost:8080/sse
- æ¥ç¶ãããšãæ¬¡ã®æäœãã§ããŸãïŒ
- ã¡ã€ã³ããã«ã§ãã¹ãŠã®å©çšå¯èœãªããŒã«ã確èªãã
- åããŒã«ã察話圢åŒã§ãã¹ããã
- MCP ãµãŒããŒããã®å¿çã確èªãã
- MCP Inspector ãªããžããªãã¯ããŒã³ããŸãïŒ
æåŸ ãããåäœ
倿åŸãSpring Boot ã¢ããªã±ãŒã·ã§ã³ã¯åŸæ¥ã® REST API ãš MCP ãµãŒããŒã®äž¡æ¹ãšããŠæ©èœããŸããã€ãŸããæ¬¡ã®ããã«ãªããŸãïŒ
- æ¢åã®ãã¹ãŠã®ãšã³ããã€ã³ãã¯ããããŸã§ã©ããåäœããŸã
- MCP ãããã³ã«ã«å¯Ÿå¿ããã¢ããªã±ãŒã·ã§ã³ã¯ãAPI ãæ€åºããŠæäœã§ããŸã
- AI ã¢ã·ã¹ã¿ã³ãã¯ãMCP ãããã³ã«ã®æšæºåããã圢åŒãéããŠãããŒã«ã®äœ¿ç𿹿³ãçè§£ã§ããŸã
MCP ãµãŒããŒãå©çšããã¢ããªã±ãŒã·ã§ã³ã¯ã次ã®ãããªèšå®ã§æ¥ç¶ããããæ§æã§ããŸãïŒ
{
"mcpServers": {
"spring-ai-mcp-sample": {
"autoApprove": [],
"disabled": false,
"timeout": 60,
"url": "http://localhost:8080/sse",
"transportType": "sse"
}
}
}
ããã«ãããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯ã倿ããã API ãæäŸããããŒã«ãã·ãŒã ã¬ã¹ã«æ€åºããŠå©çšã§ããŸãã
ð ã©ã€ã»ã³ã¹
ãã®ãããžã§ã¯ã㯠Apache License 2.0 ã®ããšã§ã©ã€ã»ã³ã¹ãããŠããŸãã詳现ã«ã€ããŠã¯ LICENSE ãã¡ã€ã«ãåç §ããŠãã ããã
ð¥ ã³ã³ããªãã¥ãŒã·ã§ã³
ã³ã³ããªãã¥ãŒã·ã§ã³ãæè¿ããŸãïŒãæ°è»œã« Pull Request ãéä¿¡ããŠãã ããã
ð ãµããŒã
ã質åããµããŒããå¿ èŠãªå Žåã¯ãGitHub ã§ issue ãäœæããŠãã ããã
ã³ã¡ã³ã
MCP ã¯åããŠã§ããïŒ
ãããã³ã«ã®æŠèŠããæåã®ãµãŒããŒã®å°å ¥ãŸã§ãããããçåã«ãŸãšããŠçããŸãã
AI ã¢ããªã±ãŒã·ã§ã³ãå€éšã®ããŒã«ãããŒã¿ãœãŒã¹ã«çµ±äžçãªæ¹æ³ã§æ¥ç¶ããããã®ãªãŒãã³ãªãããã³ã«ã§ããã¯ã©ã€ã¢ã³ãã¯ã¢ãã«ãšã®å¯Ÿè©±ãæ ããMCP ãµãŒããŒã¯ããŒã«ã»ãªãœãŒã¹ã»ããã³ãããã³ãã¬ãŒããæäŸããŸããæšæºã¡ãã»ãŒãžã§ããåãããããã1 ã€ã®ãµãŒããŒãè€æ°ã®ã¯ã©ã€ã¢ã³ãã§åå©çšã§ããŸãã