| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- package mcp
- import "net/http"
- /* Prompts */
- // ListPromptsRequest is sent from the client to request a list of prompts and
- // prompt templates the server has.
- type ListPromptsRequest struct {
- PaginatedRequest
- Header http.Header `json:"-"`
- }
- // ListPromptsResult is the server's response to a prompts/list request from
- // the client.
- type ListPromptsResult struct {
- PaginatedResult
- Prompts []Prompt `json:"prompts"`
- }
- // GetPromptRequest is used by the client to get a prompt provided by the
- // server.
- type GetPromptRequest struct {
- Request
- Params GetPromptParams `json:"params"`
- Header http.Header `json:"-"`
- }
- type GetPromptParams 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"`
- }
- // GetPromptResult is the server's response to a prompts/get request from the
- // client.
- type GetPromptResult struct {
- Result
- // An optional description for the prompt.
- Description string `json:"description,omitempty"`
- Messages []PromptMessage `json:"messages"`
- }
- // 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.
- type Prompt struct {
- // Meta is a metadata object that is reserved by MCP for storing additional information.
- Meta *Meta `json:"_meta,omitempty"`
- // 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"`
- }
- // GetName returns the name of the prompt.
- func (p Prompt) GetName() string {
- return p.Name
- }
- // 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 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"`
- }
- // Role represents the sender or recipient of messages and data in a
- // conversation.
- type Role string
- const (
- RoleUser Role = "user"
- RoleAssistant Role = "assistant"
- )
- // 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.
- type PromptMessage struct {
- Role Role `json:"role"`
- Content Content `json:"content"` // Can be TextContent, ImageContent, AudioContent or EmbeddedResource
- }
- // 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 PromptListChangedNotification struct {
- Notification
- }
- // 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.
- type PromptOption func(*Prompt)
- // ArgumentOption is a function that configures a PromptArgument.
- // It allows for flexible configuration of prompt arguments using the functional options pattern.
- type ArgumentOption func(*PromptArgument)
- //
- // Core Prompt Functions
- //
- // 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.
- func NewPrompt(name string, opts ...PromptOption) Prompt {
- prompt := Prompt{
- Name: name,
- }
- for _, opt := range opts {
- opt(&prompt)
- }
- return prompt
- }
- // WithPromptDescription adds a description to the Prompt.
- // The description should provide a clear, human-readable explanation of what the prompt does.
- func WithPromptDescription(description string) PromptOption {
- return func(p *Prompt) {
- p.Description = description
- }
- }
- // WithArgument adds an argument to the prompt's argument list.
- // The argument will be configured based on the provided options.
- func WithArgument(name string, opts ...ArgumentOption) PromptOption {
- return func(p *Prompt) {
- arg := PromptArgument{
- Name: name,
- }
- for _, opt := range opts {
- opt(&arg)
- }
- if p.Arguments == nil {
- p.Arguments = make([]PromptArgument, 0)
- }
- p.Arguments = append(p.Arguments, arg)
- }
- }
- //
- // Argument Options
- //
- // ArgumentDescription adds a description to a prompt argument.
- // The description should explain the purpose and expected values of the argument.
- func ArgumentDescription(desc string) ArgumentOption {
- return func(arg *PromptArgument) {
- arg.Description = desc
- }
- }
- // RequiredArgument marks an argument as required in the prompt.
- // Required arguments must be provided when getting the prompt.
- func RequiredArgument() ArgumentOption {
- return func(arg *PromptArgument) {
- arg.Required = true
- }
- }
|