java.lang.Object
io.modelcontextprotocol.server.McpSyncServer

public class McpSyncServer extends Object
A synchronous implementation of the Model Context Protocol (MCP) server that wraps McpAsyncServer to provide blocking operations. This class delegates all operations to an underlying async server instance while providing a simpler, synchronous API for scenarios where reactive programming is not required.

The MCP server enables AI models to expose tools, resources, and prompts through a standardized interface. Key features available through this synchronous API include:

  • Tool registration and management for extending AI model capabilities
  • Resource handling with URI-based addressing for providing context
  • Prompt template management for standardized interactions
  • Real-time client notifications for state changes
  • Structured logging with configurable severity levels
  • Support for client-side AI model sampling

While McpAsyncServer uses Project Reactor's Mono and Flux types for non-blocking operations, this class converts those into blocking calls, making it more suitable for:

  • Traditional synchronous applications
  • Simple scripting scenarios
  • Testing and debugging
  • Cases where reactive programming adds unnecessary complexity

The server supports runtime modification of its capabilities through methods like addTool(io.modelcontextprotocol.server.McpServerFeatures.SyncToolRegistration), addResource(io.modelcontextprotocol.server.McpServerFeatures.SyncResourceRegistration), and addPrompt(io.modelcontextprotocol.server.McpServerFeatures.SyncPromptRegistration), automatically notifying connected clients of changes when configured to do so.

Author:
Christian Tzolov, Dariusz Jędrzejczyk
See Also:
  • Constructor Details

    • McpSyncServer

      public McpSyncServer(McpAsyncServer asyncServer)
      Creates a new synchronous server that wraps the provided async server.
      Parameters:
      asyncServer - The async server to wrap
  • Method Details

    • listRoots

      Deprecated.
      This method will be removed in 0.9.0. Use McpSyncServerExchange.listRoots().
      Retrieves the list of all roots provided by the client.
      Returns:
      The list of roots
    • listRoots

      @Deprecated public McpSchema.ListRootsResult listRoots(String cursor)
      Deprecated.
      This method will be removed in 0.9.0. Use McpSyncServerExchange.listRoots(String).
      Retrieves a paginated list of roots provided by the server.
      Parameters:
      cursor - Optional pagination cursor from a previous list request
      Returns:
      The list of roots
    • addTool

      @Deprecated public void addTool(McpServerFeatures.SyncToolRegistration toolHandler)
      Deprecated.
      This method will be removed in 0.9.0. Use addTool(McpServerFeatures.SyncToolSpecification).
      Add a new tool handler.
      Parameters:
      toolHandler - The tool handler to add
    • addTool

      public void addTool(McpServerFeatures.SyncToolSpecification toolHandler)
      Add a new tool handler.
      Parameters:
      toolHandler - The tool handler to add
    • removeTool

      public void removeTool(String toolName)
      Remove a tool handler.
      Parameters:
      toolName - The name of the tool handler to remove
    • addResource

      @Deprecated public void addResource(McpServerFeatures.SyncResourceRegistration resourceHandler)
      Deprecated.
      This method will be removed in 0.9.0. Use addResource(McpServerFeatures.SyncResourceSpecification).
      Add a new resource handler.
      Parameters:
      resourceHandler - The resource handler to add
    • addResource

      public void addResource(McpServerFeatures.SyncResourceSpecification resourceHandler)
      Add a new resource handler.
      Parameters:
      resourceHandler - The resource handler to add
    • removeResource

      public void removeResource(String resourceUri)
      Remove a resource handler.
      Parameters:
      resourceUri - The URI of the resource handler to remove
    • addPrompt

      @Deprecated public void addPrompt(McpServerFeatures.SyncPromptRegistration promptRegistration)
      Deprecated.
      This method will be removed in 0.9.0. Use addPrompt(McpServerFeatures.SyncPromptSpecification).
      Add a new prompt handler.
      Parameters:
      promptRegistration - The prompt registration to add
    • addPrompt

      public void addPrompt(McpServerFeatures.SyncPromptSpecification promptSpecification)
      Add a new prompt handler.
      Parameters:
      promptSpecification - The prompt specification to add
    • removePrompt

      public void removePrompt(String promptName)
      Remove a prompt handler.
      Parameters:
      promptName - The name of the prompt handler to remove
    • notifyToolsListChanged

      public void notifyToolsListChanged()
      Notify clients that the list of available tools has changed.
    • getServerCapabilities

      public McpSchema.ServerCapabilities getServerCapabilities()
      Get the server capabilities that define the supported features and functionality.
      Returns:
      The server capabilities
    • getServerInfo

      public McpSchema.Implementation getServerInfo()
      Get the server implementation information.
      Returns:
      The server implementation details
    • getClientCapabilities

      @Deprecated public McpSchema.ClientCapabilities getClientCapabilities()
      Deprecated.
      This method will be removed in 0.9.0. Use McpSyncServerExchange.getClientCapabilities().
      Get the client capabilities that define the supported features and functionality.
      Returns:
      The client capabilities
    • getClientInfo

      @Deprecated public McpSchema.Implementation getClientInfo()
      Deprecated.
      This method will be removed in 0.9.0. Use McpSyncServerExchange.getClientInfo().
      Get the client implementation information.
      Returns:
      The client implementation details
    • notifyResourcesListChanged

      public void notifyResourcesListChanged()
      Notify clients that the list of available resources has changed.
    • notifyPromptsListChanged

      public void notifyPromptsListChanged()
      Notify clients that the list of available prompts has changed.
    • loggingNotification

      public void loggingNotification(McpSchema.LoggingMessageNotification loggingMessageNotification)
      Send a logging message notification to all clients.
      Parameters:
      loggingMessageNotification - The logging message notification to send
    • closeGracefully

      public void closeGracefully()
      Close the server gracefully.
    • close

      public void close()
      Close the server immediately.
    • getAsyncServer

      public McpAsyncServer getAsyncServer()
      Get the underlying async server instance.
      Returns:
      The wrapped async server
    • createMessage

      @Deprecated public McpSchema.CreateMessageResult createMessage(McpSchema.CreateMessageRequest createMessageRequest)
      Deprecated.
      Create a new message using the sampling capabilities of the client. The Model Context Protocol (MCP) provides a standardized way for servers to request LLM sampling ("completions" or "generations") from language models via clients.

      This flow allows clients to maintain control over model access, selection, and permissions while enabling servers to leverage AI capabilities—with no server API keys necessary. Servers can request text or image-based interactions and optionally include context from MCP servers in their prompts.

      Unlike its async counterpart, this method blocks until the message creation is complete, making it easier to use in synchronous code paths.

      Parameters:
      createMessageRequest - The request to create a new message
      Returns:
      The result of the message creation
      Throws:
      McpError - if the client has not been initialized or does not support sampling capabilities
      McpError - if the client does not support the createMessage method
      See Also: