Skip to main content
Glama

Grafana MCP Server

by levalhq
datasource.tsโ€ข2.62 kB
import { z } from 'zod'; import { ToolDefinition, ToolContext, createToolResult, createErrorResult } from '../server/mcp-server'; import { GrafanaClient } from '../clients/grafana-client'; const ListDatasourcesSchema = z.object({ type: z.string().optional().describe('The type of datasources to search for (e.g., "prometheus", "loki")'), }); const GetDatasourceByUidSchema = z.object({ uid: z.string().describe('The uid of the datasource'), }); const GetDatasourceByNameSchema = z.object({ name: z.string().describe('The name of the datasource'), }); export const listDatasources: ToolDefinition = { name: 'list_datasources', description: 'List available Grafana datasources. Optionally filter by datasource type.', inputSchema: ListDatasourcesSchema, handler: async (params, context: ToolContext) => { try { const client = new GrafanaClient(context.config.grafanaConfig); const datasources = await client.listDatasources(params.type); // Format for readability const formatted = datasources.map(ds => ({ uid: ds.uid, name: ds.name, type: ds.type, url: ds.url, isDefault: ds.isDefault, })); return createToolResult(formatted); } catch (error: any) { return createErrorResult(error.message); } }, }; export const getDatasourceByUid: ToolDefinition = { name: 'get_datasource_by_uid', description: 'Retrieves detailed information about a specific datasource using its UID.', inputSchema: GetDatasourceByUidSchema, handler: async (params, context: ToolContext) => { try { const client = new GrafanaClient(context.config.grafanaConfig); const datasource = await client.getDatasourceByUid(params.uid); return createToolResult(datasource); } catch (error: any) { return createErrorResult(error.message); } }, }; export const getDatasourceByName: ToolDefinition = { name: 'get_datasource_by_name', description: 'Retrieves detailed information about a specific datasource using its name.', inputSchema: GetDatasourceByNameSchema, handler: async (params, context: ToolContext) => { try { const client = new GrafanaClient(context.config.grafanaConfig); const datasource = await client.getDatasourceByName(params.name); return createToolResult(datasource); } catch (error: any) { return createErrorResult(error.message); } }, }; export function registerDatasourceTools(server: any) { server.registerTool(listDatasources); server.registerTool(getDatasourceByUid); server.registerTool(getDatasourceByName); }

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/levalhq/mcp-grafana'

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