ExMCP.Types.V20250618 (ex_mcp v0.10.0)
View SourceType definitions for MCP protocol version 2025-06-18.
This module contains type definitions specific to the 2025-06-18 version of the Model Context Protocol specification.
Key changes from 2025-03-26:
- Removed JSON-RPC batching support
- Added structured tool output (structuredOutput field)
- OAuth 2.1 Resource Server classification
- Elicitation support (now stable)
- Resource links in tool results
- MCP-Protocol-Version header requirement for HTTP
- _meta fields for extensibility
- context field in completion requests
- title fields for human-friendly display names
Summary
Types
Enhanced tool result with structured output and resource links.
Client capabilities for 2025-06-18. Elicitation is now a stable feature.
Completion request with context field.
Elicitation request (stable feature).
Elicitation result.
Meta field for extensibility. Can be added to most protocol objects.
Primitive schema for elicitation fields.
Prompt with title field.
OAuth 2.1 protected resource metadata. Server metadata for OAuth 2.1 Resource Server classification.
Resource with title field.
Resource link in tool results.
Server capabilities for 2025-06-18. Note: No batch support in this version.
Tool definition with output schema support and title field.
Types
@type call_tool_result() :: %{ optional(:content) => [ExMCP.Types.content()], optional(:structuredOutput) => any(), optional(:resourceLinks) => [resource_link()], optional(:isError) => boolean(), optional(:_meta) => meta() }
Enhanced tool result with structured output and resource links.
@type client_capabilities() :: %{ optional(:experimental) => %{required(String.t()) => any()}, optional(:sampling) => %{required(String.t()) => any()}, optional(:roots) => %{optional(:listChanged) => boolean()}, optional(:elicitation) => %{}, optional(:_meta) => meta() }
Client capabilities for 2025-06-18. Elicitation is now a stable feature.
@type completion_request() :: %{ :ref => String.t(), :argument => %{name: String.t(), value: String.t()}, optional(:context) => %{required(String.t()) => any()}, optional(:_meta) => meta() }
Completion request with context field.
@type cursor() :: ExMCP.Types.cursor()
@type elicit_request() :: %{ :message => String.t(), :requestedSchema => %{ :type => String.t(), :properties => %{required(String.t()) => primitive_schema()}, optional(:required) => [String.t()] }, optional(:_meta) => meta() }
Elicitation request (stable feature).
@type elicit_result() :: %{ :action => String.t(), optional(:content) => %{required(String.t()) => any()}, optional(:_meta) => meta() }
Elicitation result.
@type json_schema() :: map()
@type json_value() :: any()
@type log_level() :: ExMCP.Types.log_level()
Meta field for extensibility. Can be added to most protocol objects.
@type primitive_schema() :: %{ :type => String.t(), optional(:title) => String.t(), optional(:description) => String.t(), optional(:enum) => [String.t()], optional(:enumNames) => [String.t()], optional(:default) => any(), optional(:minLength) => integer(), optional(:maxLength) => integer(), optional(:minimum) => number(), optional(:maximum) => number(), optional(:format) => String.t() }
Primitive schema for elicitation fields.
@type progress_token() :: ExMCP.Types.progress_token()
@type prompt() :: %{ :name => String.t(), optional(:title) => String.t(), optional(:description) => String.t(), optional(:arguments) => [ExMCP.Types.prompt_argument()], optional(:annotations) => ExMCP.Types.annotations(), optional(:_meta) => meta() }
Prompt with title field.
@type protected_resource_metadata() :: %{ :authorization_server => String.t(), :resource => String.t(), optional(:scopes) => [String.t()], optional(:_meta) => meta() }
OAuth 2.1 protected resource metadata. Server metadata for OAuth 2.1 Resource Server classification.
@type request_id() :: ExMCP.Types.request_id()
@type resource() :: %{ :uri => String.t(), optional(:title) => String.t(), optional(:name) => String.t(), optional(:description) => String.t(), optional(:mimeType) => String.t(), optional(:annotations) => ExMCP.Types.annotations(), optional(:_meta) => meta() }
Resource with title field.
@type resource_link() :: %{ :uri => String.t(), optional(:title) => String.t(), optional(:mimeType) => String.t(), optional(:_meta) => meta() }
Resource link in tool results.
@type server_capabilities() :: %{ optional(:experimental) => %{required(String.t()) => any()}, optional(:prompts) => %{optional(:listChanged) => boolean()}, optional(:resources) => %{ optional(:subscribe) => boolean(), optional(:listChanged) => boolean() }, optional(:tools) => %{optional(:listChanged) => boolean()}, optional(:logging) => %{optional(:setLevel) => boolean()}, optional(:completions) => %{}, optional(:_meta) => meta() }
Server capabilities for 2025-06-18. Note: No batch support in this version.
@type tool() :: %{ :name => String.t(), optional(:title) => String.t(), optional(:description) => String.t(), :inputSchema => json_schema(), optional(:outputSchema) => json_schema(), optional(:annotations) => tool_annotations(), optional(:_meta) => meta() }
Tool definition with output schema support and title field.