Skip to content
This repository was archived by the owner on Apr 8, 2025. It is now read-only.
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
14 changes: 13 additions & 1 deletion development/updates.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,18 @@ title: "What's New"
description: 'The latest updates and improvements to MCP'
---

<Update label="2025-02-07" description="Java SDK released">
- We're excited to announce that the Java SDK developed by Spring AI at VMware Tanzu is now
the official [Java SDK](https://github.com/modelcontextprotocol/java-sdk) for MCP.
This joins our existing Kotlin SDK in our growing list of supported languages.
The Spring AI team will maintain the SDK as an integral part of the Model Context Protocol
organization. We're thrilled to welcome them to the MCP community!
</Update>

<Update label="2025-01-27" description="Python SDK 1.2.1">
- Version [1.2.1](https://github.com/modelcontextprotocol/python-sdk/releases/tag/v1.2.1) of the MCP Python SDK has been released,
delivering important stability improvements and bug fixes.
</Update>
<Update label="2025-01-18" description="SDK and Server Improvements">
- Simplified, express-like API in the [TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk)
- Added 8 new clients to the [clients page](https://modelcontextprotocol.io/clients)
Expand All @@ -16,4 +28,4 @@ description: 'The latest updates and improvements to MCP'
<Update label="2024-12-21" description="Kotlin SDK released">
- Jetbrains released a Kotlin SDK for MCP!
- For a sample MCP Kotlin server, check out [this repository](https://github.com/modelcontextprotocol/kotlin-sdk/tree/main/samples/kotlin-mcp-server)
</Update>
</Update>
19 changes: 16 additions & 3 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,9 @@
},
"favicon": "/favicon.svg",
"navigation": {
"anchors": [
"tabs": [
{
"anchor": "Documentation",
"icon": "book-open",
"tab": "Documentation",
"groups": [
{
"group": "Get Started",
Expand Down Expand Up @@ -59,6 +58,20 @@
]
}
]
},
{
"tab": "SDKs",
"icon": "book-open",
"groups": [
{
"group": "Java",
"pages": [
"sdk/java/mcp-overview",
"sdk/java/mcp-client",
"sdk/java/mcp-server"
]
}
]
}
],
"global": {
Expand Down
282 changes: 282 additions & 0 deletions images/java/class-diagrams.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
@startuml Core Components

' Core Interfaces
interface McpTransport {
+Mono<Void> connect(Function<Mono<JSONRPCMessage>, Mono<JSONRPCMessage>> handler)
+Mono<Void> sendMessage(JSONRPCMessage message)
+void close()
+Mono<Void> closeGracefully()
+<T> T unmarshalFrom(Object data, TypeReference<T> typeRef)
}

interface McpSession {
+<T> Mono<T> sendRequest(String method, Object requestParams, TypeReference<T> typeRef)
+Mono<Void> sendNotification(String method, Map<String, Object> params)
+Mono<Void> closeGracefully()
+void close()
}

' Core Implementation Classes
class DefaultMcpSession {
+interface RequestHandler
+interface NotificationHandler
}

' Client Classes
class McpClient {
+{static} Builder using(ClientMcpTransport transport)
}

class McpAsyncClient {
+Mono<InitializeResult> initialize()
+ServerCapabilities getServerCapabilities()
+Implementation getServerInfo()
+ClientCapabilities getClientCapabilities()
+Implementation getClientInfo()
+void close()
+Mono<Void> closeGracefully()
+Mono<Object> ping()
+Mono<Void> addRoot(Root root)
+Mono<Void> removeRoot(String rootUri)
+Mono<Void> rootsListChangedNotification()
+Mono<CallToolResult> callTool(CallToolRequest request)
+Mono<ListToolsResult> listTools()
+Mono<ListResourcesResult> listResources()
+Mono<ReadResourceResult> readResource(ReadResourceRequest request)
+Mono<ListResourceTemplatesResult> listResourceTemplates()
+Mono<Void> subscribeResource(SubscribeRequest request)
+Mono<Void> unsubscribeResource(UnsubscribeRequest request)
+Mono<ListPromptsResult> listPrompts()
+Mono<GetPromptResult> getPrompt(GetPromptRequest request)
+Mono<Void> setLoggingLevel(LoggingLevel level)
}

class McpSyncClient {
+InitializeResult initialize()
+ServerCapabilities getServerCapabilities()
+Implementation getServerInfo()
+ClientCapabilities getClientCapabilities()
+Implementation getClientInfo()
+void close()
+boolean closeGracefully()
+Object ping()
+void addRoot(Root root)
+void removeRoot(String rootUri)
+void rootsListChangedNotification()
+CallToolResult callTool(CallToolRequest request)
+ListToolsResult listTools()
+ListResourcesResult listResources()
+ReadResourceResult readResource(ReadResourceRequest request)
+ListResourceTemplatesResult listResourceTemplates()
+void subscribeResource(SubscribeRequest request)
+void unsubscribeResource(UnsubscribeRequest request)
+ListPromptsResult listPrompts()
+GetPromptResult getPrompt(GetPromptRequest request)
+void setLoggingLevel(LoggingLevel level)
}

' Server Classes
class McpServer {
+{static} Builder using(ServerMcpTransport transport)
}

class McpAsyncServer {

+ServerCapabilities getServerCapabilities()
+Implementation getServerInfo()
+ClientCapabilities getClientCapabilities()
+Implementation getClientInfo()
+void close()
+Mono<Void> closeGracefully()

' Tool Management
+Mono<Void> addTool(ToolRegistration toolRegistration)
+Mono<Void> removeTool(String toolName)
+Mono<Void> notifyToolsListChanged()

' Resource Management
+Mono<Void> addResource(ResourceRegistration resourceHandler)
+Mono<Void> removeResource(String resourceUri)
+Mono<Void> notifyResourcesListChanged()

' Prompt Management
+Mono<Void> addPrompt(PromptRegistration promptRegistration)
+Mono<Void> removePrompt(String promptName)
+Mono<Void> notifyPromptsListChanged()

' Logging
+Mono<Void> loggingNotification(LoggingMessageNotification notification)

' Sampling
+Mono<CreateMessageResult> createMessage(CreateMessageRequest request)
}

class McpSyncServer {
+McpAsyncServer getAsyncServer()

+ServerCapabilities getServerCapabilities()
+Implementation getServerInfo()
+ClientCapabilities getClientCapabilities()
+Implementation getClientInfo()
+void close()
+void closeGracefully()

' Tool Management
+void addTool(ToolRegistration toolHandler)
+void removeTool(String toolName)
+void notifyToolsListChanged()

' Resource Management
+void addResource(ResourceRegistration resourceHandler)
+void removeResource(String resourceUri)
+void notifyResourcesListChanged()

' Prompt Management
+void addPrompt(PromptRegistration promptRegistration)
+void removePrompt(String promptName)
+void notifyPromptsListChanged()

' Logging
+void loggingNotification(LoggingMessageNotification notification)

' Sampling
+CreateMessageResult createMessage(CreateMessageRequest request)
}

' Transport Implementations
class StdioClientTransport implements ClientMcpTransport {
+void setErrorHandler(Consumer<String> errorHandler)
+Sinks.Many<String> getErrorSink()
}

class StdioServerTransport implements ServerMcpTransport {
}


class HttpServletSseServerTransport implements ServerMcpTransport {
}


class HttpClientSseClientTransport implements ClientMcpTransport {
}


class WebFluxSseClientTransport implements ClientMcpTransport {
}


class WebFluxSseServerTransport implements ServerMcpTransport {
+RouterFunction<?> getRouterFunction()
}

class WebMvcSseServerTransport implements ServerMcpTransport {
+RouterFunction<?> getRouterFunction()
}


' Schema and Error Classes
class McpSchema {
+class ErrorCodes
+interface Request
+interface JSONRPCMessage
+interface ResourceContents
+interface Content
+interface ServerCapabilities
+{static} JSONRPCMessage deserializeJsonRpcMessage()
}

class McpError {
}

' Relationships
McpTransport <|.. ClientMcpTransport
McpTransport <|.. ServerMcpTransport

McpSession <|.. DefaultMcpSession
DefaultMcpSession --o McpAsyncClient
DefaultMcpSession --o McpAsyncServer

McpClient ..> McpAsyncClient : creates
McpClient ..> McpSyncClient : creates
McpSyncClient --> McpAsyncClient : delegates to

McpServer ..> McpAsyncServer : creates
McpServer ..> McpSyncServer : creates
McpSyncServer o-- McpAsyncServer

DefaultMcpSession o-- McpTransport
McpSchema <.. McpSession : uses
McpError ..> McpSession : throws

@enduml

@startuml Message Flow

package "MCP Schema" {
interface JSONRPCMessage {
+String jsonrpc()
}

interface Request {
}

class InitializeRequest
class CallToolRequest
class ListToolsRequest
class ListResourcesRequest
class ReadResourceRequest
class ListResourceTemplatesRequest
class ListPromptsRequest
class GetPromptRequest
}

package "Resource Types" {
interface ResourceContents {
+String uri()
+String mimeType()
}

class TextResourceContents
class BlobResourceContents

interface Content {
+String type()
}

class TextContent
class ImageContent
class EmbeddedResource

interface Annotated {
+Annotations annotations()
}

interface PromptOrResourceReference {
+String type()
}

class PromptReference
class ResourceReference
}

JSONRPCMessage <|.. Request
Request <|.. InitializeRequest
Request <|.. CallToolRequest
Request <|.. ListToolsRequest
Request <|.. ListResourcesRequest
Request <|.. ReadResourceRequest
Request <|.. ListResourceTemplatesRequest
Request <|.. ListPromptsRequest
Request <|.. GetPromptRequest

ResourceContents <|.. TextResourceContents
ResourceContents <|.. BlobResourceContents

Content <|.. TextContent
Content <|.. ImageContent
Content <|.. EmbeddedResource

PromptOrResourceReference <|.. PromptReference
PromptOrResourceReference <|.. ResourceReference

@enduml
Binary file added images/java/java-mcp-client-architecture.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/java/java-mcp-server-architecture.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions images/java/java-mcp-uml-classdiagram.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading