spring-ai icon indicating copy to clipboard operation
spring-ai copied to clipboard

How does MCP server obtain the parameters after the SSE endpoint URL for authentication

Open fanslin opened this issue 7 months ago • 2 comments

For example, my mcp client configuration is as follows: { "mcpServers": { "xxx": { "url": "https://www.xx.com/sse?ak=apikey" } } } I want to obtain the ak parameter for verification in the mcp server implemented by springAI. How should I do it?

fanslin avatar Apr 17 '25 10:04 fanslin

I also encountered this problem. The endpoint configuration should be opened. Similar to configuring baseuri. The problem is the automated configuration HttpClientSseClientTransport when using the default endpoint @Bean public List<NamedClientMcpTransport> mcpHttpClientTransports(McpSseClientProperties sseProperties, ObjectProvider<ObjectMapper> objectMapperProvider) {

	ObjectMapper objectMapper = objectMapperProvider.getIfAvailable(ObjectMapper::new);

	List<NamedClientMcpTransport> sseTransports = new ArrayList<>();

	for (Map.Entry<String, SseParameters> serverParameters : sseProperties.getConnections().entrySet()) {

		var transport = new HttpClientSseClientTransport(HttpClient.newBuilder(), serverParameters.getValue().url(),
				objectMapper);
		sseTransports.add(new NamedClientMcpTransport(serverParameters.getKey(), transport));
	}

	return sseTransports;
}


@Deprecated(forRemoval = true)
public HttpClientSseClientTransport(HttpClient.Builder clientBuilder, String baseUri, ObjectMapper objectMapper) {
	this(clientBuilder, baseUri, DEFAULT_SSE_ENDPOINT, objectMapper);
}

@Deprecated(forRemoval = true)
public HttpClientSseClientTransport(HttpClient.Builder clientBuilder, String baseUri, String sseEndpoint,
		ObjectMapper objectMapper) {
	this(clientBuilder, HttpRequest.newBuilder(), baseUri, sseEndpoint, objectMapper);
}

The endpoint property configuration should be added to McpSseClientProperties.

mcp:
  client:
    sse:
      connections:
        server1:
          url: https://mcp.amap.com
          sse-endpoint: /sse?key=xxx

renpengben avatar Apr 21 '25 14:04 renpengben

I also encountered this problem. The endpoint configuration should be opened. Similar to configuring baseuri. The problem is the automated configuration HttpClientSseClientTransport when using the default endpoint @bean public List mcpHttpClientTransports(McpSseClientProperties sseProperties, ObjectProvider objectMapperProvider) {

	ObjectMapper objectMapper = objectMapperProvider.getIfAvailable(ObjectMapper::new);

	List<NamedClientMcpTransport> sseTransports = new ArrayList<>();

	for (Map.Entry<String, SseParameters> serverParameters : sseProperties.getConnections().entrySet()) {

		var transport = new HttpClientSseClientTransport(HttpClient.newBuilder(), serverParameters.getValue().url(),
				objectMapper);
		sseTransports.add(new NamedClientMcpTransport(serverParameters.getKey(), transport));
	}

	return sseTransports;
}


@Deprecated(forRemoval = true)
public HttpClientSseClientTransport(HttpClient.Builder clientBuilder, String baseUri, ObjectMapper objectMapper) {
	this(clientBuilder, baseUri, DEFAULT_SSE_ENDPOINT, objectMapper);
}

@Deprecated(forRemoval = true)
public HttpClientSseClientTransport(HttpClient.Builder clientBuilder, String baseUri, String sseEndpoint,
		ObjectMapper objectMapper) {
	this(clientBuilder, HttpRequest.newBuilder(), baseUri, sseEndpoint, objectMapper);
}

The endpoint property configuration should be added to McpSseClientProperties.

mcp:
  client:
    sse:
      connections:
        server1:
          url: https://mcp.amap.com
          sse-endpoint: /sse?key=xxx

The question is about how to receive client-side authentication information on the MCP Server via SSE

zrt-ai-lab avatar Apr 24 '25 14:04 zrt-ai-lab