Skip to main content
Glama

hny-mcp

by honeycombio
MIT License
2
36
  • Linux
  • Apple
datasets.ts5.02 kB
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; import { HoneycombAPI } from "../api/client.js"; import { Dataset } from "../types/api.js"; import { Column } from "../types/column.js"; /** * Interface for MCP resource items */ interface ResourceItem { uri: string; name: string; description?: string; [key: string]: unknown; } /** * Creates and returns the datasets resource template for interacting with Honeycomb datasets. This resource template allows users to list all datasets across all environments and retrieve specific datasets with their columns. * * @param api - The Honeycomb API client instance * @returns A ResourceTemplate for datasets */ export function createDatasetsResource(api: HoneycombAPI) { return new ResourceTemplate("honeycomb://{environment}/{dataset}", { /** * Lists all datasets across all environments * * @returns A list of dataset resources across all environments */ list: async () => { // Get all available environments const environments = api.getEnvironments(); const resources: ResourceItem[] = []; // Fetch datasets from each environment for (const env of environments) { try { const datasets = await api.listDatasets(env); // Add each dataset as a resource datasets.forEach((dataset: Dataset) => { resources.push({ uri: `honeycomb://${env}/${dataset.slug}`, name: dataset.name, description: dataset.description || '', }); }); } catch (error) { console.error(`Error fetching datasets for environment ${env}:`, error); } } return { resources }; } }); } /** * Interface for dataset with column information */ interface DatasetWithColumns { name: string; description: string; slug: string; columns: Array<{ name: string; type: string; description: string; }>; created_at?: string; last_written_at?: string | null; } /** * Handles requests for dataset resources. This resource template allows users to list all datasets across all environments and retrieve specific datasets with their columns. * * This function retrieves either a specific dataset with its columns or * a list of all datasets in an environment. * * @param api - The Honeycomb API client * @param uri - The resource URI * @param variables - The parsed variables from the URI template * @returns Dataset resource contents * @throws Error if the dataset cannot be retrieved */ export async function handleDatasetResource( api: HoneycombAPI, variables: Record<string, string | string[]> ) { // Extract environment and dataset from variables, handling potential array values const environment = Array.isArray(variables.environment) ? variables.environment[0] : variables.environment; const datasetSlug = Array.isArray(variables.dataset) ? variables.dataset[0] : variables.dataset; if (!environment) { throw new Error("Missing environment parameter"); } if (!datasetSlug) { // Return all datasets for this environment try { const datasets = await api.listDatasets(environment); return { contents: datasets.map(dataset => ({ uri: `honeycomb://${environment}/${dataset.slug}`, text: JSON.stringify({ name: dataset.name, description: dataset.description || '', slug: dataset.slug, created_at: dataset.created_at, last_written_at: dataset.last_written_at, }, null, 2), mimeType: "application/json" })) }; } catch (error) { throw new Error(`Failed to list datasets: ${error instanceof Error ? error.message : String(error)}`); } } else { // Return specific dataset with columns try { const dataset = await api.getDataset(environment, datasetSlug); const columns = await api.getVisibleColumns(environment, datasetSlug); // Filter out hidden columns const visibleColumns = columns.filter((column: Column) => !column.hidden); const datasetWithColumns: DatasetWithColumns = { name: dataset.name, description: dataset.description || '', slug: dataset.slug, columns: visibleColumns.map((column: Column) => ({ name: column.key_name, type: column.type, description: column.description || '', })), created_at: dataset.created_at, last_written_at: dataset.last_written_at, }; return { contents: [{ uri: `honeycomb://${environment}/${datasetSlug}`, text: JSON.stringify(datasetWithColumns, null, 2), mimeType: "application/json" }] }; } catch (error) { throw new Error(`Failed to read dataset: ${error instanceof Error ? error.message : String(error)}`); } } }

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/honeycombio/honeycomb-mcp'

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