From 391ec19fdc346c6d0ebf369f692c370a48339d3d Mon Sep 17 00:00:00 2001
From: Christian Tzolov <1351573+tzolov@users.noreply.github.com>
Date: Thu, 10 Apr 2025 12:26:29 +0200
Subject: [PATCH] refactor: change notification params type from
Map to Object (#137)
* refactor: change notification params type from Map 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, 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
---
.../transport/WebFluxSseServerTransportProvider.java | 2 +-
.../server/transport/WebMvcSseServerTransportProvider.java | 2 +-
.../io/modelcontextprotocol/server/McpAsyncServer.java | 7 ++-----
.../transport/HttpServletSseServerTransportProvider.java | 2 +-
.../server/transport/StdioServerTransportProvider.java | 2 +-
.../io/modelcontextprotocol/spec/McpClientSession.java | 2 +-
.../main/java/io/modelcontextprotocol/spec/McpSchema.java | 2 +-
.../io/modelcontextprotocol/spec/McpServerSession.java | 2 +-
.../spec/McpServerTransportProvider.java | 4 ++--
.../main/java/io/modelcontextprotocol/spec/McpSession.java | 4 ++--
.../MockMcpServerTransportProvider.java | 2 +-
11 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransportProvider.java b/mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransportProvider.java
index df8dd02..be30bd7 100644
--- a/mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransportProvider.java
+++ b/mcp-spring/mcp-spring-webflux/src/main/java/io/modelcontextprotocol/server/transport/WebFluxSseServerTransportProvider.java
@@ -188,7 +188,7 @@ public class WebFluxSseServerTransportProvider implements McpServerTransportProv
* errors if any session fails to receive the message
*/
@Override
- public Mono notifyClients(String method, Map params) {
+ public Mono notifyClients(String method, Object params) {
if (sessions.isEmpty()) {
logger.debug("No active sessions to broadcast message to");
return Mono.empty();
diff --git a/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransportProvider.java b/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransportProvider.java
index fa2e357..7bd1aa6 100644
--- a/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransportProvider.java
+++ b/mcp-spring/mcp-spring-webmvc/src/main/java/io/modelcontextprotocol/server/transport/WebMvcSseServerTransportProvider.java
@@ -179,7 +179,7 @@ public class WebMvcSseServerTransportProvider implements McpServerTransportProvi
* @return A Mono that completes when the broadcast attempt is finished
*/
@Override
- public Mono notifyClients(String method, Map params) {
+ public Mono notifyClients(String method, Object params) {
if (sessions.isEmpty()) {
logger.debug("No active sessions to broadcast message to");
return Mono.empty();
diff --git a/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java
index df93866..ec2a04c 100644
--- a/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java
+++ b/mcp/src/main/java/io/modelcontextprotocol/server/McpAsyncServer.java
@@ -669,15 +669,12 @@ public class McpAsyncServer {
return Mono.error(new McpError("Logging message must not be null"));
}
- Map params = this.objectMapper.convertValue(loggingMessageNotification,
- new TypeReference
* @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 sendNotification(String method, Map params);
+ Mono sendNotification(String method, Object params);
/**
* Closes the session and releases any associated resources asynchronously.
diff --git a/mcp/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java b/mcp/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java
index 3fb1918..20a8c0c 100644
--- a/mcp/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java
+++ b/mcp/src/test/java/io/modelcontextprotocol/MockMcpServerTransportProvider.java
@@ -47,7 +47,7 @@ public class MockMcpServerTransportProvider implements McpServerTransportProvide
}
@Override
- public Mono notifyClients(String method, Map params) {
+ public Mono notifyClients(String method, Object params) {
return session.sendNotification(method, params);
}