Honeycomb MCP

Interactúa con los datos de observabilidad de Honeycomb usando el Model Context Protocol.

Servidor MCP alojado

npx add-mcp 'https://mcp.honeycomb.io/mcp'

Se instala en Claude Code, Codex, Cursor y más

Documentación

Honeycomb MCP

⚠️ OBSOLETO: Este servidor MCP autoalojado está obsoleto. Por favor, migre a la solución alojada Honeycomb Model Context Protocol (MCP) en Documentación de Honeycomb MCP.

Un servidor Model Context Protocol para interactuar con datos de observabilidad de Honeycomb. Este servidor permite que LLMs como Claude analicen y consulten directamente sus datasets de Honeycomb en múltiples entornos.

Honeycomb MCP Logo

Requisitos

  • Node.js 18+
  • Clave API de Honeycomb con permisos completos:
    • Acceso de consulta para análisis
    • Acceso de lectura para SLOs y Triggers
    • Acceso a nivel de entorno para operaciones de datasets

Honeycomb MCP es efectivamente una interfaz alternativa completa para Honeycomb, por lo que necesita permisos amplios para la API.

Solo Honeycomb Enterprise

Actualmente, esto solo está disponible para clientes de Honeycomb Enterprise.

Cómo funciona

Hoy, este es un proceso de servidor único que debe ejecutar en su propia computadora. No está autenticado. Toda la información utiliza STDIO entre su cliente y el servidor.

Instalación

pnpm install
pnpm run build

El artefacto de compilación se coloca en la carpeta /build.

Configuración

Para usar este servidor MCP, debe proporcionar claves API de Honeycomb mediante variables de entorno en su configuración MCP.

{
    "mcpServers": {
      "honeycomb": {
        "command": "node",
        "args": [
          "/fully/qualified/path/to/honeycomb-mcp/build/index.mjs"
        ],
        "env": {
          "HONEYCOMB_API_KEY": "your_api_key"
        }
      }
    }
}

Para múltiples entornos:

{
    "mcpServers": {
      "honeycomb": {
        "command": "node",
        "args": [
          "/fully/qualified/path/to/honeycomb-mcp/build/index.mjs"
        ],
        "env": {
          "HONEYCOMB_ENV_PROD_API_KEY": "your_prod_api_key",
          "HONEYCOMB_ENV_STAGING_API_KEY": "your_staging_api_key"
        }
      }
    }
}

Importante: Estas variables de entorno deben configurarse en el bloque env de su configuración MCP.

Configuración para la UE

Los clientes de la UE también deben configurar una configuración HONEYCOMB_API_ENDPOINT, ya que el MCP utiliza por defecto la instancia fuera de la UE.

# Optional custom API endpoint (defaults to https://api.honeycomb.io)
HONEYCOMB_API_ENDPOINT=https://api.eu1.honeycomb.io/

Configuración de caché

El servidor MCP implementa caché para todas las llamadas API de Honeycomb que no son de consulta para mejorar el rendimiento y reducir el uso de la API. El caché se puede configurar usando estas variables de entorno:

# Enable/disable caching (default: true)
HONEYCOMB_CACHE_ENABLED=true

# Default TTL in seconds (default: 300)
HONEYCOMB_CACHE_DEFAULT_TTL=300

# Resource-specific TTL values in seconds (defaults shown)
HONEYCOMB_CACHE_DATASET_TTL=900    # 15 minutes
HONEYCOMB_CACHE_COLUMN_TTL=900     # 15 minutes
HONEYCOMB_CACHE_BOARD_TTL=900      # 15 minutes
HONEYCOMB_CACHE_SLO_TTL=900        # 15 minutes
HONEYCOMB_CACHE_TRIGGER_TTL=900    # 15 minutes
HONEYCOMB_CACHE_MARKER_TTL=900     # 15 minutes
HONEYCOMB_CACHE_RECIPIENT_TTL=900  # 15 minutes
HONEYCOMB_CACHE_AUTH_TTL=3600      # 1 hour

# Maximum cache size (items per resource type)
HONEYCOMB_CACHE_MAX_SIZE=1000

Compatibilidad de clientes

Honeycomb MCP ha sido probado con los siguientes clientes:

Es probable que funcione con otros clientes.

Características

  • Consultar datasets de Honeycomb en múltiples entornos
  • Ejecutar consultas de análisis con soporte para:
    • Múltiples tipos de cálculo (COUNT, AVG, P95, etc.)
    • Desgloses y filtros
    • Análisis basado en tiempo
  • Monitorear SLOs y su estado (solo Enterprise)
  • Analizar columnas y patrones de datos
  • Ver y analizar Triggers
  • Acceder a metadatos de datasets e información de esquema
  • Rendimiento optimizado con caché basado en TTL para todas las llamadas API que no son de consulta

Recursos

Acceda a datasets de Honeycomb usando URIs en el formato: honeycomb://{environment}/{dataset}

Por ejemplo:

  • honeycomb://production/api-requests
  • honeycomb://staging/backend-services

La respuesta del recurso incluye:

  • Nombre del dataset
  • Información de columnas (nombre, tipo, descripción)
  • Detalles del esquema

Herramientas

  • list_datasets: Listar todos los datasets en un entorno

    { "environment": "production" }
    
  • get_columns: Obtener información de columnas para un dataset

    {
      "environment": "production",
      "dataset": "api-requests"
    }
    
  • run_query: Ejecutar consultas de análisis con opciones enriquecidas

    {
      "environment": "production",
      "dataset": "api-requests",
      "calculations": [
        { "op": "COUNT" },
        { "op": "P95", "column": "duration_ms" }
      ],
      "breakdowns": ["service.name"],
      "time_range": 3600
    }
    
  • analyze_columns: Analiza columnas específicas en un dataset ejecutando consultas estadísticas y devolviendo métricas calculadas.

  • list_slos: Listar todos los SLOs para un dataset

    {
      "environment": "production",
      "dataset": "api-requests"
    }
    
  • get_slo: Obtener información detallada de un SLO

    {
      "environment": "production",
      "dataset": "api-requests",
      "sloId": "abc123"
    }
    
  • list_triggers: Listar todos los triggers para un dataset

    {
      "environment": "production",
      "dataset": "api-requests"
    }
    
  • get_trigger: Obtener información detallada de un trigger

    {
      "environment": "production",
      "dataset": "api-requests",
      "triggerId": "xyz789"
    }
    
  • get_trace_link: Generar un enlace profundo a un trace específico en la interfaz de Honeycomb

  • get_instrumentation_help: Proporciona orientación sobre instrumentación OpenTelemetry

    {
      "language": "python",
      "filepath": "app/services/payment_processor.py"
    }
    

Ejemplos de consultas con Claude

Pregunte a Claude cosas como:

  • "¿Qué datasets están disponibles en el entorno de producción?"
  • "Muéstrame la latencia P95 para el servicio API durante la última hora"
  • "¿Cuál es la tasa de error desglosada por nombre de servicio?"
  • "¿Hay algún SLO cerca de incumplir su presupuesto?"
  • "Muéstrame todos los triggers activos en el entorno de staging"
  • "¿Qué columnas están disponibles en el dataset de API de producción?"

Respuestas optimizadas de herramientas

Todas las respuestas de herramientas están optimizadas para reducir el uso de la ventana de contexto mientras se mantiene la información esencial:

  • Listar datasets: Devuelve solo nombre, slug y descripción
  • Obtener columnas: Devuelve información de columnas simplificada centrada en nombre, tipo y descripción
  • Ejecutar consulta:
    • Incluye resultados reales y metadatos necesarios
    • Agrega estadísticas resumidas calculadas automáticamente
    • Solo incluye datos de series para consultas de mapas de calor
    • Omite metadatos verbosos, enlaces y detalles de ejecución
  • Analizar columna:
    • Devuelve valores principales, conteos y estadísticas clave
    • Calcula automáticamente métricas numéricas cuando corresponde
  • Información de SLO: Simplificada a indicadores de estado clave y métricas de rendimiento
  • Información de trigger: Centrada en estado del trigger, condiciones y objetivos de notificación

Esta optimización asegura que las respuestas sean concisas pero completas, permitiendo que los LLMs procesen más datos dentro de las limitaciones de contexto.

Especificación de consulta para run_query

La herramienta run_query admite una especificación de consulta integral:

  • calculations: Matriz de operaciones a realizar

    • Operaciones admitidas: COUNT, CONCURRENCY, COUNT_DISTINCT, HEATMAP, SUM, AVG, MAX, MIN, P001, P01, P05, P10, P25, P50, P75, P90, P95, P99, P999, RATE_AVG, RATE_SUM, RATE_MAX
    • Algunas operaciones como COUNT y CONCURRENCY no requieren una columna
    • Ejemplo: {"op": "HEATMAP", "column": "duration_ms"}
  • filters: Matriz de condiciones de filtro

    • Operadores admitidos: =, !=, >, >=, <, <=, starts-with, does-not-start-with, exists, does-not-exist, contains, does-not-contain, in, not-in
    • Ejemplo: {"column": "error", "op": "=", "value": true}
  • filter_combination: "AND" u "OR" (el valor predeterminado es "AND")

  • breakdowns: Matriz de columnas para agrupar resultados

    • Ejemplo: ["service.name", "http.status_code"]
  • orders: Matriz que especifica cómo ordenar los resultados

    • Debe hacer referencia a columnas de desgloses o cálculos
    • La operación HEATMAP no se puede usar en orders
    • Ejemplo: {"op": "COUNT", "order": "descending"}
  • time_range: Rango de tiempo relativo en segundos (por ejemplo, 3600 para la última hora)

    • Se puede combinar con start_time o end_time, pero no con ambos
  • start_time y end_time: Marcas de tiempo UNIX para rangos de tiempo absolutos

  • having: Filtrar resultados basados en valores de cálculo

    • Ejemplo: {"calculate_op": "COUNT", "op": ">", "value": 100}

Ejemplos de consultas

Aquí hay algunos ejemplos de consultas del mundo real:

Encontrar llamadas API lentas

{
  "environment": "production",
  "dataset": "api-requests",
  "calculations": [
    {"column": "duration_ms", "op": "HEATMAP"},
    {"column": "duration_ms", "op": "MAX"}
  ],
  "filters": [
    {"column": "trace.parent_id", "op": "does-not-exist"}
  ],
  "breakdowns": ["http.target", "name"],
  "orders": [
    {"column": "duration_ms", "op": "MAX", "order": "descending"}
  ]
}

Distribución de llamadas a BD (última semana)

{
  "environment": "production",
  "dataset": "api-requests",
  "calculations": [
    {"column": "duration_ms", "op": "HEATMAP"}
  ],
  "filters": [
    {"column": "db.statement", "op": "exists"}
  ],
  "breakdowns": ["db.statement"],
  "time_range": 604800
}

Conteo de excepciones por excepción y llamador

{
  "environment": "production",
  "dataset": "api-requests",
  "calculations": [
    {"op": "COUNT"}
  ],
  "filters": [
    {"column": "exception.message", "op": "exists"},
    {"column": "parent_name", "op": "exists"}
  ],
  "breakdowns": ["exception.message", "parent_name"],
  "orders": [
    {"op": "COUNT", "order": "descending"}
  ]
}

Desarrollo

pnpm install
pnpm run build

Licencia

MIT