EdgeAIG's picture
download
raw
63.3 kB
/**
* Defines schemas for Model Context Protocol messages.
*
* MCP clients and servers use these schemas to describe the JSON-RPC requests,
* notifications, results, and errors that can cross the protocol boundary. This
* module focuses on message shapes: it defines the shared protocol data model,
* groups related messages for the RPC layer, and provides helpers for optional
* fields and parameter metadata. Transport and server behavior live in other
* modules.
*
* @since 4.0.0
*/
import * as Context from "../../Context.js";
import * as Effect from "../../Effect.js";
import { constFalse, constTrue } from "../../Function.js";
import * as Option from "../../Option.js";
import * as Predicate from "../../Predicate.js";
import * as Schema from "../../Schema.js";
import * as SchemaGetter from "../../SchemaGetter.js";
import * as Rpc from "../rpc/Rpc.js";
import * as RpcGroup from "../rpc/RpcGroup.js";
import * as RpcMiddleware from "../rpc/RpcMiddleware.js";
/**
* Marks a struct field as optional and supplies `defaultValue` when the field
* is absent.
*
* **Details**
*
* The default is used during decoding and as the constructor default for the
* schema field.
*
* @category schemas
* @since 4.0.0
*/
export const optionalWithDefault = (schema, defaultValue) => {
const effect = Effect.sync(defaultValue);
return Schema.optionalKey(schema).pipe(Schema.decode({
decode: SchemaGetter.withDefault(effect),
encode: SchemaGetter.passthrough()
}), Schema.withConstructorDefault(effect));
};
/**
* Creates an optional MCP struct-field schema from a required schema.
*
* **Details**
*
* The field may be absent, and explicit `undefined` values are omitted when
* encoding.
*
* @category schemas
* @since 4.0.0
*/
export const optional = schema => Schema.optionalKey(schema).pipe(Schema.decodeTo(Schema.optional(schema), {
decode: SchemaGetter.passthrough(),
encode: SchemaGetter.transformOptional(Option.flatMap(Option.fromUndefinedOr))
}));
// =============================================================================
// Common
// =============================================================================
/**
* Schema for JSON-RPC request identifiers, allowing string or number ids.
*
* @category schemas
* @since 4.0.0
*/
export const RequestId = /*#__PURE__*/Schema.Union([Schema.String, Schema.Number]);
/**
* Schema for MCP progress tokens that associate progress notifications with the
* original request.
*
* @category schemas
* @since 4.0.0
*/
export const ProgressToken = /*#__PURE__*/Schema.Union([Schema.String, Schema.Number]);
/**
* Schema for optional MCP request metadata.
*
* **Details**
*
* Request metadata may include a progress token that asks the receiver to send
* out-of-band progress notifications for the request.
*
* @category schemas
* @since 4.0.0
*/
export class RequestMeta extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
_meta: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({
/**
* If specified, the caller is requesting out-of-band progress notifications
* for this request (as represented by notifications/progress). The value of
* this parameter is an opaque token that will be attached to any subsequent
* notifications. The receiver is not obligated to provide these
* notifications.
*/
progressToken: /*#__PURE__*/optional(ProgressToken)
}))
})) {}
/**
* Schema for optional MCP result metadata.
*
* **Details**
*
* The `_meta` field is reserved for protocol, extension, or implementation
* metadata attached to a result.
*
* @category schemas
* @since 4.0.0
*/
export class ResultMeta extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* This result property is reserved by the protocol to allow clients and
* servers to attach additional metadata to their responses.
*/
_meta: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, Schema.Json))
})) {}
/**
* Schema for optional MCP notification metadata.
*
* **Details**
*
* The `_meta` field is reserved for protocol, extension, or implementation
* metadata attached to a notification.
*
* @category schemas
* @since 4.0.0
*/
export class NotificationMeta extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* This parameter name is reserved by MCP to allow clients and servers to
* attach additional metadata to their notifications.
*/
_meta: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, Schema.Json))
})) {}
/**
* Schema for opaque cursor tokens used in pagination.
*
* @category schemas
* @since 4.0.0
*/
export const Cursor = Schema.String;
/**
* Schema for MCP request metadata used by paginated requests.
*
* **Details**
*
* It includes the base request metadata fields plus an optional cursor
* indicating where the server should continue listing results.
*
* @category schemas
* @since 4.0.0
*/
export class PaginatedRequestMeta extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
...RequestMeta.fields,
/**
* An opaque token representing the current pagination position.
* If provided, the server should return results starting after this cursor.
*/
cursor: /*#__PURE__*/optional(Cursor)
})) {}
/**
* Schema for MCP result metadata returned by paginated operations.
*
* **Details**
*
* It includes the base result metadata fields plus an optional `nextCursor`,
* which indicates that more results may be available.
*
* @category schemas
* @since 4.0.0
*/
export class PaginatedResultMeta extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
...ResultMeta.fields,
/**
* An opaque token representing the pagination position after the last returned result.
* If present, there may be more results available.
*/
nextCursor: /*#__PURE__*/optional(Cursor)
})) {}
/**
* Schema for MCP conversation roles, allowing user and assistant.
*
* @category schemas
* @since 4.0.0
*/
export const Role = /*#__PURE__*/Schema.Literals(["user", "assistant"]);
/**
* Schema for optional client-facing annotations on MCP objects.
*
* **When to use**
*
* Use to describe intended audience and priority metadata for objects shown or
* processed by a client.
*
* @category schemas
* @since 4.0.0
*/
export class Annotations extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* Describes who the intended customer of this object or data is.
*
* It can include multiple entries to indicate content useful for multiple
* audiences (e.g., `["user", "assistant"]`).
*/
audience: /*#__PURE__*/optional(/*#__PURE__*/Schema.Array(Role)),
/**
* Describes how important this data is for operating the server.
*
* A value of 1 means "most important," and indicates that the data is
* effectively required, while 0 means "least important," and indicates that
* the data is entirely optional.
*/
priority: /*#__PURE__*/optional(/*#__PURE__*/Schema.Number.check(/*#__PURE__*/Schema.isBetween({
minimum: 0,
maximum: 1
})))
})) {}
/**
* Describes the name and version of an MCP implementation.
*
* @category schemas
* @since 4.0.0
*/
export class Implementation extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String),
version: Schema.String
})) {}
/**
* Describes capabilities advertised by an MCP client.
*
* **When to use**
*
* Use to describe which optional MCP features a client supports during
* initialization.
*
* **Details**
*
* Known capabilities are represented by this schema, but the capability set is
* open and clients may define additional capabilities.
*
* @category schemas
* @since 4.0.0
*/
export class ClientCapabilities extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ClientCapabilities")({
/**
* Experimental, non-standard capabilities that the client supports.
*/
experimental: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, /*#__PURE__*/Schema.Struct({}))),
/**
* Optional extensions capabilities advertised by the client.
* Keys are extension identifiers following <vendor-prefix>/<extension-name> (e.g. "io.modelcontextprotocol/ui").
*/
extensions: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(/*#__PURE__*/Schema.TemplateLiteral([Schema.String, "/", Schema.String]), Schema.Json)),
/**
* Present if the client supports listing roots.
*/
roots: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({
/**
* Whether the client supports notifications for changes to the roots list.
*/
listChanged: /*#__PURE__*/optional(Schema.Boolean)
})),
/**
* Present if the client supports sampling from an LLM.
*/
sampling: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({})),
/**
* Present if the client supports elicitation from the server.
*/
elicitation: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({}))
}) {}
/**
* Describes capabilities advertised by an MCP server.
*
* **When to use**
*
* Use to describe which optional MCP features a server supports during
* initialization.
*
* **Details**
*
* Known capabilities are represented by this schema, but the capability set is
* open and servers may define additional capabilities.
*
* @category schemas
* @since 4.0.0
*/
export class ServerCapabilities extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* Experimental, non-standard capabilities that the server supports.
*/
experimental: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, /*#__PURE__*/Schema.Struct({}))),
/**
* Optional extensions capabilities advertised by the server.
* Keys are extension identifiers following <vendor-prefix>/<extension-name> (e.g. "io.modelcontextprotocol/ui").
*/
extensions: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(/*#__PURE__*/Schema.TemplateLiteral([Schema.String, "/", Schema.String]), Schema.Json)),
/**
* Present if the server supports sending log messages to the client.
*/
logging: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({})),
/**
* Present if the server supports argument autocompletion suggestions.
*/
completions: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({})),
/**
* Present if the server offers any prompt templates.
*/
prompts: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({
/**
* Whether this server supports notifications for changes to the prompt list.
*/
listChanged: /*#__PURE__*/optional(Schema.Boolean)
})),
/**
* Present if the server offers any resources to read.
*/
resources: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({
/**
* Whether this server supports subscribing to resource updates.
*/
subscribe: /*#__PURE__*/optional(Schema.Boolean),
/**
* Whether this server supports notifications for changes to the resource list.
*/
listChanged: /*#__PURE__*/optional(Schema.Boolean)
})),
/**
* Present if the server offers any tools to call.
*/
tools: /*#__PURE__*/optional(/*#__PURE__*/Schema.Struct({
/**
* Whether this server supports notifications for changes to the tool list.
*/
listChanged: /*#__PURE__*/optional(Schema.Boolean)
}))
})) {}
// =============================================================================
// Errors
// =============================================================================
/**
* Schema for MCP and JSON-RPC error objects.
*
* **Details**
*
* It contains the numeric error `code`, a concise `message`, and optional
* sender-defined `data`.
*
* @category schemas
* @since 4.0.0
*/
export class McpErrorBase extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/McpErrorBase")({
/**
* The error type that occurred.
*/
code: Schema.Number,
/**
* A short description of the error. The message SHOULD be limited to a
* concise single sentence.
*/
message: Schema.String,
/**
* Additional information about the error. The value of this member is
* defined by the sender (e.g. detailed error information, nested errors etc.).
*/
data: /*#__PURE__*/optional(Schema.Any)
}) {}
/**
* Represents the JSON-RPC error code for requests that are not valid request objects.
*
* **When to use**
*
* Use when building an MCP/JSON-RPC error response for a syntactically parsed
* request object that fails request-shape validation.
*
* @category constants
* @since 4.0.0
*/
export const INVALID_REQUEST_ERROR_CODE = -32600;
/**
* Represents the JSON-RPC error code for requests whose method does not exist or is not
* available.
*
* **When to use**
*
* Use when building an MCP/JSON-RPC error response for a request whose
* `method` is unknown or unavailable.
*
* @category constants
* @since 4.0.0
*/
export const METHOD_NOT_FOUND_ERROR_CODE = -32601;
/**
* Represents the JSON-RPC error code for invalid method parameters.
*
* **When to use**
*
* Use when building an MCP/JSON-RPC error response for decoded request
* parameters that fail method-specific validation.
*
* @category constants
* @since 4.0.0
*/
export const INVALID_PARAMS_ERROR_CODE = -32602;
/**
* Represents the JSON-RPC error code for internal server errors.
*
* **When to use**
*
* Use when building an MCP/JSON-RPC error response for an unexpected
* server-side failure.
*
* @category constants
* @since 4.0.0
*/
export const INTERNAL_ERROR_CODE = -32603;
/**
* Represents the JSON-RPC error code for invalid JSON that could not be parsed.
*
* **When to use**
*
* Use when building an MCP/JSON-RPC error response before a request object is
* available because the JSON payload could not be parsed.
*
* @category constants
* @since 4.0.0
*/
export const PARSE_ERROR_CODE = -32700;
/**
* Represents an MCP/JSON-RPC error for invalid JSON that could not be parsed.
*
* **When to use**
*
* Use to report a JSON parse failure before a valid JSON-RPC request object is
* available.
*
* **Details**
*
* Uses the standard JSON-RPC parse error code `-32700`.
*
* @category errors
* @since 4.0.0
*/
export class ParseError extends /*#__PURE__*/Schema.ErrorClass("effect/ai/McpSchema/ParseError")({
...McpErrorBase.fields,
_tag: /*#__PURE__*/Schema.tag("ParseError"),
code: /*#__PURE__*/Schema.tag(PARSE_ERROR_CODE)
}) {}
/**
* Represents an MCP/JSON-RPC error for a request object that is not valid.
*
* **When to use**
*
* Use to report a syntactically parsed JSON-RPC request that is not a valid
* request object.
*
* **Details**
*
* Uses the standard JSON-RPC invalid request code `-32600`.
*
* @category errors
* @since 4.0.0
*/
export class InvalidRequest extends /*#__PURE__*/Schema.ErrorClass("effect/ai/McpSchema/InvalidRequest")({
...McpErrorBase.fields,
_tag: /*#__PURE__*/Schema.tag("InvalidRequest"),
code: /*#__PURE__*/Schema.tag(INVALID_REQUEST_ERROR_CODE)
}) {}
/**
* Represents an MCP/JSON-RPC error for an unavailable method.
*
* **When to use**
*
* Use to report a JSON-RPC method that does not exist or is not available.
*
* **Details**
*
* Uses the standard JSON-RPC method-not-found code `-32601`.
*
* @category errors
* @since 4.0.0
*/
export class MethodNotFound extends /*#__PURE__*/Schema.ErrorClass("effect/ai/McpSchema/MethodNotFound")({
...McpErrorBase.fields,
_tag: /*#__PURE__*/Schema.tag("MethodNotFound"),
code: /*#__PURE__*/Schema.tag(METHOD_NOT_FOUND_ERROR_CODE)
}) {}
/**
* Represents an MCP/JSON-RPC error for invalid method parameters.
*
* **When to use**
*
* Use to report a request whose method parameters do not match the method
* schema.
*
* **Details**
*
* Uses the standard JSON-RPC invalid params code `-32602`.
*
* @category errors
* @since 4.0.0
*/
export class InvalidParams extends /*#__PURE__*/Schema.ErrorClass("effect/ai/McpSchema/InvalidParams")({
...McpErrorBase.fields,
_tag: /*#__PURE__*/Schema.tag("InvalidParams"),
code: /*#__PURE__*/Schema.tag(INVALID_PARAMS_ERROR_CODE)
}) {}
/**
* Represents an MCP/JSON-RPC error for unexpected internal server failures.
*
* **When to use**
*
* Use to report an unexpected server-side failure while handling a valid
* request.
*
* **Details**
*
* Uses the standard JSON-RPC internal error code `-32603` and includes
* `InternalError.notImplemented` for unimplemented handlers.
*
* @category errors
* @since 4.0.0
*/
export class InternalError extends /*#__PURE__*/Schema.ErrorClass("effect/ai/McpSchema/InternalError")({
...McpErrorBase.fields,
_tag: /*#__PURE__*/Schema.tag("InternalError"),
code: /*#__PURE__*/Schema.tag(INTERNAL_ERROR_CODE)
}) {
static notImplemented = /*#__PURE__*/new InternalError({
message: "Not implemented"
});
}
/**
* Schema for MCP protocol errors returned in JSON-RPC failure responses,
* including standard protocol errors and custom `McpErrorBase` values.
*
* @category errors
* @since 4.0.0
*/
export const McpError = /*#__PURE__*/Schema.Union([ParseError, InvalidRequest, MethodNotFound, InvalidParams, InternalError, McpErrorBase]);
// =============================================================================
// Ping
// =============================================================================
/**
* Represents an MCP ping request used to check whether the peer is still alive.
*
* **When to use**
*
* Use to implement client or server liveness checks.
*
* **Details**
*
* The receiver should respond promptly; otherwise the sender may disconnect.
*
* @category ping
* @since 4.0.0
*/
export class Ping extends /*#__PURE__*/Rpc.make("ping", {
success: /*#__PURE__*/Schema.Struct({}),
error: McpError,
payload: /*#__PURE__*/Schema.UndefinedOr(RequestMeta)
}) {}
// =============================================================================
// Initialization
// =============================================================================
/**
* Schema for the server's response to an initialize request from the client.
*
* @category initialization
* @since 4.0.0
*/
export class InitializeResult extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
...ResultMeta.fields,
/**
* The version of the Model Context Protocol that the server wants to use.
* This may not match the version that the client requested. If the client
* cannot support this version, it MUST disconnect.
*/
protocolVersion: Schema.String,
capabilities: ServerCapabilities,
serverInfo: Implementation,
/**
* Instructions describing how to use the server and its features.
*
* This can be used by clients to improve the LLM's understanding of available
* tools, resources, etc. It can be thought of like a "hint" to the model.
* For example, this information MAY be added to the system prompt.
*/
instructions: /*#__PURE__*/optional(Schema.String)
})) {}
/**
* Sent from the client to the server when it first connects, asking it to begin
* initialization.
*
* @category initialization
* @since 4.0.0
*/
export class Initialize extends /*#__PURE__*/Rpc.make("initialize", {
success: InitializeResult,
error: McpError,
payload: {
...RequestMeta.fields,
/**
* The latest version of the Model Context Protocol that the client
* supports. The client MAY decide to support older versions as well.
*/
protocolVersion: Schema.String,
/**
* Capabilities a client may support. Known capabilities are defined here,
* in this schema, but this is not a closed set: any client can define its
* own, additional capabilities.
*/
capabilities: ClientCapabilities,
/**
* Describes the name and version of an MCP implementation.
*/
clientInfo: Implementation
}
}) {}
/**
* Sent from the client to the server after initialization has finished.
*
* @category initialization
* @since 4.0.0
*/
export class InitializedNotification extends /*#__PURE__*/Rpc.make("notifications/initialized", {
payload: /*#__PURE__*/Schema.UndefinedOr(NotificationMeta)
}) {}
// =============================================================================
// Cancellation
// =============================================================================
/**
* Sent from either peer to cancel a previously issued request in the same
* direction.
*
* **Details**
*
* The payload identifies the request to cancel and may include a
* human-readable reason.
*
* @category cancellation
* @since 4.0.0
*/
export class CancelledNotification extends /*#__PURE__*/Rpc.make("notifications/cancelled", {
payload: {
...NotificationMeta.fields,
/**
* The ID of the request to cancel.
*
* This MUST correspond to the ID of a request previously issued in the
* same direction.
*/
requestId: RequestId,
/**
* An optional string describing the reason for the cancellation. This MAY
* be logged or presented to the user.
*/
reason: /*#__PURE__*/optional(Schema.String)
}
}) {}
// =============================================================================
// Progress
// =============================================================================
/**
* Sent from either peer to report progress for a long-running request.
*
* @category progress
* @since 4.0.0
*/
export class ProgressNotification extends /*#__PURE__*/Rpc.make("notifications/progress", {
payload: {
...NotificationMeta.fields,
/**
* The progress token which was given in the initial request, used to
* associate this notification with the request that is proceeding.
*/
progressToken: ProgressToken,
/**
* The progress thus far. This should increase every time progress is made,
* even if the total is unknown.
*/
progress: /*#__PURE__*/optional(Schema.Number),
/**
* Total number of items to process (or total progress required), if known.
*/
total: /*#__PURE__*/optional(Schema.Number),
/**
* An optional message describing the current progress.
*/
message: /*#__PURE__*/optional(Schema.String)
}
}) {}
// =============================================================================
// Resources
// =============================================================================
/**
* Schema for a known resource that the server is capable of reading.
*
* @category resources
* @since 4.0.0
*/
export class Resource extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/Resource")({
/**
* The URI of this resource.
*/
uri: Schema.String,
/**
* A human-readable name for this resource.
*
* This can be used by clients to populate UI elements.
*/
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String),
/**
* A description of what this resource represents.
*
* This can be used by clients to improve the LLM's understanding of available
* resources. It can be thought of like a "hint" to the model.
*/
description: /*#__PURE__*/optional(Schema.String),
/**
* The MIME type of this resource, if known.
*/
mimeType: /*#__PURE__*/optional(Schema.String),
/**
* Optional annotations for the client.
*/
annotations: /*#__PURE__*/optional(Annotations),
/**
* The size of the raw resource content, in bytes (i.e., before base64
* encoding or any tokenization), if known.
*
* This can be used by Hosts to display file sizes and estimate context
* window usage.
*/
size: /*#__PURE__*/optional(Schema.Number),
/**
* Optional additional metadata for the client.
*
* This parameter name is reserved by MCP to allow clients and servers to
* attach additional metadata to resources.
*/
_meta: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, Schema.Json))
}) {}
/**
* Schema for a template description of resources available on the server.
*
* @category resources
* @since 4.0.0
*/
export class ResourceTemplate extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ResourceTemplate")({
/**
* A URI template (according to RFC 6570) that can be used to construct
* resource URIs.
*/
uriTemplate: Schema.String,
/**
* A human-readable name for the type of resource this template refers to.
*
* This can be used by clients to populate UI elements.
*/
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String),
/**
* A description of what this template is for.
*
* This can be used by clients to improve the LLM's understanding of available
* resources. It can be thought of like a "hint" to the model.
*/
description: /*#__PURE__*/optional(Schema.String),
/**
* The MIME type for all resources that match this template. This should only
* be included if all resources matching this template have the same type.
*/
mimeType: /*#__PURE__*/optional(Schema.String),
/**
* Optional annotations for the client.
*/
annotations: /*#__PURE__*/optional(Annotations),
/**
* Optional additional metadata for the client.
*/
_meta: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, Schema.Json))
}) {}
/**
* Schema for the contents of a specific resource or sub-resource.
*
* @category resources
* @since 4.0.0
*/
export class ResourceContents extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* The URI of this resource.
*/
uri: Schema.String,
/**
* The MIME type of this resource, if known.
*/
mimeType: /*#__PURE__*/optional(Schema.String),
/**
* Optional additional metadata for the client.
*/
_meta: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, Schema.Json))
})) {}
/**
* Schema for text resource contents represented as a string.
*
* @category resources
* @since 4.0.0
*/
export class TextResourceContents extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
...ResourceContents.fields,
/**
* The text of the item. This must only be set if the item can actually be
* represented as text (not binary data).
*/
text: Schema.String
})) {}
/**
* Schema for binary resource contents represented as a `Uint8Array`.
*
* @category resources
* @since 4.0.0
*/
export class BlobResourceContents extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
...ResourceContents.fields,
/**
* The binary data of the item decoded from a base64-encoded string.
*/
blob: Schema.Uint8Array
})) {}
/**
* Schema for the server's response to a resources/list request from the client.
*
* @category resources
* @since 4.0.0
*/
export class ListResourcesResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ListResourcesResult")({
...PaginatedResultMeta.fields,
resources: /*#__PURE__*/Schema.Array(Resource)
}) {}
/**
* Sent from the client to request a list of resources the server has.
*
* @category resources
* @since 4.0.0
*/
export class ListResources extends /*#__PURE__*/Rpc.make("resources/list", {
success: ListResourcesResult,
error: McpError,
payload: /*#__PURE__*/Schema.UndefinedOr(PaginatedRequestMeta)
}) {}
/**
* Schema for the server's response to a resources/templates/list request from
* the client.
*
* @category resources
* @since 4.0.0
*/
export class ListResourceTemplatesResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ListResourceTemplatesResult")({
...PaginatedResultMeta.fields,
resourceTemplates: /*#__PURE__*/Schema.Array(ResourceTemplate)
}) {}
/**
* Sent from the client to request a list of resource templates the server has.
*
* @category resources
* @since 4.0.0
*/
export class ListResourceTemplates extends /*#__PURE__*/Rpc.make("resources/templates/list", {
success: ListResourceTemplatesResult,
error: McpError,
payload: /*#__PURE__*/Schema.UndefinedOr(PaginatedRequestMeta)
}) {}
/**
* Schema for the server's response to a resources/read request from the client.
*
* @category resources
* @since 4.0.0
*/
export class ReadResourceResult extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
...ResultMeta.fields,
contents: /*#__PURE__*/Schema.Array(/*#__PURE__*/Schema.Union([TextResourceContents, BlobResourceContents]))
})) {}
/**
* Sent from the client to the server, to read a specific resource URI.
*
* @category resources
* @since 4.0.0
*/
export class ReadResource extends /*#__PURE__*/Rpc.make("resources/read", {
success: ReadResourceResult,
error: McpError,
payload: {
...RequestMeta.fields,
/**
* The URI of the resource to read. The URI can use any protocol; it is up
* to the server how to interpret it.
*/
uri: Schema.String
}
}) {}
/**
* Represents a notification that the server's resource list changed.
*
* **When to use**
*
* Use to notify clients that `resources/list` should be requested again.
*
* **Details**
*
* Servers may send this notification without a previous client subscription.
*
* @category resources
* @since 4.0.0
*/
export class ResourceListChangedNotification extends /*#__PURE__*/Rpc.make("notifications/resources/list_changed", {
payload: /*#__PURE__*/Schema.UndefinedOr(NotificationMeta)
}) {}
/**
* Sent from the client to request resources/updated notifications from the
* server whenever a particular resource changes.
*
* @category resources
* @since 4.0.0
*/
export class Subscribe extends /*#__PURE__*/Rpc.make("resources/subscribe", {
error: McpError,
payload: {
...RequestMeta.fields,
/**
* The URI of the resource to subscribe to. The URI can use any protocol;
* it is up to the server how to interpret it.
*/
uri: Schema.String
}
}) {}
/**
* Sent from the client to request cancellation of resources/updated
* notifications from the server. This should follow a previous
* resources/subscribe request.
*
* @category resources
* @since 4.0.0
*/
export class Unsubscribe extends /*#__PURE__*/Rpc.make("resources/unsubscribe", {
error: McpError,
payload: {
...RequestMeta.fields,
/**
* The URI of the resource to subscribe to. The URI can use any protocol;
* it is up to the server how to interpret it.
*/
uri: Schema.String
}
}) {}
/**
* Sent from the server when a subscribed resource URI has changed.
*
* **Details**
*
* The URI may identify a sub-resource of the resource that the client
* originally subscribed to.
*
* @category resources
* @since 4.0.0
*/
export class ResourceUpdatedNotification extends /*#__PURE__*/Rpc.make("notifications/resources/updated", {
payload: {
...NotificationMeta.fields,
/**
* The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.
*/
uri: Schema.String
}
}) {}
// =============================================================================
// Prompts
// =============================================================================
/**
* Describes an argument that a prompt can accept.
*
* @category schemas
* @since 4.0.0
*/
export class PromptArgument extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* The name of the argument.
*/
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String),
/**
* A human-readable description of the argument.
*/
description: /*#__PURE__*/optional(Schema.String),
/**
* Whether this argument must be provided.
*/
required: /*#__PURE__*/optional(Schema.Boolean)
})) {}
/**
* Represents a prompt or prompt template that the server offers.
*
* @category schemas
* @since 4.0.0
*/
export class Prompt extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/Prompt")({
/**
* The name of the prompt or prompt template.
*/
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String),
/**
* An optional description of what this prompt provides
*/
description: /*#__PURE__*/optional(Schema.String),
/**
* A list of arguments to use for templating the prompt.
*/
arguments: /*#__PURE__*/optional(/*#__PURE__*/Schema.Array(PromptArgument))
}) {}
/**
* Represents text content provided to or from an LLM.
*
* @category schemas
* @since 4.0.0
*/
export class TextContent extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
type: /*#__PURE__*/Schema.tag("text"),
/**
* The text content of the message.
*/
text: Schema.String,
/**
* Optional annotations for the client.
*/
annotations: /*#__PURE__*/optional(Annotations)
})) {}
/**
* Represents image content provided to or from an LLM.
*
* @category schemas
* @since 4.0.0
*/
export class ImageContent extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
type: /*#__PURE__*/Schema.tag("image"),
/**
* The image data.
*/
data: Schema.Uint8Array,
/**
* The MIME type of the image. Different providers may support different
* image types.
*/
mimeType: Schema.String,
/**
* Optional annotations for the client.
*/
annotations: /*#__PURE__*/optional(Annotations)
})) {}
/**
* Represents audio content provided to or from an LLM.
*
* @category schemas
* @since 4.0.0
*/
export class AudioContent extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
type: /*#__PURE__*/Schema.tag("audio"),
/**
* The audio data.
*/
data: Schema.Uint8Array,
/**
* The MIME type of the audio. Different providers may support different
* audio types.
*/
mimeType: Schema.String,
/**
* Optional annotations for the client.
*/
annotations: /*#__PURE__*/optional(Annotations)
})) {}
/**
* Represents resource contents embedded into a prompt or tool call result.
*
* **Details**
*
* It is up to the client how best to render embedded resources for the benefit
* of the LLM and/or the user.
*
* @category schemas
* @since 4.0.0
*/
export class EmbeddedResource extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
type: /*#__PURE__*/Schema.tag("resource"),
resource: /*#__PURE__*/Schema.Union([TextResourceContents, BlobResourceContents]),
/**
* Optional annotations for the client.
*/
annotations: /*#__PURE__*/optional(Annotations)
})) {}
/**
* Represents a readable resource included in a prompt or tool call result.
*
* **Gotchas**
*
* Resource links returned by tools are not guaranteed to appear in the results
* of `resources/list` requests.
*
* @category schemas
* @since 4.0.0
*/
export class ResourceLink extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
...Resource.fields,
type: /*#__PURE__*/Schema.tag("resource_link")
})) {}
/**
* Schema for MCP content blocks that can appear in prompt messages or tool
* results.
*
* @category schemas
* @since 4.0.0
*/
export const ContentBlock = /*#__PURE__*/Schema.Union([TextContent, ImageContent, AudioContent, EmbeddedResource, ResourceLink]);
/**
* Describes a message returned as part of a prompt.
*
* **Details**
*
* This is similar to `SamplingMessage`, but also supports the embedding of
* resources from the MCP server.
*
* @category schemas
* @since 4.0.0
*/
export class PromptMessage extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
role: Role,
content: ContentBlock
})) {}
/**
* Represents the server response to a prompts/list request from the client.
*
* @category schemas
* @since 4.0.0
*/
export class ListPromptsResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ListPromptsResult")({
...PaginatedResultMeta.fields,
prompts: /*#__PURE__*/Schema.Array(Prompt)
}) {}
/**
* Sent from the client to request a list of prompts and prompt templates the
* server has.
*
* @category protocols
* @since 4.0.0
*/
export class ListPrompts extends /*#__PURE__*/Rpc.make("prompts/list", {
success: ListPromptsResult,
error: McpError,
payload: /*#__PURE__*/Schema.UndefinedOr(PaginatedRequestMeta)
}) {}
/**
* Represents the server response to a prompts/get request from the client.
*
* @category schemas
* @since 4.0.0
*/
export class GetPromptResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/GetPromptResult")({
...ResultMeta.fields,
messages: /*#__PURE__*/Schema.Array(PromptMessage),
/**
* An optional description for the prompt.
*/
description: /*#__PURE__*/optional(Schema.String)
}) {}
/**
* Sent from the client to get a prompt provided by the server.
*
* @category protocols
* @since 4.0.0
*/
export class GetPrompt extends /*#__PURE__*/Rpc.make("prompts/get", {
success: GetPromptResult,
error: McpError,
payload: {
...RequestMeta.fields,
/**
* The name of the prompt or prompt template.
*/
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String),
/**
* Arguments to use for templating the prompt.
*/
arguments: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, Schema.String))
}
}) {}
/**
* Represents a notification that the server's prompt list changed.
*
* **When to use**
*
* Use to notify clients that `prompts/list` should be requested again.
*
* **Details**
*
* Servers may send this notification without a previous client subscription.
*
* @category protocols
* @since 4.0.0
*/
export class PromptListChangedNotification extends /*#__PURE__*/Rpc.make("notifications/prompts/list_changed", {
payload: /*#__PURE__*/Schema.UndefinedOr(NotificationMeta)
}) {}
// =============================================================================
// Tools
// =============================================================================
/**
* Schema for additional properties describing a tool to clients.
*
* **Details**
*
* NOTE: all properties in ToolAnnotations are **hints**. They are not
* guaranteed to provide a faithful description of tool behavior (including
* descriptive properties like `title`).
*
* **Gotchas**
*
* Clients should never make tool use decisions based on ToolAnnotations
* received from untrusted servers.
*
* @category tools
* @since 4.0.0
*/
export class ToolAnnotations extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* A human-readable title for the tool.
*/
title: /*#__PURE__*/optional(Schema.String),
/**
* If true, the tool does not modify its environment.
*
* Default: `false`
*/
readOnlyHint: /*#__PURE__*/optionalWithDefault(Schema.Boolean, constFalse),
/**
* If true, the tool may perform destructive updates to its environment.
* If false, the tool performs only additive updates.
*
* (This property is meaningful only when `readOnlyHint == false`)
*
* Default: `true`
*/
destructiveHint: /*#__PURE__*/optionalWithDefault(Schema.Boolean, constTrue),
/**
* If true, calling the tool repeatedly with the same arguments
* will have no additional effect on the its environment.
*
* (This property is meaningful only when `readOnlyHint == false`)
*
* Default: `false`
*/
idempotentHint: /*#__PURE__*/optionalWithDefault(Schema.Boolean, constFalse),
/**
* If true, this tool may interact with an "open world" of external
* entities. If false, the tool's domain of interaction is closed.
* For example, the world of a web search tool is open, whereas that
* of a memory tool is not.
*
* Default: `true`
*/
openWorldHint: /*#__PURE__*/optionalWithDefault(Schema.Boolean, constTrue)
})) {}
/**
* Schema for the definition of a tool the client can call.
*
* @category tools
* @since 4.0.0
*/
export class Tool extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/Tool")({
/**
* The name of the tool.
*/
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String),
/**
* A human-readable description of the tool.
*
* This can be used by clients to improve the LLM's understanding of available tools. It can be thought of like a "hint" to the model.
*/
description: /*#__PURE__*/optional(Schema.String),
/**
* A JSON Schema object defining the expected parameters for the tool.
*/
inputSchema: Schema.Any,
/**
* Optional additional tool information.
*/
annotations: /*#__PURE__*/optional(ToolAnnotations),
/**
* Optional additional metadata for the client.
*
* This parameter name is reserved by MCP to allow clients and servers to
* attach additional metadata to resources.
*/
_meta: /*#__PURE__*/optional(/*#__PURE__*/Schema.Record(Schema.String, Schema.Json))
}) {}
/**
* Schema for the server's response to a tools/list request from the client.
*
* @category tools
* @since 4.0.0
*/
export class ListToolsResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ListToolsResult")({
...PaginatedResultMeta.fields,
tools: /*#__PURE__*/Schema.Array(Tool)
}) {}
/**
* Sent from the client to request a list of tools the server has.
*
* @category tools
* @since 4.0.0
*/
export class ListTools extends /*#__PURE__*/Rpc.make("tools/list", {
success: ListToolsResult,
error: McpError,
payload: /*#__PURE__*/Schema.UndefinedOr(PaginatedRequestMeta)
}) {}
/**
* Schema for the server's response to a tool call.
*
* **Details**
*
* Any errors that originate from the tool SHOULD be reported inside the result
* object, with `isError` set to true, _not_ as an MCP protocol-level error
* response. Otherwise, the LLM would not be able to see that an error occurred
* and self-correct. However, any errors in _finding_ the tool, an error
* indicating that the server does not support tool calls, or any other
* exceptional conditions, should be reported as an MCP error response.
*
* @category tools
* @since 4.0.0
*/
export class CallToolResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/CallToolResult")({
...ResultMeta.fields,
content: /*#__PURE__*/Schema.Array(ContentBlock),
structuredContent: /*#__PURE__*/optional(Schema.Any),
/**
* Whether the tool call ended in an error.
*
* If not set, this is assumed to be false (the call was successful).
*/
isError: /*#__PURE__*/optional(Schema.Boolean)
}) {}
/**
* Represents a client request to invoke a tool provided by the server.
*
* **When to use**
*
* Use when you need to represent a client request that already knows the tool
* name and asks the server to execute it with argument values.
*
* @see {@link ListTools} for discovering available tools before calling one
* @see {@link CallToolResult} for the successful tool-call result shape
*
* @category tools
* @since 4.0.0
*/
export class CallTool extends /*#__PURE__*/Rpc.make("tools/call", {
success: CallToolResult,
error: McpError,
payload: {
...RequestMeta.fields,
name: Schema.String,
arguments: /*#__PURE__*/Schema.Record(Schema.String, Schema.Any)
}
}) {}
/**
* Represents a notification that the server's tool list changed.
*
* **When to use**
*
* Use to notify clients that `tools/list` should be requested again.
*
* **Details**
*
* Servers may send this notification without a previous client subscription.
*
* @category tools
* @since 4.0.0
*/
export class ToolListChangedNotification extends /*#__PURE__*/Rpc.make("notifications/tools/list_changed", {
payload: /*#__PURE__*/Schema.UndefinedOr(NotificationMeta)
}) {}
// =============================================================================
// Logging
// =============================================================================
/**
* Schema for log message severity levels, mapped to syslog message severities
* as specified in RFC 5424 section 6.2.1:
* https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1.
*
* @category logging
* @since 4.0.0
*/
export const LoggingLevel = /*#__PURE__*/Schema.Literals(["debug", "info", "notice", "warning", "error", "critical", "alert", "emergency"]);
/**
* Sent from the client to the server to enable or adjust logging.
*
* @category logging
* @since 4.0.0
*/
export class SetLevel extends /*#__PURE__*/Rpc.make("logging/setLevel", {
payload: {
...RequestMeta.fields,
/**
* The level of logging that the client wants to receive from the server.
* The server should send all logs at this level and higher (i.e., more
* severe) to the client as notifications/message.
*/
level: LoggingLevel
},
error: McpError
}) {}
/**
* Sent from the server to the client carrying a log message.
*
* **Details**
*
* The notification includes the severity level, optional logger name, and
* JSON-serializable log data.
*
* @category logging
* @since 4.0.0
*/
export class LoggingMessageNotification extends /*#__PURE__*/Rpc.make("notifications/message", {
payload: /*#__PURE__*/Schema.Struct({
...NotificationMeta.fields,
/**
* The severity of this log message.
*/
level: LoggingLevel,
/**
* An optional name of the logger issuing this message.
*/
logger: /*#__PURE__*/optional(Schema.String),
/**
* The data to be logged, such as a string message or an object. Any JSON
* serializable type is allowed here.
*/
data: Schema.Any
})
}) {}
// =============================================================================
// Sampling
// =============================================================================
/**
* Describes a message issued to or received from an LLM API.
*
* @category sampling
* @since 4.0.0
*/
export class SamplingMessage extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
role: Role,
content: /*#__PURE__*/Schema.Union([TextContent, ImageContent, AudioContent])
})) {}
/**
* Schema for model selection hints.
*
* **Details**
*
* Keys not declared here are currently left unspecified by the spec and are up
* to the client to interpret.
*
* @category sampling
* @since 4.0.0
*/
export class ModelHint extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
/**
* A hint for a model name.
*
* The client SHOULD treat this as a substring of a model name; for example:
* - `claude-3-5-sonnet` should match `claude-3-5-sonnet-20241022`
* - `sonnet` should match `claude-3-5-sonnet-20241022`, `claude-3-sonnet-20240229`, etc.
* - `claude` should match any Claude model
*
* The client MAY also map the string to a different provider's model name or
* a different model family, as long as it fills a similar niche; for example:
* - `gemini-1.5-flash` could match `claude-3-haiku-20240307`
*/
name: /*#__PURE__*/optional(Schema.String)
})) {}
/**
* Schema for the server's model selection preferences requested of the client
* during sampling.
*
* **Details**
*
* Because LLMs can vary along multiple dimensions, choosing the "best" model is
* rarely straightforward. Different models excel in different areas, some are
* faster but less capable, others are more capable but more expensive, and so
* on. This interface allows servers to express their priorities across multiple
* dimensions to help clients make an appropriate selection for their use case.
*
* **Gotchas**
*
* These preferences are always advisory. The client MAY ignore them. It is also
* up to the client to decide how to interpret these preferences and how to
* balance them against other considerations.
*
* @category sampling
* @since 4.0.0
*/
export class ModelPreferences extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ModelPreferences")({
/**
* Optional hints to use for model selection.
*
* If multiple hints are specified, the client MUST evaluate them in order
* (such that the first match is taken).
*
* The client SHOULD prioritize these hints over the numeric priorities, but
* MAY still use the priorities to select from ambiguous matches.
*/
hints: /*#__PURE__*/optional(/*#__PURE__*/Schema.Array(ModelHint)),
/**
* How much to prioritize cost when selecting a model. A value of 0 means cost
* is not important, while a value of 1 means cost is the most important
* factor.
*/
costPriority: /*#__PURE__*/optional(/*#__PURE__*/Schema.Number.check(/*#__PURE__*/Schema.isBetween({
minimum: 0,
maximum: 1
}))),
/**
* How much to prioritize sampling speed (latency) when selecting a model. A
* value of 0 means speed is not important, while a value of 1 means speed is
* the most important factor.
*/
speedPriority: /*#__PURE__*/optional(/*#__PURE__*/Schema.Number.check(/*#__PURE__*/Schema.isBetween({
minimum: 0,
maximum: 1
}))),
/**
* How much to prioritize intelligence and capabilities when selecting a
* model. A value of 0 means intelligence is not important, while a value of 1
* means intelligence is the most important factor.
*/
intelligencePriority: /*#__PURE__*/optional(/*#__PURE__*/Schema.Number.check(/*#__PURE__*/Schema.isBetween({
minimum: 0,
maximum: 1
})))
}) {}
/**
* Represents a client response to an MCP sampling request.
*
* **When to use**
*
* Use to return the message produced by client-side model sampling.
*
* **Details**
*
* The client should let the user inspect the sampled message before returning
* it to the server.
*
* @category sampling
* @since 4.0.0
*/
export class CreateMessageResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/CreateMessageResult")({
/**
* The name of the model that generated the message.
*/
model: Schema.String,
/**
* The reason why sampling stopped, if known.
*/
stopReason: /*#__PURE__*/optional(Schema.String)
}) {}
/**
* Represents a server request for the client to sample an LLM.
*
* **When to use**
*
* Use when you need to request model sampling from an MCP client on behalf of a
* server.
*
* **Details**
*
* The client chooses the model and should ask the user to approve the sampling
* request before it begins.
*
* @category sampling
* @since 4.0.0
*/
export class CreateMessage extends /*#__PURE__*/Rpc.make("sampling/createMessage", {
success: CreateMessageResult,
error: McpError,
payload: {
messages: /*#__PURE__*/Schema.Array(SamplingMessage),
/**
* The server's preferences for which model to select. The client MAY ignore
* these preferences.
*/
modelPreferences: /*#__PURE__*/optional(ModelPreferences),
/**
* An optional system prompt the server wants to use for sampling. The
* client MAY modify or omit this prompt.
*/
systemPrompt: /*#__PURE__*/optional(Schema.String),
/**
* A request to include context from one or more MCP servers (including the
* caller), to be attached to the prompt. The client MAY ignore this request.
*/
includeContext: /*#__PURE__*/optional(/*#__PURE__*/Schema.Literals(["none", "thisServer", "allServers"])),
temperature: /*#__PURE__*/optional(Schema.Number),
/**
* The maximum number of tokens to sample, as requested by the server. The
* client MAY choose to sample fewer tokens than requested.
*/
maxTokens: Schema.Number,
stopSequences: /*#__PURE__*/optional(/*#__PURE__*/Schema.Array(Schema.String)),
/**
* Optional metadata to pass through to the LLM provider. The format of
* this metadata is provider-specific.
*/
metadata: Schema.Any
}
}) {}
// =============================================================================
// Autocomplete
// =============================================================================
/**
* Schema for a reference to a resource or resource template definition.
*
* @category autocomplete
* @since 4.0.0
*/
export class ResourceReference extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
type: /*#__PURE__*/Schema.tag("ref/resource"),
/**
* The URI or URI template of the resource.
*/
uri: Schema.String
})) {}
/**
* Schema for a prompt reference used in autocomplete requests.
*
* @category autocomplete
* @since 4.0.0
*/
export class PromptReference extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
type: /*#__PURE__*/Schema.tag("ref/prompt"),
/**
* The name of the prompt or prompt template
*/
name: Schema.String,
title: /*#__PURE__*/optional(Schema.String)
})) {}
/**
* Schema for the server's response to a completion/complete request.
*
* @category autocomplete
* @since 4.0.0
*/
export class CompleteResult extends /*#__PURE__*/Schema.Opaque()(/*#__PURE__*/Schema.Struct({
completion: /*#__PURE__*/Schema.Struct({
/**
* An array of completion values. Must not exceed 100 items.
*/
values: /*#__PURE__*/Schema.Array(Schema.String),
/**
* The total number of completion options available. This can exceed the
* number of values actually sent in the response.
*/
total: /*#__PURE__*/optional(Schema.Number),
/**
* Indicates whether there are additional completion options beyond those
* provided in the current response, even if the exact total is unknown.
*/
hasMore: /*#__PURE__*/optional(Schema.Boolean)
})
})) {
/**
* Empty completion result used when a completion request has no values.
*
* @since 4.0.0
*/
static empty = /*#__PURE__*/CompleteResult.make({
completion: {
values: [],
total: 0,
hasMore: false
}
});
}
/**
* Sent from the client to the server to ask for completion options.
*
* @category autocomplete
* @since 4.0.0
*/
export class Complete extends /*#__PURE__*/Rpc.make("completion/complete", {
success: CompleteResult,
error: McpError,
payload: /*#__PURE__*/Schema.Struct({
ref: /*#__PURE__*/Schema.Union([PromptReference, ResourceReference]),
/**
* The argument's information
*/
argument: /*#__PURE__*/Schema.Struct({
/**
* The name of the argument
*/
name: Schema.String,
/**
* The value of the argument to use for completion matching.
*/
value: Schema.String
}),
/**
* Additional, optional context for completions
*/
context: /*#__PURE__*/optionalWithDefault(/*#__PURE__*/Schema.Struct({
/**
* Previously-resolved variables in a URI template or prompt.
*/
arguments: /*#__PURE__*/optionalWithDefault(/*#__PURE__*/Schema.Record(Schema.String, Schema.String), () => ({}))
}), () => ({
arguments: {}
}))
})
}) {}
// =============================================================================
// Roots
// =============================================================================
/**
* Represents a root directory or file that the server can operate on.
*
* @category roots
* @since 4.0.0
*/
export class Root extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/Root")({
/**
* The URI identifying the root. This *must* start with file:// for now.
* This restriction may be relaxed in future versions of the protocol to allow
* other URI schemes.
*/
uri: Schema.String,
/**
* An optional name for the root. This can be used to provide a human-readable
* identifier for the root, which may be useful for display purposes or for
* referencing the root in other parts of the application.
*/
name: /*#__PURE__*/optional(Schema.String)
}) {}
/**
* Represents a client response containing the roots available to the server.
*
* **When to use**
*
* Use to return the directories or files that an MCP server may operate on.
*
* @category roots
* @since 4.0.0
*/
export class ListRootsResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ListRootsResult")({
roots: /*#__PURE__*/Schema.Array(Root)
}) {}
/**
* Sent from the server to request a list of root URIs from the client. Roots
* allow servers to ask for specific directories or files to operate on. A
* common example for roots is providing a set of repositories or directories a
* server should operate on.
*
* **Details**
*
* This request is typically used when the server needs to understand the file
* system structure or access specific locations that the client has permission
* to read from.
*
* @category roots
* @since 4.0.0
*/
export class ListRoots extends /*#__PURE__*/Rpc.make("roots/list", {
success: ListRootsResult,
error: McpError,
payload: /*#__PURE__*/Schema.UndefinedOr(RequestMeta)
}) {}
/**
* Represents a notification that the client's root list changed.
*
* **When to use**
*
* Use to tell the server that it should request an updated roots list.
*
* **Details**
*
* Send this when the client adds, removes, or modifies a root.
*
* @category roots
* @since 4.0.0
*/
export class RootsListChangedNotification extends /*#__PURE__*/Rpc.make("notifications/roots/list_changed", {
payload: /*#__PURE__*/Schema.UndefinedOr(NotificationMeta)
}) {}
// =============================================================================
// Elicitation
// =============================================================================
/**
* Schema for an accepted client response to an elicitation request.
*
* @category elicitation
* @since 4.0.0
*/
export class ElicitAcceptResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ElicitAcceptResult")({
...ResultMeta.fields,
/**
* The user action in response to the elicitation.
* - "accept": User submitted the form/confirmed the action
* - "decline": User explicitly declined the action
* - "cancel": User dismissed without making an explicit choice
*/
action: /*#__PURE__*/Schema.Literal("accept"),
/**
* The submitted form data, only present when action is "accept".
* Contains values matching the requested schema.
*/
content: Schema.Any
}) {}
/**
* Schema for a declined or canceled client response to an elicitation request.
*
* @category elicitation
* @since 4.0.0
*/
export class ElicitDeclineResult extends /*#__PURE__*/Schema.Class("@effect/ai/McpSchema/ElicitDeclineResult")({
...ResultMeta.fields,
/**
* The user action in response to the elicitation.
* - "accept": User submitted the form/confirmed the action
* - "decline": User explicitly declined the action
* - "cancel": User dismissed without making an explicit choice
*/
action: /*#__PURE__*/Schema.Literals(["cancel", "decline"])
}) {}
/**
* Schema for every client response to an elicitation request.
*
* @category elicitation
* @since 4.0.0
*/
export const ElicitResult = /*#__PURE__*/Schema.Union([ElicitAcceptResult, ElicitDeclineResult]);
/**
* Sent from the server asking the client to collect structured input from the
* user.
*
* **Details**
*
* The client responds with accepted content, an explicit decline, or a
* cancellation.
*
* @category elicitation
* @since 4.0.0
*/
export class Elicit extends /*#__PURE__*/Rpc.make("elicitation/create", {
success: ElicitResult,
error: McpError,
payload: {
/**
* A message to display to the user, explaining what they are being
* elicited for.
*/
message: Schema.String,
/**
* A restricted subset of JSON Schema.
* Only top-level properties are allowed, without nesting.
*/
requestedSchema: Schema.Any
}
}) {}
/**
* Error raised when an MCP elicitation request is declined or fails before
* accepted content is returned.
*
* **Details**
*
* The error stores the original elicitation request and, when available, the
* underlying cause.
*
* @category elicitation
* @since 4.0.0
*/
export class ElicitationDeclined extends /*#__PURE__*/Schema.ErrorClass("@effect/ai/McpSchema/ElicitationDeclined")({
_tag: /*#__PURE__*/Schema.tag("ElicitationDeclined"),
request: Elicit.payloadSchema,
cause: /*#__PURE__*/optional(/*#__PURE__*/Schema.Defect())
}) {}
// =============================================================================
// McpServerClient
// =============================================================================
/**
* Service available while handling an MCP client request.
*
* **Details**
*
* It exposes the current client id, the client's initialize payload, and a
* scoped RPC client for server-initiated requests back to that client.
*
* @category client
* @since 4.0.0
*/
export class McpServerClient extends /*#__PURE__*/Context.Service()("effect/ai/McpSchema/McpServerClient") {}
/**
* RPC middleware that provides `McpServerClient` to handlers for initialized
* MCP clients.
*
* @category middleware
* @since 4.0.0
*/
export class McpServerClientMiddleware extends /*#__PURE__*/RpcMiddleware.Service()("effect/ai/McpSchema/McpServerClientMiddleware") {}
/**
* RPC group for requests that MCP clients send to the server.
*
* **Details**
*
* The group includes initialization, resource, prompt, tool, logging,
* completion, and ping requests, and installs `McpServerClientMiddleware` for
* handlers.
*
* @category protocols
* @since 4.0.0
*/
export class ClientRequestRpcs extends /*#__PURE__*/RpcGroup.make(Ping, Initialize, Complete, SetLevel, GetPrompt, ListPrompts, ListResources, ListResourceTemplates, ReadResource, Subscribe, Unsubscribe, CallTool, ListTools).middleware(McpServerClientMiddleware) {}
/**
* RPC group for notifications that MCP clients send to the server, such as
* cancellation, progress, initialization completion, and roots list changes.
*
* @category protocols
* @since 4.0.0
*/
export class ClientNotificationRpcs extends /*#__PURE__*/RpcGroup.make(CancelledNotification, ProgressNotification, InitializedNotification, RootsListChangedNotification) {}
/**
* RPC group combining all client-to-server MCP requests and notifications.
*
* @category protocols
* @since 4.0.0
*/
export class ClientRpcs extends /*#__PURE__*/ClientRequestRpcs.merge(ClientNotificationRpcs) {}
/**
* RPC group for requests that an MCP server can send to a client, including
* ping, sampling, roots listing, and elicitation.
*
* @category protocols
* @since 4.0.0
*/
export class ServerRequestRpcs extends /*#__PURE__*/RpcGroup.make(Ping, CreateMessage, ListRoots, Elicit) {}
/**
* RPC group for notifications that an MCP server can send to a client,
* including cancellation, progress, logging, and list or resource update
* notifications.
*
* @category protocols
* @since 4.0.0
*/
export class ServerNotificationRpcs extends /*#__PURE__*/RpcGroup.make(CancelledNotification, ProgressNotification, LoggingMessageNotification, ResourceUpdatedNotification, ResourceListChangedNotification, ToolListChangedNotification, PromptListChangedNotification) {}
const ParamSchemaTypeId = "~effect/ai/McpSchema/ParamSchema";
/**
* Returns `true` when a schema was created with `param` and therefore carries
* a resource URI template parameter name.
*
* @category parameters
* @since 4.0.0
*/
export function isParam(schema) {
return Predicate.hasProperty(schema, ParamSchemaTypeId);
}
/**
* Creates a parameter for a resource URI template.
*
* @category parameters
* @since 4.0.0
*/
export function param(name, schema) {
return Schema.make(schema.ast, {
[ParamSchemaTypeId]: ParamSchemaTypeId,
name,
schema
});
}
/**
* Annotation to conditionally enable or disable tools based on client
* information.
*
* @category annotations
* @since 4.0.0
*/
export class EnabledWhen extends /*#__PURE__*/Context.Service()("effect/unstable/ai/McpSchema/EnabledWhen") {}
//# sourceMappingURL=McpSchema.js.map

Xet Storage Details

Size:
63.3 kB
·
Xet hash:
811327597005166832d21132addf084277ea81a096542dd93f35eb37ceacb1e2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.