refactor: change notification params type from Map<String,Object> to Object (#137)
* refactor: change notification params type from Map<String,Object> to Object This change generalizes the parameter type for notification methods across the MCP framework, allowing for more flexible parameter passing. Instead of requiring parameters to be structured as a Map<String,Object>, the API now accepts any Object as parameters. The primary motivation is to simplify client usage by allowing direct passing of strongly-typed objects without requiring conversion to a Map first, as demonstrated in the McpAsyncServer logging notification implementation. Affected components: - McpSession interface and implementations - McpServerTransportProvider interface and implementations - McpSchema JSONRPCNotification record --------- Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
This commit is contained in:
parent
fab434c088
commit
391ec19fdc
11 changed files with 14 additions and 17 deletions
|
|
@ -188,7 +188,7 @@ public class WebFluxSseServerTransportProvider implements McpServerTransportProv
|
|||
* errors if any session fails to receive the message
|
||||
*/
|
||||
@Override
|
||||
public Mono<Void> notifyClients(String method, Map<String, Object> params) {
|
||||
public Mono<Void> notifyClients(String method, Object params) {
|
||||
if (sessions.isEmpty()) {
|
||||
logger.debug("No active sessions to broadcast message to");
|
||||
return Mono.empty();
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ public class WebMvcSseServerTransportProvider implements McpServerTransportProvi
|
|||
* @return A Mono that completes when the broadcast attempt is finished
|
||||
*/
|
||||
@Override
|
||||
public Mono<Void> notifyClients(String method, Map<String, Object> params) {
|
||||
public Mono<Void> notifyClients(String method, Object params) {
|
||||
if (sessions.isEmpty()) {
|
||||
logger.debug("No active sessions to broadcast message to");
|
||||
return Mono.empty();
|
||||
|
|
|
|||
|
|
@ -669,15 +669,12 @@ public class McpAsyncServer {
|
|||
return Mono.error(new McpError("Logging message must not be null"));
|
||||
}
|
||||
|
||||
Map<String, Object> params = this.objectMapper.convertValue(loggingMessageNotification,
|
||||
new TypeReference<Map<String, Object>>() {
|
||||
});
|
||||
|
||||
if (loggingMessageNotification.level().level() < minLoggingLevel.level()) {
|
||||
return Mono.empty();
|
||||
}
|
||||
|
||||
return this.mcpTransportProvider.notifyClients(McpSchema.METHOD_NOTIFICATION_MESSAGE, params);
|
||||
return this.mcpTransportProvider.notifyClients(McpSchema.METHOD_NOTIFICATION_MESSAGE,
|
||||
loggingMessageNotification);
|
||||
}
|
||||
|
||||
private McpServerSession.RequestHandler<Void> setLoggerRequestHandler() {
|
||||
|
|
|
|||
|
|
@ -160,7 +160,7 @@ public class HttpServletSseServerTransportProvider extends HttpServlet implement
|
|||
* @return A Mono that completes when the broadcast attempt is finished
|
||||
*/
|
||||
@Override
|
||||
public Mono<Void> notifyClients(String method, Map<String, Object> params) {
|
||||
public Mono<Void> notifyClients(String method, Object params) {
|
||||
if (sessions.isEmpty()) {
|
||||
logger.debug("No active sessions to broadcast message to");
|
||||
return Mono.empty();
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ public class StdioServerTransportProvider implements McpServerTransportProvider
|
|||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> notifyClients(String method, Map<String, Object> params) {
|
||||
public Mono<Void> notifyClients(String method, Object params) {
|
||||
if (this.session == null) {
|
||||
return Mono.error(new McpError("No session to close"));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -258,7 +258,7 @@ public class McpClientSession implements McpSession {
|
|||
* @return A Mono that completes when the notification is sent
|
||||
*/
|
||||
@Override
|
||||
public Mono<Void> sendNotification(String method, Map<String, Object> params) {
|
||||
public Mono<Void> sendNotification(String method, Object params) {
|
||||
McpSchema.JSONRPCNotification jsonrpcNotification = new McpSchema.JSONRPCNotification(McpSchema.JSONRPC_VERSION,
|
||||
method, params);
|
||||
return this.transport.sendMessage(jsonrpcNotification);
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ public final class McpSchema {
|
|||
public record JSONRPCNotification( // @formatter:off
|
||||
@JsonProperty("jsonrpc") String jsonrpc,
|
||||
@JsonProperty("method") String method,
|
||||
@JsonProperty("params") Map<String, Object> params) implements JSONRPCMessage {
|
||||
@JsonProperty("params") Object params) implements JSONRPCMessage {
|
||||
} // @formatter:on
|
||||
|
||||
@JsonInclude(JsonInclude.Include.NON_ABSENT)
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ public class McpServerSession implements McpSession {
|
|||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> sendNotification(String method, Map<String, Object> params) {
|
||||
public Mono<Void> sendNotification(String method, Object params) {
|
||||
McpSchema.JSONRPCNotification jsonrpcNotification = new McpSchema.JSONRPCNotification(McpSchema.JSONRPC_VERSION,
|
||||
method, params);
|
||||
return this.transport.sendMessage(jsonrpcNotification);
|
||||
|
|
|
|||
|
|
@ -42,11 +42,11 @@ public interface McpServerTransportProvider {
|
|||
/**
|
||||
* Sends a notification to all connected clients.
|
||||
* @param method the name of the notification method to be called on the clients
|
||||
* @param params a map of parameters to be sent with the notification
|
||||
* @param params parameters to be sent with the notification
|
||||
* @return a Mono that completes when the notification has been broadcast
|
||||
* @see McpSession#sendNotification(String, Map)
|
||||
*/
|
||||
Mono<Void> notifyClients(String method, Map<String, Object> params);
|
||||
Mono<Void> notifyClients(String method, Object params);
|
||||
|
||||
/**
|
||||
* Immediately closes all the transports with connected clients and releases any
|
||||
|
|
|
|||
|
|
@ -63,10 +63,10 @@ public interface McpSession {
|
|||
* parameters with the notification.
|
||||
* </p>
|
||||
* @param method the name of the notification method to be sent to the counterparty
|
||||
* @param params a map of parameters to be sent with the notification
|
||||
* @param params parameters to be sent with the notification
|
||||
* @return a Mono that completes when the notification has been sent
|
||||
*/
|
||||
Mono<Void> sendNotification(String method, Map<String, Object> params);
|
||||
Mono<Void> sendNotification(String method, Object params);
|
||||
|
||||
/**
|
||||
* Closes the session and releases any associated resources asynchronously.
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public class MockMcpServerTransportProvider implements McpServerTransportProvide
|
|||
}
|
||||
|
||||
@Override
|
||||
public Mono<Void> notifyClients(String method, Map<String, Object> params) {
|
||||
public Mono<Void> notifyClients(String method, Object params) {
|
||||
return session.sendNotification(method, params);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue