This page is for contributors, and for anyone wanting to know what happens between an HTTP request and a tool call.

Principle

MCP is JSON-RPC 2.0. Fusion already generates a complete JSON-RPC stack at build time, so the implementation is mostly wiring rather than protocol code:

  • the MCP methods are plain @JsonRpc methods (MCPJSONRPCProtocol) registered in the same registry as the application ones,

  • tools/call re-enters JsonRpcHandler, so a tool invocation follows the exact same code path as a direct JSON-RPC call - binding, validation, error mapping included,

  • the descriptors come from the OpenRPC document the annotation processor writes in META-INF/fusion/jsonrpc/openrpc.json,

  • only the transport is specific: sessions, SSE, headers, and the routing of client responses.

Class map

Class Role

protocol.MCPEndpoint

POST /mcp. Session resolution, protocol version validation, 202 for notifications, routing of client responses, then delegation to JsonRpcHandler.

protocol.MCPSSEProtocol

GET /mcp (the event stream, Last-Event-ID resumption) and DELETE /mcp (termination).

protocol.MCPJSONRPCProtocol

every MCP method, as @JsonRpc methods.

protocol.MCPSession

one connection state: negotiated version, client capabilities, logging level, subscriptions, pending server requests, SSE queue. Also the API to talk to that client.

protocol.MCPSessions

the live sessions, their creation, lookup, expiration and the binding to the current request.

protocol.SseBus

the text/event-stream body: a demand aware, buffered queue of frames with a replay window.

protocol.MCPProtocol

supported versions, header names, negotiation.

service.OpenRpcService

loads and merges the OpenRPC documents, inlines their $refs.

service.DescriptorService

turns the JSON-RPC methods flagged mcp.type into tools/list and prompts/list results.

api.*

what an application uses: @MCPTool, @MCPPrompt, MCPResources, MCPCompletions, MCPNotifier.

model.*

the wire model, one @JsonModel record per MCP structure, generated codecs.

client.MCPClient

a minimal MCP client, shipped in the main artifact.

A tool call, step by step

POST /mcp  {"method":"tools/call","params":{"name":"my/tool","arguments":{...}}}
 |
 |-- MCPEndpoint                     read the body once, split requests / notifications / client responses
 |     validate MCP-Protocol-Version -> 400 if unsupported
 |     resolve Mcp-Session-Id        -> 404 if unknown, create it when the call is initialize
 |     bind the session on the request attribute
 |
 |-- JsonRpcHandler.execute          the standard Fusion dispatch
 |     |
 |     |-- MCPJSONRPCProtocol#callTool
 |           descriptors.isTool(name)  -> -32602 when it is not an @MCPTool method
 |           handler.execute({method: name, params: arguments})   nested, same stack
 |             |
 |             |-- the application method, bound and invoked by generated code
 |           map the result: ToolResponse as is, else structuredContent + text block
 |           map a failure: isError = true, unless the error code is a reserved JSON-RPC one
 |
 |-- MCPEndpoint                     write the JSON-RPC response (200), or 202 when there is nothing to answer

Decisions worth knowing

Own the POST endpoint. The Fusion JSON-RPC endpoint cannot express the MCP transport: session headers with their 400/404 semantics, 202 for notifications, and above all the client responses - a JSON-RPC message without method, which the standard validation rejects. MCPEndpoint is therefore registered with @Order(900), before the Fusion one (1000), and delegates all the JSON-RPC work to the same handler. Bean lookups are sorted by ascending priority and the first matching endpoint wins, which makes the precedence deterministic.

Descriptors computed once, at startup. Tools and prompts are known at build time, so tools/list is a constant. It also means tools/list never runs user code and cannot fail.

An allow list for tools/call. Without it, tools/call would reach every JSON-RPC method of the application - and the MCP protocol methods themselves. Only mcp.type=tool methods are callable.

Tool failures are results. The specification wants an execution failure inside the result (isError: true) so the model can read and react to it; only an invalid call is a JSON-RPC error. The frontier used here is the reserved code range (-32700, -32600..-32603).

Merge all the OpenRPC documents. There is one per module using the processor - one for this library, one for the application - so reading a single classpath resource would drop the methods of every other module depending on the classpath order.

Resources through a SPI, tools through annotations. Tools and prompts are code, known at build time; resources are data, discovered at runtime. Hence @MCPTool/@MCPPrompt on one side and the MCPResources bean on the other.

Buffer the server to client messages. A tool can send a request before the client opens its stream, and a client can reconnect. SseBus therefore queues frames, respects the subscriber demand and keeps a replay window of 128 messages for Last-Event-ID.

Notes on the wire model

Every MCP structure is a @JsonModel record in model, so its codec is generated - no reflection, GraalVM friendly. Naming follows the specification: XxxResponse is a JSON-RPC result, XxxParameters a params, XxxNotification the params of a notification. Two pairs are easy to confuse and deliberately named after the specification: Resource (descriptor) versus ResourceContents (payload), and Capabilities (the client ones, in initialize params) versus InitializeResponse.Capabilities (the server ones).

Optionality is expressed the JSON-Schema way. The Fusion OpenRPC document flags each schema with nullable, MCP needs a required list on the enclosing object, and DescriptorService does that translation.

Specification coverage

Feature Status Notes

initialize, notifications/initialized, ping

✅

Version negotiation, session creation.

tools/list, tools/call

✅

From @MCPTool, with outputSchema and structuredContent.

prompts/list, prompts/get

✅

From @MCPPrompt.

resources/list, read, templates/list, subscribe, unsubscribe

✅

From MCPResources.

completion/complete

✅

From MCPCompletions.

logging/setLevel, notifications/message

✅

Per session filtering.

notifications/*/list_changed, notifications/resources/updated

✅

Through MCPNotifier.

sampling/createMessage, elicitation/create, roots/list

✅

Through MCPSession, correlated over the SSE channel.

notifications/progress

✅

Outgoing; incoming ones are accepted and ignored.

notifications/cancelled

⚠️

Accepted and logged; the running invocation is not interrupted.

Pagination (nextCursor)

⚠️

Not needed: every listing is computed once and returned at once.

HTTP+SSE transport (2024-11-05)

❌

Superseded by the streamable HTTP one.

Known limitations

  • sessions live in memory: a clustered deployment needs sticky routing on the Mcp-Session-Id header,

  • a tool returning Optional<T> has no usable outputSchema - and does not serialize either, Fusion has no Optional JSON codec - so return T or a CompletionStage<T>,

  • Fusion >= 1.0.38 is required: earlier releases describe an asynchronous result as a map of T in the generated OpenRPC document, which would make the outputSchema of every asynchronous tool wrong.

JSON-RPC reference of the protocol methods

The MCP methods are plain @JsonRpc methods, so they end up in the OpenRPC document of the library like any other - this section is generated from it and therefore always matches what is deployed.

Methods

completion/complete

Parameter structure: either.

Suggests values for a prompt argument or a resource template variable.

Parameters:

Result: CompleteResult

initialize

Parameter structure: either.

Negotiates the protocol version and returns the server capabilities.

Parameters:
  • protocolVersion (string): The protocol version the client wants to use.

  • capabilities ( Capabilities ): What the client supports: roots, sampling, elicitation.

  • clientInfo ( ClientInfo ): Which client is connecting.

logging/setLevel

Parameter structure: either.

Sets the minimum severity of the log records sent to the client.

Parameters:
  • level (string): A syslog level name: debug, info, notice, warning, error, critical, alert or emergency.

Result: object

notifications/cancelled

Parameter structure: either.

The client gave up on a request it sent.

Parameters:
  • reason (string): Why the request was cancelled.

  • requestId (object): The cancelled request id, a string or a number.

Result: null

notifications/initialized

Parameter structure: either.

The client is ready, the session can be used.

Parameters:

Result: null

notifications/progress

Parameter structure: either.

Progress of a request the client sent to the server.

Parameters:
  • message (string)

  • progress (number)

  • progressToken (object)

  • total (number)

Result: null

notifications/roots/list_changed

Parameter structure: either.

The client filesystem roots changed.

Parameters:

Result: null

ping

Parameter structure: either.

Parameters:

Result: object

prompts/get

Parameter structure: either.

Expands a prompt template.

Parameters:
  • name (string): The prompt name, as returned by prompts/list.

  • arguments (object): The prompt arguments, all strings.

  • inputResponses (object): The answers to a previous input_required request, as top-level params.

  • requestState (string): The token to resume a previous input_required interaction.

  • _meta (object)

Result: MCPResult

prompts/list

Parameter structure: either.

Lists the prompt templates the user can pick.

Parameters:
  • cursor (string): Pagination cursor, unused: all the prompts are returned at once.

resources/list

Parameter structure: either.

Lists the resources the client can read.

Parameters:
  • cursor (string): Pagination cursor, unused: all the resources are returned at once.

resources/read

Parameter structure: either.

Reads the contents of a resource.

Parameters:
  • uri (string): The resource uri.

  • _meta (object)

Result: MCPResult

resources/subscribe

Parameter structure: either.

Asks to be notified when a resource changes.

Parameters:
  • uri (string): The resource uri to watch.

Result: object

resources/templates/list

Parameter structure: either.

Lists the parameterized resources the client can read.

Parameters:
  • cursor (string): Pagination cursor, unused: all the templates are returned at once.

resources/unsubscribe

Parameter structure: either.

Stops watching a resource.

Parameters:
  • uri (string): The resource uri to stop watching.

Result: object

server/discover

Parameter structure: either.

What this server supports over the stateless protocol, it replaces initialize for the stateless clients - no session is created.

Parameters:

subscriptions/cancel

Parameter structure: either.

Closes the server to client stream opened by subscriptions/listen.

Parameters:
  • _meta (object)

Result: object

subscriptions/listen

Parameter structure: either.

Opens the server to client stream of the stateless protocol, it stays open until the client calls subscriptions/cancel.

Parameters:

Result: object

tasks/cancel

Parameter structure: either.

Signals the cancellation of a long-running task; cancellation is cooperative.

Parameters:
  • taskId (string): The task identifier.

Result: object

tasks/get

Parameter structure: either.

Polls the current state of a long-running task of the tasks extension.

Parameters:
  • taskId (string): The task identifier.

Result: Task

tasks/list

Parameter structure: either.

Lists the live long-running tasks of the tasks extension.

Parameters:
  • cursor (string): Pagination cursor, unused: all the tasks are returned at once.

tasks/update

Parameter structure: either.

Answers the input requests a task is blocked on, acknowledged with an empty result.

Parameters:
  • taskId (string): The task identifier.

  • inputResponses (object): The answers to the task outstanding input requests.

Result: object

tools/call

Parameter structure: either.

Calls a tool.

Parameters:
  • name (string): The tool name, as returned by tools/list.

  • arguments (object): The tool arguments, they must match its inputSchema.

  • inputResponses (object): The responses to a previous input_required request, as top-level params.

  • requestState (string): The token to resume a previous input_required interaction.

  • _meta (object)

Result: MCPResult

tools/list

Parameter structure: either.

Lists the tools the model can call.

Parameters:
  • cursor (string): Pagination cursor, unused: all the tools are returned at once.

Schemas

Annotations (io.yupiik.fusion.mcp.model.Annotations) schema

Name Type Nullable Description

audience

array with items of type string

false

Who the annotated object is intended for.

lastModified

string

true

When the annotated object was modified for the last time, ISO-8601.

priority

integer

true

How important the annotated object is, from 0 (least) to 1 (most).

Capabilities (io.yupiik.fusion.mcp.model.Capabilities) schema

Name Type Nullable Description

elicitation

object

true

Set when the client can ask its user for a structured input.

experimental

object

true

Non standard capabilities, keyed by name.

extensions

object

true

Optional MCP extensions the client supports, keyed by extension identifier.

roots

object of type io.yupiik.fusion.mcp.model.Capabilities.Roots

true

Set when the client exposes filesystem roots.

sampling

object

true

Set when the client can run a LLM completion for the server.

Roots (io.yupiik.fusion.mcp.model.Capabilities.Roots) schema

Name Type Nullable Description

listChanged

boolean

false

Set when the client notifies the server the list changed.

ClientInfo (io.yupiik.fusion.mcp.model.ClientInfo) schema

Name Type Nullable Description

name

string

true

Programmatic name of the client.

title

string

true

Human oriented name of the client.

version

string

true

Version of the client.

CompleteResult (io.yupiik.fusion.mcp.model.CompleteResult) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

completion

object of type io.yupiik.fusion.mcp.model.CompleteResult.Completion

true

The suggestions for the argument being completed.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

Completion (io.yupiik.fusion.mcp.model.CompleteResult.Completion) schema

Name Type Nullable Description

hasMore

boolean

false

Set when more values exist than the ones returned.

total

integer

false

Total amount of matching values.

values

array with items of type string

false

The suggested values, at most 100.

CompletionArgument (io.yupiik.fusion.mcp.model.CompletionArgument) schema

Name Type Nullable Description

name

string

true

Name of the argument being completed.

value

string

true

What the user typed so far, possibly empty.

CompletionContext (io.yupiik.fusion.mcp.model.CompletionContext) schema

Name Type Nullable Description

arguments

object

true

The arguments already resolved, by name, to enable dependent completions.

CompletionRef (io.yupiik.fusion.mcp.model.CompletionRef) schema

Name Type Nullable Description

name

string

true

Prompt name, when completing a prompt argument.

title

string

true

Human oriented name of the prompt.

type

string

true

Either ref/prompt or ref/resource.

uri

string

true

Resource template uri, when completing a template variable.

Content (io.yupiik.fusion.mcp.model.Content) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

annotations

object of type io.yupiik.fusion.mcp.model.Annotations

true

Optional hints for the client.

content

array with items of type object of type io.yupiik.fusion.mcp.model.Content

false

The result blocks, for a tool_result block.

data

string

true

The base64 encoded payload, for an image or audio block.

description

string

true

What the linked resource contains.

id

string

true

The unique identifier of the tool use, for a tool_use block.

input

object

true

The arguments of the tool call, for a tool_use block.

isError

boolean

true

Set when the tool call failed, for a tool_result block.

mimeType

string

true

Mime type of the payload.

name

string

true

Programmatic name of the linked resource.

resource

object of type io.yupiik.fusion.mcp.model.ResourceContents

true

The embedded resource contents, for a resource block.

size

integer

true

Size of the linked resource in bytes, when known.

text

string

true

The text, for a text block.

title

string

true

Human oriented name of the linked resource.

toolUseId

string

true

The identifier of the tool_use this result answers, for a tool_result block.

type

enum with potential values text, image, audio, resource_link, resource, tool_use, tool_result

true

Which kind of content this block carries.

uri

string

true

Uri of the linked resource, for a resource_link block.

Icon (io.yupiik.fusion.mcp.model.Icon) schema

Name Type Nullable Description

mimeType

string

true

The MIME type of the icon image.

sizes

array with items of type string

false

The display sizes this icon is rendered for.

src

string

true

The URI of the icon, https: or a base64 data: URI.

theme

enum with potential values light, dark

true

Which theme this icon is meant for.

InitializeResponse (io.yupiik.fusion.mcp.model.InitializeResponse) schema

Name Type Nullable Description

capabilities

object of type io.yupiik.fusion.mcp.model.InitializeResponse.Capabilities

true

What this server can do.

instructions

string

true

How the model should use this server.

protocolVersion

string

true

The negotiated protocol version.

serverInfo

object of type io.yupiik.fusion.mcp.model.InitializeResponse.ServerInfo

true

Which server is answering.

Capabilities (io.yupiik.fusion.mcp.model.InitializeResponse.Capabilities) schema

Name Type Nullable Description

completions

object

true

Set when the server can suggest argument values.

experimental

object

true

Non standard capabilities, keyed by name.

logging

object

true

Set when the server can send log records.

prompts

object of type io.yupiik.fusion.mcp.model.InitializeResponse.Prompts

true

Set when the server exposes prompts.

resources

object of type io.yupiik.fusion.mcp.model.InitializeResponse.Resources

true

Set when the server exposes resources.

tools

object of type io.yupiik.fusion.mcp.model.InitializeResponse.Tools

true

Set when the server exposes tools.

Prompts (io.yupiik.fusion.mcp.model.InitializeResponse.Prompts) schema

Name Type Nullable Description

listChanged

boolean

false

Set when the server notifies the client the prompt list changed.

Resources (io.yupiik.fusion.mcp.model.InitializeResponse.Resources) schema

Name Type Nullable Description

listChanged

boolean

false

Set when the server notifies the client the resource list changed.

subscribe

boolean

false

Set when the client can subscribe to the changes of a single resource.

ServerInfo (io.yupiik.fusion.mcp.model.InitializeResponse.ServerInfo) schema

Name Type Nullable Description

name

string

true

Programmatic name of the server.

title

string

true

Human oriented name of the server.

version

string

true

Version of the server.

Tools (io.yupiik.fusion.mcp.model.InitializeResponse.Tools) schema

Name Type Nullable Description

listChanged

boolean

false

Set when the server notifies the client the tool list changed.

JsonSchema (io.yupiik.fusion.mcp.model.JsonSchema) schema

Name Type Nullable Description

$anchor

string

true

Plain-name fragment identifier inside the schema.

$defs

object

true

Named reusable definitions, e.g. an address.

$ref

string

true

Reference to a definition in {@code $defs}.

$schema

string

true

The JSON-Schema dialect, 2020-12 when absent.

additionalProperties

object

true

Either a boolean or the schema of the free form properties.

allOf

array with items of type object of type io.yupiik.fusion.mcp.model.JsonSchema

false

Sub-schemas that must all validate.

anyOf

array with items of type object of type io.yupiik.fusion.mcp.model.JsonSchema

false

Sub-schemas, at least one of which must validate.

const

object

true

A literal value the instance must equal.

default

object

true

Value used when the property is absent.

description

string

true

What the described value means.

else

object of type io.yupiik.fusion.mcp.model.JsonSchema

true

Schema applied when the conditional schema does not validate.

enum

array with items of type string

false

The closed set of allowed values.

enumNames

array with items of type string

false

Human oriented labels of the allowed values, same order.

format

string

true

Semantic format of a string, date-time for example.

if

object of type io.yupiik.fusion.mcp.model.JsonSchema

true

Conditional schema.

items

object of type io.yupiik.fusion.mcp.model.JsonSchema

true

Schema of the items, for an array.

maxLength

integer

true

Maximum length of a string.

maximum

integer

true

Maximum value of a number.

minLength

integer

true

Minimum length of a string.

minimum

integer

true

Minimum value of a number.

not

object of type io.yupiik.fusion.mcp.model.JsonSchema

true

Schema the value must not validate against.

oneOf

array with items of type object of type io.yupiik.fusion.mcp.model.JsonSchema

false

Sub-schemas, exactly one of which must validate.

pattern

string

true

Regular expression a string must match.

properties

object

true

The properties, by name, for an object.

required

array with items of type string

false

Names of the mandatory properties.

then

object of type io.yupiik.fusion.mcp.model.JsonSchema

true

Schema applied when the conditional schema validates.

title

string

true

Human oriented name of the schema.

type

string

true

JSON-Schema type: object, array, string, integer, number or boolean.

x-mcp-header

string

true

Transport hint: the parameter can be sent through the Mcp-Param-<suffix> header.

ListPromptsResponse (io.yupiik.fusion.mcp.model.ListPromptsResponse) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

cacheScope

string

true

The scope the client may share this cache entry at.

nextCursor

string

true

Cursor to pass to the next call, absent when everything was returned.

prompts

array with items of type object of type io.yupiik.fusion.mcp.model.ListPromptsResponse.Prompt

false

The available prompts.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

ttlMs

integer

true

How long, in milliseconds, the client may cache this result.

Prompt (io.yupiik.fusion.mcp.model.ListPromptsResponse.Prompt) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

arguments

array with items of type object of type io.yupiik.fusion.mcp.model.ListPromptsResponse.Prompt.Argument

false

The arguments the prompt takes, all strings.

description

string

true

What the prompt is for.

icons

array with items of type object of type io.yupiik.fusion.mcp.model.Icon

false

Optional visual identifiers for the prompt.

name

string

true

Programmatic name of the prompt, what prompts/get takes.

title

string

true

Human oriented name of the prompt.

Argument (io.yupiik.fusion.mcp.model.ListPromptsResponse.Prompt.Argument) schema

Name Type Nullable Description

description

string

true

What the argument is for.

name

string

true

Programmatic name of the argument, the key to pass to prompts/get.

required

boolean

true

Set when the argument must be provided.

title

string

true

Human oriented name of the argument.

ListResourcesResponse (io.yupiik.fusion.mcp.model.ListResourcesResponse) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

cacheScope

string

true

The scope the client may share this cache entry at.

nextCursor

string

true

Cursor to pass to the next call, absent when everything was returned.

resources

array with items of type object of type io.yupiik.fusion.mcp.model.Resource

false

The available resources.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

ttlMs

integer

true

How long, in milliseconds, the client may cache this result.

ListResourceTemplatesResponse (io.yupiik.fusion.mcp.model.ListResourceTemplatesResponse) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

cacheScope

string

true

The scope the client may share this cache entry at.

nextCursor

string

true

Cursor to pass to the next call, absent when everything was returned.

resourceTemplates

array with items of type object of type io.yupiik.fusion.mcp.model.ResourceTemplate

false

The available parameterized resources.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

ttlMs

integer

true

How long, in milliseconds, the client may cache this result.

ListTasksResponse (io.yupiik.fusion.mcp.model.ListTasksResponse) schema

Name Type Nullable Description

metadata

object

true

Optional free form metadata.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

tasks

array with items of type object of type io.yupiik.fusion.mcp.model.Task

false

The live tasks.

ListToolsResponse (io.yupiik.fusion.mcp.model.ListToolsResponse) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

cacheScope

string

true

The scope the client may share this cache entry at.

nextCursor

string

true

Cursor to pass to the next call, absent when everything was returned.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

tools

array with items of type object of type io.yupiik.fusion.mcp.model.ListToolsResponse.Tool

false

The callable tools.

ttlMs

integer

true

How long, in milliseconds, the client may cache this result.

Tool (io.yupiik.fusion.mcp.model.ListToolsResponse.Tool) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

annotations

object of type io.yupiik.fusion.mcp.model.Annotations

true

Optional hints for the client.

description

string

true

What the tool does, this is what the model reads to decide to call it.

icons

array with items of type object of type io.yupiik.fusion.mcp.model.Icon

false

Optional visual identifiers for the tool.

inputSchema

object of type io.yupiik.fusion.mcp.model.JsonSchema

true

Schema of the arguments.

name

string

true

Programmatic name of the tool, what tools/call takes.

outputSchema

object of type io.yupiik.fusion.mcp.model.JsonSchema

true

Schema of the structured result, absent when there is none.

title

string

true

Human oriented name of the tool.

MCPRequestMetadata (io.yupiik.fusion.mcp.model.MCPRequestMetadata) schema

Name Type Nullable Description

io.modelcontextprotocol/clientCapabilities

object of type io.yupiik.fusion.mcp.model.Capabilities

true

-

io.modelcontextprotocol/clientInfo

object of type io.yupiik.fusion.mcp.model.ClientInfo

true

-

io.modelcontextprotocol/inputResponses

object

true

-

io.modelcontextprotocol/logLevel

enum with potential values alert, critical, debug, emergency, error, info, notice, warning

true

-

io.modelcontextprotocol/progressToken

object

true

-

io.modelcontextprotocol/protocolVersion

string

true

-

io.modelcontextprotocol/requestState

string

true

-

io.modelcontextprotocol/subscriptionId

string

true

-

MCPResult (io.yupiik.fusion.mcp.model.MCPResult) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

cacheScope

string

true

The scope the client may share this cache entry at.

content

array with items of type object of type io.yupiik.fusion.mcp.model.Content

false

The tool content blocks, what a model without structured output support reads.

contents

array with items of type object of type io.yupiik.fusion.mcp.model.ResourceContents

false

The contents of a resource, a single uri can expand to several.

description

string

true

What an expanded prompt is about.

inputRequests

object

true

The requests the client must run to feed this result, keyed by their method.

isError

boolean

true

Set when the tool failed, the model is expected to read the error.

messages

array with items of type object of type io.yupiik.fusion.mcp.model.PromptResponse.Message

false

The messages a prompt expands to.

requestState

string

true

The token the client must echo with its next invocation to resume the interaction.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

structuredContent

object

true

The structured tool result, it must match the tool outputSchema when there is one.

ttlMs

integer

true

How long, in milliseconds, the client may cache this result.

Metadata (io.yupiik.fusion.mcp.model.Metadata) schema

Name Type Nullable Description

name

string

true

Reserved name attribute.

others

object

true

Every other attribute, this object being free form.

title

string

true

Reserved title attribute.

Message (io.yupiik.fusion.mcp.model.PromptResponse.Message) schema

Name Type Nullable Description

content

object

true

The message content, a single block or an array of blocks.

role

enum with potential values user, assistant

true

Who the message comes from.

Resource (io.yupiik.fusion.mcp.model.Resource) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

annotations

object of type io.yupiik.fusion.mcp.model.Annotations

true

Optional hints for the client.

description

string

true

What the resource contains.

icons

array with items of type object of type io.yupiik.fusion.mcp.model.Icon

false

Optional visual identifiers for the resource.

mimeType

string

true

Mime type of the resource, when known.

name

string

true

Programmatic name of the resource.

size

integer

true

Size in bytes, when known.

title

string

true

Human oriented name of the resource.

uri

string

true

Uri of the resource, what resources/read takes.

ResourceContents (io.yupiik.fusion.mcp.model.ResourceContents) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

blob

string

true

The base64 encoded content when it is binary, exclusive with text.

mimeType

string

true

Mime type of the content.

text

string

true

The content when it is textual, exclusive with blob.

uri

string

true

Uri of the resource.

ResourceTemplate (io.yupiik.fusion.mcp.model.ResourceTemplate) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

annotations

object of type io.yupiik.fusion.mcp.model.Annotations

true

Optional hints for the client.

description

string

true

What the resources this template generates contain.

mimeType

string

true

Mime type of the generated resources, when constant.

name

string

true

Programmatic name of the template.

title

string

true

Human oriented name of the template.

uriTemplate

string

true

A RFC 6570 uri template, file:///logs/ {name}.log for example.

ServerCapabilities (io.yupiik.fusion.mcp.model.ServerCapabilities) schema

Name Type Nullable Description

completions

object

true

Set when the server can suggest argument values.

experimental

object

true

Non standard capabilities, keyed by name.

extensions

object

true

Optional MCP extensions the server supports, keyed by extension identifier.

logging

object

true

Set when the server can send log records.

prompts

object of type io.yupiik.fusion.mcp.model.ServerCapabilities.Prompts

true

Set when the server exposes prompts.

resources

object of type io.yupiik.fusion.mcp.model.ServerCapabilities.Resources

true

Set when the server exposes resources.

tools

object of type io.yupiik.fusion.mcp.model.ServerCapabilities.Tools

true

Set when the server exposes tools.

Prompts (io.yupiik.fusion.mcp.model.ServerCapabilities.Prompts) schema

Name Type Nullable Description

listChanged

boolean

false

Set when the server notifies the client the prompt list changed.

Resources (io.yupiik.fusion.mcp.model.ServerCapabilities.Resources) schema

Name Type Nullable Description

listChanged

boolean

false

Set when the server notifies the client the resource list changed.

subscribe

boolean

false

Set when the client can subscribe to the changes of a single resource.

Tools (io.yupiik.fusion.mcp.model.ServerCapabilities.Tools) schema

Name Type Nullable Description

listChanged

boolean

false

Set when the server notifies the client the tool list changed.

ServerDiscoverResponse (io.yupiik.fusion.mcp.model.ServerDiscoverResponse) schema

Name Type Nullable Description

_meta

object of type io.yupiik.fusion.mcp.model.Metadata

true

Optional free form metadata.

cacheScope

string

true

The scope the client may share this cache entry at.

capabilities

object of type io.yupiik.fusion.mcp.model.ServerCapabilities

true

What this server can do.

instructions

string

true

How the model should use this server.

resultType

enum with potential values complete, error, input_required

true

The type of this result, see the {@code 2026-07-28} specification.

serverInfo

object of type io.yupiik.fusion.mcp.model.InitializeResponse.ServerInfo

true

Which server is answering.

supportedVersions

array with items of type string

false

The MCP protocol versions this server supports for stateless requests.

ttlMs

integer

true

How long, in milliseconds, the client may cache this result.

SubscriptionFilter (io.yupiik.fusion.mcp.model.SubscriptionFilter) schema

Name Type Nullable Description

promptsListChanged

boolean

true

Set when the client wants notifications/prompts/list_changed.

resourceSubscriptions

array with items of type string

false

The resource uris the client wants notifications/resources/updated for.

resourcesListChanged

boolean

true

Set when the client wants notifications/resources/list_changed.

toolsListChanged

boolean

true

Set when the client wants notifications/tools/list_changed.

Task (io.yupiik.fusion.mcp.model.Task) schema

Name Type Nullable Description

createdAt

integer

true

When the task was created, epoch milliseconds.

error

object

true

The error, when the task failed.

inputRequests

object

true

The requests the client must answer when the task needs input.

lastUpdatedAt

integer

true

When the task last changed, epoch milliseconds.

parentTaskId

string

true

The identifier of the parent task, if any.

pollIntervalMs

integer

true

How often, in milliseconds, the client should poll the task.

result

object

true

The final content, when the task completed.

status

enum with potential values working, input_required, completed, failed, cancelled

true

The current status of the task.

statusMessage

string

true

A human-readable note about the current progress.

taskId

string

true

The unique, durable identifier of the task.

ttlMs

integer

true

How long, in milliseconds, the server keeps the task alive.