Skip to main content
Glama

mcp-for-kibana

An MCP server for Kibana: composable toolboxes over a hexagonal core, powered by kibana-py.

Documentation Status

Savings study: on one Kibana job, Claude Code with this server cost 24–69% less and finished 32–65% faster than calling Kibana's REST API directly (600 runs, three models). Results, limits and data · Project site.

Disclaimer: This is an independent, community-driven project and is not officially affiliated with, endorsed by, or supported by Elastic N.V. or any of its subsidiaries. "Kibana" and "Elasticsearch" are trademarks of Elastic N.V. This project is provided "as is", without warranty of any kind. See LICENSE. The name "mcp-for-kibana" uses "Kibana" referentially — this is an MCP server for Kibana, per Elastic's trademark guidelines on referential use — and does not imply origin or endorsement.

The distribution is mcp-for-kibana; the Python import package is kibana_mcp.

Technical Preview: the dashboards toolbox is built entirely on Kibana 9.4's new public Dashboards API and Visualizations API, both marked x-state: Technical Preview by Elastic — their request/response shapes may still change in a later Kibana release without notice, and they carry no support SLA. This server supports Kibana 9.4 and 9.5; earlier versions don't expose these APIs publicly at all.

Licensing and scope

Every tool this server registers works on a Basic (free) Kibana license, and that is the boundary: functionality that needs a paid Elastic subscription is out of scope and stays out. Kibana's own per-type gates still apply to the values you pass — a Gold+ connector type stays Gold+.

The corollary is deliberate. Kibana ships its own MCP server as part of Agent Builder, whose APIs require an Enterprise subscription. A deployment on that tier already has an official one, so the Enterprise-gated surfaces are not worth duplicating here.

Related MCP server: Kibana Dashboard Builder

Status

v0.4.0 + unreleased — 10 toolboxes, 184 tools, live-tested. The server exposes 184 tools across 10 composable toolboxes (dashboards, data management, alerting, cases, security detections, fleet, streams, observability, platform admin, and platform health), each classified read / write / destructive and contract-tested against live Kibana 9.4.8 and 9.5.5. It's packaged as a stdio and container-runnable server. See the Tool reference below.

The flagship path is dashboards from plain English: an LLM goes from a request ("average ticket price by carrier, last 7 days") to a real Kibana dashboard through the read → validate → translate → write flow. That path passed its end-to-end gate 3/3 on 2026-07-10: a real local LLM in LM Studio (openai/gpt-oss-20b) drove it autonomously — plain English in, correct live dashboard out, verified against the stored Lens payload and cleaned up — three consecutive runs (16s/9s/7s wall). See docs/e2e-setup.md for the one-time LM Studio setup (permission toggles + API token) and tests/e2e/test_lmstudio.py for the harness. Model note: gpt-oss-20b's parser-enforced tool grammar made it 3/3 reliable; qwen2.5-coder-14b completes the flow too but corrupts its tool-call markers about one run in three.

What it does

Lets an LLM work with Kibana through a small, reliable, purpose-built tool surface instead of ~610 raw endpoints — 184 tools grouped into 10 composable toolboxes you enable per deployment. The flagship dashboards toolbox lets a user describe the chart they want, and the server translates a simple declarative spec into real Kibana Lens visualizations and dashboards via the modern Dashboards API (Kibana 9.4+). The other toolboxes cover data management, alerting, cases, security detections, fleet, streams, observability, and platform admin/health.

Design pillars:

  • Composable toolboxes — groups of tools enabled/disabled per deployment via configuration; small local models get a small surface, big models can get more.

  • Hexagonal core — pure domain logic (spec → Lens translation) isolated from both the MCP adapter and the kibana-py gateway; every layer independently testable.

  • Two run modes, one codebase — stdio for a local single user, streamable HTTP in a container for multiple users. Stateless: each request carries the caller's own Kibana API key, so Kibana RBAC and audit logging stay per-user. No multi-tenancy. Exception: saved-objects export handles live in one server-side directory shared by all callers — a handle is a bearer token for that export, and the 20-file retention cap is global, so concurrent HTTP callers can expire each other's handles.

  • Tiered write safety — every tool is classified read / write / destructive; deployment config caps the tier, and tools above the cap are never advertised to the model or callable by it (registered like every other tool, then hidden via FastMCP's visibility API — not just denied at call time).

Requirements

  • Python 3.12+ (the server itself is pure Python and OS-independent)

  • For the dev workflow (Makefile, scripts, local stack): a POSIX shell, GNU make, and Docker with ~5 GB free memory for the Elasticsearch + Kibana stack. Windows: use WSL2.

  • A Kibana 9.4 or 9.5 deployment (or the bundled disposable local stack).

Quick start

New here? The User Guide walks you from zero to your first talked-into-existence dashboard in ~10 minutes, on a disposable local Kibana with sample data.

export KIBANA_URL=https://your-kibana.example.com
export KIBANA_API_KEY=<your Kibana API key>
uvx mcp-for-kibana
# or from a local checkout:
uv run mcp-for-kibana

Runs stdio by default — one process per user, talking to Kibana as that user's own API key. See Configuration for every setting.

Claude Code

claude mcp add kibana --env KIBANA_API_KEY=<your key> -- uv --directory /path/to/checkout run mcp-for-kibana

LM Studio

Add an entry to ~/.lmstudio/mcp.json — see docs/examples/mcp.json for a stdio and an HTTP example. For the full local E2E setup (real model, real Kibana, real dashboard), see docs/e2e-setup.md.

Any other MCP client (streamable HTTP)

Point the client at http://<host>:8000/mcp with header Authorization: ApiKey <your Kibana API key> — see Docker below for running the HTTP server.

Tool reference

184 tools across 10 toolboxes, each tool classified by tier — read / write / destructive (74 / 71 / 39). Enable toolboxes per deployment with KIBANA_MCP_TOOLBOXES; cap the tier with KIBANA_MCP_TIER. A tool above the cap is not merely denied at call time — it never appears in the tool list (registered, then hidden via FastMCP's visibility API).

Toolbox

Tools

What it does

dashboards

17

Build Lens visualizations + dashboards from a declarative spec — the flagship plain-English → dashboard path.

data-management

17

Data views (with runtime fields and the space's default), short URLs, and saved objects (find, get, export, import).

alerting

22

Alerting rules and connectors: create, edit, mute, snooze.

cases

6

Kibana Cases: create, comment, update status.

security-detections

30

Detection rules, exception lists (incl. copy, export, import), value lists.

fleet

41

Fleet agents (tags, diagnostics), agent/package policies, integrations (install, uninstall), outputs, enrollment.

streams

12

Streams list / summary / ingest config + processing (Tech Preview).

observability

22

Synthetics monitors, parameters and private locations (read, create, edit, run, delete), Uptime settings, APM agent config (read, create or replace, delete) (no SLOs — Platinum-gated, out of scope).

platform-admin

14

Spaces, roles, upgrade readiness, saved objects between spaces (copy, share).

platform-health

3

Cluster and Kibana status / health reads.

A tier includes everything below it: read registers only read tools, write (the default) adds write, destructive adds destructive. The default toolbox set is dashboards,data-management (coupled — building a viz needs a data view).

See the full per-tool reference for every tool's arguments and return shape.

Configuration

All settings are read once, in kibana_mcp.config.Settings, and are set via env vars (prefix KIBANA_MCP_ for the deployment-shaped ones; KIBANA_URL, KIBANA_API_KEY, and KIBANA_PUBLIC_URL are recognized both bare and prefixed, matching how Kibana's own tooling names them):

Var

Default

Meaning

KIBANA_URL

http://localhost:5601

Kibana base URL the server connects to.

KIBANA_PUBLIC_URL

(falls back to KIBANA_URL)

URL used to build human-clickable dashboard links, if different from the URL the server itself reaches Kibana on (e.g. behind a proxy).

KIBANA_API_KEY

(none)

stdio mode: the API key used for every request. HTTP mode: ignored unless KIBANA_MCP_ALLOW_ENV_KEY_HTTP=true — each caller sends their own key.

KIBANA_MCP_TOOLBOXES

dashboards,data-management

Comma-separated list of toolboxes to register (of the 10 available).

KIBANA_MCP_TIER

write

Max tool tier to register: read, write, or destructive.

KIBANA_MCP_TOOLS

(none — off)

Comma-separated allow list of tool names. When set, the server publishes exactly the listed tools the tier allows and nothing else, and KIBANA_MCP_TOOLBOXES is ignored. An @name entry stands for a named list's tools (@dashboards-analyst). See Tool selection.

KIBANA_MCP_TOOL_LISTS_FILE

(none — off)

Path to a TOML file of your own named tool lists, used as @name in KIBANA_MCP_TOOLS. Read at startup only when KIBANA_MCP_TOOLS is set; a file that cannot be read or does not validate fails startup. See Your own lists.

KIBANA_MCP_EXPORT_DIR

(none — a fresh, unguessable 0700 temp dir per run)

Directory where saved-objects export/import NDJSON files are written. An explicit path is created 0700, a symlink there is refused, and a pre-existing directory is tightened to 0700.

KIBANA_MCP_TRANSPORT

stdio

stdio or http.

KIBANA_MCP_HOST

127.0.0.1

Bind host (HTTP transport only).

KIBANA_MCP_PORT

8000

Bind port (HTTP transport only).

KIBANA_MCP_ALLOW_ENV_KEY_HTTP

false

HTTP mode only: opt in to letting KIBANA_API_KEY act as a shared fallback credential when a request has no Authorization header. A per-request Authorization header always takes precedence even when this is on — the env key is only a fallback for requests that omit one, never an override. Off by default so a single env key can't silently become a shared credential across callers.

KIBANA_MCP_ENV_FILE

(none)

Path to a KEY=value file loaded at startup (setdefault — explicit process env wins) so a launcher can point at the machine-written elastic-start-local/.env.seed instead of hard-copying the ephemeral dev key. Additive and off by default; see configuration docs.

KIBANA_MCP_OTEL_ENABLED

false

Export an OpenTelemetry span per tool call. Off by default (spans are non-recording, no SDK imported); needs the otel extra. KIBANA_MCP_OTEL_ENDPOINT / KIBANA_MCP_OTEL_SECRET_TOKEN / KIBANA_MCP_OTEL_SERVICE_NAME / KIBANA_MCP_OTEL_TRACEPARENT_FROM_ENV tune the OTLP export — see configuration docs.

Docker

The container always runs HTTP transport (KIBANA_MCP_TRANSPORT=http is baked into the image), stateless, on port 8000. KIBANA_API_KEY is not needed at the container level: HTTP mode expects each caller to send their own key per request, and by default ignores KIBANA_API_KEY even if it's set (set KIBANA_MCP_ALLOW_ENV_KEY_HTTP=true to opt back into it as a shared fallback):

docker run -p 8000:8000 -e KIBANA_URL=https://your-kibana.example.com \
  ghcr.io/pedro-angel/mcp-for-kibana

curl http://localhost:8000/mcp \
  -H 'Authorization: ApiKey <your Kibana API key>' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json, text/event-stream' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

The image runs as a non-root user (mcp-for-kibana, uid 10001).

Development

make setup       # uv sync + git hooks (uv-native path)
make help        # every dev task, self-documented

No uv on the machine? ./bootstrap.sh installs just the git hooks (prek / pre-commit fallback chain).

The engineering conventions this project holds itself to are in CONTRIBUTING.md, and every one of them is enforced by a gate rather than by convention alone — see the Definition-of-Done gate below. Git & CI discipline comes from git-controls-starter.

Test matrix

Seven tiers, from fastest/most-isolated to slowest/most-real:

make test              # unit — fakes only, no network; the default selection
make test-contract     # starts + seeds the docker Kibana stack itself, then -m contract
make test-e2e-replay   # replays RECORDED model turns (every toolbox) through a real MCP client
make test-e2e          # REAL Claude (claude -p, default haiku) with only this server's tools
make test-e2e-local    # a REAL local model in LM Studio — see docs/e2e-setup.md
make streams-ephemeral # destructive streams path on its own throwaway stack
make fleet-ephemeral   # agent lifecycle on a throwaway 2-agent fleet stack
make fleet-unaware-ephemeral # uninstall_package's guards on Fleet with space awareness off

Everything except the two live-model tiers (test-e2e, test-e2e-local) runs in CI. The three ephemeral tiers own their stack's whole lifecycle (up → test → down): their paths are destructive (they delete every wired stream, or mutate real enrolled agents), or need a Fleet booted with space awareness off, so they cannot share the dev stack. They also cannot run beside it — see scripts/fleet_ephemeral.sh for the measured memory headroom.

On the two e2e tiers. They are not redundant, and one is not a substitute for the other:

test-e2e / test-e2e-local

test-e2e-replay

Who picks the tool calls

a real LLM (Claude / a local model)

a recorded transcript

Server, MCP transport, Kibana, ES

real

real

Runs in CI and in make dod

no — on demand (D61): needs a Claude sign-in / a GPU + loaded model

yes

Proves a model can reason to the calls

yes

no

Proves the model-facing surface still works

yes

yes, per-PR

The replay tier exists because the surface a model actually touches was otherwise certified only on a maintainer's laptop. It replays a turn recorded from a live gpt-oss-20b run — including the three failures that run recovered from — and asserts the tools still exist, that arguments a real model produced still validate against the live input schemas, and that the error guidance survives. That guidance is load-bearing: a model has no other way to learn your data's field names, and degrading "field 'price' does not exist … did you mean 'Carrier'?" to a bare 400 breaks self-correction for every LLM using this server. Four mutation tests confirm the tier fails when each guard is broken. Since D61 every toolbox has at least one recorded turn — Claude runs of the per-toolbox tasks (not pre-registered) for cases, security-detections, observability, streams, fleet and platform-health — and a toolbox without one fails the unit tier. The gate replays them three ways: from the checkout, from the built wheel, and from the built Docker image over HTTP with the key in an Authorization: ApiKey header (image_replay_green, D62).

(Raw commands underneath: uv run pytest [-m contract|-m e2e_claude|-m e2e|-m e2e_replay] — the suites load elastic-start-local/.env.seed + .env.local in-process; the Makefile is a thin facade.)

The docs site is a CI gate too: uv sync --group docs once, then uv run mkdocs build --strict must pass with zero warnings (uv run mkdocs serve to preview locally).

Before claiming a change "done" — and always before a release — run the Definition-of-Done gate, which certifies completion from dod.config instead of letting the author self-certify:

make dod         # GO/NO-GO over all declared criteria (definition-of-done.sh)

Every tier needing infrastructure is excluded from the default selection (addopts in pyproject.toml), so a bare pytest never silently depends on a stack. CI splits accordingly: checks.yml runs the content gates (lint, types, audit, SAST, unit across Python 3.12–3.14, docs, image build+smoke), and integration.yml provisions real stacks for the live tiers and certifies them through this same gate script with per-tier configs in .github/dod/ — so CI verdicts and make dod cannot drift.

Each verdict names what it certified: the header and the VERDICT: line give HEAD, the content tree id (uncommitted and untracked files included) and clean/dirty, a tree edited during the run is NO-GO, and the run is recorded in /tmp/dod-<repo>/verdict.json. A "GO at <sha>" claim checks out when git rev-parse <sha>^{tree} equals the recorded tree id.

make dod needs the dev stack up for contract/e2e_replay/wheel_replay/image_replay and down for the ephemeral tiers, so a plain run cannot satisfy both halves. To get a one-shot GO, let the gate cycle the stack for you (default-off, so it never touches infrastructure unasked):

scripts/stack.sh up && scripts/stack.sh seed
KIBANA_MCP_DOD_CYCLE_STACK=1 make dod

e2e_green — a real model choosing the calls — is n/a in every config since D61 (superseding D42): the live model runs on demand. Run make test-e2e (Claude via claude -p, model CLAUDE_E2E_MODEL, default haiku, D38; needs a signed-in claude CLI) when a change touches tool names, descriptions or schemas; a pass certifies only the model that ran. make test-e2e-local runs three of its tasks (the flights, space and alerting ones) as LM Studio tests on a small local model.

License

Apache 2.0

Available Tools

21 tools
add_esql_metric_panelAdd Esql Metric PanelA

Add an ES|QL metric panel to an existing dashboard: run an ES|QL query and show one of its output columns as a single-number metric. esql is the query (e.g. 'FROM logs | STATS total = COUNT(*)') and column names the output column to display (e.g. 'total'). For field-based charts use add_panel with a VizSpec instead. The query is NOT validated server-side — a wrong query or column yields an empty panel, so write both carefully.

space targets a Kibana space by id (default: the default space).

Inputs: esql (required), title (required), column (required), dashboard_id (required), +1 more. Returns: object

add_esql_table_panelAdd Esql Table PanelA

Add an ES|QL table panel to an existing dashboard: show a query's output columns as a table. columns are the grouping/dimension columns — one table row per distinct value (e.g. ["status"]); metric_columns are the numeric value columns shown per row (e.g. ["count"]). esql is the query. It is NOT validated server-side — a wrong query or column name yields an empty panel, so write them carefully. For field-based charts use add_panel with a VizSpec.

space targets a Kibana space by id (default: the default space).

Inputs: esql (required), title (required), columns (required), dashboard_id (required), +2 more. Returns: object

add_esql_xy_panelAdd Esql Xy PanelA

Add an ES|QL bar/line/area panel to an existing dashboard: x_column on the x axis, each of y_columns a plotted series, and an optional breakdown_column to split each series. esql is the query. It is NOT validated server-side — a wrong query or column name yields an empty panel. For field-based charts use add_panel with a VizSpec.

space targets a Kibana space by id (default: the default space).

Inputs: esql (required), title (required), x_column (required), y_columns (required), +4 more. Returns: object

add_library_panelAdd Library PanelA

Show a library visualization on an existing dashboard. The panel is linked, not copied: update_visualization changes it on every dashboard.

space targets a Kibana space by id (default: the default space).

Inputs: dashboard_id (required), visualization_id (required), space. Returns: object

add_panelAdd PanelB

Add a visualization panel to an existing dashboard.

space targets a Kibana space by id (default: the default space).

Inputs: panel (required), dashboard_id (required), space. Returns: object

create_dashboardCreate DashboardA
Idempotent

Create a dashboard from one or more visualization specs. Idempotent: creating with the same title (case-insensitive, whitespace/punctuation-normalized) updates that dashboard instead of duplicating it, replacing its panels (filters, query, tags and display options are preserved); the return's status is created or replaced. Call describe_data_view first to learn real field names.

space targets a Kibana space by id (default: the default space).

Inputs: title (required), panels (required), space, time_range, +1 more. Returns: object

create_data_viewCreate Data ViewA

Create a Kibana data view over an index pattern (e.g. 'logs-*'). Optionally set a display name and a time field (for time-series data). The time field must be a date field of the indices the pattern matches: a field they do not have, or one that is not a date, is refused with the pattern's date fields listed, and no data view is created. A pattern that matches no index yet is accepted, but its time field cannot be checked. The name (it defaults to the index pattern) must be unused; to change an existing view, call update_data_view.

space targets a Kibana space by id (default: the default space).

Inputs: index_pattern (required), name, space, time_field. Returns: object

create_short_urlCreate Short UrlA

Create a Kibana short URL. Supports locator_id='LEGACY_SHORT_URL_LOCATOR' with params={'url': '/app/...'} (a Kibana app path). (Technical-Preview API.) A slug created in a space resolves under /s/<space>/goto/<slug> and via resolve_short_url(slug, space=…). When space is set, pass the app path WITHOUT a /s/<space> prefix — the space parameter chooses the space, not the path. A /s/<id>-prefixed path passed without space creates the slug in the default space.

space targets a Kibana space by id (default: the default space).

Inputs: params (required), locator_id (required), space. Returns: object

create_visualizationCreate VisualizationB

Create a reusable visualization in the library (not on a dashboard).

space targets a Kibana space by id (default: the default space).

Inputs: spec (required), space. Returns: object

describe_data_viewDescribe Data ViewA
Read-only

Get a data view's fields and types. Call this before creating a visualization so you use real field names.

space targets a Kibana space by id (default: the default space).

Inputs: data_view (required), space. Returns: object

export_saved_objectsExport Saved ObjectsA
Read-only

Export saved objects (dashboards, data views, …) as an NDJSON file on the server, and return a summary + an opaque handle — NOT the content — that you pass to import_saved_objects. Select EITHER types (e.g. ["dashboard"], or ["*"] for the whole space) OR objects (a list of {"type":…, "id":…}), not both. This is a sensitive export surface; what can actually be read is bounded by the API key's privileges, not by this tool.

space targets a Kibana space by id (default: the default space).

Inputs: space, types, objects, include_references_deep. Returns: object

get_dashboardGet DashboardA
Read-only

Get a dashboard summary: title, description, and its panels.

space targets a Kibana space by id (default: the default space).

Inputs: dashboard_id (required), space. Returns: object

get_visualizationGet VisualizationB
Read-only

Get a library visualization: title, chart type, data view, metrics, group_by and filter query.

space targets a Kibana space by id (default: the default space).

Inputs: visualization_id (required), space. Returns: object

import_saved_objectsImport Saved ObjectsA

Import a previously-exported set of saved objects, identified by the handle returned from export_saved_objects, as NEW copies (regenerated ids — a clone into the current space, not an in-place restore). Existing objects are never touched. Returns which objects were created (source id -> new destination id). A missing/expired handle errors. To restore in place instead, use overwrite_saved_objects (destructive). A handle carries no space — importing it with space="b" clones its content into b (new ids), regardless of which space it was exported from.

space targets a Kibana space by id (default: the default space).

Inputs: handle (required), space. Returns: object

list_data_viewsList Data ViewsA
Read-only

List Kibana data views (the datasets you can visualize).

space targets a Kibana space by id (default: the default space).

Inputs: space. Returns: result

resolve_short_urlResolve Short UrlA
Read-only

Resolve a Kibana short-URL slug to its locator and target app path. (Short URLs are a Technical-Preview API.)

space targets a Kibana space by id (default: the default space).

Inputs: slug (required), space. Returns: object

search_dashboardsSearch DashboardsA
Read-only

Search dashboards by title/description. Empty query lists all.

space targets a Kibana space by id (default: the default space).

Inputs: query, space. Returns: result

search_visualizationsSearch VisualizationsA
Read-only

Search library visualizations (from create_visualization) by title. Empty query lists all.

space targets a Kibana space by id (default: the default space).

Inputs: query, space. Returns: result

update_data_viewUpdate Data ViewA

Edit an existing data view in place, by id (from list_data_views): its display name, its index_pattern (e.g. 'logs-*') and/or its default time_field. Only the fields you pass change. The time field must be a date field of the view: when you change the index pattern, the time field (the one you pass, or the current one) is checked against the NEW pattern's fields, and on a mismatch nothing changes. A pattern that matches no index yet is accepted, but its time field cannot be checked (field_count is then 0). A name that defaulted to the old pattern stays as it is; pass name to change it too. The time field cannot be removed. Dashboard panels built by this server keep the pattern and time field they were built with; rebuild one with update_panel to use the new ones. Returns id, name, index_pattern, time_field and field_count.

space targets a Kibana space by id (default: the default space).

Inputs: view_id (required), name, space, time_field, +1 more. Returns: object

update_panelUpdate PanelA
Idempotent

Replace the visualization at panel_index (see get_dashboard for indexes).

space targets a Kibana space by id (default: the default space).

Inputs: panel (required), panel_index (required), dashboard_id (required), space. Returns: object

update_visualizationUpdate VisualizationA
Idempotent

Replace a library visualization with a new spec; its id stays the same. Dashboards that show it through add_library_panel change too; panels added with add_panel or create_dashboard are separate copies and do not.

space targets a Kibana space by id (default: the default space).

Inputs: spec (required), visualization_id (required), space. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.7/5.0

    Scored across 21 tools

    Disambiguation4/5

    Most tools have clearly distinct purposes, but add_panel and add_library_panel overlap (both add a visualization to a dashboard), and the three add_esql_*_panel tools could be seen as variants of one operation. Their descriptions do help clarify the intended use cases.

    Naming Consistency5/5

    All tools use snake_case with a predictable verb_noun pattern (add_*, create_*, update_*, get_*, search_*, list_*, describe_*, export_*, import_*, resolve_*). There are no mixed conventions or inconsistent verb styles.

    Tool Count3/5

    21 tools is heavy for this surface; the three ES|QL panel tools and separate export/import saved-object tools add niche operations that could be consolidated. While each tool has a purpose, the set is over-segmented relative to typical scoped MCP servers.

    Completeness3/5

    Core create/read/update workflows exist for dashboards, visualizations, data views, and panels, but deletion is entirely absent (no delete_dashboard, delete_visualization, delete_data_view, delete_panel, delete_saved_objects). There is also no explicit update_dashboard by id, leaving lifecycle gaps.

    Maintenance

    ActivityActive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to interact with Kibana dashboards, visualizations, and Elasticsearch data through read-only resources and executable tools for searching logs, exporting dashboards, and querying data.
      7
      37 npm
      4
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to create and manage Kibana dashboards, Lens visualizations, and data views via the Kibana Saved Objects API. It allows for programmatically listing existing resources and assembling new visualizations into dashboards through natural language commands.
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to manage Kibana security alerts, rules, and exception lists via the Model Context Protocol.
      13
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables interaction with Elasticsearch clusters for health checks, index management, document CRUD operations, and search via natural language.
      10
      10 npm
      MIT