Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.modelcontextprotocol.server.DefaultMcpTransportContext;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpTransportContextExtractor;
import io.modelcontextprotocol.spec.McpError;
import io.modelcontextprotocol.spec.McpSchema;
Expand Down Expand Up @@ -201,7 +200,7 @@ public WebFluxSseServerTransportProvider(ObjectMapper objectMapper, String baseU
public WebFluxSseServerTransportProvider(ObjectMapper objectMapper, String baseUrl, String messageEndpoint,
String sseEndpoint, Duration keepAliveInterval) {
this(objectMapper, baseUrl, messageEndpoint, sseEndpoint, keepAliveInterval,
(serverRequest, context) -> context);
(serverRequest) -> McpTransportContext.EMPTY);
}

/**
Expand Down Expand Up @@ -344,7 +343,7 @@ private Mono<ServerResponse> handleSseConnection(ServerRequest request) {
return ServerResponse.status(HttpStatus.SERVICE_UNAVAILABLE).bodyValue("Server is shutting down");
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

return ServerResponse.ok()
.contentType(MediaType.TEXT_EVENT_STREAM)
Expand Down Expand Up @@ -401,7 +400,7 @@ private Mono<ServerResponse> handleMessage(ServerRequest request) {
.bodyValue(new McpError("Session not found: " + request.queryParam("sessionId").get()));
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

return request.bodyToMono(String.class).flatMap(body -> {
try {
Expand Down Expand Up @@ -491,7 +490,8 @@ public static class Builder {

private Duration keepAliveInterval;

private McpTransportContextExtractor<ServerRequest> contextExtractor = (serverRequest, context) -> context;
private McpTransportContextExtractor<ServerRequest> contextExtractor = (
serverRequest) -> McpTransportContext.EMPTY;

/**
* Sets the ObjectMapper to use for JSON serialization/deserialization of MCP
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
package io.modelcontextprotocol.server.transport;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpStatelessServerHandler;
import io.modelcontextprotocol.server.DefaultMcpTransportContext;
import io.modelcontextprotocol.server.McpTransportContextExtractor;
import io.modelcontextprotocol.spec.McpError;
import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.spec.McpStatelessServerTransport;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -97,7 +96,7 @@ private Mono<ServerResponse> handlePost(ServerRequest request) {
return ServerResponse.status(HttpStatus.SERVICE_UNAVAILABLE).bodyValue("Server is shutting down");
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

List<MediaType> acceptHeaders = request.headers().asHttpHeaders().getAccept();
if (!(acceptHeaders.contains(MediaType.APPLICATION_JSON)
Expand Down Expand Up @@ -151,7 +150,8 @@ public static class Builder {

private String mcpEndpoint = "/mcp";

private McpTransportContextExtractor<ServerRequest> contextExtractor = (serverRequest, context) -> context;
private McpTransportContextExtractor<ServerRequest> contextExtractor = (
serverRequest) -> McpTransportContext.EMPTY;

private Builder() {
// used by a static method
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.modelcontextprotocol.server.DefaultMcpTransportContext;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpTransportContextExtractor;
import io.modelcontextprotocol.spec.HttpHeaders;
import io.modelcontextprotocol.spec.McpError;
Expand All @@ -15,7 +15,6 @@
import io.modelcontextprotocol.spec.McpStreamableServerTransport;
import io.modelcontextprotocol.spec.McpStreamableServerTransportProvider;
import io.modelcontextprotocol.spec.ProtocolVersions;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.util.Assert;
import io.modelcontextprotocol.util.KeepAliveScheduler;

Expand Down Expand Up @@ -166,7 +165,7 @@ private Mono<ServerResponse> handleGet(ServerRequest request) {
return ServerResponse.status(HttpStatus.SERVICE_UNAVAILABLE).bodyValue("Server is shutting down");
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

return Mono.defer(() -> {
List<MediaType> acceptHeaders = request.headers().asHttpHeaders().getAccept();
Expand Down Expand Up @@ -221,7 +220,7 @@ private Mono<ServerResponse> handlePost(ServerRequest request) {
return ServerResponse.status(HttpStatus.SERVICE_UNAVAILABLE).bodyValue("Server is shutting down");
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

List<MediaType> acceptHeaders = request.headers().asHttpHeaders().getAccept();
if (!(acceptHeaders.contains(MediaType.APPLICATION_JSON)
Expand Down Expand Up @@ -309,7 +308,7 @@ private Mono<ServerResponse> handleDelete(ServerRequest request) {
return ServerResponse.status(HttpStatus.SERVICE_UNAVAILABLE).bodyValue("Server is shutting down");
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

return Mono.defer(() -> {
if (!request.headers().asHttpHeaders().containsKey(HttpHeaders.MCP_SESSION_ID)) {
Expand Down Expand Up @@ -402,7 +401,8 @@ public static class Builder {

private String mcpEndpoint = "/mcp";

private McpTransportContextExtractor<ServerRequest> contextExtractor = (serverRequest, context) -> context;
private McpTransportContextExtractor<ServerRequest> contextExtractor = (
serverRequest) -> McpTransportContext.EMPTY;

private boolean disallowDelete;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package io.modelcontextprotocol;

import java.time.Duration;
import java.util.Map;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -20,6 +21,7 @@
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpServer.AsyncSpecification;
import io.modelcontextprotocol.server.McpServer.SingleSessionSyncSpecification;
Expand All @@ -42,10 +44,8 @@ class WebFluxSseIntegrationTests extends AbstractMcpClientServerIntegrationTests

private WebFluxSseServerTransportProvider mcpServerTransportProvider;

static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = (r, tc) -> {
tc.put("important", "value");
return tc;
};
static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = (r) -> McpTransportContext
.create(Map.of("important", "value"));

@Override
protected void prepareClients(int port, String mcpEndpoint) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
package io.modelcontextprotocol;

import java.time.Duration;
import java.util.Map;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
Expand All @@ -20,6 +21,7 @@
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
import io.modelcontextprotocol.client.transport.WebClientStreamableHttpTransport;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpServer.AsyncSpecification;
import io.modelcontextprotocol.server.McpServer.SyncSpecification;
Expand All @@ -40,10 +42,8 @@ class WebFluxStreamableIntegrationTests extends AbstractMcpClientServerIntegrati

private WebFluxStreamableServerTransportProvider mcpStreamableServerTransportProvider;

static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = (r, tc) -> {
tc.put("important", "value");
return tc;
};
static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = (r) -> McpTransportContext
.create(Map.of("important", "value"));

@Override
protected void prepareClients(int port, String mcpEndpoint) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.modelcontextprotocol.server.DefaultMcpTransportContext;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpTransportContextExtractor;
import io.modelcontextprotocol.spec.McpError;
import io.modelcontextprotocol.spec.McpSchema;
Expand Down Expand Up @@ -192,7 +191,7 @@ public WebMvcSseServerTransportProvider(ObjectMapper objectMapper, String baseUr
public WebMvcSseServerTransportProvider(ObjectMapper objectMapper, String baseUrl, String messageEndpoint,
String sseEndpoint, Duration keepAliveInterval) {
this(objectMapper, baseUrl, messageEndpoint, sseEndpoint, keepAliveInterval,
(serverRequest, context) -> context);
(serverRequest) -> McpTransportContext.EMPTY);
}

/**
Expand Down Expand Up @@ -397,8 +396,7 @@ private ServerResponse handleMessage(ServerRequest request) {
}

try {
final McpTransportContext transportContext = this.contextExtractor.extract(request,
new DefaultMcpTransportContext());
final McpTransportContext transportContext = this.contextExtractor.extract(request);

String body = request.body(String.class);
McpSchema.JSONRPCMessage message = McpSchema.deserializeJsonRpcMessage(objectMapper, body);
Expand Down Expand Up @@ -553,7 +551,8 @@ public static class Builder {

private Duration keepAliveInterval;

private McpTransportContextExtractor<ServerRequest> contextExtractor = (serverRequest, context) -> context;
private McpTransportContextExtractor<ServerRequest> contextExtractor = (
serverRequest) -> McpTransportContext.EMPTY;

/**
* Sets the JSON object mapper to use for message serialization/deserialization.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
package io.modelcontextprotocol.server.transport;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpStatelessServerHandler;
import io.modelcontextprotocol.server.DefaultMcpTransportContext;
import io.modelcontextprotocol.server.McpTransportContextExtractor;
import io.modelcontextprotocol.spec.McpError;
import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.spec.McpStatelessServerTransport;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.util.Assert;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand Down Expand Up @@ -101,7 +100,7 @@ private ServerResponse handlePost(ServerRequest request) {
return ServerResponse.status(HttpStatus.SERVICE_UNAVAILABLE).body("Server is shutting down");
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

List<MediaType> acceptHeaders = request.headers().asHttpHeaders().getAccept();
if (!(acceptHeaders.contains(MediaType.APPLICATION_JSON)
Expand Down Expand Up @@ -176,7 +175,8 @@ public static class Builder {

private String mcpEndpoint = "/mcp";

private McpTransportContextExtractor<ServerRequest> contextExtractor = (serverRequest, context) -> context;
private McpTransportContextExtractor<ServerRequest> contextExtractor = (
serverRequest) -> McpTransportContext.EMPTY;

private Builder() {
// used by a static method
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import io.modelcontextprotocol.server.DefaultMcpTransportContext;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpTransportContextExtractor;
import io.modelcontextprotocol.spec.HttpHeaders;
import io.modelcontextprotocol.spec.McpError;
Expand Down Expand Up @@ -238,7 +237,7 @@ private ServerResponse handleGet(ServerRequest request) {
return ServerResponse.badRequest().body("Invalid Accept header. Expected TEXT_EVENT_STREAM");
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

if (!request.headers().asHttpHeaders().containsKey(HttpHeaders.MCP_SESSION_ID)) {
return ServerResponse.badRequest().body("Session ID required in mcp-session-id header");
Expand Down Expand Up @@ -322,7 +321,7 @@ private ServerResponse handlePost(ServerRequest request) {
.body(new McpError("Invalid Accept headers. Expected TEXT_EVENT_STREAM and APPLICATION_JSON"));
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

try {
String body = request.body(String.class);
Expand Down Expand Up @@ -431,7 +430,7 @@ private ServerResponse handleDelete(ServerRequest request) {
return ServerResponse.status(HttpStatus.METHOD_NOT_ALLOWED).build();
}

McpTransportContext transportContext = this.contextExtractor.extract(request, new DefaultMcpTransportContext());
McpTransportContext transportContext = this.contextExtractor.extract(request);

if (!request.headers().asHttpHeaders().containsKey(HttpHeaders.MCP_SESSION_ID)) {
return ServerResponse.badRequest().body("Session ID required in mcp-session-id header");
Expand Down Expand Up @@ -604,7 +603,8 @@ public static class Builder {

private boolean disallowDelete = false;

private McpTransportContextExtractor<ServerRequest> contextExtractor = (serverRequest, context) -> context;
private McpTransportContextExtractor<ServerRequest> contextExtractor = (
serverRequest) -> McpTransportContext.EMPTY;

private Duration keepAliveInterval;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import static org.assertj.core.api.Assertions.assertThat;

import java.time.Duration;
import java.util.Map;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleState;
Expand All @@ -26,6 +27,7 @@
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.HttpClientSseClientTransport;
import io.modelcontextprotocol.client.transport.WebFluxSseClientTransport;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpServer.AsyncSpecification;
import io.modelcontextprotocol.server.McpServer.SingleSessionSyncSpecification;
import io.modelcontextprotocol.server.transport.WebMvcSseServerTransportProvider;
Expand All @@ -40,10 +42,8 @@ class WebMvcSseIntegrationTests extends AbstractMcpClientServerIntegrationTests

private WebMvcSseServerTransportProvider mcpServerTransportProvider;

static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = (r, tc) -> {
tc.put("important", "value");
return tc;
};
static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = r -> McpTransportContext
.create(Map.of("important", "value"));

@Override
protected void prepareClients(int port, String mcpEndpoint) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import static org.assertj.core.api.Assertions.assertThat;

import java.time.Duration;
import java.util.Map;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.LifecycleState;
Expand All @@ -26,6 +27,7 @@
import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.client.transport.HttpClientStreamableHttpTransport;
import io.modelcontextprotocol.client.transport.WebClientStreamableHttpTransport;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpServer.AsyncSpecification;
import io.modelcontextprotocol.server.McpServer.SyncSpecification;
import io.modelcontextprotocol.server.transport.WebMvcStreamableServerTransportProvider;
Expand All @@ -40,10 +42,8 @@ class WebMvcStreamableIntegrationTests extends AbstractMcpClientServerIntegratio

private WebMvcStreamableServerTransportProvider mcpServerTransportProvider;

static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = (r, tc) -> {
tc.put("important", "value");
return tc;
};
static McpTransportContextExtractor<ServerRequest> TEST_CONTEXT_EXTRACTOR = r -> McpTransportContext
.create(Map.of("important", "value"));

@Configuration
@EnableWebMvc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@
import org.junit.jupiter.params.provider.ValueSource;

import io.modelcontextprotocol.client.McpClient;
import io.modelcontextprotocol.common.McpTransportContext;
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpServerFeatures;
import io.modelcontextprotocol.server.McpSyncServer;
import io.modelcontextprotocol.server.McpSyncServerExchange;
import io.modelcontextprotocol.server.McpTransportContext;
import io.modelcontextprotocol.spec.McpError;
import io.modelcontextprotocol.spec.McpSchema;
import io.modelcontextprotocol.spec.McpSchema.CallToolResult;
Expand Down
Loading