Documentation
¶
Overview ¶
Package mcp defines the core types and interfaces for the Model Control Protocol (MCP). MCP is a protocol for communication between LLM-powered applications and their supporting services.
Index ¶
- Constants
- func ExtractMap(data map[string]any, key string) map[string]any
- func ExtractString(data map[string]any, key string) string
- type Annotated
- type ArgumentOption
- type BlobResourceContents
- type CallToolRequest
- type CallToolResult
- func FormatNumberResult(value float64) *CallToolResult
- func NewToolResultError(errText string) *CallToolResult
- func NewToolResultImage(text, imageData, mimeType string) *CallToolResult
- func NewToolResultResource(text string, resource ResourceContents) *CallToolResult
- func NewToolResultText(text string) *CallToolResult
- func ParseCallToolResult(rawMessage *json.RawMessage) (*CallToolResult, error)
- type CancelledNotification
- type ClientCapabilities
- type ClientNotification
- type ClientRequest
- type ClientResult
- type CompleteRequest
- type CompleteResult
- type Content
- type CreateMessageRequest
- type CreateMessageResult
- type Cursor
- type EmbeddedResource
- type EmptyResult
- type GetPromptRequest
- type GetPromptResult
- type ImageContent
- type Implementation
- type InitializeRequest
- type InitializeResult
- type InitializedNotification
- type JSONRPCError
- type JSONRPCMessage
- type JSONRPCNotification
- type JSONRPCRequest
- type JSONRPCResponse
- type ListPromptsRequest
- type ListPromptsResult
- type ListResourceTemplatesRequest
- type ListResourceTemplatesResult
- type ListResourcesRequest
- type ListResourcesResult
- type ListRootsRequest
- type ListRootsResult
- type ListToolsRequest
- type ListToolsResult
- type LogNotification
- type LoggingLevel
- type LoggingMessageNotification
- type ModelHint
- type ModelPreferences
- type Notification
- type NotificationContext
- type NotificationParams
- type PaginatedRequest
- type PaginatedResult
- type Params
- type PingRequest
- type ProgressNotification
- type ProgressToken
- type Prompt
- type PromptArgument
- type PromptListChangedNotification
- type PromptMessage
- type PromptOption
- type PromptReference
- type PromptsListChangedNotification
- type PropertyOption
- func DefaultBool(value bool) PropertyOption
- func DefaultNumber(value float64) PropertyOption
- func DefaultString(value string) PropertyOption
- func Description(desc string) PropertyOption
- func Enum(values ...string) PropertyOption
- func Max(max float64) PropertyOption
- func MaxLength(max int) PropertyOption
- func Min(min float64) PropertyOption
- func MinLength(min int) PropertyOption
- func MultipleOf(value float64) PropertyOption
- func Pattern(pattern string) PropertyOption
- func Required() PropertyOption
- func Title(title string) PropertyOption
- type ReadResourceRequest
- type ReadResourceResult
- type Request
- type RequestId
- type Resource
- type ResourceChangedNotification
- type ResourceContents
- type ResourceListChangedNotification
- type ResourceReference
- type ResourceTemplate
- type ResourceUpdatedNotification
- type ResourcesListChangedNotification
- type Result
- type Role
- type Root
- type RootsListChangedNotification
- type SamplingMessage
- type ServerCapabilities
- type ServerNotification
- type ServerRequest
- type ServerResult
- type SetLevelRequest
- type SubscribeRequest
- type TextContent
- type TextResourceContents
- type Tool
- type ToolInputSchema
- type ToolListChangedNotification
- type ToolOption
- type ToolsListChangedNotification
- type UnsubscribeRequest
Constants ¶
const ( PARSE_ERROR = -32700 INVALID_REQUEST = -32600 METHOD_NOT_FOUND = -32601 INVALID_PARAMS = -32602 INTERNAL_ERROR = -32603 )
Standard JSON-RPC error codes
const JSONRPC_VERSION = "2.0"
JSONRPC_VERSION is the version of JSON-RPC used by MCP.
const LATEST_PROTOCOL_VERSION = "2024-11-05"
LATEST_PROTOCOL_VERSION is the most recent version of the MCP protocol.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Annotated ¶
type Annotated struct {
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"`
} `json:"annotations,omitempty"`
}
Annotated is the base type for objects that can be annotated.
type ArgumentOption ¶
type ArgumentOption func(*PromptArgument)
ArgumentOption is a function that configures a PromptArgument. It allows for flexible configuration of prompt arguments using the functional options pattern.
func ArgumentDescription ¶
func ArgumentDescription(desc string) ArgumentOption
ArgumentDescription adds a description to a prompt argument. The description should explain the purpose and expected values of the argument.
func RequiredArgument ¶
func RequiredArgument() ArgumentOption
RequiredArgument marks an argument as required in the prompt. Required arguments must be provided when getting the prompt.
type BlobResourceContents ¶
type BlobResourceContents struct {
// The URI of this resource.
URI string `json:"uri"`
// The MIME type of this resource, if known.
MIMEType string `json:"mimeType,omitempty"`
// A base64-encoded string representing the binary data of the item.
Blob string `json:"blob"`
}
BlobResourceContents represents binary resource contents.
func AsBlobResourceContents ¶
func AsBlobResourceContents(content interface{}) (*BlobResourceContents, bool)
AsBlobResourceContents attempts to cast the given interface to BlobResourceContents
type CallToolRequest ¶
type CallToolRequest struct {
Request
Params struct {
Name string `json:"name"`
Arguments map[string]interface{} `json:"arguments,omitempty"`
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 ProgressToken `json:"progressToken,omitempty"`
} `json:"_meta,omitempty"`
} `json:"params"`
}
CallToolRequest is used by the client to invoke a tool provided by the server.
type CallToolResult ¶
type CallToolResult struct {
Result
Content []Content `json:"content"` // Can be TextContent, ImageContent, or EmbeddedResource
// 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"`
}
CallToolResult is 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.
func FormatNumberResult ¶
func FormatNumberResult(value float64) *CallToolResult
Helper for formatting numbers in tool results
func NewToolResultError ¶
func NewToolResultError(errText string) *CallToolResult
NewToolResultError creates a new CallToolResult that indicates an error
func NewToolResultImage ¶
func NewToolResultImage(text, imageData, mimeType string) *CallToolResult
NewToolResultImage creates a new CallToolResult with both text and image content
func NewToolResultResource ¶
func NewToolResultResource( text string, resource ResourceContents, ) *CallToolResult
NewToolResultResource creates a new CallToolResult with an embedded resource
func NewToolResultText ¶
func NewToolResultText(text string) *CallToolResult
NewToolResultText creates a new CallToolResult with a text content
func ParseCallToolResult ¶
func ParseCallToolResult(rawMessage *json.RawMessage) (*CallToolResult, error)
type CancelledNotification ¶
type CancelledNotification struct {
Notification
Params struct {
// The ID of the request to cancel.
//
// This MUST correspond to the ID of a request previously issued
// in the same direction.
RequestId RequestId `json:"requestId"`
// An optional string describing the reason for the cancellation. This MAY
// be logged or presented to the user.
Reason string `json:"reason,omitempty"`
} `json:"params"`
}
CancelledNotification can be sent by either side to indicate that it is cancelling a previously-issued request.
The request SHOULD still be in-flight, but due to communication latency, it is always possible that this notification MAY arrive after the request has already finished.
This notification indicates that the result will be unused, so any associated processing SHOULD cease.
A client MUST NOT attempt to cancel its `initialize` request.
type ClientCapabilities ¶
type ClientCapabilities struct {
// Experimental, non-standard capabilities that the client supports.
Experimental map[string]interface{} `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 *struct{} `json:"sampling,omitempty"`
}
ClientCapabilities represents 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 ClientNotification ¶
type ClientNotification interface{}
ClientNotification represents a notification that can be sent by a client.
type ClientRequest ¶
type ClientRequest interface{}
ClientRequest represents a request that can be sent by a client.
type ClientResult ¶
type ClientResult interface{}
ClientResult represents a result that can be sent by a client.
type CompleteRequest ¶
type CompleteRequest struct {
Request
Params struct {
Ref interface{} `json:"ref"` // Can be PromptReference or ResourceReference
Argument struct {
// The name of the argument
Name string `json:"name"`
// The value of the argument to use for completion matching.
Value string `json:"value"`
} `json:"argument"`
} `json:"params"`
}
CompleteRequest is a request to complete an argument value.
type CompleteResult ¶
type CompleteResult struct {
Result
Completion struct {
// An array of completion values. Must not exceed 100 items.
Values []string `json:"values"`
// The total number of completion options available. This can exceed the
// number of values actually sent in the response.
Total int `json:"total,omitempty"`
// Indicates whether there are additional completion options beyond those
// provided in the current response, even if the exact total is unknown.
HasMore bool `json:"hasMore,omitempty"`
} `json:"completion"`
}
CompleteResult is the response to a complete request.
type Content ¶
type Content interface {
// contains filtered or unexported methods
}
Content is an interface for different types of message content.
type CreateMessageRequest ¶
type CreateMessageRequest struct {
Request
Params struct {
Messages []SamplingMessage `json:"messages"`
ModelPreferences *ModelPreferences `json:"modelPreferences,omitempty"`
SystemPrompt string `json:"systemPrompt,omitempty"`
IncludeContext string `json:"includeContext,omitempty"`
Temperature float64 `json:"temperature,omitempty"`
MaxTokens int `json:"maxTokens"`
StopSequences []string `json:"stopSequences,omitempty"`
Metadata interface{} `json:"metadata,omitempty"`
} `json:"params"`
}
CreateMessageRequest is a request to create a new message.
type CreateMessageResult ¶
type CreateMessageResult struct {
Result
SamplingMessage
// The name of the model that generated the message.
Model string `json:"model"`
// The reason why sampling stopped, if known.
StopReason string `json:"stopReason,omitempty"`
}
CreateMessageResult is the response to a create message request.
type Cursor ¶
type Cursor string
Cursor is an opaque token used to represent a cursor for pagination.
type EmbeddedResource ¶
type EmbeddedResource struct {
Annotated
Type string `json:"type"`
Resource ResourceContents `json:"resource"`
}
EmbeddedResource represents a resource embedded in a message.
func AsEmbeddedResource ¶
func AsEmbeddedResource(content interface{}) (*EmbeddedResource, bool)
AsEmbeddedResource attempts to cast the given interface to EmbeddedResource
func NewEmbeddedResource ¶
func NewEmbeddedResource(resource ResourceContents) EmbeddedResource
Helper function to create a new EmbeddedResource
type EmptyResult ¶
type EmptyResult Result
EmptyResult represents a response that indicates success but carries no data.
type GetPromptRequest ¶
type GetPromptRequest struct {
Request
Params struct {
// The name of the prompt or prompt template.
Name string `json:"name"`
// Arguments to use for templating the prompt.
Arguments map[string]string `json:"arguments,omitempty"`
} `json:"params"`
}
GetPromptRequest is used by the client to get a prompt provided by the server.
type GetPromptResult ¶
type GetPromptResult struct {
Result
// An optional description for the prompt.
Description string `json:"description,omitempty"`
Messages []PromptMessage `json:"messages"`
}
GetPromptResult is the server's response to a prompts/get request from the client.
func NewGetPromptResult ¶
func NewGetPromptResult( description string, messages []PromptMessage, ) *GetPromptResult
NewGetPromptResult creates a new GetPromptResult
func ParseGetPromptResult ¶
func ParseGetPromptResult(rawMessage *json.RawMessage) (*GetPromptResult, error)
type ImageContent ¶
type ImageContent struct {
Annotated
Type string `json:"type"` // Must be "image"
// The base64-encoded image data.
Data string `json:"data"`
// The MIME type of the image. Different providers may support different image types.
MIMEType string `json:"mimeType"`
}
ImageContent represents image-based message content.
func AsImageContent ¶
func AsImageContent(content interface{}) (*ImageContent, bool)
AsImageContent attempts to cast the given interface to ImageContent
func NewImageContent ¶
func NewImageContent(data, mimeType string) ImageContent
Helper function to create a new ImageContent
type Implementation ¶
Implementation provides information about a client or server implementation.
type InitializeRequest ¶
type InitializeRequest struct {
Request
Params struct {
// 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"`
Capabilities ClientCapabilities `json:"capabilities"`
ClientInfo Implementation `json:"clientInfo"`
} `json:"params"`
}
InitializeRequest is sent from the client to the server when it first connects, asking it to begin initialization.
type InitializeResult ¶
type InitializeResult struct {
Result
// 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"`
Capabilities ServerCapabilities `json:"capabilities"`
ServerInfo Implementation `json:"serverInfo"`
// 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"`
}
InitializeResult is sent after receiving an initialize request from the client.
func NewInitializeResult ¶
func NewInitializeResult( protocolVersion string, capabilities ServerCapabilities, serverInfo Implementation, instructions string, ) *InitializeResult
NewInitializeResult creates a new InitializeResult
type InitializedNotification ¶
type InitializedNotification struct {
Notification
}
InitializedNotification is sent from the client to the server after initialization has finished.
type JSONRPCError ¶
type JSONRPCError struct {
JSONRPC string `json:"jsonrpc"`
ID RequestId `json:"id"`
Error struct {
// The error type that occurred.
Code int `json:"code"`
// A short description of the error. The message SHOULD be limited
// to a concise single sentence.
Message string `json:"message"`
// Additional information about the error. The value of this member
// is defined by the sender (e.g. detailed error information, nested errors etc.).
Data interface{} `json:"data,omitempty"`
} `json:"error"`
}
JSONRPCError represents a non-successful (error) response to a request.
func NewJSONRPCError ¶
func NewJSONRPCError( id RequestId, code int, message string, data interface{}, ) JSONRPCError
NewJSONRPCError creates a new JSONRPCResponse with the given id, code, and message
type JSONRPCMessage ¶
type JSONRPCMessage interface{}
JSONRPCMessage represents either a JSONRPCRequest, JSONRPCNotification, JSONRPCResponse, or JSONRPCError
type JSONRPCNotification ¶
type JSONRPCNotification struct {
JSONRPC string `json:"jsonrpc"`
Notification
}
JSONRPCNotification represents a notification which does not expect a response.
type JSONRPCRequest ¶
type JSONRPCRequest struct {
JSONRPC string `json:"jsonrpc"`
ID RequestId `json:"id"`
Params interface{} `json:"params,omitempty"`
Request
}
JSONRPCRequest represents a request that expects a response.
type JSONRPCResponse ¶
type JSONRPCResponse struct {
JSONRPC string `json:"jsonrpc"`
ID RequestId `json:"id"`
Result interface{} `json:"result"`
}
JSONRPCResponse represents a successful (non-error) response to a request.
func NewJSONRPCResponse ¶
func NewJSONRPCResponse(id RequestId, result Result) JSONRPCResponse
NewJSONRPCResponse creates a new JSONRPCResponse with the given id and result
type ListPromptsRequest ¶
type ListPromptsRequest struct {
PaginatedRequest
}
ListPromptsRequest is sent from the client to request a list of prompts and prompt templates the server has.
type ListPromptsResult ¶
type ListPromptsResult struct {
PaginatedResult
Prompts []Prompt `json:"prompts"`
}
ListPromptsResult is the server's response to a prompts/list request from the client.
func NewListPromptsResult ¶
func NewListPromptsResult( prompts []Prompt, nextCursor Cursor, ) *ListPromptsResult
NewListPromptsResult creates a new ListPromptsResult
type ListResourceTemplatesRequest ¶
type ListResourceTemplatesRequest struct {
PaginatedRequest
}
ListResourceTemplatesRequest is a request to list available resource templates.
type ListResourceTemplatesResult ¶
type ListResourceTemplatesResult struct {
PaginatedResult
ResourceTemplates []ResourceTemplate `json:"resourceTemplates"`
}
ListResourceTemplatesResult is the response to a list resource templates request.
func NewListResourceTemplatesResult ¶
func NewListResourceTemplatesResult( templates []ResourceTemplate, nextCursor Cursor, ) *ListResourceTemplatesResult
NewListResourceTemplatesResult creates a new ListResourceTemplatesResult
type ListResourcesRequest ¶
type ListResourcesRequest struct {
PaginatedRequest
}
ListResourcesRequest is a request to list available resources.
type ListResourcesResult ¶
type ListResourcesResult struct {
PaginatedResult
Resources []Resource `json:"resources"`
}
ListResourcesResult is the response to a list resources request.
func NewListResourcesResult ¶
func NewListResourcesResult( resources []Resource, nextCursor Cursor, ) *ListResourcesResult
NewListResourcesResult creates a new ListResourcesResult
type ListRootsRequest ¶
type ListRootsRequest struct {
Request
}
ListRootsRequest is a request to list available roots.
type ListRootsResult ¶
ListRootsResult is the response to a list roots request.
type ListToolsRequest ¶
type ListToolsRequest struct {
PaginatedRequest
}
ListToolsRequest is sent from the client to request a list of tools the server has.
type ListToolsResult ¶
type ListToolsResult struct {
PaginatedResult
Tools []Tool `json:"tools"`
}
ListToolsResult is the server's response to a tools/list request from the client.
func NewListToolsResult ¶
func NewListToolsResult(tools []Tool, nextCursor Cursor) *ListToolsResult
NewListToolsResult creates a new ListToolsResult
type LogNotification ¶
type LogNotification struct {
Notification
Params struct {
// Level is the severity level of the log message.
Level string `json:"level"`
// Message is the log message content.
Message string `json:"message"`
} `json:"params"`
}
LogNotification represents a log message notification from the server.
type LoggingLevel ¶
type LoggingLevel string
LoggingLevel represents the severity level of a log message.
const ( // LoggingLevelTrace is for very detailed debugging information. LoggingLevelTrace LoggingLevel = "trace" // LoggingLevelDebug is for debugging information. LoggingLevelDebug LoggingLevel = "debug" // LoggingLevelInfo is for general information. LoggingLevelInfo LoggingLevel = "info" // LoggingLevelWarn is for warnings. LoggingLevelWarn LoggingLevel = "warn" // LoggingLevelError is for errors. LoggingLevelError LoggingLevel = "error" )
type LoggingMessageNotification ¶
type LoggingMessageNotification struct {
Notification
Params struct {
// The severity of this log message.
Level LoggingLevel `json:"level"`
// An optional name of the logger issuing this message.
Logger string `json:"logger,omitempty"`
// The data to be logged, such as a string message or an object. Any JSON
// serializable type is allowed here.
Data interface{} `json:"data"`
} `json:"params"`
}
LoggingMessageNotification is sent when a log message is generated.
func NewLoggingMessageNotification ¶
func NewLoggingMessageNotification( level LoggingLevel, logger string, data interface{}, ) LoggingMessageNotification
Helper function for creating a logging message notification
type ModelHint ¶
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"`
}
ModelHint represents a hint for model selection.
type ModelPreferences ¶
type ModelPreferences struct {
// 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 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"`
// 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"`
// 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"`
}
ModelPreferences represents preferences for model selection.
type Notification ¶
type Notification struct {
Method string `json:"method"`
Params NotificationParams `json:"params,omitempty"`
}
Notification is the base type for all notifications.
type NotificationContext ¶
type NotificationContext struct {
// ClientID is the unique identifier of the client.
ClientID string `json:"clientId"`
// SessionID is the unique identifier of the session.
SessionID string `json:"sessionId"`
}
NotificationContext represents the context for server notifications.
type NotificationParams ¶
type NotificationParams struct {
// This parameter name is reserved by MCP to allow clients and
// servers to attach additional metadata to their notifications.
Meta map[string]interface{} `json:"_meta,omitempty"`
// Additional fields can be added to this map
AdditionalFields map[string]interface{} `json:"-"`
}
NotificationParams represents parameters for a notification.
func (NotificationParams) MarshalJSON ¶
func (p NotificationParams) MarshalJSON() ([]byte, error)
MarshalJSON implements custom JSON marshaling for NotificationParams.
func (*NotificationParams) UnmarshalJSON ¶
func (p *NotificationParams) UnmarshalJSON(data []byte) error
UnmarshalJSON implements custom JSON unmarshaling for NotificationParams.
type PaginatedRequest ¶
type PaginatedRequest struct {
Request
Params struct {
// An opaque token representing the current pagination position.
// If provided, the server should return results starting after this cursor.
Cursor Cursor `json:"cursor,omitempty"`
} `json:"params,omitempty"`
}
PaginatedRequest is the base type for requests that support pagination.
type PaginatedResult ¶
type PaginatedResult struct {
Result
// An opaque token representing the pagination position after the last
// returned result.
// If present, there may be more results available.
NextCursor Cursor `json:"nextCursor,omitempty"`
}
PaginatedResult is the base type for paginated results.
type PingRequest ¶
type PingRequest struct {
Request
}
PingRequest is a request to check if the server is alive.
type ProgressNotification ¶
type ProgressNotification struct {
Notification
Params struct {
// The progress token which was given in the initial request, used to
// associate this notification with the request that is proceeding.
ProgressToken ProgressToken `json:"progressToken"`
// The progress thus far. This should increase every time progress is made,
// even if the total is unknown.
Progress float64 `json:"progress"`
// Total number of items to process (or total progress required), if known.
Total float64 `json:"total,omitempty"`
} `json:"params"`
}
ProgressNotification is sent to indicate progress on a long-running request.
func NewProgressNotification ¶
func NewProgressNotification( token ProgressToken, progress float64, total *float64, ) ProgressNotification
Helper function for creating a progress notification
type ProgressToken ¶
type ProgressToken interface{}
ProgressToken is used to associate progress notifications with the original request.
type Prompt ¶
type Prompt struct {
// The name of the prompt or prompt template.
Name string `json:"name"`
// An optional description of what this prompt provides
Description string `json:"description,omitempty"`
// A list of arguments to use for templating the prompt.
// The presence of arguments indicates this is a template prompt.
Arguments []PromptArgument `json:"arguments,omitempty"`
}
Prompt represents a prompt or prompt template that the server offers. If Arguments is non-nil and non-empty, this indicates the prompt is a template that requires argument values to be provided when calling prompts/get. If Arguments is nil or empty, this is a static prompt that takes no arguments.
func NewPrompt ¶
func NewPrompt(name string, opts ...PromptOption) Prompt
NewPrompt creates a new Prompt with the given name and options. The prompt will be configured based on the provided options. Options are applied in order, allowing for flexible prompt configuration.
type PromptArgument ¶
type PromptArgument struct {
// The name of the argument.
Name string `json:"name"`
// A human-readable description of the argument.
Description string `json:"description,omitempty"`
// Whether this argument must be provided.
// If true, clients must include this argument when calling prompts/get.
Required bool `json:"required,omitempty"`
}
PromptArgument describes an argument that a prompt template can accept. When a prompt includes arguments, clients must provide values for all required arguments when making a prompts/get request.
type PromptListChangedNotification ¶
type PromptListChangedNotification struct {
Notification
}
PromptListChangedNotification is an optional notification from the server to the client, informing it that the list of prompts it offers has changed. This may be issued by servers without any previous subscription from the client.
type PromptMessage ¶
type PromptMessage struct {
Role Role `json:"role"`
Content Content `json:"content"` // Can be TextContent, ImageContent, or EmbeddedResource
}
PromptMessage 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.
func NewPromptMessage ¶
func NewPromptMessage(role Role, content Content) PromptMessage
Helper function to create a new PromptMessage
type PromptOption ¶
type PromptOption func(*Prompt)
PromptOption is a function that configures a Prompt. It provides a flexible way to set various properties of a Prompt using the functional options pattern.
func WithArgument ¶
func WithArgument(name string, opts ...ArgumentOption) PromptOption
WithArgument adds an argument to the prompt's argument list. The argument will be configured based on the provided options.
func WithPromptDescription ¶
func WithPromptDescription(description string) PromptOption
WithPromptDescription adds a description to the Prompt. The description should provide a clear, human-readable explanation of what the prompt does.
type PromptReference ¶
type PromptReference struct {
Type string `json:"type"`
// The name of the prompt or prompt template
Name string `json:"name"`
}
PromptReference is a reference to a prompt.
type PromptsListChangedNotification ¶
type PromptsListChangedNotification struct {
Notification
}
PromptsListChangedNotification represents a notification that the list of available prompts has changed.
type PropertyOption ¶
type PropertyOption func(map[string]interface{})
PropertyOption is a function that configures a property in a Tool's input schema. It allows for flexible configuration of JSON Schema properties using the functional options pattern.
func DefaultBool ¶
func DefaultBool(value bool) PropertyOption
DefaultBool sets the default value for a boolean property. This value will be used if the property is not explicitly provided.
func DefaultNumber ¶
func DefaultNumber(value float64) PropertyOption
DefaultNumber sets the default value for a number property. This value will be used if the property is not explicitly provided.
func DefaultString ¶
func DefaultString(value string) PropertyOption
DefaultString sets the default value for a string property. This value will be used if the property is not explicitly provided.
func Description ¶
func Description(desc string) PropertyOption
Description adds a description to a property in the JSON Schema. The description should explain the purpose and expected values of the property.
func Enum ¶
func Enum(values ...string) PropertyOption
Enum specifies a list of allowed values for a string property. The property value must be one of the specified enum values.
func Max ¶
func Max(max float64) PropertyOption
Max sets the maximum value for a number property. The number value must not exceed this maximum.
func MaxLength ¶
func MaxLength(max int) PropertyOption
MaxLength sets the maximum length for a string property. The string value must not exceed this length.
func Min ¶
func Min(min float64) PropertyOption
Min sets the minimum value for a number property. The number value must not be less than this minimum.
func MinLength ¶
func MinLength(min int) PropertyOption
MinLength sets the minimum length for a string property. The string value must be at least this length.
func MultipleOf ¶
func MultipleOf(value float64) PropertyOption
MultipleOf specifies that a number must be a multiple of the given value. The number value must be divisible by this value.
func Pattern ¶
func Pattern(pattern string) PropertyOption
Pattern sets a regex pattern that a string property must match. The string value must conform to the specified regular expression.
func Required ¶
func Required() PropertyOption
Required marks a property as required in the tool's input schema. Required properties must be provided when using the tool.
func Title ¶
func Title(title string) PropertyOption
Title adds a display-friendly title to a property in the JSON Schema. This title can be used by UI components to show a more readable property name.
type ReadResourceRequest ¶
type ReadResourceRequest struct {
Request
Params 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"`
// Arguments to pass to the resource handler
Arguments map[string]interface{} `json:"arguments,omitempty"`
} `json:"params"`
}
ReadResourceRequest is a request to read a resource.
type ReadResourceResult ¶
type ReadResourceResult struct {
Result
Contents []ResourceContents `json:"contents"` // Can be TextResourceContents or BlobResourceContents
}
ReadResourceResult is the response to a read resource request.
func NewReadResourceResult ¶
func NewReadResourceResult(text string) *ReadResourceResult
NewReadResourceResult creates a new ReadResourceResult with text content
func ParseReadResourceResult ¶
func ParseReadResourceResult(rawMessage *json.RawMessage) (*ReadResourceResult, error)
type Request ¶
type Request struct {
Method string `json:"method"`
Params 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 ProgressToken `json:"progressToken,omitempty"`
} `json:"_meta,omitempty"`
} `json:"params,omitempty"`
}
Request is the base type for all requests.
type RequestId ¶
type RequestId interface{}
RequestId is a uniquely identifying ID for a request in JSON-RPC. It can be any JSON-serializable value, typically a number or string.
type Resource ¶
type Resource struct {
Annotated
// The URI of this resource.
URI string `json:"uri"`
// A human-readable name for this resource.
//
// This can be used by clients to populate UI elements.
Name string `json:"name"`
// 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"`
}
Resource represents a resource that can be read by the client.
type ResourceChangedNotification ¶
type ResourceChangedNotification struct {
Notification
Params struct {
// URI is the URI of the resource that changed.
URI string `json:"uri"`
} `json:"params"`
}
ResourceChangedNotification represents a notification that a resource has changed.
type ResourceContents ¶
type ResourceContents interface {
// contains filtered or unexported methods
}
ResourceContents is an interface for different types of resource contents.
func ParseResourceContents ¶
func ParseResourceContents(contentMap map[string]any) (ResourceContents, error)
type ResourceListChangedNotification ¶
type ResourceListChangedNotification struct {
Notification
}
ResourceListChangedNotification is sent when the list of available resources changes.
type ResourceReference ¶
type ResourceReference struct {
Type string `json:"type"`
// The URI or URI template of the resource.
URI string `json:"uri"`
}
ResourceReference is a reference to a resource.
type ResourceTemplate ¶
type ResourceTemplate struct {
Annotated
// A URI template (according to RFC 6570) that can be used to construct
// resource URIs.
URITemplate string `json:"uriTemplate"`
// 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 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"`
}
ResourceTemplate represents a template for constructing resource URIs.
type ResourceUpdatedNotification ¶
type ResourceUpdatedNotification struct {
Notification
Params struct {
// 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 string `json:"uri"`
} `json:"params"`
}
ResourceUpdatedNotification is sent when a subscribed resource is updated.
type ResourcesListChangedNotification ¶
type ResourcesListChangedNotification struct {
Notification
}
ResourcesListChangedNotification represents a notification that the list of available resources has changed.
type Result ¶
type Result struct {
// This result property is reserved by the protocol to allow clients and
// servers to attach additional metadata to their responses.
Meta map[string]interface{} `json:"_meta,omitempty"`
}
Result is the base type for all results.
type Root ¶
type Root struct {
// 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"`
// 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"`
}
Root represents a root directory.
type RootsListChangedNotification ¶
type RootsListChangedNotification struct {
Notification
}
RootsListChangedNotification is sent when the list of available roots changes.
type SamplingMessage ¶
type SamplingMessage struct {
Role Role `json:"role"`
Content interface{} `json:"content"` // Can be TextContent or ImageContent
}
SamplingMessage represents a message in a sampling conversation.
type ServerCapabilities ¶
type ServerCapabilities struct {
// Experimental, non-standard capabilities that the server supports.
Experimental map[string]interface{} `json:"experimental,omitempty"`
// Present if the server supports sending log messages to the client.
Logging *struct{} `json:"logging,omitempty"`
// Present if the server offers any prompt templates.
Prompts *struct {
// Whether this server supports notifications for changes to the prompt list.
ListChanged bool `json:"listChanged,omitempty"`
} `json:"prompts,omitempty"`
// Present if the server offers any resources to read.
Resources *struct {
// Whether this server supports subscribing to resource updates.
Subscribe bool `json:"subscribe,omitempty"`
// Whether this server supports notifications for changes to the resource
// list.
ListChanged bool `json:"listChanged,omitempty"`
} `json:"resources,omitempty"`
// Present if the server offers any tools to call.
Tools *struct {
// Whether this server supports notifications for changes to the tool list.
ListChanged bool `json:"listChanged,omitempty"`
} `json:"tools,omitempty"`
}
ServerCapabilities represents capabilities a server may support.
type ServerNotification ¶
type ServerNotification interface{}
ServerNotification represents a notification that can be sent by a server.
type ServerRequest ¶
type ServerRequest interface{}
ServerRequest represents a request that can be sent by a server.
type ServerResult ¶
type ServerResult interface{}
ServerResult represents a result that can be sent by a server.
type SetLevelRequest ¶
type SetLevelRequest struct {
Request
Params 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/logging/message.
Level LoggingLevel `json:"level"`
} `json:"params"`
}
SetLevelRequest is a request to set the logging level.
type SubscribeRequest ¶
type SubscribeRequest struct {
Request
Params struct {
// 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 string `json:"uri"`
} `json:"params"`
}
SubscribeRequest is a request to subscribe to resource updates.
type TextContent ¶
type TextContent struct {
Annotated
Type string `json:"type"` // Must be "text"
// The text content of the message.
Text string `json:"text"`
}
TextContent represents text-based message content.
func AsTextContent ¶
func AsTextContent(content interface{}) (*TextContent, bool)
AsTextContent attempts to cast the given interface to TextContent
func NewTextContent ¶
func NewTextContent(text string) TextContent
Helper function to create a new TextContent
type TextResourceContents ¶
type TextResourceContents struct {
// The URI of this resource.
URI string `json:"uri"`
// The MIME type of this resource, if known.
MIMEType string `json:"mimeType,omitempty"`
// The text of the item. This must only be set if the item can actually be
// represented as text (not binary data).
Text string `json:"text"`
}
TextResourceContents represents text-based resource contents.
func AsTextResourceContents ¶
func AsTextResourceContents(content interface{}) (*TextResourceContents, bool)
AsTextResourceContents attempts to cast the given interface to TextResourceContents
type Tool ¶
type Tool struct {
// The name of the tool.
Name string `json:"name"`
// A human-readable description of the tool.
Description string `json:"description,omitempty"`
// A JSON Schema object defining the expected parameters for the tool.
InputSchema ToolInputSchema `json:"inputSchema"`
// Alternative to InputSchema - allows arbitrary JSON Schema to be provided
RawInputSchema json.RawMessage `json:"-"` // Hide this from JSON marshaling
}
Tool represents the definition for a tool the client can call.
func NewTool ¶
func NewTool(name string, opts ...ToolOption) Tool
NewTool creates a new Tool with the given name and options. The tool will have an object-type input schema with configurable properties. Options are applied in order, allowing for flexible tool configuration.
func NewToolWithRawSchema ¶
func NewToolWithRawSchema(name, description string, schema json.RawMessage) Tool
NewToolWithRawSchema creates a new Tool with the given name and a raw JSON Schema. This allows for arbitrary JSON Schema to be used for the tool's input schema.
NOTE a Tool built in such a way is incompatible with the ToolOption and runtime errors will result from supplying a ToolOption to a Tool built with this function.
func (Tool) MarshalJSON ¶
MarshalJSON implements the json.Marshaler interface for Tool. It handles marshaling either InputSchema or RawInputSchema based on which is set.
type ToolInputSchema ¶
type ToolListChangedNotification ¶
type ToolListChangedNotification struct {
Notification
}
ToolListChangedNotification is an optional notification from the server to the client, informing it that the list of tools it offers has changed. This may be issued by servers without any previous subscription from the client.
type ToolOption ¶
type ToolOption func(*Tool)
ToolOption is a function that configures a Tool. It provides a flexible way to set various properties of a Tool using the functional options pattern.
func WithBoolean ¶
func WithBoolean(name string, opts ...PropertyOption) ToolOption
WithBoolean adds a boolean property to the tool schema. It accepts property options to configure the boolean property's behavior and constraints.
func WithDescription ¶
func WithDescription(description string) ToolOption
WithDescription adds a description to the Tool. The description should provide a clear, human-readable explanation of what the tool does.
func WithNumber ¶
func WithNumber(name string, opts ...PropertyOption) ToolOption
WithNumber adds a number property to the tool schema. It accepts property options to configure the number property's behavior and constraints.
func WithString ¶
func WithString(name string, opts ...PropertyOption) ToolOption
WithString adds a string property to the tool schema. It accepts property options to configure the string property's behavior and constraints.
type ToolsListChangedNotification ¶
type ToolsListChangedNotification struct {
Notification
}
ToolsListChangedNotification represents a notification that the list of available tools has changed.
type UnsubscribeRequest ¶
type UnsubscribeRequest struct {
Request
Params struct {
// The URI of the resource to unsubscribe from.
URI string `json:"uri"`
} `json:"params"`
}
UnsubscribeRequest is a request to unsubscribe from resource updates.