Design
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
@JsonRpcmethods (MCPJSONRPCProtocol) registered in the same registry as the application ones, -
tools/callre-entersJsonRpcHandler, 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 |
|---|---|
|
|
|
|
|
|
|
|
every MCP method, as |
|
|
one connection state: negotiated version, client capabilities, logging level, subscriptions, pending server requests, SSE queue. Also the API to talk to that client. |
|
|
the live sessions, their creation, lookup, expiration and the binding to the current request. |
|
|
the |
|
|
supported versions, header names, negotiation. |
|
|
loads and merges the OpenRPC documents, inlines their |
|
|
turns the JSON-RPC methods flagged |
|
|
what an application uses: |
|
|
the wire model, one |
|
|
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 |
|---|---|---|
|
|
✅ |
Version negotiation, session creation. |
|
|
✅ |
From |
|
|
✅ |
From |
|
|
✅ |
From |
|
|
✅ |
From |
|
|
✅ |
Per session filtering. |
|
|
✅ |
Through |
|
|
✅ |
Through |
|
|
✅ |
Outgoing; incoming ones are accepted and ignored. |
|
|
⚠️ |
Accepted and logged; the running invocation is not interrupted. |
|
Pagination ( |
⚠️ |
Not needed: every listing is computed once and returned at once. |
|
HTTP+SSE transport ( |
❌ |
Superseded by the streamable HTTP one. |
Known limitations
-
sessions live in memory: a clustered deployment needs sticky routing on the
Mcp-Session-Idheader, -
a tool returning
Optional<T>has no usableoutputSchema- and does not serialize either, Fusion has noOptionalJSON codec - so returnTor aCompletionStage<T>, -
Fusion >= 1.0.38 is required: earlier releases describe an asynchronous result as a map of
Tin the generated OpenRPC document, which would make theoutputSchemaof 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.
-
argument(CompletionArgument): The argument being completed and its current value. -
context(CompletionContext): The arguments already resolved. -
ref(CompletionRef): What is completed: a prompt or a resource template.
Result: CompleteResult
initialize
Parameter structure: either.
Negotiates the protocol version and returns the server capabilities.
-
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.
Result: InitializeResponse
logging/setLevel
Parameter structure: either.
Sets the minimum severity of the log records sent to the client.
-
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.
-
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.
-
_meta(Metadata)
Result: null
notifications/progress
Parameter structure: either.
Progress of a request the client sent to the server.
-
message(string) -
progress(number) -
progressToken(object) -
total(number)
Result: null
notifications/roots/list_changed
Parameter structure: either.
The client filesystem roots changed.
-
_meta(Metadata)
Result: null
ping
Parameter structure: either.
Liveness check, see https://modelcontextprotocol.io/specification/2025-06-18/basic/utilities/ping .
-
_meta(Metadata)
Result: object
prompts/get
Parameter structure: either.
Expands a prompt template.
-
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.
-
cursor(string): Pagination cursor, unused: all the prompts are returned at once.
Result: ListPromptsResponse
resources/list
Parameter structure: either.
Lists the resources the client can read.
-
cursor(string): Pagination cursor, unused: all the resources are returned at once.
Result: ListResourcesResponse
resources/read
Parameter structure: either.
Reads the contents of a resource.
-
uri(string): The resource uri. -
_meta(object)
Result: MCPResult
resources/subscribe
Parameter structure: either.
Asks to be notified when a resource changes.
-
uri(string): The resource uri to watch.
Result: object
resources/templates/list
Parameter structure: either.
Lists the parameterized resources the client can read.
-
cursor(string): Pagination cursor, unused: all the templates are returned at once.
Result: ListResourceTemplatesResponse
resources/unsubscribe
Parameter structure: either.
Stops watching a resource.
-
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.
-
_meta(MCPRequestMetadata)
Result: ServerDiscoverResponse
subscriptions/cancel
Parameter structure: either.
Closes the server to client stream opened by subscriptions/listen.
-
_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.
-
notifications(SubscriptionFilter) -
_meta(object)
Result: object
tasks/cancel
Parameter structure: either.
Signals the cancellation of a long-running task; cancellation is cooperative.
-
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.
-
taskId(string): The task identifier.
Result: Task
tasks/list
Parameter structure: either.
Lists the live long-running tasks of the tasks extension.
-
cursor(string): Pagination cursor, unused: all the tasks are returned at once.
Result: ListTasksResponse
tasks/update
Parameter structure: either.
Answers the input requests a task is blocked on, acknowledged with an empty result.
-
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.
-
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.
-
cursor(string): Pagination cursor, unused: all the tools are returned at once.
Result: ListToolsResponse
Schemas
Annotations (io.yupiik.fusion.mcp.model.Annotations) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
array with items of type |
|
Who the annotated object is intended for. |
|
|
|
|
When the annotated object was modified for the last time, ISO-8601. |
|
|
integer |
|
How important the annotated object is, from 0 (least) to 1 (most). |
Capabilities (io.yupiik.fusion.mcp.model.Capabilities) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object |
|
Set when the client can ask its user for a structured input. |
|
|
object |
|
Non standard capabilities, keyed by name. |
|
|
object |
|
Optional MCP extensions the client supports, keyed by extension identifier. |
|
|
object of type |
|
Set when the client exposes filesystem roots. |
|
|
object |
|
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 |
|---|---|---|---|
|
|
|
|
Set when the client notifies the server the list changed. |
ClientInfo (io.yupiik.fusion.mcp.model.ClientInfo) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Programmatic name of the client. |
|
|
|
|
Human oriented name of the client. |
|
|
|
|
Version of the client. |
CompleteResult (io.yupiik.fusion.mcp.model.CompleteResult) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
object of type |
|
The suggestions for the argument being completed. |
|
|
enum with potential values |
|
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 |
|---|---|---|---|
|
|
|
|
Set when more values exist than the ones returned. |
|
|
integer |
|
Total amount of matching values. |
|
|
array with items of type |
|
The suggested values, at most 100. |
CompletionArgument (io.yupiik.fusion.mcp.model.CompletionArgument) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Name of the argument being completed. |
|
|
|
|
What the user typed so far, possibly empty. |
CompletionContext (io.yupiik.fusion.mcp.model.CompletionContext) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object |
|
The arguments already resolved, by name, to enable dependent completions. |
CompletionRef (io.yupiik.fusion.mcp.model.CompletionRef) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Prompt name, when completing a prompt argument. |
|
|
|
|
Human oriented name of the prompt. |
|
|
|
|
Either ref/prompt or ref/resource. |
|
|
|
|
Resource template uri, when completing a template variable. |
Content (io.yupiik.fusion.mcp.model.Content) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
object of type |
|
Optional hints for the client. |
|
|
array with items of type object of type |
|
The result blocks, for a tool_result block. |
|
|
|
|
The base64 encoded payload, for an image or audio block. |
|
|
|
|
What the linked resource contains. |
|
|
|
|
The unique identifier of the tool use, for a tool_use block. |
|
|
object |
|
The arguments of the tool call, for a tool_use block. |
|
|
|
|
Set when the tool call failed, for a tool_result block. |
|
|
|
|
Mime type of the payload. |
|
|
|
|
Programmatic name of the linked resource. |
|
|
object of type |
|
The embedded resource contents, for a resource block. |
|
|
integer |
|
Size of the linked resource in bytes, when known. |
|
|
|
|
The text, for a text block. |
|
|
|
|
Human oriented name of the linked resource. |
|
|
|
|
The identifier of the tool_use this result answers, for a tool_result block. |
|
|
enum with potential values |
|
Which kind of content this block carries. |
|
|
|
|
Uri of the linked resource, for a resource_link block. |
Icon (io.yupiik.fusion.mcp.model.Icon) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
The MIME type of the icon image. |
|
|
array with items of type |
|
The display sizes this icon is rendered for. |
|
|
|
|
The URI of the icon, https: or a base64 data: URI. |
|
|
enum with potential values |
|
Which theme this icon is meant for. |
InitializeResponse (io.yupiik.fusion.mcp.model.InitializeResponse) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
What this server can do. |
|
|
|
|
How the model should use this server. |
|
|
|
|
The negotiated protocol version. |
|
|
object of type |
|
Which server is answering. |
Capabilities (io.yupiik.fusion.mcp.model.InitializeResponse.Capabilities) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object |
|
Set when the server can suggest argument values. |
|
|
object |
|
Non standard capabilities, keyed by name. |
|
|
object |
|
Set when the server can send log records. |
|
|
object of type |
|
Set when the server exposes prompts. |
|
|
object of type |
|
Set when the server exposes resources. |
|
|
object of type |
|
Set when the server exposes tools. |
Prompts (io.yupiik.fusion.mcp.model.InitializeResponse.Prompts) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Set when the server notifies the client the prompt list changed. |
Resources (io.yupiik.fusion.mcp.model.InitializeResponse.Resources) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Set when the server notifies the client the resource list changed. |
|
|
|
|
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 |
|---|---|---|---|
|
|
|
|
Programmatic name of the server. |
|
|
|
|
Human oriented name of the server. |
|
|
|
|
Version of the server. |
Tools (io.yupiik.fusion.mcp.model.InitializeResponse.Tools) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Set when the server notifies the client the tool list changed. |
JsonSchema (io.yupiik.fusion.mcp.model.JsonSchema) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Plain-name fragment identifier inside the schema. |
|
|
object |
|
Named reusable definitions, e.g. an address. |
|
|
|
|
Reference to a definition in {@code $defs}. |
|
|
|
|
The JSON-Schema dialect, 2020-12 when absent. |
|
|
object |
|
Either a boolean or the schema of the free form properties. |
|
|
array with items of type object of type |
|
Sub-schemas that must all validate. |
|
|
array with items of type object of type |
|
Sub-schemas, at least one of which must validate. |
|
|
object |
|
A literal value the instance must equal. |
|
|
object |
|
Value used when the property is absent. |
|
|
|
|
What the described value means. |
|
|
object of type |
|
Schema applied when the conditional schema does not validate. |
|
|
array with items of type |
|
The closed set of allowed values. |
|
|
array with items of type |
|
Human oriented labels of the allowed values, same order. |
|
|
|
|
Semantic format of a string, date-time for example. |
|
|
object of type |
|
Conditional schema. |
|
|
object of type |
|
Schema of the items, for an array. |
|
|
integer |
|
Maximum length of a string. |
|
|
integer |
|
Maximum value of a number. |
|
|
integer |
|
Minimum length of a string. |
|
|
integer |
|
Minimum value of a number. |
|
|
object of type |
|
Schema the value must not validate against. |
|
|
array with items of type object of type |
|
Sub-schemas, exactly one of which must validate. |
|
|
|
|
Regular expression a string must match. |
|
|
object |
|
The properties, by name, for an object. |
|
|
array with items of type |
|
Names of the mandatory properties. |
|
|
object of type |
|
Schema applied when the conditional schema validates. |
|
|
|
|
Human oriented name of the schema. |
|
|
|
|
JSON-Schema type: object, array, string, integer, number or boolean. |
|
|
|
|
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 |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
|
|
The scope the client may share this cache entry at. |
|
|
|
|
Cursor to pass to the next call, absent when everything was returned. |
|
|
array with items of type object of type |
|
The available prompts. |
|
|
enum with potential values |
|
The type of this result, see the {@code 2026-07-28} specification. |
|
|
integer |
|
How long, in milliseconds, the client may cache this result. |
Prompt (io.yupiik.fusion.mcp.model.ListPromptsResponse.Prompt) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
array with items of type object of type |
|
The arguments the prompt takes, all strings. |
|
|
|
|
What the prompt is for. |
|
|
array with items of type object of type |
|
Optional visual identifiers for the prompt. |
|
|
|
|
Programmatic name of the prompt, what prompts/get takes. |
|
|
|
|
Human oriented name of the prompt. |
Argument (io.yupiik.fusion.mcp.model.ListPromptsResponse.Prompt.Argument) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
What the argument is for. |
|
|
|
|
Programmatic name of the argument, the key to pass to prompts/get. |
|
|
|
|
Set when the argument must be provided. |
|
|
|
|
Human oriented name of the argument. |
ListResourcesResponse (io.yupiik.fusion.mcp.model.ListResourcesResponse) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
|
|
The scope the client may share this cache entry at. |
|
|
|
|
Cursor to pass to the next call, absent when everything was returned. |
|
|
array with items of type object of type |
|
The available resources. |
|
|
enum with potential values |
|
The type of this result, see the {@code 2026-07-28} specification. |
|
|
integer |
|
How long, in milliseconds, the client may cache this result. |
ListResourceTemplatesResponse (io.yupiik.fusion.mcp.model.ListResourceTemplatesResponse) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
|
|
The scope the client may share this cache entry at. |
|
|
|
|
Cursor to pass to the next call, absent when everything was returned. |
|
|
array with items of type object of type |
|
The available parameterized resources. |
|
|
enum with potential values |
|
The type of this result, see the {@code 2026-07-28} specification. |
|
|
integer |
|
How long, in milliseconds, the client may cache this result. |
ListTasksResponse (io.yupiik.fusion.mcp.model.ListTasksResponse) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object |
|
Optional free form metadata. |
|
|
enum with potential values |
|
The type of this result, see the {@code 2026-07-28} specification. |
|
|
array with items of type object of type |
|
The live tasks. |
ListToolsResponse (io.yupiik.fusion.mcp.model.ListToolsResponse) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
|
|
The scope the client may share this cache entry at. |
|
|
|
|
Cursor to pass to the next call, absent when everything was returned. |
|
|
enum with potential values |
|
The type of this result, see the {@code 2026-07-28} specification. |
|
|
array with items of type object of type |
|
The callable tools. |
|
|
integer |
|
How long, in milliseconds, the client may cache this result. |
Tool (io.yupiik.fusion.mcp.model.ListToolsResponse.Tool) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
object of type |
|
Optional hints for the client. |
|
|
|
|
What the tool does, this is what the model reads to decide to call it. |
|
|
array with items of type object of type |
|
Optional visual identifiers for the tool. |
|
|
object of type |
|
Schema of the arguments. |
|
|
|
|
Programmatic name of the tool, what tools/call takes. |
|
|
object of type |
|
Schema of the structured result, absent when there is none. |
|
|
|
|
Human oriented name of the tool. |
MCPRequestMetadata (io.yupiik.fusion.mcp.model.MCPRequestMetadata) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
- |
|
|
object of type |
|
- |
|
|
object |
|
- |
|
|
enum with potential values |
|
- |
|
|
object |
|
- |
|
|
|
|
- |
|
|
|
|
- |
|
|
|
|
- |
MCPResult (io.yupiik.fusion.mcp.model.MCPResult) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
|
|
The scope the client may share this cache entry at. |
|
|
array with items of type object of type |
|
The tool content blocks, what a model without structured output support reads. |
|
|
array with items of type object of type |
|
The contents of a resource, a single uri can expand to several. |
|
|
|
|
What an expanded prompt is about. |
|
|
object |
|
The requests the client must run to feed this result, keyed by their method. |
|
|
|
|
Set when the tool failed, the model is expected to read the error. |
|
|
array with items of type object of type |
|
The messages a prompt expands to. |
|
|
|
|
The token the client must echo with its next invocation to resume the interaction. |
|
|
enum with potential values |
|
The type of this result, see the {@code 2026-07-28} specification. |
|
|
object |
|
The structured tool result, it must match the tool outputSchema when there is one. |
|
|
integer |
|
How long, in milliseconds, the client may cache this result. |
Metadata (io.yupiik.fusion.mcp.model.Metadata) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Reserved name attribute. |
|
|
object |
|
Every other attribute, this object being free form. |
|
|
|
|
Reserved title attribute. |
Message (io.yupiik.fusion.mcp.model.PromptResponse.Message) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object |
|
The message content, a single block or an array of blocks. |
|
|
enum with potential values |
|
Who the message comes from. |
Resource (io.yupiik.fusion.mcp.model.Resource) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
object of type |
|
Optional hints for the client. |
|
|
|
|
What the resource contains. |
|
|
array with items of type object of type |
|
Optional visual identifiers for the resource. |
|
|
|
|
Mime type of the resource, when known. |
|
|
|
|
Programmatic name of the resource. |
|
|
integer |
|
Size in bytes, when known. |
|
|
|
|
Human oriented name of the resource. |
|
|
|
|
Uri of the resource, what resources/read takes. |
ResourceContents (io.yupiik.fusion.mcp.model.ResourceContents) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
|
|
The base64 encoded content when it is binary, exclusive with text. |
|
|
|
|
Mime type of the content. |
|
|
|
|
The content when it is textual, exclusive with blob. |
|
|
|
|
Uri of the resource. |
ResourceTemplate (io.yupiik.fusion.mcp.model.ResourceTemplate) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
object of type |
|
Optional hints for the client. |
|
|
|
|
What the resources this template generates contain. |
|
|
|
|
Mime type of the generated resources, when constant. |
|
|
|
|
Programmatic name of the template. |
|
|
|
|
Human oriented name of the template. |
|
|
|
|
A RFC 6570 uri template, file:///logs/ {name}.log for example. |
ServerCapabilities (io.yupiik.fusion.mcp.model.ServerCapabilities) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object |
|
Set when the server can suggest argument values. |
|
|
object |
|
Non standard capabilities, keyed by name. |
|
|
object |
|
Optional MCP extensions the server supports, keyed by extension identifier. |
|
|
object |
|
Set when the server can send log records. |
|
|
object of type |
|
Set when the server exposes prompts. |
|
|
object of type |
|
Set when the server exposes resources. |
|
|
object of type |
|
Set when the server exposes tools. |
Prompts (io.yupiik.fusion.mcp.model.ServerCapabilities.Prompts) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Set when the server notifies the client the prompt list changed. |
Resources (io.yupiik.fusion.mcp.model.ServerCapabilities.Resources) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Set when the server notifies the client the resource list changed. |
|
|
|
|
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 |
|---|---|---|---|
|
|
|
|
Set when the server notifies the client the tool list changed. |
ServerDiscoverResponse (io.yupiik.fusion.mcp.model.ServerDiscoverResponse) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
object of type |
|
Optional free form metadata. |
|
|
|
|
The scope the client may share this cache entry at. |
|
|
object of type |
|
What this server can do. |
|
|
|
|
How the model should use this server. |
|
|
enum with potential values |
|
The type of this result, see the {@code 2026-07-28} specification. |
|
|
object of type |
|
Which server is answering. |
|
|
array with items of type |
|
The MCP protocol versions this server supports for stateless requests. |
|
|
integer |
|
How long, in milliseconds, the client may cache this result. |
SubscriptionFilter (io.yupiik.fusion.mcp.model.SubscriptionFilter) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
|
|
Set when the client wants notifications/prompts/list_changed. |
|
|
array with items of type |
|
The resource uris the client wants notifications/resources/updated for. |
|
|
|
|
Set when the client wants notifications/resources/list_changed. |
|
|
|
|
Set when the client wants notifications/tools/list_changed. |
Task (io.yupiik.fusion.mcp.model.Task) schema
| Name | Type | Nullable | Description |
|---|---|---|---|
|
|
integer |
|
When the task was created, epoch milliseconds. |
|
|
object |
|
The error, when the task failed. |
|
|
object |
|
The requests the client must answer when the task needs input. |
|
|
integer |
|
When the task last changed, epoch milliseconds. |
|
|
|
|
The identifier of the parent task, if any. |
|
|
integer |
|
How often, in milliseconds, the client should poll the task. |
|
|
object |
|
The final content, when the task completed. |
|
|
enum with potential values |
|
The current status of the task. |
|
|
|
|
A human-readable note about the current progress. |
|
|
|
|
The unique, durable identifier of the task. |
|
|
integer |
|
How long, in milliseconds, the server keeps the task alive. |