CallToolParams.Arguments is any. Clients can send whatever they want. Tool authors who create their own ToolHandler (bypassing NewTool) will receive the arguments as a map[string]any which has been validated against the input schema. Tool authors who call NewTool can choose the type that the arguments unmarshal into. There is no double-unmarshaling and no downcasting. There is no way for tool authors to avoid the unmarshal, and no way to avoid the validation unless the omit an input schema, which is probably bad for LLMs. If tool authors want this optimization, we can provide it later. Change-Id: Ieb201e56c7fb8a23bb1a93b27e946630ec9e79ad Reviewed-on: https://go-review.googlesource.com/c/tools/+/679595 TryBot-Bypass: Jonathan Amsterdam <jba@google.com> Auto-Submit: Jonathan Amsterdam <jba@google.com> Reviewed-by: Robert Findley <rfindley@google.com>
726 lines
29 KiB
Go
726 lines
29 KiB
Go
// 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 (
|
|
"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 {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
Arguments any `json:"arguments,omitempty"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func (x *CallToolParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type CallToolParamsFor[In any] struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
Arguments In `json:"arguments,omitempty"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func (x *CallToolParamsFor[In]) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
}
|
|
|
|
func (x *CallToolResult) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type CallToolResultFor[Out any] struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
}
|
|
|
|
func (x *CallToolResultFor[Out]) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type CancelledParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// 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"`
|
|
}
|
|
|
|
func (x *CancelledParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// 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"`
|
|
}
|
|
|
|
func (x *CreateMessageParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
}
|
|
|
|
func (x *CreateMessageResult) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type GetPromptParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// 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"`
|
|
}
|
|
|
|
func (x *GetPromptParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// The server's response to a prompts/get request from the client.
|
|
type GetPromptResult struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// An optional description for the prompt.
|
|
Description string `json:"description,omitempty"`
|
|
Messages []*PromptMessage `json:"messages"`
|
|
}
|
|
|
|
func (x *GetPromptResult) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type InitializeParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
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"`
|
|
}
|
|
|
|
func (x *InitializeParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// After receiving an initialize request from the client, the server sends this
|
|
// response.
|
|
type InitializeResult struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
}
|
|
|
|
func (x *InitializeResult) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type InitializedParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
}
|
|
|
|
func (x *InitializedParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type ListPromptsParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// An opaque token representing the current pagination position. If provided,
|
|
// the server should return results starting after this cursor.
|
|
Cursor string `json:"cursor,omitempty"`
|
|
}
|
|
|
|
func (x *ListPromptsParams) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListPromptsParams) cursorPtr() *string { return &x.Cursor }
|
|
|
|
// The server's response to a prompts/list request from the client.
|
|
type ListPromptsResult struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
}
|
|
|
|
func (x *ListPromptsResult) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListPromptsResult) nextCursorPtr() *string { return &x.NextCursor }
|
|
|
|
type ListResourceTemplatesParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// An opaque token representing the current pagination position. If provided,
|
|
// the server should return results starting after this cursor.
|
|
Cursor string `json:"cursor,omitempty"`
|
|
}
|
|
|
|
func (x *ListResourceTemplatesParams) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListResourceTemplatesParams) cursorPtr() *string { return &x.Cursor }
|
|
|
|
// The server's response to a resources/templates/list request from the client.
|
|
type ListResourceTemplatesResult struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
ResourceTemplates []*ResourceTemplate `json:"resourceTemplates"`
|
|
}
|
|
|
|
func (x *ListResourceTemplatesResult) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListResourceTemplatesResult) nextCursorPtr() *string { return &x.NextCursor }
|
|
|
|
type ListResourcesParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// An opaque token representing the current pagination position. If provided,
|
|
// the server should return results starting after this cursor.
|
|
Cursor string `json:"cursor,omitempty"`
|
|
}
|
|
|
|
func (x *ListResourcesParams) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListResourcesParams) cursorPtr() *string { return &x.Cursor }
|
|
|
|
// The server's response to a resources/list request from the client.
|
|
type ListResourcesResult struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
}
|
|
|
|
func (x *ListResourcesResult) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListResourcesResult) nextCursorPtr() *string { return &x.NextCursor }
|
|
|
|
type ListRootsParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
}
|
|
|
|
func (x *ListRootsParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
Roots []*Root `json:"roots"`
|
|
}
|
|
|
|
func (x *ListRootsResult) GetMeta() *Meta { return &x.Meta }
|
|
|
|
type ListToolsParams struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// An opaque token representing the current pagination position. If provided,
|
|
// the server should return results starting after this cursor.
|
|
Cursor string `json:"cursor,omitempty"`
|
|
}
|
|
|
|
func (x *ListToolsParams) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListToolsParams) cursorPtr() *string { return &x.Cursor }
|
|
|
|
// The server's response to a tools/list request from the client.
|
|
type ListToolsResult struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `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"`
|
|
}
|
|
|
|
func (x *ListToolsResult) GetMeta() *Meta { return &x.Meta }
|
|
func (x *ListToolsResult) nextCursorPtr() *string { return &x.NextCursor }
|
|
|
|
// 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 {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// 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"`
|
|
}
|
|
|
|
func (x *LoggingMessageParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
}
|
|
|
|
func (x *PingParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
}
|
|
|
|
func (x *PromptListChangedParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// 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"`
|
|
}
|
|
|
|
func (x *ReadResourceParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// The server's response to a resources/read request from the client.
|
|
type ReadResourceResult struct {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
Contents []*ResourceContents `json:"contents"`
|
|
}
|
|
|
|
func (x *ReadResourceResult) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
}
|
|
|
|
func (x *ResourceListChangedParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// A template description for resources available on the server.
|
|
type ResourceTemplate struct {
|
|
// Optional annotations for the client.
|
|
Annotations *Annotations `json:"annotations,omitempty"`
|
|
// 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 string `json:"description,omitempty"`
|
|
// 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 string `json:"mimeType,omitempty"`
|
|
// A human-readable name for the type of resource this template refers to.
|
|
//
|
|
// This can be used by clients to populate UI elements.
|
|
Name string `json:"name"`
|
|
// A URI template (according to RFC 6570) that can be used to construct resource
|
|
// URIs.
|
|
URITemplate string `json:"uriTemplate"`
|
|
}
|
|
|
|
// 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 property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
}
|
|
|
|
func (x *RootsListChangedParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 {
|
|
// This property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
// 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"`
|
|
}
|
|
|
|
func (x *SetLevelParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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 property is reserved by the protocol to allow clients and servers to
|
|
// attach additional metadata to their responses.
|
|
Meta Meta `json:"_meta,omitempty"`
|
|
}
|
|
|
|
func (x *ToolListChangedParams) GetMeta() *Meta { return &x.Meta }
|
|
|
|
// 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"
|
|
)
|