Interface McpResourceHandler


public interface McpResourceHandler
Handler for a single MCP resource.

Implementations declare a descriptor (the McpResourceSpec returned by resources/list) and a read body invoked when the matching resources/read method runs.

This is a genuine two-method contract, not a single-method one: both descriptor() and read(String, BeanStore) are abstract, so it is deliberately not annotated @FunctionalInterface and a bare lambda cannot implement it. Routing calls descriptor() on every registered handler for both resources/list and resources/read, so a handler with no usable descriptor is not a valid handler; making descriptor() abstract catches that at compile time instead of the first request to reach it at runtime. Use of(McpResourceSpec, BiFunction) for the common case of wiring both in a single expression.

  • Method Details

    • of

      Builds a handler from a fixed descriptor and a read lambda.

      The sanctioned one-expression path for registering a resource: unlike a bare lambda (which cannot satisfy this two-method interface at all), this factory wires both descriptor() and read(String, BeanStore) from a single call.

      Parameters:
      descriptor - The static descriptor returned from every descriptor() call. Must not be null and must carry a non-blank uri (routing matches incoming resources/read requests on uri, not name, so a uri-less resource would be silently unreachable).
      read - The read body, invoked with the incoming uri and the per-request bean store. Must not be null.
      Returns:
      A new handler wiring both. Never null.
    • descriptor

      Returns the static descriptor for this resource.

      The uri value is used by the bound McpRevision to route incoming resources/read requests, so each handler in an McpServerConfig must use a unique URI.

      Returns:
      The resource descriptor. Never null.
    • read

      Reads the resource body.
      Parameters:
      uri - The URI from the resources/read request (matches descriptor().uri).
      ctx - Per-request bean store. Never null.
      Returns:
      The resource contents. Never null.