Spaces:
Runtime error
Runtime error
| package mcp | |
| import ( | |
| "context" | |
| "encoding/json" | |
| ) | |
| // Initialize performs the MCP initialize handshake and sends the initialized | |
| // notification. It returns the raw server result for diagnostics. | |
| func (c *Client) Initialize(ctx context.Context) (json.RawMessage, error) { | |
| res, err := c.call(ctx, "initialize", initializeParams{ | |
| ProtocolVersion: ProtocolVersion, | |
| Capabilities: map[string]any{}, | |
| ClientInfo: clientInfo{Name: "matrix-runtime", Version: "0.1.0"}, | |
| }) | |
| if err != nil { | |
| return nil, err | |
| } | |
| // Per the spec, the client sends an initialized notification after the | |
| // initialize response. Errors here are non-fatal for tools/list. | |
| _ = c.notify("notifications/initialized", map[string]any{}) | |
| return res, nil | |
| } | |
| // ListTools requests the server's tool catalogue. | |
| func (c *Client) ListTools(ctx context.Context) ([]Tool, error) { | |
| res, err := c.call(ctx, "tools/list", map[string]any{}) | |
| if err != nil { | |
| return nil, err | |
| } | |
| var parsed toolsListResult | |
| if err := json.Unmarshal(res, &parsed); err != nil { | |
| return nil, err | |
| } | |
| tools := make([]Tool, 0, len(parsed.Tools)) | |
| for _, t := range parsed.Tools { | |
| tools = append(tools, Tool{ | |
| Name: t.Name, | |
| Description: t.Description, | |
| InputSchema: t.InputSchema, | |
| }) | |
| } | |
| return tools, nil | |
| } | |
| // CallTool invokes a tool with the given arguments and returns the raw result. | |
| func (c *Client) CallTool(ctx context.Context, name string, args map[string]any) (json.RawMessage, error) { | |
| if args == nil { | |
| args = map[string]any{} | |
| } | |
| return c.call(ctx, "tools/call", map[string]any{ | |
| "name": name, | |
| "arguments": args, | |
| }) | |
| } | |