Skip to main content
Glama

MCPJungle mcp gateway

by mcpjungle
Mozilla Public License 2.0
638
  • Apple
mcp_prompts.go•4.91 kB
package client import ( "bytes" "encoding/json" "fmt" "io" "net/http" "net/url" "github.com/mcpjungle/mcpjungle/internal/model" "github.com/mcpjungle/mcpjungle/pkg/types" ) // ListPrompts retrieves all prompts or prompts filtered by server name func (c *Client) ListPrompts(serverName string) ([]model.Prompt, error) { u, err := c.constructAPIEndpoint("/prompts") if err != nil { return nil, fmt.Errorf("failed to construct API endpoint: %w", err) } // Add server filter if specified if serverName != "" { parsed, _ := url.Parse(u) q := parsed.Query() q.Set("server", serverName) parsed.RawQuery = q.Encode() u = parsed.String() } req, err := c.newRequest(http.MethodGet, u, nil) if err != nil { return nil, fmt.Errorf("failed to create request: %w", err) } resp, err := c.httpClient.Do(req) if err != nil { return nil, fmt.Errorf("failed to send request: %w", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, c.parseErrorResponse(resp) } var prompts []model.Prompt if err := json.NewDecoder(resp.Body).Decode(&prompts); err != nil { return nil, fmt.Errorf("failed to decode response: %w", err) } return prompts, nil } // GetPrompt retrieves a specific prompt by name func (c *Client) GetPrompt(name string) (*model.Prompt, error) { u, err := c.constructAPIEndpoint("/prompt") if err != nil { return nil, fmt.Errorf("failed to construct API endpoint: %w", err) } // Add name as query parameter parsed, _ := url.Parse(u) q := parsed.Query() q.Set("name", name) parsed.RawQuery = q.Encode() u = parsed.String() req, err := c.newRequest(http.MethodGet, u, nil) if err != nil { return nil, fmt.Errorf("failed to create request: %w", err) } resp, err := c.httpClient.Do(req) if err != nil { return nil, fmt.Errorf("failed to send request: %w", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, c.parseErrorResponse(resp) } var prompt model.Prompt if err := json.NewDecoder(resp.Body).Decode(&prompt); err != nil { return nil, fmt.Errorf("failed to decode response: %w", err) } return &prompt, nil } // GetPromptWithArgs retrieves a prompt with arguments and returns the rendered template func (c *Client) GetPromptWithArgs(name string, arguments map[string]string) (*types.PromptResult, error) { u, err := c.constructAPIEndpoint("/prompts/render") if err != nil { return nil, fmt.Errorf("failed to construct API endpoint: %w", err) } request := types.PromptGetRequest{ Name: name, Arguments: arguments, } body, err := json.Marshal(request) if err != nil { return nil, fmt.Errorf("failed to marshal request: %w", err) } req, err := c.newRequest(http.MethodPost, u, bytes.NewBuffer(body)) if err != nil { return nil, fmt.Errorf("failed to create request: %w", err) } req.Header.Set("Content-Type", "application/json") resp, err := c.httpClient.Do(req) if err != nil { return nil, fmt.Errorf("failed to send request: %w", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return nil, c.parseErrorResponse(resp) } var result types.PromptResult if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { return nil, fmt.Errorf("failed to decode response: %w", err) } return &result, nil } // EnablePrompts enables one or more prompts func (c *Client) EnablePrompts(entity string) ([]string, error) { return c.setPromptsEnabled(entity, true) } // DisablePrompts disables one or more prompts func (c *Client) DisablePrompts(entity string) ([]string, error) { return c.setPromptsEnabled(entity, false) } // setPromptsEnabled is a helper function to enable or disable prompts func (c *Client) setPromptsEnabled(entity string, enabled bool) ([]string, error) { var endpoint string if enabled { endpoint = "/prompts/enable" } else { endpoint = "/prompts/disable" } u, err := c.constructAPIEndpoint(endpoint) if err != nil { return nil, fmt.Errorf("failed to construct API endpoint: %w", err) } // Add entity as query parameter parsed, _ := url.Parse(u) q := parsed.Query() q.Set("entity", entity) parsed.RawQuery = q.Encode() u = parsed.String() req, err := c.newRequest(http.MethodPost, u, nil) if err != nil { return nil, fmt.Errorf("failed to create request: %w", err) } resp, err := c.httpClient.Do(req) if err != nil { return nil, fmt.Errorf("failed to send request: %w", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { body, _ := io.ReadAll(resp.Body) action := "enable" if !enabled { action = "disable" } return nil, fmt.Errorf("failed to %s prompts: status %d, message: %s", action, resp.StatusCode, body) } var promptNames []string if err := json.NewDecoder(resp.Body).Decode(&promptNames); err != nil { return nil, fmt.Errorf("failed to decode response: %w", err) } return promptNames, nil }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mcpjungle/MCPJungle'

If you have feedback or need assistance with the MCP directory API, please join our Discord server