-
Notifications
You must be signed in to change notification settings - Fork 3k
[type:feat] mcp server plugin #5999
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
# Conflicts: # db/upgrade/2.7.0-upgrade-2.7.1-mysql.sql
# Conflicts: # shenyu-plugin/pom.xml
...cp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/request/RequestConfigHelper.java
Outdated
Show resolved
Hide resolved
| } | ||
|
|
||
| private boolean isRequestBodyMethod(final String method) { | ||
| return "POST".equalsIgnoreCase(method) || "PUT".equalsIgnoreCase(method) || "PATCH".equalsIgnoreCase(method); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
not use magic value
...server/src/main/java/org/apache/shenyu/plugin/mcp/server/holder/ShenyuMcpExchangeHolder.java
Show resolved
Hide resolved
...server/src/main/java/org/apache/shenyu/plugin/mcp/server/manager/ShenyuMcpServerManager.java
Outdated
Show resolved
Hide resolved
| private ShenyuSseServerTransportProvider createMcpServerTransport(final String uri) { | ||
| String path = StringUtils.removeEnd(uri, SLASH); | ||
| LOG.info("Creating new McpServer for URI: {}", path); | ||
| String messageEndpoint = path + "/message"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same question
...cp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/request/RequestConfigHelper.java
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces a new Model Context Protocol (MCP) server plugin, including its Spring Boot starter, transport layer, session and request management, and database schema updates.
- Adds
mcp-serverplugin modules and auto-configuration for Spring Boot - Implements SSE transport provider, session manager, request/response decorators, and callback integration
- Updates database migration scripts and menus to register the new plugin
Reviewed Changes
Copilot reviewed 39 out of 39 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| shenyu-web/src/main/java/org/apache/shenyu/web/filter/FileSizeFilter.java | Reformatted chained method calls for readability |
| shenyu-spring-boot-starter-plugin-mcp-server/src/main/java/org/apache/shenyu/springboot/starter/plugin/mcp/server/McpServerPluginConfiguration.java | Added MCP plugin beans and auto-configuration imports |
| shenyu-plugin-mcp-server/src/main/java/org/apache/shenyu/plugin/mcp/server/transport/ShenyuSseServerTransportProvider.java | Implemented SSE transport with session lifecycle management |
| shenyu-plugin-global/src/main/java/org/apache/shenyu/plugin/global/DefaultShenyuContextBuilder.java | Changed Optional.ofNullable to Optional.of in HTTP method handling |
| */ | ||
| public class ShenyuSseServerTransportProvider implements McpServerTransportProvider { | ||
|
|
||
| private static final Logger LOGGER = LoggerFactory.getLogger(WebFluxSseServerTransportProvider.class); |
Copilot
AI
Jul 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The logger is initialized with the wrong class. It should use ShenyuSseServerTransportProvider.class instead of WebFluxSseServerTransportProvider.class.
| private static final Logger LOGGER = LoggerFactory.getLogger(WebFluxSseServerTransportProvider.class); | |
| private static final Logger LOGGER = LoggerFactory.getLogger(ShenyuSseServerTransportProvider.class); |
| shenyuContext.setPath(requestURI.getRawPath()); | ||
| shenyuContext.setStartDateTime(LocalDateTime.now()); | ||
| Optional.ofNullable(request.getMethod()).ifPresent(httpMethod -> shenyuContext.setHttpMethod(httpMethod.name())); | ||
| Optional.of(request.getMethod()).ifPresent(httpMethod -> shenyuContext.setHttpMethod(httpMethod.name())); |
Copilot
AI
Jul 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Using Optional.of on a potentially null value will throw NPE. It should use Optional.ofNullable to safely handle a null HTTP method.
| Optional.of(request.getMethod()).ifPresent(httpMethod -> shenyuContext.setHttpMethod(httpMethod.name())); | |
| Optional.ofNullable(request.getMethod()).ifPresent(httpMethod -> shenyuContext.setHttpMethod(httpMethod.name())); |
…henxing/shenyu into feature/import-swagger-url * 'feature/import-swagger-url' of https://github.com/guanzhenxing/shenyu: [type:feat] mcp server plugin (apache#5999)
* [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin, upgrade spring ai version to 1.0.0-M8 * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * [feat] mcp server plugin * feat: mcp server plugin * [feat] mcp server plugin, plugin handle see * [feat] mcp server plugin, some fix * [feat] mcp server plugin, some fix * [feat] mcp server plugin * [feat] mcp server plugin, plugin handle see, toolCallback -> http ok * [feat] mcp server plugin * [feat] mcp server plugin, plugin handle see, toolCallback -> rpc ok * [feat] mcp server plugin, plugin handle see, toolCallback -> rpc ok * [feat] mcp server plugin, tidy up comments * [feat] mcp server plugin, fix some review * [feat] mcp server plugin, fix some review * [feat] mcp server plugin, fix some review * [feat] mcp server plugin, fix some review * [feat] mcp server plugin, fix some review * [feat] mcp server plugin, add messageEndpoint properties * [feat] mcp server plugin, add sql * [feat] mcp server plugin, fix some review * [feat] mcp server plugin, fix check style * [feat] mcp server plugin, fix some review * [feat] mcp server plugin, add messageEndpoint properties --------- Co-authored-by: zhengpeng <[email protected]>
add model context protocol server plugin
Make sure that:
./mvnw clean install -Dmaven.javadoc.skip=true.