Skip to content
Scalekit Docs
Talk to an Engineer Dashboard

Connect AI agents to the Honeycomb MCP server

Vendor MCP
Open markdown

The Honeycomb MCP connector routes your AI agent's tool calls to Honeycomb's own MCP server through Scalekit. Each user signs in to Honeycomb once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 31 tools.

Tools
31
What they doRead · write · destructive
23 · 6 · 223 read6 write2 destructive
Users sign in with
OAuth app
Your own Honeycomb MCP server app

Setup

  1. Install the SDK

    Terminal window
    npm install @scalekit-sdk/node dotenv
  2. Set your credentials

    Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. Create the Honeycomb MCP connection

    In AgentKit > Connections, create a Honeycomb MCP connection and copy its redirect URI. The name you give it is the connection_name your code passes. See Configure connections.

  4. Register an OAuth app

    Honeycomb MCP server connections use your own OAuth app. Register one with Honeycomb MCP server and add the redirect URI you copied.

    Then enter the app's Client ID and Client Secret on the Honeycomb MCP connection.

  5. Authorize a user and make your first call

    quickstart.mts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    import { createInterface } from 'node:readline/promises'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENVIRONMENT_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'honeycombmcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Honeycomb MCP:', link)
    const rl = createInterface({ input: process.stdin, output: process.stdout })
    await rl.question('Press Enter after authorizing...')
    rl.close()
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'honeycombmcp_get_query_results',
    toolInput: {},
    })
    console.log(result)
    Terminal window
    npx tsx quickstart.mts

    Each user signs in once. See Authorize a user for the full flow and statuses.

Tools

Pass the exact name to execute_tool
Try in PlaygroundRequest a tool
  • honeycombmcp_canvas_agent_poll_responsePoll for the result of a previously-issued canvas_agent_invoke call.Read-only

    Canvas Agent Poll Response

    Poll for the result of a previously-issued canvas_agent_invoke call. Pass the investigation_id and session_id returned from canvas_agent_invoke. Each call waits up to wait_seconds (default 30, max 50) for a terminal event, then returns either status='completed' with the agent's chat reply, status='error' with a message, status='busy' if another invocation is contending for the same agent (retry canvas_agent_invoke), or status='running' if the agent is still working — in which case call this tool again with the same parameters. Cap on wait_seconds is intentional: longer single waits get killed by network infrastructure.

    Inputs

    investigation_idstringrequired
    ID of the investigation passed to canvas_agent_invoke (e.g. 'hcciv_…').
    session_idstringrequired
    session_id returned from canvas_agent_invoke. Identifies which invocation to wait on.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
    wait_secondsinteger
    Maximum whole seconds to wait for a terminal event before returning a 'running' response. Default 30, max 50.
  • honeycombmcp_find_columnsSearch for columns and calculated fields by intent across one or all datasets in an environment.Read-only

    Find Columns

    Search for columns and calculated fields by intent across one or all datasets in an environment. When to use: - "What column has the error rate?" / "Find columns related to duration or latency" — intent-based discovery. - Before composing a run_query, to confirm that columns with the right names exist. - When you are not sure which dataset contains the column you need (omit dataset_slug to search all). - After get_dataset_columns returns too many results to scan, use this to narrow by semantic relevance. Difference from get_dataset_columns: this tool ranks results by relevance to your search input across all datasets; get_dataset_columns returns the complete schema for one specific dataset. Pairs with: get_dataset_columns (full schema once you know the right dataset); run_query (use validated column names here); get_dataset (confirm dataset exists before scoping search).

    Inputs

    environment_slugstringrequired
    Environment slug to search within.
    inputstringrequired
    Natural language or keywords describing the column you are looking for (e.g. 'http status code', 'request duration', 'user identifier').
    dataset_slugstring
    Scope search to this dataset slug. Omit to search all datasets in the environment. Only specify when you are confident about the correct dataset.
    include_expressionsboolean
    When true, includes the expression for calculated fields in the response. Defaults to false.
    items_per_pagenumber
    Number of items per page. Defaults to 50.
    pagenumber
    Page number for paginated results. Defaults to 1.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
  • honeycombmcp_find_queriesSearch query history and saved queries by intent; returns matching queries with their run PKs.Read-only

    Find Queries

    Search query history and saved queries by intent; returns matching queries with their run PKs. When to use: - "Has anyone queried the error rate for checkout?" — check existing work before composing a new query. - Before calling run_query, verify a semantically similar query does not already exist. - "Show me recent queries for service X" — surface what the team has been investigating. - When the user pastes a query name or description and wants to find the underlying spec. Returns query specifications and run_pks. Pass a run_pk to get_query_results to retrieve the full results from that specific execution. Pairs with: get_query_results (fetch results from a returned run_pk); run_query (run a new query once you've confirmed no similar one exists); create_board (add a found query_id as a panel).

    Inputs

    environment_slugstringrequired
    Environment slug to search within.
    inputstringrequired
    Natural language or keywords describing the queries you are looking for.
    dataset_slugstring
    Scope search to this dataset slug. Omit to search all datasets in the environment.
    max_queriesinteger
    Maximum number of queries to return (1-50). Defaults to 25.
    recency_daysinteger
    Consider queries executed within the last N days (1-365). Defaults to 30. Lower values surface more recent work.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
  • honeycombmcp_get_aiconversationFetch the full event timeline for a single AI conversation, identified by its OpenTelemetry gen_ai.conversation.id attribute value.Read-only

    Get AI Conversation

    Fetch the full event timeline for a single AI conversation, identified by its OpenTelemetry gen_ai.conversation.id attribute value. Prefer this over ad-hoc run_query filtered by conversation ID — it returns every LLM call, tool call, and related agent/task event (with span name, operation/category, agent name, model, tool name, duration, and error detail per event) plus an aggregate summary (LLM call count, tool call count, failure count, total tokens, total duration) in one call. Use it to debug or analyze one specific AI conversation end-to-end. PERFORMANCE: If you know a timestamp for any event, pass event_timestamp. It anchors the retention-capped lookup window ending at that timestamp and skips the backwards probe scan.

    Inputs

    conversation_idstringrequired
    The gen_ai.conversation.id value identifying the conversation. Pass it as-is when the user or a prior tool result already supplied one; otherwise find conversations with list_aiconversations (its Conversation ID column).
    environment_slugstringrequired
    Environment slug to query. Source from get_workspace_context or a prior tool result rather than guessing.
    event_timestampstring
    Optional timestamp of an event in the conversation. When provided, it anchors the retention-capped lookup window ending at that timestamp and skips the backwards probe scan. It must not be in the future. Accepted timestamps are positive epoch seconds (at most 10 digits), RFC3339/ISO datetimes, or date-only values. Tool schemas require timestamps as strings, so quote epoch seconds (for example, "1723593600"). Zone-less datetimes and dates are UTC; dates mean midnight UTC (for an in-progress UTC day, use to: "now"). Relative values are "now" or explicitly signed durations such as "-2h" using lower-case s, m, h, d, or w.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
  • honeycombmcp_get_datasetGet dataset metadata and its full column schema (columns + calculated fields), sorted by most recent write activity.Read-only

    Get Dataset

    Get dataset metadata and its full column schema (columns + calculated fields), sorted by most recent write activity. When to use: - "What columns does the api-service dataset have?" — retrieve the schema for one dataset. - Before run_query, to verify column names and types exist in the target dataset. - "When was this dataset last updated?" — dataset metadata includes oldest queryable event time. Difference from get_dataset_columns: this tool returns dataset-level metadata (description, granularity, oldest event) alongside the column list. get_dataset_columns additionally supports fetching sample values for specific columns and has metrics-dataset support via metric_name. Pairs with: get_environment (upstream — confirms the dataset slug); get_dataset_columns (fetch sample values for columns or explore metrics datasets); find_columns (search across all datasets when the right dataset is unknown).

    Inputs

    dataset_slugstringrequired
    Name or slug of the dataset to retrieve. Get valid slugs from get_environment.
    environment_slugstringrequired
    Environment slug the dataset belongs to.
    column_pagenumber
    Page number for column pagination. Defaults to 1.
    columns_per_pagenumber
    Number of columns per page. Defaults to 100, max 500.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
  • honeycombmcp_get_dataset_columnsGet the full column schema for one dataset, with optional sample values for specific columns.Read-only

    Get Dataset Columns

    Get the full column schema for one dataset, with optional sample values for specific columns. When to use: - Validating column names before composing a run_query (check the column exists and note its type). - "What values does the status column hold?" — pass the column name in 'columns' to fetch sample values. - Exploring a metrics dataset: list metric names first, then pass metric_name to discover filterable attributes. - When find_columns returns too many results and you want the authoritative schema for one dataset. Pairs with: find_columns (intent-based search when you do not know the dataset); get_dataset (dataset metadata alongside schema); run_query (use validated column names here).

    Inputs

    dataset_slugstringrequired
    Slug of the dataset to get columns for.
    environment_slugstringrequired
    Environment slug the dataset belongs to.
    columnsarray
    Specific column names to fetch recent sample values for (max 20). Omit to get schema metadata only, which is faster.
    items_per_pagenumber
    Number of items per page. Defaults to 1000.
    metric_namestring
    For metrics datasets only: discover which resource and data-point attributes co-occur with this metric by sampling recent data. Returns attributes available for filtering and grouping.
    pagenumber
    Page number for paginated results. Defaults to 1.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
  • honeycombmcp_get_environmentGet details for a specific environment, including its dataset list sorted by most recent activity.Read-only

    Get Environment

    Get details for a specific environment, including its dataset list sorted by most recent activity. When to use: - After get_workspace_context returns environment slugs, drill into one to see which datasets it contains. - "What datasets exist in staging?" — list mode for dataset discovery. - Before calling get_dataset or get_dataset_columns, confirm the dataset slug by checking environment contents. Returns up to 100 datasets per page by default, sorted by most recent write activity. Pairs with: get_workspace_context (upstream — provides environment slugs); get_dataset (drill into a specific dataset's schema); get_dataset_columns (full column schema once you know the dataset slug); find_columns (search across all datasets in this environment by intent).

    Inputs

    environment_slugstringrequired
    Slug of the environment to retrieve. Get valid slugs from get_workspace_context.
    items_per_pagenumber
    Number of datasets per page. Defaults to 100, max 500.
    pagenumber
    Page number for dataset pagination. Defaults to 1.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
  • honeycombmcp_get_query_resultsRetrieve results and metadata from an existing query execution.Read-only

    Get Query Results

    Retrieve results and metadata from an existing query execution. Accepts a Honeycomb URL, a run_pk, or a query_id (returns most recent run). Provide exactly one of these three inputs. When to use: - After find_queries returns a run_pk and you want the actual result rows. - The user pastes a Honeycomb query URL from the browser — extract results without re-running. - After run_query executes a new query and returns a run_pk, use this to fetch the structured output. - You have a query_id and want the latest available result without triggering a new execution. Pairs with: find_queries (source of run_pks); run_query (source of fresh run_pks); list_boards (board detail mode returns query_ids per panel — pass them as query_id here to get the most recent run).

    Inputs

    dataset_slugstring
    Dataset slug. Derived automatically from the query run when omitted.
    environment_slugstring
    Environment slug. Derived automatically from the query run when omitted.
    include_markersboolean
    Include the table of markers overlapping the query window. Defaults to true. Set to false once you have read the markers to avoid re-fetching them on later calls. Markers are also suppressed when include_results is false.
    include_resultsboolean
    Include query result rows in the response. Defaults to true. Set to false to retrieve only metadata (query spec, run time, URLs) without fetching the data rows. Also suppresses the markers table.
    query_idstring
    Saved query ID. Returns results from the most recent execution of this query. Provide this OR url OR query_run_pk.
    query_run_pkstring
    Query run primary key, as returned by run_query or find_queries. Provide this OR url OR query_id.
    teamstring
    Team to run this tool against; only needed when your authorization covers multiple teams
    urlstring
    Full Honeycomb query result URL (e.g. https://ui.honeycomb.io/team/environments/env/datasets/ds/result/run-pk). Provide this OR query_run_pk OR query_id — not multiple.
    wait_for_completionboolean
    Wait for an in-progress query run to finish before reading persisted results. Defaults to true. Set to false to return immediately with the run's current state.
    wait_timeout_secondsinteger
    Maximum whole seconds to wait when wait_for_completion is true. Defaults to 120. Values <= 0 use the default; values above 300 are clamped to 300.