The jsonschema package is part of of the API of the mcp package, so it should not be internal. Change-Id: I9520797837329fc2cda09c2f46ec4d48d031b9d3 Reviewed-on: https://go-review.googlesource.com/c/tools/+/669996 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Robert Findley <rfindley@google.com>
290 lines
11 KiB
Go
290 lines
11 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 protocol
|
|
|
|
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 map[string]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]map[string]json.RawMessage `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 map[string]json.RawMessage `json:"sampling,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"`
|
|
}
|
|
|
|
// Describes the name and version of an MCP implementation.
|
|
type Implementation struct {
|
|
Name string `json:"name"`
|
|
Version string `json:"version"`
|
|
}
|
|
|
|
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 map[string]json.RawMessage
|
|
|
|
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 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"`
|
|
}
|
|
|
|
// 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"`
|
|
}
|
|
|
|
// 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"`
|
|
}
|
|
|
|
// 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"`
|
|
}
|
|
|
|
// 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"`
|
|
}
|
|
|
|
// The sender or recipient of messages and data in a conversation.
|
|
type Role string
|
|
|
|
// 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 map[string]json.RawMessage `json:"completions,omitempty"`
|
|
// Experimental, non-standard capabilities that the server supports.
|
|
Experimental map[string]map[string]json.RawMessage `json:"experimental,omitempty"`
|
|
// Present if the server supports sending log messages to the client.
|
|
Logging map[string]json.RawMessage `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"`
|
|
}
|
|
|
|
// 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"`
|
|
}
|
|
|
|
// 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"`
|
|
}
|