Skip to main content
Glama
ghrud92
by ghrud92

get_labels

Extract and retrieve label sets from Grafana Loki logs using LogQL queries, enabling efficient log data organization and analysis.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • MCP tool handler for "get_labels". Logs execution, calls lokiClient.getLabels(), returns result as text content or standardized error.
    server.tool("get_labels", {}, async (_args, extra) => { logger.debug("All labels query tool execution", { extra }); try { const labelsJson = await lokiClient.getLabels(); return { content: [ { type: "text", text: labelsJson, }, ], }; } catch (error) { logger.error("Labels query tool execution error", { error }); // Create standardized error response return createToolErrorResponse(error, "Error getting labels"); } });
  • LokiClient.getLabels() public method: fetches labels via HTTP helper and returns JSON string {"labels": [...]}, with error handling.
    async getLabels(): Promise<string> { this.logger.debug("Retrieving label list"); try { const labels = await this.getLabelsViaHttp(); return JSON.stringify({ labels }); } catch (error: unknown) { const errorMsg = error instanceof Error ? error.message : String(error); this.logger.error("Getting labels failed", { error, errorMsg }); if (error instanceof LokiClientError) { throw error; } throw new LokiClientError( "execution_failed", `Failed to get labels: ${errorMsg}`, { cause: error as Error, details: { command: "labels", }, } ); } }
  • Private getLabelsViaHttp(): Performs HTTP GET to /loki/api/v1/labels endpoint with auth headers, returns array of label names or throws LokiClientError.
    private async getLabelsViaHttp(): Promise<string[]> { try { const config = this.auth.getConfig(); if (!config.addr) { throw new LokiClientError( "http_query_error", "Loki server address (addr) is not configured", { details: { command: "labels" } } ); } // Build URL for labels endpoint const url = `${config.addr}/loki/api/v1/labels`; // Prepare request headers const headers: Record<string, string> = {}; // Add authentication headers if (config.username && config.password) { const auth = Buffer.from( `${config.username}:${config.password}` ).toString("base64"); headers["Authorization"] = `Basic ${auth}`; } else if (config.bearer_token) { headers["Authorization"] = `Bearer ${config.bearer_token}`; } if (config.tenant_id) { headers["X-Scope-OrgID"] = config.tenant_id; } if (config.org_id) { headers["X-Org-ID"] = config.org_id; } this.logger.debug("Executing HTTP labels query", { url, headers: { ...headers, Authorization: headers.Authorization ? "[REDACTED]" : undefined, }, }); // Make the HTTP request const response = await axios.get<{ status: string; data: string[] }>( url, { headers, // Handle TLS options ...(config.tls_skip_verify ? { httpsAgent: { rejectUnauthorized: false } } : {}), } ); if ( response.data && response.data.data && Array.isArray(response.data.data) ) { return response.data.data; } return []; } catch (error: unknown) { let errorMsg = "HTTP labels query failed"; let errorDetails: Record<string, unknown> = { command: "labels" }; if (axios.isAxiosError(error)) { const axiosError = error as AxiosError; errorMsg = `HTTP labels query failed: ${axiosError.message}`; errorDetails = { ...errorDetails, status: axiosError.response?.status, statusText: axiosError.response?.statusText, responseData: axiosError.response?.data, }; } else if (error instanceof Error) { errorMsg = `HTTP labels query failed: ${error.message}`; } throw new LokiClientError("http_query_error", errorMsg, { cause: error as Error, details: errorDetails, }); } }
  • src/index.ts:180-200 (registration)
    Registration of the "get_labels" MCP tool with empty input schema and inline handler.
    server.tool("get_labels", {}, async (_args, extra) => { logger.debug("All labels query tool execution", { extra }); try { const labelsJson = await lokiClient.getLabels(); return { content: [ { type: "text", text: labelsJson, }, ], }; } catch (error) { logger.error("Labels query tool execution error", { error }); // Create standardized error response return createToolErrorResponse(error, "Error getting labels"); } });

Other Tools

Related Tools

Latest Blog Posts

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/ghrud92/loki-mcp'

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