// Copyright 2025 The Go MCP SDK Authors. All rights reserved. // Use of this source code is governed by an MIT-style // license that can be found in the LICENSE file. // Code generated by generate.go. DO NOT EDIT. package mcp import ( "encoding/json" "github.com/modelcontextprotocol/go-sdk/jsonschema" ) // Optional annotations for the client. The client can use annotations to inform // how objects are used or displayed type Annotations 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 []Role `json:"audience,omitempty"` // 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 float64 `json:"priority,omitempty"` } type CallToolParams struct { Arguments json.RawMessage `json:"arguments,omitempty"` Name string `json:"name"` } // The server's response to a tool call. // // 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. type CallToolResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` Content []*Content `json:"content"` // Whether the tool call ended in an error. // // If not set, this is assumed to be false (the call was successful). IsError bool `json:"isError,omitempty"` } type CancelledParams struct { // An optional string describing the reason for the cancellation. This MAY be // logged or presented to the user. Reason string `json:"reason,omitempty"` // The ID of the request to cancel. // // This MUST correspond to the ID of a request previously issued in the same // direction. RequestID any `json:"requestId"` } // 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. type ClientCapabilities struct { // Experimental, non-standard capabilities that the client supports. Experimental map[string]struct { } `json:"experimental,omitempty"` // Present if the client supports listing roots. Roots struct { // Whether the client supports notifications for changes to the roots list. ListChanged bool `json:"listChanged,omitempty"` } `json:"roots,omitempty"` // Present if the client supports sampling from an LLM. Sampling *SamplingCapabilities `json:"sampling,omitempty"` } type CreateMessageParams struct { // 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 string `json:"includeContext,omitempty"` // The maximum number of tokens to sample, as requested by the server. The // client MAY choose to sample fewer tokens than requested. MaxTokens int64 `json:"maxTokens"` Messages []*SamplingMessage `json:"messages"` // Optional metadata to pass through to the LLM provider. The format of this // metadata is provider-specific. Metadata struct { } `json:"metadata,omitempty"` // The server's preferences for which model to select. The client MAY ignore // these preferences. ModelPreferences *ModelPreferences `json:"modelPreferences,omitempty"` StopSequences []string `json:"stopSequences,omitempty"` // An optional system prompt the server wants to use for sampling. The client // MAY modify or omit this prompt. SystemPrompt string `json:"systemPrompt,omitempty"` Temperature float64 `json:"temperature,omitempty"` } // The client's response to a sampling/create_message request from the server. // The client should inform the user before returning the sampled message, to // allow them to inspect the response (human in the loop) and decide whether to // allow the server to see it. type CreateMessageResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` Content *Content `json:"content"` // The name of the model that generated the message. Model string `json:"model"` Role Role `json:"role"` // The reason why sampling stopped, if known. StopReason string `json:"stopReason,omitempty"` } type GetPromptParams struct { // Arguments to use for templating the prompt. Arguments map[string]string `json:"arguments,omitempty"` // The name of the prompt or prompt template. Name string `json:"name"` } // The server's response to a prompts/get request from the client. type GetPromptResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` // An optional description for the prompt. Description string `json:"description,omitempty"` Messages []*PromptMessage `json:"messages"` } type InitializeParams struct { Capabilities *ClientCapabilities `json:"capabilities"` ClientInfo *implementation `json:"clientInfo"` // The latest version of the Model Context Protocol that the client supports. // The client MAY decide to support older versions as well. ProtocolVersion string `json:"protocolVersion"` } // After receiving an initialize request from the client, the server sends this // response. type InitializeResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` Capabilities *serverCapabilities `json:"capabilities"` // 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 string `json:"instructions,omitempty"` // 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 string `json:"protocolVersion"` ServerInfo *implementation `json:"serverInfo"` } type InitializedParams struct { // This parameter name is reserved by MCP to allow clients and servers to attach // additional metadata to their notifications. Meta map[string]json.RawMessage `json:"_meta,omitempty"` } type ListPromptsParams struct { // An opaque token representing the current pagination position. If provided, // the server should return results starting after this cursor. Cursor string `json:"cursor,omitempty"` } // The server's response to a prompts/list request from the client. type ListPromptsResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` // An opaque token representing the pagination position after the last returned // result. If present, there may be more results available. NextCursor string `json:"nextCursor,omitempty"` Prompts []*Prompt `json:"prompts"` } type ListResourcesParams struct { // An opaque token representing the current pagination position. If provided, // the server should return results starting after this cursor. Cursor string `json:"cursor,omitempty"` } // The server's response to a resources/list request from the client. type ListResourcesResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` // An opaque token representing the pagination position after the last returned // result. If present, there may be more results available. NextCursor string `json:"nextCursor,omitempty"` Resources []*Resource `json:"resources"` } type ListRootsParams struct { Meta 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 any `json:"progressToken,omitempty"` } `json:"_meta,omitempty"` } // The client's response to a roots/list request from the server. This result // contains an array of Root objects, each representing a root directory or file // that the server can operate on. type ListRootsResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` Roots []*Root `json:"roots"` } type ListToolsParams struct { // An opaque token representing the current pagination position. If provided, // the server should return results starting after this cursor. Cursor string `json:"cursor,omitempty"` } // The server's response to a tools/list request from the client. type ListToolsResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` // An opaque token representing the pagination position after the last returned // result. If present, there may be more results available. NextCursor string `json:"nextCursor,omitempty"` Tools []*Tool `json:"tools"` } // The severity of a log message. // // These map to syslog message severities, as specified in RFC-5424: // https://datatracker.ietf.org/doc/html/rfc5424#section-6.2.1 type LoggingLevel string type LoggingMessageParams struct { // The data to be logged, such as a string message or an object. Any JSON // serializable type is allowed here. Data any `json:"data"` // The severity of this log message. Level LoggingLevel `json:"level"` // An optional name of the logger issuing this message. Logger string `json:"logger,omitempty"` } // Hints to use for model selection. // // Keys not declared here are currently left unspecified by the spec and are up // to the client to interpret. type ModelHint 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 string `json:"name,omitempty"` } // The server's preferences for model selection, requested of the client during // sampling. // // 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. // // 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. type ModelPreferences struct { // 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 float64 `json:"costPriority,omitempty"` // 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 []*ModelHint `json:"hints,omitempty"` // 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 float64 `json:"intelligencePriority,omitempty"` // 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 float64 `json:"speedPriority,omitempty"` } type PingParams struct { Meta 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 any `json:"progressToken,omitempty"` } `json:"_meta,omitempty"` } // A prompt or prompt template that the server offers. type Prompt struct { // A list of arguments to use for templating the prompt. Arguments []*PromptArgument `json:"arguments,omitempty"` // An optional description of what this prompt provides Description string `json:"description,omitempty"` // The name of the prompt or prompt template. Name string `json:"name"` } // Describes an argument that a prompt can accept. type PromptArgument struct { // A human-readable description of the argument. Description string `json:"description,omitempty"` // The name of the argument. Name string `json:"name"` // Whether this argument must be provided. Required bool `json:"required,omitempty"` } type PromptListChangedParams struct { // This parameter name is reserved by MCP to allow clients and servers to attach // additional metadata to their notifications. Meta map[string]json.RawMessage `json:"_meta,omitempty"` } // Describes a message returned as part of a prompt. // // This is similar to `SamplingMessage`, but also supports the embedding of // resources from the MCP server. type PromptMessage struct { Content *Content `json:"content"` Role Role `json:"role"` } type ReadResourceParams struct { // The URI of the resource to read. The URI can use any protocol; it is up to // the server how to interpret it. URI string `json:"uri"` } // The server's response to a resources/read request from the client. type ReadResourceResult struct { // This result property is reserved by the protocol to allow clients and servers // to attach additional metadata to their responses. Meta map[string]json.RawMessage `json:"_meta,omitempty"` Contents *ResourceContents `json:"contents"` } // A known resource that the server is capable of reading. type Resource struct { // Optional annotations for the client. Annotations *Annotations `json:"annotations,omitempty"` // 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 string `json:"description,omitempty"` // The MIME type of this resource, if known. MIMEType string `json:"mimeType,omitempty"` // A human-readable name for this resource. // // This can be used by clients to populate UI elements. Name string `json:"name"` // 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 int64 `json:"size,omitempty"` // The URI of this resource. URI string `json:"uri"` } type ResourceListChangedParams struct { // This parameter name is reserved by MCP to allow clients and servers to attach // additional metadata to their notifications. Meta map[string]json.RawMessage `json:"_meta,omitempty"` } // The sender or recipient of messages and data in a conversation. type Role string // Represents a root directory or file that the server can operate on. type Root struct { // 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 string `json:"name,omitempty"` // 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 string `json:"uri"` } type RootsListChangedParams struct { // This parameter name is reserved by MCP to allow clients and servers to attach // additional metadata to their notifications. Meta map[string]json.RawMessage `json:"_meta,omitempty"` } // Present if the client supports sampling from an LLM. type SamplingCapabilities struct { } // Describes a message issued to or received from an LLM API. type SamplingMessage struct { Content *Content `json:"content"` Role Role `json:"role"` } type SetLevelParams struct { // 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 `json:"level"` } // Definition for a tool the client can call. type Tool struct { // Optional additional tool information. Annotations *ToolAnnotations `json:"annotations,omitempty"` // 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 string `json:"description,omitempty"` // A JSON Schema object defining the expected parameters for the tool. InputSchema *jsonschema.Schema `json:"inputSchema"` // The name of the tool. Name string `json:"name"` } // Additional properties describing a Tool to clients. // // NOTE: all properties in ToolAnnotations are **hints**. They are not // guaranteed to provide a faithful description of tool behavior (including // descriptive properties like `title`). // // Clients should never make tool use decisions based on ToolAnnotations // received from untrusted servers. type ToolAnnotations struct { // 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 bool `json:"destructiveHint,omitempty"` // 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 bool `json:"idempotentHint,omitempty"` // 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 bool `json:"openWorldHint,omitempty"` // If true, the tool does not modify its environment. // // Default: false ReadOnlyHint bool `json:"readOnlyHint,omitempty"` // A human-readable title for the tool. Title string `json:"title,omitempty"` } type ToolListChangedParams struct { // This parameter name is reserved by MCP to allow clients and servers to attach // additional metadata to their notifications. Meta map[string]json.RawMessage `json:"_meta,omitempty"` } // Describes the name and version of an MCP implementation. type implementation struct { Name string `json:"name"` Version string `json:"version"` } // Present if the server supports sending log messages to the client. type loggingCapabilities struct { } // Present if the server offers any prompt templates. type promptCapabilities struct { // Whether this server supports notifications for changes to the prompt list. ListChanged bool `json:"listChanged,omitempty"` } // Present if the server offers any resources to read. type resourceCapabilities struct { // Whether this server supports notifications for changes to the resource list. ListChanged bool `json:"listChanged,omitempty"` // Whether this server supports subscribing to resource updates. Subscribe bool `json:"subscribe,omitempty"` } // Capabilities that a server may support. Known capabilities are defined here, // in this schema, but this is not a closed set: any server can define its own, // additional capabilities. type serverCapabilities struct { // Present if the server supports argument autocompletion suggestions. Completions struct { } `json:"completions,omitempty"` // Experimental, non-standard capabilities that the server supports. Experimental map[string]struct { } `json:"experimental,omitempty"` // Present if the server supports sending log messages to the client. Logging *loggingCapabilities `json:"logging,omitempty"` // Present if the server offers any prompt templates. Prompts *promptCapabilities `json:"prompts,omitempty"` // Present if the server offers any resources to read. Resources *resourceCapabilities `json:"resources,omitempty"` // Present if the server offers any tools to call. Tools *toolCapabilities `json:"tools,omitempty"` } // Present if the server offers any tools to call. type toolCapabilities struct { // Whether this server supports notifications for changes to the tool list. ListChanged bool `json:"listChanged,omitempty"` } const ( methodCallTool = "tools/call" notificationCancelled = "notifications/cancelled" methodComplete = "completion/complete" methodCreateMessage = "sampling/createMessage" methodGetPrompt = "prompts/get" methodInitialize = "initialize" notificationInitialized = "notifications/initialized" methodListPrompts = "prompts/list" methodListResourceTemplates = "resources/templates/list" methodListResources = "resources/list" methodListRoots = "roots/list" methodListTools = "tools/list" notificationLoggingMessage = "notifications/message" methodPing = "ping" notificationProgress = "notifications/progress" notificationPromptListChanged = "notifications/prompts/list_changed" methodReadResource = "resources/read" notificationResourceListChanged = "notifications/resources/list_changed" notificationResourceUpdated = "notifications/resources/updated" notificationRootsListChanged = "notifications/roots/list_changed" methodSetLevel = "logging/setLevel" methodSubscribe = "resources/subscribe" notificationToolListChanged = "notifications/tools/list_changed" methodUnsubscribe = "resources/unsubscribe" )