Skip to main content
Glama
insight.go3.1 kB
package tools import ( "context" "fmt" "strings" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" ) func (t *LSPTools) registerInsightTools(s *server.MCPServer) { t.registerHover(s) t.registerCompletion(s) } func (t *LSPTools) registerHover(s *server.MCPServer) { hoverTool := mcp.NewTool("get_hover_info", mcp.WithDescription("Get hover information for a symbol"), mcp.WithString("file_uri", mcp.Required(), mcp.Description("URI of the file"), ), mcp.WithObject("position", mcp.Required(), mcp.Description("Position of the symbol"), ), ) s.AddTool(hoverTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { args, err := getArguments(request) if err != nil { return nil, err } fileURI, err := getStringArg(args, "file_uri") if err != nil { return nil, err } line, character, err := parsePosition(args) if err != nil { return nil, err } if !strings.HasPrefix(fileURI, "file://") { fileURI = convertPathToURI(fileURI) } lspClient := t.getClient() if lspClient == nil { return nil, fmt.Errorf("LSP client not initialized") } info, err := lspClient.GetHover(ctx, fileURI, line, character) if err != nil { if strings.Contains(err.Error(), "client closed") { return nil, fmt.Errorf("LSP service not available, please restart the server: %w", err) } return nil, fmt.Errorf("failed to get hover info: %w", err) } result, err := mcp.NewToolResultJSON(map[string]any{ "file_uri": fileURI, "hover": info, }) if err != nil { return nil, err } return result, nil }) } func (t *LSPTools) registerCompletion(s *server.MCPServer) { completionTool := mcp.NewTool("get_completion", mcp.WithDescription("Get completion suggestions at a position"), mcp.WithString("file_uri", mcp.Required(), mcp.Description("URI of the file"), ), mcp.WithObject("position", mcp.Required(), mcp.Description("Position where to get completion"), ), ) s.AddTool(completionTool, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { args, err := getArguments(request) if err != nil { return nil, err } fileURI, err := getStringArg(args, "file_uri") if err != nil { return nil, err } line, character, err := parsePosition(args) if err != nil { return nil, err } if !strings.HasPrefix(fileURI, "file://") { fileURI = convertPathToURI(fileURI) } lspClient := t.getClient() if lspClient == nil { return nil, fmt.Errorf("LSP client not initialized") } completions, err := lspClient.GetCompletion(ctx, fileURI, line, character) if err != nil { if strings.Contains(err.Error(), "client closed") { return nil, fmt.Errorf("LSP service not available, please restart the server: %w", err) } return nil, fmt.Errorf("failed to get completions: %w", err) } result, err := mcp.NewToolResultJSON(map[string]any{ "file_uri": fileURI, "completions": completions, }) if err != nil { return nil, err } return result, 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/hloiseaufcms/mcp-gopls'

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